helium_11.0.0-e00f171ca185
authorwbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 588 c7c26511138f
child 629 541af5ee3ed9
helium_11.0.0-e00f171ca185
buildframework/helium/build.xml
buildframework/helium/builder/bld
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/builder/python/test-macros.ant.xml
buildframework/helium/builder/template/configure_jython.bat.ftl
buildframework/helium/builder/template/configure_jython.sh.ftl
buildframework/helium/builder/template/easy-install.pth.ftl
buildframework/helium/config/diamonds_config.xml.ftl
buildframework/helium/config/diamonds_config_default.ant.xml
buildframework/helium/config/ivy/ivy.xml
buildframework/helium/config/ivy/modules/7zip-4.ivy.xml
buildframework/helium/config/ivy/modules/ant-1.7.ivy.xml
buildframework/helium/config/ivy/modules/ccm-6.5_7.1.ivy.xml
buildframework/helium/config/ivy/modules/codescanner-2.0.ivy.xml
buildframework/helium/config/ivy/modules/codescanner-2.1.ivy.xml
buildframework/helium/config/ivy/modules/ctc-6.5.ivy.xml
buildframework/helium/config/ivy/modules/java-1.6.ivy.xml
buildframework/helium/config/ivy/modules/java13-1.3.1.ivy.xml
buildframework/helium/config/ivy/modules/perl-5.6.1.ivy.xml
buildframework/helium/config/ivy/modules/python-2.5.ivy.xml
buildframework/helium/config/ivy/modules/python-2.6.ivy.xml
buildframework/helium/config/ivy/modules/sbs-2.12.ivy.xml
buildframework/helium/config/ivy/modules/symsee-7.2.ivy.xml
buildframework/helium/config/ivy/modules/unzip-5.40.ivy.xml
buildframework/helium/config/ivy/tools_ivy_settings.xml
buildframework/helium/config/metadata_filter_config_default.ant.xml
buildframework/helium/config/metadata_regex.csv
buildframework/helium/config/signaling_config_default.ant.xml
buildframework/helium/config/version.txt
buildframework/helium/doc/api_rst/project.rst.ftl
buildframework/helium/doc/api_rst/properties_list.rst.ftl
buildframework/helium/doc/default/.templates/sidebar.html
buildframework/helium/doc/default/conf.py
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/feature_list.rst
buildframework/helium/doc/src/manual/configuring_features.rst.ftl
buildframework/helium/doc/src/manual/coverity.rst
buildframework/helium/doc/src/manual/debugging.rst
buildframework/helium/doc/src/manual/index.rst.ftl
buildframework/helium/doc/src/manual/messaging.rst
buildframework/helium/doc/src/manual/metrics.rst
buildframework/helium/doc/src/manual/running.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_final.rst.inc.ftl
buildframework/helium/doc/src/manual/stage_matti.rst.inc.ftl
buildframework/helium/doc/src/manual/stage_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/external/python/lib/2.5/4Suite_XML-1.0.2-py2.5-win32.egg
buildframework/helium/external/python/lib/2.5/PyXML-0.8.4-py2.5-win32.egg
buildframework/helium/external/python/lib/2.5/lxml-1.3.5-py2.5-win32.egg
buildframework/helium/external/python/lib/2.6/4Suite_XML-1.0.2-py2.6-win32.egg
buildframework/helium/external/python/lib/2.6/PyXML-0.8.4-py2.6-win32.egg
buildframework/helium/external/python/lib/2.6/easy-install.pth
buildframework/helium/external/python/lib/2.6/lxml-2.2.1-py2.6-win32.egg
buildframework/helium/external/python/lib/common/Amara-1.2.0.1-py2.5.egg
buildframework/helium/external/python/lib/common/Jinja2-2.2.1-py2.5.egg
buildframework/helium/external/python/lib/common/easy-install.pth
buildframework/helium/external/python/lib/common/path-2.2-py2.5.egg
buildframework/helium/external/python/lib/common/threadpool.py
buildframework/helium/external/python/lib/linux/4Suite-XML-1.0.2.tar.gz
buildframework/helium/external/python/lib/linux/PyXML-0.8.4.tar.gz
buildframework/helium/external/python/lib/linux/easy-install.pth
buildframework/helium/external/python/lib/linux/lxml-1.3.6.tgz
buildframework/helium/helium.ant.xml
buildframework/helium/helium_preinclude.ant.xml
buildframework/helium/hlm
buildframework/helium/hlm.bat
buildframework/helium/sf/deps/amara/4Suite_XML/1.0.2/4Suite-XML-1.0.2.tar.gz
buildframework/helium/sf/deps/amara/4Suite_XML/1.0.2/4Suite_XML-1.0.2.py2.6-win32.egg
buildframework/helium/sf/deps/amara/4Suite_XML/1.0.2/ivy.xml
buildframework/helium/sf/deps/amara/amara/1.2.0.1/amara-1.2.0.1.egg
buildframework/helium/sf/deps/amara/amara/1.2.0.1/ivy.xml
buildframework/helium/sf/deps/com.nokia.helium.config/helium-sf-config/1.0/ivy.xml
buildframework/helium/sf/deps/org.apache.xml/serializer/1.0/serializer-1.0.jar
buildframework/helium/sf/deps/org.apache.xml/serializer/2.7.0/serializer-2.7.0.jar
buildframework/helium/sf/deps/org.apache.xml/xalan/1.0/xalan-1.0.jar
buildframework/helium/sf/deps/org.apache.xml/xalan/2.7.0/xalan-2.7.0.jar
buildframework/helium/sf/deps/py_dom_xpath/py_dom_xpath/0.1/ivy.xml
buildframework/helium/sf/deps/py_dom_xpath/py_dom_xpath/0.1/py_dom_xpath-0.1.py2.6.egg
buildframework/helium/sf/deps/pyxml/pyxml/0.8.4/ivy.xml
buildframework/helium/sf/deps/pyxml/pyxml/0.8.4/pyxml-0.8.4.py2.6.egg
buildframework/helium/sf/deps/xpath-task/xpath-task/0.1/xpath-task-0.1.jar
buildframework/helium/sf/doc/src/structure.rst
buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/AntMacros.java
buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/AntScriptDefs.java
buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/listener/HlmAntUnitListener.java
buildframework/helium/sf/java/antdata/ivy.xml
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntComment.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntFile.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntObjectMeta.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntlibMeta.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/CommentMeta.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/Database.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/DocumentFactoryWithLocator.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/ElementWithLocation.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/PropertyCommentMeta.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/PropertyMeta.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/RootAntObjectMeta.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/SAXContentHandlerExt.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/TargetMeta.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/TaskContainerMeta.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/TypeMeta.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/database.xml.ftl
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/taskdefs/AntConfigLintTask.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/taskdefs/DatabaseTask.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/types/WrongTypePropertyCheck.java
buildframework/helium/sf/java/antdata/tests/data/test_project.ant.xml
buildframework/helium/sf/java/antdata/tests/data/test_project_scopes.ant.xml
buildframework/helium/sf/java/antdata/tests/src/com/nokia/helium/ant/data/tests/TestMeta.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/CheckAntCall.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/CheckIndentation.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/CheckScriptDef.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/CheckTryCatchBlock.java
buildframework/helium/sf/java/antlint/tests/antunit/test_antlint.ant.xml
buildframework/helium/sf/java/antlint/tests/data/sample.ant.xml
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/SessionSet.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/types/TaskSet.java
buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/CheckEngine.java
buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/CheckToolException.java
buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/HeliumToolsCheckerMain.java
buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/OSResolver.java
buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/ToolChecker.java
buildframework/helium/sf/java/checktools/tests/src/com/nokia/helium/checktools/tests/TestCheckEngine.java
buildframework/helium/sf/java/checktools/tests/src/com/nokia/helium/checktools/tests/TestOSResolver.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/EmailDataSender.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/EmailSendException.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/HlmAntLibException.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/LDAPException.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/LDAPHelper.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/LogSource.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/LogSourceException.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/MessageCreationException.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/MultiCauseBuildException.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/PPHash.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/PPInputSource.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/TemplateProcessor.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/HeliumExecutor.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/HlmDefinition.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/HlmExceptionHandler.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/Message.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/PostBuildAction.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/PreBuildAction.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/conditions/XMLLogCondition.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/filters/PrettyPrintXmlFilter.java
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/GetFreeDriveTask.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/LDAPTask.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/PythonTask.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/RetryTask.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/SerializePathTask.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/XMLLogCountTask.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/ConditionType.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/FMPPMessage.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/FileMessage.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmDefList.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmFinalTargetDef.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmImportDef.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmListenerDef.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmPostDefImpl.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmPreDefImpl.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/Stage.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/TargetMessageTrigger.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/TextMessage.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/src/com/nokia/helium/core/plexus/CommandBase.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/plexus/FileStreamConsumer.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/plexus/StreamMultiplexer.java
buildframework/helium/sf/java/core/tests/antunit/executor/build.xml
buildframework/helium/sf/java/core/tests/antunit/executor/test_executor.ant.xml
buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/plexus/tests/TestAntStreamConsumer.java
buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/plexus/tests/TestCommandBase.java
buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/plexus/tests/TestFileStreamConsumer.java
buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/plexus/tests/TestStreamRecorder.java
buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/tests/TestLDAPHelper.java
buildframework/helium/sf/java/diamonds/diamonds.rst
buildframework/helium/sf/java/diamonds/ivy.xml
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/AllTargetDiamondsListener.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsClient.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsConfig.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsExceptionStatusUpdate.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsListenerImpl.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsPostBuildStatusUpdate.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsProperties.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/Stage.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/StageDiamondsListener.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/Target.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/TargetDiamondsListener.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/config/diamonds_config_default.ant.xml
buildframework/helium/sf/java/diamonds/tests/data/templates/build.xml.ftl
buildframework/helium/sf/java/diamonds/tests/data/templates/diamonds_finish.xml.ftl
buildframework/helium/sf/java/diamonds/tests/data/templates/diamonds_signal.xml.ftl
buildframework/helium/sf/java/diamonds/tests/data/templates/diamonds_status.xml.ftl
buildframework/helium/sf/java/diamonds/tests/data/templates/invalid-ant-properties-input-file.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/diamonds/tests/src/com/nokia/helium/diamonds/tests/TestXMLMerger.java
buildframework/helium/sf/java/environment/build.xml
buildframework/helium/sf/java/environment/ivy.xml
buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/Environment.java
buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/EnvironmentXMLWriter.java
buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/Executable.java
buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/ant/antlib.xml
buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/ant/listener/ExecListener.java
buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/ant/taskdefs/EnvironmentTask.java
buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/ant/types/EnvData.java
buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/ant/types/ExecutableInfo.java
buildframework/helium/sf/java/environment/tests/antunit/listener/build.xml
buildframework/helium/sf/java/environment/tests/antunit/test_environment.ant.xml
buildframework/helium/sf/java/environment/tests/antunit/test_listener.ant.xml
buildframework/helium/sf/java/environment/tests/bld.sh
buildframework/helium/sf/java/environment/tests/build.bat
buildframework/helium/sf/java/environment/tests/build.xml
buildframework/helium/sf/java/imaker/imaker.rst
buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/IMaker.java
buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/PrintVarSteamConsumer.java
buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/engines/EmakeEngine.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/types/Configuration.java
buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/types/ConfigurationSet.java
buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/types/Variable.java
buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/types/VariableSet.java
buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/utils/ParallelExecutor.java
buildframework/helium/sf/java/imaker/tests/src/com/nokia/helium/imaker/tests/TestHelpConfigStreamConsumer.java
buildframework/helium/sf/java/imaker/tests/src/com/nokia/helium/imaker/tests/TestIMaker.java
buildframework/helium/sf/java/imaker/tests/src/com/nokia/helium/imaker/tests/TestParallelExecutor.java
buildframework/helium/sf/java/imaker/tests/src/com/nokia/helium/imaker/tests/TestPrintVarStreamConsumer.java
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/BuildNode.java
buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/DataNode.java
buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/EmailDataSender.java
buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/EndLessStack.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/TreeDumper.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/HlmAssertMessageTask.java
buildframework/helium/sf/java/internaldata/tests/src/com/nokia/helium/internaldata/tests/TestEmailDataSender.java
buildframework/helium/sf/java/internaldata/tests/src/com/nokia/helium/internaldata/tests/TestListener.java
buildframework/helium/sf/java/jpa/build.xml
buildframework/helium/sf/java/jpa/ivy.xml
buildframework/helium/sf/java/jpa/src/META-INF/persistence.xml
buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMCommitCount.java
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/Version.java
buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/Component.java
buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/ComponentTime.java
buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/ExecutionTime.java
buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/LogFile.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/MetadataEntry.java
buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/MetadataUtil.java
buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/Priority.java
buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/WhatLogEntry.java
buildframework/helium/sf/java/jpa/src/log4j.xml
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/HelpDef.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/ModelPropertiesParser.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/TypedefURIFix.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/XmlLogger.java
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/AntConfigurationTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/AntDependencyTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CopyParallelTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CoverageRecorderTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/HlmExecTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ModelPropertiesTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/StopLogToConsoleTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/util/Helper.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/util/ToolsProcess.java
buildframework/helium/sf/java/legacy/src/com/nokia/ivy/ToolResolver.java
buildframework/helium/sf/java/legacy/src/com/nokia/tools/Tool.java
buildframework/helium/sf/java/legacy/src/com/nokia/tools/cone/CONETool.java
buildframework/helium/sf/java/legacy/src/com/nokia/tools/configuration/CONFIGURATIONTool.java
buildframework/helium/sf/java/legacy/tests/antunit/run-scenario.ant.xml
buildframework/helium/sf/java/legacy/tests/antunit/test_common.ant.xml
buildframework/helium/sf/java/legacy/tests/antunit/test_feature_enabled_flags.ant.xml
buildframework/helium/sf/java/legacy/tests/data/ivy/ivy.xml
buildframework/helium/sf/java/legacy/tests/data/ivy/modules/ant-1.6.2.ivy.xml
buildframework/helium/sf/java/legacy/tests/data/ivy/modules/ant-1.7.ivy.xml
buildframework/helium/sf/java/legacy/tests/data/ivy/tools_ivy_settings.xml
buildframework/helium/sf/java/legacy/tests/scenarii/bld.sh
buildframework/helium/sf/java/legacy/tests/scenarii/build.bat
buildframework/helium/sf/java/legacy/tests/scenarii/property/feature.ant.xml
buildframework/helium/sf/java/legacy/tests/scenarii/test/build.xml
buildframework/helium/sf/java/legacy/tests/src/com/nokia/ant/HeliumLoggerTest.java
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/StageSummaryHandler.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/TaskRecorder.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/antunit/test_stageslogging.ant.xml
buildframework/helium/sf/java/logging/tests/antunit/test_taskrecorder.ant.xml
buildframework/helium/sf/java/logging/tests/build.bat
buildframework/helium/sf/java/logging/tests/scenarii/build_failure/build.xml
buildframework/helium/sf/java/logging/tests/scenarii/build_status/build.xml
buildframework/helium/sf/java/logging/tests/scenarii/inavlid_stage_refid_object/build.xml
buildframework/helium/sf/java/logging/tests/scenarii/invalid_stage_refid/build.xml
buildframework/helium/sf/java/logging/tests/scenarii/logger/build.xml
buildframework/helium/sf/java/logging/tests/scenarii/missing_default_config/build.xml
buildframework/helium/sf/java/logging/tests/scenarii/missing_stage_refid/build.xml
buildframework/helium/sf/java/logging/tests/scenarii/override_scenario/build.xml
buildframework/helium/sf/java/logging/tests/scenarii/valid_build/stages_config.ant.xml
buildframework/helium/sf/java/logging/tests/stages_config.ant.xml
buildframework/helium/sf/java/metadata/doc/metadata.rst
buildframework/helium/sf/java/metadata/doc/metadata_jpql_schema.png
buildframework/helium/sf/java/metadata/doc/metadata_schema.png
buildframework/helium/sf/java/metadata/ivy.xml
buildframework/helium/sf/java/metadata/metadata.rst
buildframework/helium/sf/java/metadata/src/META-INF/persistence.xml
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/AutoCommitEntityManager.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/CustomMetaDataProvider.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/DAO.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/DerbyFactoryManagerCreator.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/EntityManagerFactoryCreator.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/FactoryManager.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/JpaDAO.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/MetaDataInput.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/MetadataException.java
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/MetaDataDeleteTask.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/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/AbstractComponentBaseMetadataInput.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/AntLogMetaDataInput.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/MetaDataFilter.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/MetaDataFilterCollection.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/SeverityEnum.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/SysdefMetaDataInput.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/TextLogMetaDataInput.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/ant/types/sbs/CategorizationHandler.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/sbs/SBSLogEvents.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/sbs/SBSLogHandler.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/sbs/SBSLogMetaDataInput.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/db/ORMMetadataDB.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/fmpp/ORMObjectModel.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/fmpp/ORMQueryModeModel.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/fmpp/ORMQueryModel.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/fmpp/ORMSequenceModel.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/fmpp/ORMTemplateModelIterator.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/fmpp/QueryTemplateModel.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/Version.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/Component.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/ComponentTime.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/ExecutionTime.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/LogFile.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/LogFileDAO.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/MetadataEntry.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/Severity.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SeverityDAO.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefCollection.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefCollectionDAO.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefComponent.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefComponentDAO.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefPackage.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefPackageDAO.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefUnit.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefUnitDAO.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/WhatLogEntry.java
buildframework/helium/sf/java/metadata/src/log4j.xml
buildframework/helium/sf/java/metadata/src/templates/build_status.xml.ftl
buildframework/helium/sf/java/metadata/src/templates/cc_summary.html.ftl
buildframework/helium/sf/java/metadata/src/templates/cc_summary_metadata.html.ftl
buildframework/helium/sf/java/metadata/src/templates/diamonds_faults.ftl
buildframework/helium/sf/java/metadata/src/templates/diamonds_macro.ftl
buildframework/helium/sf/java/metadata/src/templates/email_new.html.ftl
buildframework/helium/sf/java/metadata/src/templates/faults.txt.ftl
buildframework/helium/sf/java/metadata/src/templates/general_category.txt.ftl
buildframework/helium/sf/java/metadata/src/templates/macro/expand3.js
buildframework/helium/sf/java/metadata/src/templates/macro/log3.css
buildframework/helium/sf/java/metadata/src/templates/macro/logger.ftl
buildframework/helium/sf/java/metadata/src/templates/readdata.xml.ftl
buildframework/helium/sf/java/metadata/src/templates/scan2.html.ftl
buildframework/helium/sf/java/metadata/src/templates/summary.html.ftl
buildframework/helium/sf/java/metadata/tests/antunit/test_abld_input.ant.xml
buildframework/helium/sf/java/metadata/tests/antunit/test_ant_input.ant.xml
buildframework/helium/sf/java/metadata/tests/antunit/test_imaker_input.ant.xml
buildframework/helium/sf/java/metadata/tests/antunit/test_metadata.ant.xml
buildframework/helium/sf/java/metadata/tests/antunit/test_policy_input.ant.xml
buildframework/helium/sf/java/metadata/tests/antunit/test_regex.ant.xml
buildframework/helium/sf/java/metadata/tests/antunit/test_sbs_input.ant.xml
buildframework/helium/sf/java/metadata/tests/antunit/test_sysdef_input.ant.xml
buildframework/helium/sf/java/metadata/tests/antunit/test_text_input.ant.xml
buildframework/helium/sf/java/metadata/tests/antunit/test_validity.ant.xml
buildframework/helium/sf/java/metadata/tests/data/IDO_lcdo_tb92-ci_MCL.92.64_ant_build.log
buildframework/helium/sf/java/metadata/tests/data/abld/parsing_result.ini.ftl
buildframework/helium/sf/java/metadata/tests/data/abld/sample_abld.log
buildframework/helium/sf/java/metadata/tests/data/ant/package_ant_build.log
buildframework/helium/sf/java/metadata/tests/data/ant/result.ini.ftl
buildframework/helium/sf/java/metadata/tests/data/build_roms_sample.log
buildframework/helium/sf/java/metadata/tests/data/build_whatlog.log
buildframework/helium/sf/java/metadata/tests/data/build_whatlog.whatlog.log
buildframework/helium/sf/java/metadata/tests/data/categorization.log
buildframework/helium/sf/java/metadata/tests/data/categorization_clean.log
buildframework/helium/sf/java/metadata/tests/data/categorization_compile.log
buildframework/helium/sf/java/metadata/tests/data/categorization_failed_empty_recipe.log
buildframework/helium/sf/java/metadata/tests/data/categorization_failed_error_in_recipe.log
buildframework/helium/sf/java/metadata/tests/data/common.csv
buildframework/helium/sf/java/metadata/tests/data/countseverity/package_build_fixslashes_raptor.log
buildframework/helium/sf/java/metadata/tests/data/countseverity/text_has_severity.log
buildframework/helium/sf/java/metadata/tests/data/ido_abs_mcl_devlon70_robot_MCL.70.500_fixslashes_raptor.log
buildframework/helium/sf/java/metadata/tests/data/ido_abs_mcl_devlon70_robot_MCL.70.500_info.log
buildframework/helium/sf/java/metadata/tests/data/ido_abs_tb92-nightly_5.2.58_validate_policy.log
buildframework/helium/sf/java/metadata/tests/data/imaker/build_roms_sample.log
buildframework/helium/sf/java/metadata/tests/data/imaker/rombuild_result.ini.ftl
buildframework/helium/sf/java/metadata/tests/data/log-with-same-root-name.log
buildframework/helium/sf/java/metadata/tests/data/log-with-same-root-name.log.log
buildframework/helium/sf/java/metadata/tests/data/metadata_regex.csv
buildframework/helium/sf/java/metadata/tests/data/metadata_regex_compile.csv
buildframework/helium/sf/java/metadata/tests/data/metadatacount_error_and_missing_files.log
buildframework/helium/sf/java/metadata/tests/data/metadatacount_missing_files.log
buildframework/helium/sf/java/metadata/tests/data/parser_error.log
buildframework/helium/sf/java/metadata/tests/data/parsing_result.ini.ftl
buildframework/helium/sf/java/metadata/tests/data/policy/validate_policy.log
buildframework/helium/sf/java/metadata/tests/data/receipe_lengthy_warn.log
buildframework/helium/sf/java/metadata/tests/data/regex/empty.log
buildframework/helium/sf/java/metadata/tests/data/regex/log-with-same-root-name.log
buildframework/helium/sf/java/metadata/tests/data/regex/log-with-same-root-name.log.log
buildframework/helium/sf/java/metadata/tests/data/sample_abld.log
buildframework/helium/sf/java/metadata/tests/data/sbs/build_whatlog.log
buildframework/helium/sf/java/metadata/tests/data/sbs/build_whatlog.whatlog.log
buildframework/helium/sf/java/metadata/tests/data/sbs/categorization.log
buildframework/helium/sf/java/metadata/tests/data/sbs/categorization_compile.log
buildframework/helium/sf/java/metadata/tests/data/sbs/categorization_error_after_compile.log
buildframework/helium/sf/java/metadata/tests/data/sbs/categorization_failed_empty_recipe.log
buildframework/helium/sf/java/metadata/tests/data/sbs/categorization_failed_error_in_recipe.log
buildframework/helium/sf/java/metadata/tests/data/sbs/invalid_xml_log_format.log
buildframework/helium/sf/java/metadata/tests/data/sbs/metadatacount_error_and_missing_files.log
buildframework/helium/sf/java/metadata/tests/data/sbs/metadatacount_missing_files.log
buildframework/helium/sf/java/metadata/tests/data/sbs/parsing_result.ini.ftl
buildframework/helium/sf/java/metadata/tests/data/sbs/receipe_lengthy_warn.log
buildframework/helium/sf/java/metadata/tests/data/sbs/receipe_lengthy_whatlog.log
buildframework/helium/sf/java/metadata/tests/data/sbs/sbs_compile_emake_errors.log
buildframework/helium/sf/java/metadata/tests/data/sbs/sysdef3.xml
buildframework/helium/sf/java/metadata/tests/data/sbs/sysdef_data.ini.ftl
buildframework/helium/sf/java/metadata/tests/data/sbs/unit_categorization_compile.log
buildframework/helium/sf/java/metadata/tests/data/sbs/whatlog_result.ini.ftl
buildframework/helium/sf/java/metadata/tests/data/sysdef/invalid_sysdef3.xml
buildframework/helium/sf/java/metadata/tests/data/sysdef/sysdef3.xml
buildframework/helium/sf/java/metadata/tests/data/sysdef/sysdef_data.ini.ftl
buildframework/helium/sf/java/metadata/tests/data/templates/component_categorization.txt.ftl
buildframework/helium/sf/java/metadata/tests/data/whatlog_result.ini.ftl
buildframework/helium/sf/java/metadata/tests/functionality/func_add_test.ant.xml
buildframework/helium/sf/java/metadata/tests/src/com/nokia/helium/metadata/tests/TestIMakerLogMetaDataInput.java
buildframework/helium/sf/java/metadata/tests/src/com/nokia/helium/metadata/tests/TestORMFMPPLoader.java
buildframework/helium/sf/java/quality/coverity.rst
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/CASummaryTask.java
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/CMTToolTask.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/CoverityTask.java
buildframework/helium/sf/java/quality/tests/antunit/test_ca.ant.xml
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/headers_report_notypeids.xml
buildframework/helium/sf/java/quality/tests/data/headers_report_ok.xml
buildframework/helium/sf/java/quality/tests/data/libraries_report_ok.xml
buildframework/helium/sf/java/quality/tests/data/libraries_report_one_id.xml
buildframework/helium/sf/java/sbs/doc/sbs.rst
buildframework/helium/sf/java/sbs/doc/sbscoverity.rst
buildframework/helium/sf/java/sbs/doc/sbsctc.rst
buildframework/helium/sf/java/sbs/sbs.rst
buildframework/helium/sf/java/sbs/sbscoverity.rst
buildframework/helium/sf/java/sbs/sbsctc.rst
buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/SAXSysdefParser.java
buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/SBSBuildList.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/SBSTask.java
buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSBuild.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/src/com/nokia/helium/sbs/plexus/SBSErrorStreamConsumer.java
buildframework/helium/sf/java/sbs/tests/antunit/sbs_default_config.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/AntScmLogger.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/ExportAction.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/TagAction.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/ScmTask.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/types/LatestTag.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/info/AbstractInfoCommand.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/info/InfoScmResult.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/pull/AbstractPullCommand.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/pull/PullScmResult.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/tags/AbstractTagsCommand.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/manager/BasicExtendedScmManager.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/manager/ExtendedScmManager.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/ScmProviderExt.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/HgUtilsInternal.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/branch/HgBranchCommand.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/checkout/HgCheckOutCommand.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/info/HgInfoCommand.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/info/HgInfoConsumer.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/init/HgInitCommand.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/log/HgChangeLogCommand.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/log/HgChangeLogConsumer.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/remove/HgRemoveCommand.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/tag/HgTagCommand.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/tags/HgTagsConsumer.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/update/HgUpdateCommand.java
buildframework/helium/sf/java/scm/tests/antunit/abstract_unittest_scmtask.ant.xml
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/Notifier.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/SignalExceptionMessage.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/SignalNeverFailMessage.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/SignalStatusList.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/SignalList.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/SignalListener.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/conditions/DeferredFailureCondition.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/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/InfoNotifier.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/NotifierInput.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/NotifyWhenEnum.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SMSNotifier.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalExceptionConfigHandler.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalInput.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalListenerConfig.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalNotifierInput.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalNotifierList.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalStatusDef.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/TargetCondition.java
buildframework/helium/sf/java/signaling/tests/antunit/run-scenario.ant.xml
buildframework/helium/sf/java/signaling/tests/antunit/test_executetasknotifier.ant.xml
buildframework/helium/sf/java/signaling/tests/antunit/test_signalexception_config.ant.xml
buildframework/helium/sf/java/signaling/tests/build.bat
buildframework/helium/sf/java/signaling/tests/src/com/nokia/helium/signaling/tests/TestEmailSender.java
buildframework/helium/sf/java/synergy/src/com/nokia/helium/synergy/ant/taskdefs/AbstractScmBaseTask.java
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/filter-module.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/filtering.bat
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/filtering.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinandparesysdef.bat
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinandparesysdef.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinsysdef
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinsysdef-module.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinsysdef.bat
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinsysdef.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinsysdef_mock.py
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/filter-module.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/joinsysdef-module.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/mergesysdef-module.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/modelcheck.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/path-module.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/test-model.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/usage.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/mergesysdef-module.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/mergesysdef.bat
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/mergesysdef.xsl
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/sysdefdowngrade.bat
buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/sysdefdowngrade.xsl
buildframework/helium/sf/java/sysdef/ivy.xml
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/PackageDefinition.java
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/PackageDefinitionParsingException.java
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/conditions/IsVendorPackage.java
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/AbstractSydefTask.java
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/DowngradeTask.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/JoinTask.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/taskdefs/SysdefUtils.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/SysdefConfig.java
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/types/SysdefFilter.java
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/templates/root_sysdef_model.xml.ftl
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_is_vendor_package.ant.xml
buildframework/helium/sf/java/sysdef/tests/bld.sh
buildframework/helium/sf/java/sysdef/tests/data/filter/config/config.hrh
buildframework/helium/sf/java/sysdef/tests/data/isvendor/package/package_definition.xml
buildframework/helium/sf/java/sysdef/tests/data/isvendor/package/package_map.xml
buildframework/helium/sf/java/sysdef/tests/data/isvendor/package/vendor_package_info/vendor_package_metadata/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/vendor_package_info/nokia_vendor_package_metadata/package_definition.xml
buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/template.txt.ftl
buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/valid_package/package_definition.xml
buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/valid_package_root2/package_definition.xml
buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/vendor_package/package_definition.xml
buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/vendor_package/vendor_package_info/nokia_vendor_package_metadata/package_definition.xml
buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/vendor_package2/package_definition.xml
buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/vendor_package2/package_map.xml
buildframework/helium/sf/python/pythoncore/ivy.xml
buildframework/helium/sf/python/pythoncore/lib/amara.py
buildframework/helium/sf/python/pythoncore/lib/archive/builders.py
buildframework/helium/sf/python/pythoncore/lib/archive/mappers.py
buildframework/helium/sf/python/pythoncore/lib/archive/scanners.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/ats4_template.xml
buildframework/helium/sf/python/pythoncore/lib/ats3/atsconfigparser.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/matti/MattiDrops.py
buildframework/helium/sf/python/pythoncore/lib/ats3/matti2.py
buildframework/helium/sf/python/pythoncore/lib/ats3/matti_template.xml
buildframework/helium/sf/python/pythoncore/lib/ats3/parsers.py
buildframework/helium/sf/python/pythoncore/lib/ats3/templates/ats4_macros.xml
buildframework/helium/sf/python/pythoncore/lib/ats3/testconfigurator.py
buildframework/helium/sf/python/pythoncore/lib/atsant.py
buildframework/helium/sf/python/pythoncore/lib/bomtofile.py
buildframework/helium/sf/python/pythoncore/lib/build/model.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/comments.py
buildframework/helium/sf/python/pythoncore/lib/configuration.py
buildframework/helium/sf/python/pythoncore/lib/convertpkg.py
buildframework/helium/sf/python/pythoncore/lib/ctc.py
buildframework/helium/sf/python/pythoncore/lib/delta_zip.py
buildframework/helium/sf/python/pythoncore/lib/dependancygraph.py
buildframework/helium/sf/python/pythoncore/lib/docs.py
buildframework/helium/sf/python/pythoncore/lib/escapeddict.py
buildframework/helium/sf/python/pythoncore/lib/fileutils.py
buildframework/helium/sf/python/pythoncore/lib/freedisk.py
buildframework/helium/sf/python/pythoncore/lib/getVariantConfiguration.py
buildframework/helium/sf/python/pythoncore/lib/helium/documentation.py
buildframework/helium/sf/python/pythoncore/lib/helium/logger.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/iadinfo.py
buildframework/helium/sf/python/pythoncore/lib/ido.py
buildframework/helium/sf/python/pythoncore/lib/idoprep.py
buildframework/helium/sf/python/pythoncore/lib/imaker/__init__.py
buildframework/helium/sf/python/pythoncore/lib/integration/ant.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/get_gscm_info.pl
buildframework/helium/sf/python/pythoncore/lib/nokia/gscm.py
buildframework/helium/sf/python/pythoncore/lib/packageiad.py
buildframework/helium/sf/python/pythoncore/lib/preparation.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_ats3_aste.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats4.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats4_aste.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_atsant.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ccm.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_convertpkg.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_matti.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_matti2.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_parsers.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_sis.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_timeout_launcher.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_buildtools.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_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_preparation.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_session_provider.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_symbian_log.py
buildframework/helium/sf/python/pythoncore/lib/rtfutils.py
buildframework/helium/sf/python/pythoncore/lib/sphinx_ext.py
buildframework/helium/sf/python/pythoncore/lib/symbian/log.py
buildframework/helium/sf/python/pythoncore/lib/symrec.py
buildframework/helium/sf/python/pythoncore/lib/sysdef/api.py
buildframework/helium/sf/python/pythoncore/lib/sysdef/io.py
buildframework/helium/sf/python/pythoncore/lib/timeout_launcher.py
buildframework/helium/sf/python/pythoncore/lib/unittestadditions.py
buildframework/helium/sf/python/pythoncore/setup.py
buildframework/helium/sf/python/pythoncore/tests/data/matti/matti_template.xml
buildframework/helium/sf/python/pythoncore/tests/data/matti/test_all_present.xml
buildframework/helium/sf/python/pythoncore/tests/data/matti/test_all_present_sierra_disabled.xml
buildframework/helium/sf/python/pythoncore/tests/data/packageiad/sysdef3_test.xml
buildframework/helium/sf/settings/ivysettings.xml
buildframework/helium/sf/settings/triggers/egg-extract.ant.xml
buildframework/helium/tests/data/logs/test_helium_dev_9.1.50_targetTimesLog.csv
buildframework/helium/tests/data/logs/test_helium_dev_9.2.10_test_test_compile.log
buildframework/helium/tests/data/test-minibuild-sysdef3.xml
buildframework/helium/tests/data/test-scanlog_helium_minibuild_ido_input_compile.log
buildframework/helium/tests/data/test-scanlog_linux_helium_minibuild_ido_input_compile.log
buildframework/helium/tests/minibuilds/ats/archive.cfg.xml
buildframework/helium/tests/minibuilds/ats/build.xml
buildframework/helium/tests/minibuilds/ats/helium_minibuild_ats.sysdef.xml
buildframework/helium/tests/minibuilds/ats/matti/archive.cfg.xml
buildframework/helium/tests/minibuilds/ats/matti/build.xml
buildframework/helium/tests/minibuilds/ats/matti/helium_minibuild_ats.sysdef.xml
buildframework/helium/tests/minibuilds/ats/matti/test.xml
buildframework/helium/tests/minibuilds/broom/build.xml
buildframework/helium/tests/minibuilds/compile/archive.cfg.xml
buildframework/helium/tests/minibuilds/compile/build.xml
buildframework/helium/tests/minibuilds/compile/common.sbsinput.ant.xml
buildframework/helium/tests/minibuilds/compile/minibuild_compile.sysdef.xml
buildframework/helium/tests/minibuilds/compile/template_release_metadata.xml
buildframework/helium/tests/minibuilds/diamonds/build.xml
buildframework/helium/tests/minibuilds/ido-sbs-coverity/build.sbsinput.ant.xml
buildframework/helium/tests/minibuilds/ido-sbs-coverity/build.xml
buildframework/helium/tests/minibuilds/ido-sbs-coverity/common.sbsinput.ant.xml
buildframework/helium/tests/minibuilds/ido-sbs-coverity/delivery.xml
buildframework/helium/tests/minibuilds/ido-sbs-coverity/hlm.bat
buildframework/helium/tests/minibuilds/ido-sbs-sysdef3/build.xml
buildframework/helium/tests/minibuilds/ido-sbs/build.xml
buildframework/helium/tests/minibuilds/ido-sbs/hlm.bat
buildframework/helium/tests/minibuilds/ido/build.xml
buildframework/helium/tests/minibuilds/ido/config/delivery.xml
buildframework/helium/tests/minibuilds/ido/config/stages_config.ant.xml
buildframework/helium/tests/minibuilds/ido/hack-test.ant.xml
buildframework/helium/tests/minibuilds/ido/sysdefs/minibuild_ido.sysdef.xml
buildframework/helium/tests/minibuilds/imaker/build.xml
buildframework/helium/tests/minibuilds/linux-build/ido/build.xml
buildframework/helium/tests/minibuilds/linux-build/ido/config/build.sbsinput.ant.xml
buildframework/helium/tests/minibuilds/linux-build/ido/config/common.sbsinput.ant.xml
buildframework/helium/tests/minibuilds/linux-build/ido/config/delivery.xml
buildframework/helium/tests/minibuilds/linux-build/ido/config/stages_config.ant.xml
buildframework/helium/tests/minibuilds/linux-build/ido/hack-test.ant.xml
buildframework/helium/tests/minibuilds/linux-build/ido/sysdefs/minibuild_ido.sysdef.xml
buildframework/helium/tests/minibuilds/linux-build/ido/sysdefs/sysdef_1_4_0.dtd
buildframework/helium/tests/minibuilds/prep-wa-synergy71/build.xml
buildframework/helium/tests/minibuilds/qt/build.xml
buildframework/helium/tools/common/common.ant.xml
buildframework/helium/tools/common/common.antlib.xml
buildframework/helium/tools/common/default_config.ant.xml
buildframework/helium/tools/common/docs.ant.xml
buildframework/helium/tools/common/helium_docs.ant.xml
buildframework/helium/tools/common/libs.ant.xml
buildframework/helium/tools/common/python/scripts/filter_metadatalog.py
buildframework/helium/tools/common/python/scripts/sbsscanlogmetadata.py
buildframework/helium/tools/common/python/scripts/scripttests/__init__.py
buildframework/helium/tools/common/python/scripts/scripttests/test_filter_metadatalog.py
buildframework/helium/tools/common/python/scripts/scripttests/test_sbs.py
buildframework/helium/tools/common/templates/db2xml.xml.ftl
buildframework/helium/tools/common/templates/diamonds/build_roms_diamonds.xml.ftl
buildframework/helium/tools/common/templates/diamonds/confml-validate.xml.ftl
buildframework/helium/tools/common/templates/diamonds/diamonds_build.xml.ftl
buildframework/helium/tools/common/templates/diamonds/diamonds_finish.xml.ftl
buildframework/helium/tools/common/templates/diamonds/diamonds_macro.ftl
buildframework/helium/tools/common/templates/diamonds/diamonds_signal.xml.ftl
buildframework/helium/tools/common/templates/diamonds/diamonds_status.xml.ftl
buildframework/helium/tools/common/templates/diamonds/faults_metadata_orm.ftl
buildframework/helium/tools/common/templates/diamonds/iad-check-pkg-version_fmpp.xml.ftl
buildframework/helium/tools/common/templates/diamonds/publish.xml.ftl
buildframework/helium/tools/common/templates/diamonds/sbs-checksource_fmpp.xml.ftl
buildframework/helium/tools/common/templates/diamonds/tool.xml.ftl
buildframework/helium/tools/common/templates/diamonds/validate-policy-log.xml.ftl
buildframework/helium/tools/common/templates/help_text.txt.ftl
buildframework/helium/tools/common/templates/ido/ido-ant-copy.xml.ftl
buildframework/helium/tools/common/templates/ido/ido-cenrep-gen.xml.ftl
buildframework/helium/tools/common/templates/ido/ido-confml-validate.ant.xml.ftl
buildframework/helium/tools/common/templates/ido/ido-robot-zip.ant.xml.ftl
buildframework/helium/tools/common/templates/log/build_status_orm.xml.ftl
buildframework/helium/tools/common/templates/log/cc_summary_metadata_orm.html.ftl
buildframework/helium/tools/common/templates/log/email_status_orm.html.ftl
buildframework/helium/tools/common/templates/log/scan2_orm.html.ftl
buildframework/helium/tools/common/templates/log/scan2_text_orm.html.ftl
buildframework/helium/tools/common/templates/log/summary_metadata_orm.html.ftl
buildframework/helium/tools/common/templates/quality/cone-validate.xml.ftl
buildframework/helium/tools/common/test/test_common.ant.xml
buildframework/helium/tools/common/test/test_diamonds_templates.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/coverity.ant.xml
buildframework/helium/tools/compile/ec/ec.ant.xml
buildframework/helium/tools/compile/qt/antunit/test_qt.ant.xml
buildframework/helium/tools/compile/qt/qt.ant.xml
buildframework/helium/tools/compile/qt/templates/run-qmake.ant.xml.ftl
buildframework/helium/tools/compile/qt/templates/run-qmake.mk.ftl
buildframework/helium/tools/compile/sbs/sbs.ant.xml
buildframework/helium/tools/compile/sis.ant.xml
buildframework/helium/tools/localisation/localisation-50.ant.xml
buildframework/helium/tools/logging/logging.ant.xml
buildframework/helium/tools/logging/test/test_logging.ant.xml
buildframework/helium/tools/logging/test/test_summary_log.ant.xml
buildframework/helium/tools/metadata/metadata.ant.xml
buildframework/helium/tools/preparation/bom/bom.ant.xml
buildframework/helium/tools/preparation/ci.ant.xml
buildframework/helium/tools/preparation/ido-prep.ant.xml
buildframework/helium/tools/preparation/ivy/dependencies.ant.xml
buildframework/helium/tools/preparation/password.ant.xml
buildframework/helium/tools/preparation/preparation.ant.xml
buildframework/helium/tools/preparation/preparation.antlib.xml
buildframework/helium/tools/preparation/synergy/ccmgetinput.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/nwiki.ant.xml
buildframework/helium/tools/publish/publish.ant.xml
buildframework/helium/tools/publish/synergy.ant.xml
buildframework/helium/tools/quality/compatibility_analyser/ca_config_template.txt
buildframework/helium/tools/quality/compatibility_analyser/compatibility.ant.xml
buildframework/helium/tools/quality/cone-validate.ant.xml
buildframework/helium/tools/quality/conflict-checker.ant.xml
buildframework/helium/tools/quality/lint.ant.xml
buildframework/helium/tools/quality/quality.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/relnotes/relnotes.ant.xml
buildframework/helium/tools/rombuild/imaker.ant.xml
buildframework/helium/tools/testing/ats/ats.ant.xml
buildframework/helium/tools/testing/ats/templates/ats4_naviengine_template.xml
buildframework/helium/tools/testing/eunit/eunit.ant.xml
buildframework/helium/tools/testing/mobilecrash/mobilecrash.ant.xml
--- a/buildframework/helium/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -37,22 +37,34 @@
 
     <property name="doc.src.dir" location="${basedir}/doc/src" />
     <!-- Override docs targets to do more for Helium. -->
-    <target name="apidocs" depends="python-apidocs,internal.docs.apidocs"/>
+    <target name="apidocs" depends="internal.docs.apidocs"/>
     <!-- Generate rst files for docs -->
-    <target name="prep-textdocs" depends="overview-to-html,tools-rst-table,dependency-diagram,
+    <target name="prep-textdocs" depends="overview-to-html,dependency-diagram,
         dependency-logs,release-diff,helium-user-graph,internal.docs.prep-textdocs,helium-prep-textdocs"/>
     <!-- generate all the user documentation for helium -->
-    <target name="docs" depends="clean-docs,database,apidocs,textdocs"/>
+    <target name="docs" depends="clean-docs,docs-database,apidocs,textdocs"/>
+    
+    <!-- Generates an Ant XML database file showing only public content.
+    @scope private    
+    -->
+    <target name="docs-database">
+        <hlm:databaseMacro file="${public.database.file}" scope="public"/>
+    </target>
     
     <import file="helium.ant.xml"/>
     <import file="tools/startup/antserver/antserver.ant.xml"/>
     
-    <resources id="textdoc.paths">
-        <path>
-            <pathelement path="${doc.src.dir}"/>
-            <pathelement path="${basedir}/extensions/nokia/doc/src"/>
-        </path>
-    </resources>
+    <if>
+        <isset property="nokia.dir"/>
+        <then>
+            <resources id="textdoc.paths">
+                <path>
+                    <pathelement path="${doc.src.dir}"/>
+                    <pathelement path="${basedir}/extensions/nokia/doc/src"/>
+                </path>
+            </resources>
+        </then>
+    </if>
 
 </project>
 
--- a/buildframework/helium/builder/bld	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/builder/bld	Fri Aug 13 14:59:05 2010 +0300
@@ -16,22 +16,6 @@
 # Description: 
 #
 
-# loading the system wide settings from ~/.bashrc
-if [ -f ~/.bashrc ] ; then
-	. ~/.bashrc
-fi
-MODULE_VERSION="$(module --version 2>&1)"
-if [ "$?" == "0" ] ; then
-    module load "java/1.6.0"
-    module load "tww/ant/1.7.0"
-    module load mercurial
-    module load tww/python/2.6.4
-    module load "tww/p7zip/4.58"
-    module load ccm
-    module load tww/libxml
-    module load tww/libxslt
-fi
-
 export LANG="en_US.UTF-8"
 
 if [ ! $EPOCROOT ]; then
@@ -40,30 +24,6 @@
 
 BUILDER_HOME=$(cd ${0%/*} && pwd -P)
 
-CWD=`pwd`
-
-if [ ! -e "$BUILDER_HOME/../sf/deps/amara/4Suite_XML/1.0.2/4Suite_XML-1.0.2.py2.6-unix.egg" ] ; then
-    cd $BUILDER_HOME/../sf/deps/amara/4Suite_XML/1.0.2
-    tar xvfz 4Suite-XML-1.0.2.tar.gz > /dev/null
-    cd 4Suite-XML-1.0.2
-    python setup.py bdist_egg > /dev/null
-    mv dist/*.egg ../4Suite_XML-1.0.2.py2.6-unix.egg
-fi
-
-cd $CWD
-
-export PYTHONPATH=$BUILDER_HOME/python/lib/setuptools-0.6c11-py2.5.egg
-
-if [ ! -e "$BUILDER_HOME/../sf/deps/lxml/lxml/2.2.1/lxml-2.2.1.py2.6-unix.egg" ] ; then
-    cd $BUILDER_HOME/../sf/deps/lxml/lxml/2.2.1
-    tar xvfz lxml-1.3.6.tgz > /dev/null
-    cd lxml-1.3.6
-    python setup.py bdist_egg > /dev/null
-    mv dist/*.egg ../lxml-2.2.1.py2.6-unix.egg
-fi
-
-cd $CWD
-
 export JYTHONPATH=$BUILDER_HOME/antlibs/jython-2.5-py2.5.egg
 export USERNAME=$USER
 export PATH=$PATH:.
--- a/buildframework/helium/builder/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/builder/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -67,6 +67,8 @@
     
     <target name="cleanup" description="Cleanup (delete the temp build directory)">
         <delete dir="${build.temp.dir}" failonerror="false"/>
+        <delete dir="${source.root.dir}/external/antlibs2" failonerror="false" />
+        <delete dir="${source.root.dir}/external/python/lib/auto" failonerror="false" />
     </target>
     
     
@@ -113,13 +115,27 @@
         <ac:for param="file" keepgoing="true">
             <path refid="ivy.buildlist.path" />
             <sequential>
-                <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>
+                <ac:trycatch>
+                    <try>
+                        <echo>Start component test set: @{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>
+                        <echo>End component test set: @{file}</echo>
+                    </try>
+                    <catch>
+                        <property name="quality.thrown" value="@{file}"/>
+                    </catch>
+                </ac:trycatch>
             </sequential>
         </ac:for>
+        <ac:if>
+            <isset property="quality.thrown"/>
+            <then>
+                <fail message="${quality.thrown} failed"/>
+            </then>
+        </ac:if> 
     </target>
     <!-- TODO: remove after CI tools are cleaned up -->
     <target name="unittest" depends="test"/>
@@ -146,27 +162,55 @@
             <path refid="ivy.buildlist.path" />
             <sequential>
                 <echo>Checking @{file}</echo>
-                <ant antfile="@{file}" dir="@{file}/.." target="quality" inheritAll="false">
-                    <property name="builder.dir" location="${builder.dir}" />
-                    <property name="source.root.dir" value="${source.root.dir}"/>
-                    <property name="platform" value="${platform}"/>
-                </ant>
+                <ac:trycatch>
+                    <try>
+                        <ant antfile="@{file}" dir="@{file}/.." target="quality" inheritAll="false">
+                            <property name="builder.dir" location="${builder.dir}" />
+                            <property name="source.root.dir" value="${source.root.dir}"/>
+                            <property name="platform" value="${platform}"/>
+                        </ant>
+                    </try>
+                    <catch>
+                        <property name="quality.thrown" value="@{file}"/>
+                    </catch>
+                </ac:trycatch>
             </sequential>
         </ac:for>
+        <ac:if>
+            <isset property="quality.thrown"/>
+            <then>
+                <fail message="${quality.thrown} failed"/>
+            </then>
+        </ac:if>  
     </target>
 
     
+    <target name="ci" depends="quality"/>
+    
     <target name="checkstyle" depends="get-build-list" description="Run checkstyle on each component">
         <ac:for param="file" keepgoing="true">
             <path refid="ivy.buildlist.path" />
             <sequential>
-                <ant antfile="@{file}" dir="@{file}/.." target="checkstyle" inheritAll="false">
-                    <property name="builder.dir" location="${builder.dir}" />
-                    <property name="source.root.dir" value="${source.root.dir}"/>
-                    <property name="platform" value="${platform}"/>
-                </ant>
+                <ac:trycatch>
+                    <try>
+                        <ant antfile="@{file}" dir="@{file}/.." target="checkstyle" inheritAll="false">
+                            <property name="builder.dir" location="${builder.dir}" />
+                            <property name="source.root.dir" value="${source.root.dir}"/>
+                            <property name="platform" value="${platform}"/>
+                        </ant>
+                    </try>
+                    <catch>
+                        <property name="quality.thrown" value="@{file}"/>
+                    </catch>
+                </ac:trycatch>
             </sequential>
         </ac:for>
+        <ac:if>
+            <isset property="quality.thrown"/>
+            <then>
+                <fail message="${quality.thrown} failed"/>
+            </then>
+        </ac:if> 
     </target>
 
     
@@ -190,31 +234,54 @@
         <ivy:retrieve sync="true" conf="default" organisation="com.nokia.helium.config"
             module="helium-${config}-config" revision="1.0"
             inline="true" type="jar"
-            pattern="${source.root.dir}/external/antlibs2/[artifact]-[revision].[ext]" />        
+            pattern="${source.root.dir}/external/antlibs2/[artifact]-[revision].[ext]" />
+        <delete>
+           <fileset dir="${source.root.dir}" includes="external/python/lib/auto/zipnotsafe/**" />
+        </delete>
         <ivy:retrieve sync="true" conf="default" organisation="com.nokia.helium.config"
             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" excludes="jython*.egg" />
+            pattern="${source.root.dir}/external/python/lib/auto/zipsafe/[artifact]-[revision].[ext]" />
+        <ivy:retrieve sync="false" conf="default" organisation="com.nokia.helium.config"
+            module="helium-${config}-config" revision="1.0"
+            inline="true" type="py"
+            pattern="${source.root.dir}/external/python/lib/auto/[artifact].[ext]" />
+        
+        
+        <path id="egg.deps.fileset" >
+            <dirset dir="${source.root.dir}/external/python/lib/auto" includes="*/*.egg" excludes="*/jython*.egg" />
+            <fileset dir="${source.root.dir}/external/python/lib/auto" includes="*/*.egg" excludes="*/jython*.egg" />
+        </path>
         <fmpp sourceFile="template/easy-install.pth.ftl" outputFile="${source.root.dir}/external/python/lib/auto/easy-install.pth">
             <data>
                 project: antProject()
+                ant: antProperties()
             </data>
         </fmpp>
         
-        <fileset id="egg.hlm.deps.fileset" dir="${source.root.dir}">
-            <include name="external/python/**/*.egg" />
-            <exclude name="**/2.5/**" />
-        </fileset>
+        <path id="egg.hlm.deps.fileset">
+            <dirset dir="${source.root.dir}">
+                <include name="external/python/lib/**/*.egg" />
+                <exclude name="**/*amara*" />
+                <exclude name="**/2.5/**" />
+            </dirset>
+            <fileset dir="${source.root.dir}">
+                <include name="external/python/**/*.egg" />
+                <exclude name="**/*amara*" />
+                <exclude name="**/2.5/**" />
+            </fileset>
+        </path>
         <fmpp sourceFile="template/configure_jython.bat.ftl" outputFile="${source.root.dir}/external/python/configure_jython.bat">
             <data>
                 project: antProject()
+                ant: antProperties()
             </data>
         </fmpp>
 
         <fmpp sourceFile="template/configure_jython.sh.ftl" outputFile="${source.root.dir}/external/python/configure_jython.sh">
             <data>
                 project: antProject()
+                ant: antProperties()
             </data>
         </fmpp>
     </target>
@@ -300,8 +367,10 @@
             <fileset dir="${source.root.dir}/sf/doc/src"/>
         </copy>
         <copy todir="${build.temp.dir}/doc/doctmp" overwrite="true" flatten="true">
-            <fileset dir="${source.root.dir}" includes="*/java/*/**/*.rst"/>
-            <fileset dir="${source.root.dir}" includes="*/python/*/**/*.rst"/>
+            <fileset dir="${source.root.dir}" includes="*/java/*/**/*.rst" excludes="*/java/*/doc/**/*.rst" />
+            <fileset dir="${source.root.dir}" includes="*/python/*/**/*.rst" excludes="*/python/*/doc/**/*.rst" />
+            <fileset dir="${source.root.dir}" includes="*/java/*/doc/" />
+            <fileset dir="${source.root.dir}" includes="*/python/*/doc/" />
         </copy>
         <rstMacro version="1.0" src="${build.temp.dir}/doc/doctmp"/>
     </target>
--- a/buildframework/helium/builder/delivery.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/builder/delivery.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -32,14 +32,32 @@
   
     <target name="cleanup-publish-dir" if="publish.ci.dir">
         <tstamp>
-            <format property="before.date" pattern="MM/dd/yyyy hh:mm aa" offset="-1" unit="day"/>
+            <format property="before.date" pattern="MM/dd/yyyy hh:mm aa" offset="-5" unit="day"/>
         </tstamp>
         <echo>Deleting files before: ${before.date}</echo>
-        <delete>
-            <fileset dir="${publish.ci.dir}">
+        <ac:for param="file">
+            <fileset dir="${publish.ci.dir}" includes="**/*.zip">
                 <date datetime="${before.date}" when="before" />
             </fileset>
-        </delete>
+            <sequential>
+                <delete dir="@{file}/../" />
+            </sequential>
+        </ac:for>              
+        <ac:for param="dir">
+            <dirset dir="${publish.ci.dir}" includes="*/*">
+                <date datetime="${before.date}" when="before" />
+            </dirset>
+            <sequential>
+                <ac:if>
+                    <resourcecount when="equal" count="0">
+                        <fileset dir="@{dir}" includes="*" />
+                    </resourcecount>
+                    <then>
+                        <delete dir="@{dir}" />
+                    </then>
+                </ac:if>
+            </sequential>
+        </ac:for>              
     </target>
     
     <target name="create-sf-source-delivery" description="Create the SF source delivery">
@@ -55,6 +73,8 @@
                 <exclude name="external/antlibs2/**" />
                 <exclude name="external/python/configure_jython.*" />
                 <exclude name="external/python/lib/auto/**" />
+                <exclude name="external/cc-customizations/**" />
+                <exclude name="external/CruiseControl/**" />
                 <scriptselector language="jython">
 try:
     if file.isDirectory():
--- a/buildframework/helium/builder/java/config/java_checkstyle_config.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/builder/java/config/java_checkstyle_config.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -75,7 +75,6 @@
         <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"/>
@@ -105,7 +104,9 @@
 
         <!-- Checks for imports                              -->
         <!-- See http://checkstyle.sf.net/config_import.html -->
-        <!--<module name="AvoidStarImport"/>-->
+        <module name="AvoidStarImport">
+            <property name="severity" value="warning"/>
+        </module>
         <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
         <module name="RedundantImport"/>
         <module name="UnusedImports"/>
@@ -113,7 +114,11 @@
 
         <!-- Checks for Size Violations.                    -->
         <!-- See http://checkstyle.sf.net/config_sizes.html -->
-        <!--<module name="LineLength"/>-->
+        <module name="LineLength">
+            <property name="max" value="180"/>
+            <property name="ignorePattern" value="^ *\* *[^ ]+$"/>
+            <property name="severity" value="warning"/>
+        </module>
         <module name="MethodLength"/>
         <module name="ParameterNumber"/>
 
@@ -125,11 +130,14 @@
         <module name="NoWhitespaceAfter"/>
         <module name="NoWhitespaceBefore"/>
         <module name="OperatorWrap"/>
-        <module name="ParenPad"/>
         <module name="TypecastParenPad"/>
-        <module name="WhitespaceAfter"/>-->
+        <module name="WhitespaceAfter"/>
+        <module name="ParenPad">
+            <property name="severity" value="warning"/>
+        </module>
+        -->
         <module name="WhitespaceAround"/>
-
+        <module name="GenericWhitespace"/>
 
         <!-- Modifier Checks                                    -->
         <!-- See http://checkstyle.sf.net/config_modifiers.html -->
@@ -142,7 +150,7 @@
         <module name="AvoidNestedBlocks"/>
         <module name="EmptyBlock"/>
         <!--<module name="LeftCurly">--> 
-        <!--<module name="NeedBraces"/>-->
+        <module name="NeedBraces" />
         <!--<module name="RightCurly">-->
 
 
@@ -194,12 +202,8 @@
         
         <module name="IllegalCatch"/>
         
-        <module name="MethodParamPad">
-            <property name="severity" value="warning"/>
-        </module>
-        <module name="Indentation">
-            <property name="severity" value="warning"/>
-        </module>
+        <module name="MethodParamPad"/>
+        <module name="Indentation"/>
     </module>
 
 </module>
--- a/buildframework/helium/builder/java/macros.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/builder/java/macros.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -40,12 +40,18 @@
 
     
     <target name="resolve">
-        <mkdir dir="${lib.dir}"/> <!-- not usually necessary, ivy creates the directory IF there are dependencies -->
+        <mkdir dir="${lib.dir}" />
+        <mkdir dir="${lib.dir}/zipsafe" />
+        <mkdir dir="${lib.dir}/zipnotsafe" />
+        <delete dir="${lib.dir}/zipnotsafe" includes="**/*" />
+        
         <ivy:settings file="${ivy.settings.dir}/ivysettings.xml" />
         
         <!-- the call to resolve is not mandatory, retrieve makes an implicit call if we don't -->
         <ivy:resolve file="${ivy.file}" log="download-only"/>
-        <ivy:retrieve pattern="${lib.dir}/[artifact].[ext]" log="download-only"/>
+        <ivy:retrieve pattern="${lib.dir}/zipsafe/[artifact].[ext]" type="egg" log="download-only"/>
+        <ivy:retrieve pattern="${lib.dir}/zipsafe/[artifact].[ext]" type="py" log="download-only"/>
+        <ivy:retrieve pattern="${lib.dir}/[artifact].[ext]" type="jar" log="download-only"/>
     </target>
 
     
@@ -191,6 +197,7 @@
                     <jvmarg value="-Demma.coverage.out.file=${module.temp.dir}/coverage_junit.emma" />
                     <jvmarg value="-Demma.coverage.out.merge=true" />
                     <jvmarg value="-Dtestdir=${basedir}" />
+                    <jvmarg value="-Dtest.temp.dir=${test.temp.dir}" />
                     <classpath>
                         <fileset dir="${module.temp.dir}/backup/">
                             <include name="**/*.jar"/>
@@ -273,8 +280,9 @@
                             </instr>
                         </emma>
                         <pathconvert pathsep="${path.separator}" property="python.path">
-                            <fileset dir="${lib.dir}" includes="**/*.egg"/>
-                            <dirset dir="${lib.dir}"/>
+                            <fileset dir="${lib.dir}" includes="zipsafe/*.egg"/>
+                            <dirset dir="${lib.dir}" includes="zipnotsafe/*.egg"/>
+                            <dirset dir="${lib.dir}" includes="zipsafe" />
                         </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 -Dpython.path=${python.path}" />
@@ -329,7 +337,7 @@
         </if>
         <if>
             <resourcecount count="0" when="gt">
-                <fileset dir="${build.temp.dir}/" includes="*/*.emma" />
+                <fileset dir="${components.temp.dir}/" includes="*/*.emma" />
             </resourcecount>
             <then>
                 <emma enabled="true" verbosity="quiet">
--- a/buildframework/helium/builder/python/macros.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/builder/python/macros.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -30,11 +30,17 @@
 
     <target name="resolve">
         <mkdir dir="${lib.dir}" />
+        <mkdir dir="${lib.dir}/zipsafe" />
+        <mkdir dir="${lib.dir}/zipnotsafe" />
+        <delete dir="${lib.dir}/zipnotsafe" includes="**/*" />
+        
         <ivy:settings file="${ivy.settings.dir}/ivysettings.xml" />
         
         <!-- the call to resolve is not mandatory, retrieve makes an implicit call if we don't -->
         <ivy:resolve file="${ivy.file}" log="download-only"/>
-        <ivy:retrieve pattern="${lib.dir}/[artifact].[ext]" log="download-only"/>
+        <ivy:retrieve pattern="${lib.dir}/zipsafe/[artifact].[ext]" type="egg" log="download-only"/>
+        <ivy:retrieve pattern="${lib.dir}/zipsafe/[artifact].[ext]" type="py" log="download-only"/>
+        <ivy:retrieve pattern="${lib.dir}/[artifact].[ext]" type="jar" log="download-only"/>
     </target>
 
     <target name="checkstyle"/>
--- a/buildframework/helium/builder/python/test-macros.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/builder/python/test-macros.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -28,11 +28,12 @@
     
     <target name="pt">
         <pathconvert pathsep=":" property="python.path">
-            <fileset dir="${python.builder.dir}/lib" includes="**/*.egg" excludes="jython*"/>
-            <fileset dir="${lib.dir}" includes="**/*.egg"/>
-            <dirset dir="${lib.dir}"/>
-            <fileset dir="${module.bin.dir}" includes="**/${ant.project.name}*.egg"/>
-            <dirset dir="${basedir}/lib"/>
+            <fileset dir="${python.builder.dir}/lib" includes="*.egg" excludes="jython*"/>
+            <fileset dir="${lib.dir}" includes="zipsafe/*.egg" />
+            <dirset dir="${lib.dir}" includes="zipnotsafe/*.egg" />
+            <dirset dir="${lib.dir}/zipsafe" />
+            <!--<fileset dir="${module.bin.dir}" includes="${ant.project.name}*.egg"/>-->
+            <dirset dir="${basedir}" includes="lib"/>
         </pathconvert>
         <pathconvert pathsep=" " property="python.modules.coverage">
             <fileset dir="${basedir}" includes="**/*.py"/>
@@ -55,9 +56,10 @@
 import sys
 import os
 import shutil
+
 for p in project.getProperty('python.path').split(':'):
-    if 'amara' not in p:
-        sys.path.append(p)
+    sys.path.append(p)
+    
 os.chdir(project.getProperty('lib.dir'))
 if os.path.exists('build'):
     shutil.rmtree('build')
@@ -68,9 +70,11 @@
 
 result = True
 if ' ' in args:
-    result = nose.run(argv=['-v', testdir + 'tests'])
+    argv = ['-v', testdir + 'tests']
+    result = nose.run(argv=argv)
 elif 'cpython' not in args:
-    result = nose.run(argv=['-v', args2])
+    argv = ['-v', args2]
+    result = nose.run(argv=argv)
 print >> sys.stderr
 if not result:
     raise Exception('Jython unittest failure.')
--- a/buildframework/helium/builder/template/configure_jython.bat.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/builder/template/configure_jython.bat.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -19,4 +19,10 @@
 
 ============================================================================
 -->
-set ANT_OPTS=%ANT_OPTS% -Dpython.path=%HELIUM_HOME%\external\python\lib\2.5\jython-2.5-py2.5.egg;<#list project.getReference('egg.hlm.deps.fileset').toString().split(';') as file>%HELIUM_HOME%\${file};</#list>;%PYTHONPATH%
+
+<#list project.getReference('egg.hlm.deps.fileset').toString().split(ant['path.separator']) as file>
+set JYTHONPATH=%JYTHONPATH%;%HELIUM_HOME%\${file?substring(ant['source.root.dir']?length + 1)?replace('/', '\\')};
+</#list>
+set JYTHONPATH=%HELIUM_HOME%\external\python\lib\2.5\jython-2.5-py2.5.egg;%JYTHONPATH%;%PYTHONPATH%
+
+set ANT_OPTS=%ANT_OPTS% -Dpython.path="%JYTHONPATH%"
--- a/buildframework/helium/builder/template/configure_jython.sh.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/builder/template/configure_jython.sh.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -20,4 +20,4 @@
 ============================================================================
 -->
 #!/bin/sh
-export HLM_EGG_JYTHONPATH=<#list project.getReference('egg.hlm.deps.fileset').toString().split(';') as file>${r'$'}HELIUM_HOME/${file}:</#list>
+export HLM_EGG_JYTHONPATH=<#list project.getReference('egg.hlm.deps.fileset').toString().split(ant['path.separator']) as file>${r'$'}HELIUM_HOME/${file?substring(ant['source.root.dir']?length + 1)?replace('\\', '/')}:</#list>
--- a/buildframework/helium/builder/template/easy-install.pth.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/builder/template/easy-install.pth.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -20,7 +20,8 @@
 ============================================================================
 -->
 import sys; sys.__plen = len(sys.path)
-<#list project.getReference('egg.deps.fileset').toString().split(';') as file>
-./${file}
+<#list project.getReference('egg.deps.fileset').toString()?split(ant['path.separator']) as file>
+<#assign path = file?split("[\\\\/]", 'r')>
+./${path[path?size-2]}/${path?last}
 </#list>
 import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)
--- a/buildframework/helium/config/diamonds_config.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-<?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>
-    <template-dir path="${ant['helium.dir']}/tools/common/templates/diamonds" />
-    <output-dir path="${ant['diamonds.build.output.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>
-        <stage name="pre-build" start="prep" end="prebuild" />
-        <stage name="build" start="compile-main" end="compile-main" />
-        <stage name="post-build" start="postbuild" end="zip-localised" />
-        <stage name="release" start="publish-variants" end="final" />
-    </stages>
-    <targets>
-        <target name="diamonds" template-file="tool.xml.ftl" 
-            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"/>
-
-        <!-- if no logfile provided, looks for xml file to send 
-            using <build.id_target_name.xml> file or<target_name.xml> file, 
-            if both doesn't exists does nothing. tries to pass ant properties
-            and sends it.-->
-            
-        <target name="create-bom"/>
-        
-        <target name="post-coverity" template-file="coverity.xml.ftl"
-            logfile="${ant['diamonds.coverity.report.file']}"/>
-        
-        <target name="rndsdk-create-api-descr-xml" template-file="apimetrics.xml.ftl"
-            logfile="${ant['build.drive']}/output/apidescr/apidescr.xml"/>
-            
-        <#if (ant?keys?seq_contains('validate.policy.log'))>
-        <target name="render-validate-policy" template-file="validate-policy-log.xml.ftl" 
-            logfile="${ant['validate.policy.log']}"/>
-        </#if>
-
-        <!-- defer will store all the converted output file and sends only if there any other
-            stage / target starts to send some data to diamonds -->
-        <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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/config/diamonds_config_default.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : diamonds_config_default.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="diamonds-default-config" xmlns:hlm="http://www.nokia.com/helium">
+
+    <property name="diamonds.output.dir" value="${diamonds.build.output.dir}" />
+    <property name="diamonds.smtp.server" value="${email.smtp.server}" />
+    <property name="diamonds.ldap.server" value="${email.ldap.server}" />
+    <property name="diamonds.initializer.targetname" value="diamonds" />
+    <property name="diamonds.tstamp.format" value="yyyy-MM-dd'T'HH:mm:ss" />
+    <property name="diamonds.category" value="${build.family}" />
+
+    <hlm:fmppMessage id="initial.message" sourceFile="${helium.dir}/tools/common/templates/diamonds/diamonds_start.xml.ftl">
+        <data expandProperties="yes">
+            ant: antProperties()
+        </data>
+    </hlm:fmppMessage>
+
+    <hlm:fmppMessage id="final.message" sourceFile="${helium.dir}/tools/common/templates/diamonds/diamonds_finish.xml.ftl">
+        <data expandProperties="yes">
+            ant: antProperties()
+        </data>
+    </hlm:fmppMessage>
+
+    <hlm:fmppMessage id="diamonds.signal.message" sourceFile="${helium.dir}/tools/common/templates/diamonds/diamonds_signal.xml.ftl">
+        <data expandProperties="yes">
+            ant: antProperties()
+        </data>
+    </hlm:fmppMessage>
+
+    <hlm:fmppMessage id="diamonds.status.message" sourceFile="${helium.dir}/tools/common/templates/diamonds/diamonds_status.xml.ftl">
+        <data expandProperties="yes">
+            ant: antProperties()
+        </data>
+    </hlm:fmppMessage>
+
+    <hlm:fmppMessage id="stage.time.message" sourceFile="${helium.dir}/tools/common/templates/diamonds/diamonds_stage.xml.ftl">
+        <data expandProperties="yes">
+            ant: antProperties()
+        </data>
+    </hlm:fmppMessage>
+
+    <hlm:targetMessageTrigger id="log-environment.id" target="log-environment">
+        <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/tool.xml.ftl">
+            <data expandProperties="yes">
+                ant: antProperties()
+                doc: xml(${build.log.dir}/${build.id}_environment.xml)
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="compile-main.id" target="compile-main">
+        <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/faults_metadata_orm.ftl">
+            <data expandProperties="yes">
+                dbPath: ${metadata.dbfile}
+                ant: antProperties()
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="sbs-checksource.id" target="sbs-checksource">
+        <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/sbs-checksource_fmpp.xml.ftl">
+            <data expandProperties="yes">
+                dbPath: ${metadata.dbfile}
+                ant: antProperties()
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="build-roms.id" target="build-roms">
+        <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/build_roms_diamonds.xml.ftl">
+            <data expandProperties="yes">
+                dbPath: ${metadata.dbfile}
+                ant: antProperties()
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="codescanner.id" target="ido-codescanner">
+        <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/codescanner.xml.ftl">
+            <data expandProperties="yes">
+                ant: antProperties()
+                doc: xml(${ido.codescanner.output.dir}/problemIndex.xml)
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="create-bom.id" target="create-bom">
+        <hlm:fileMessage file="${diamonds.build.output.dir}/create-bom.xml" />
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="post-coverity.id" target="post-coverity" >
+        <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/coverity.xml.ftl">
+            <data expandProperties="yes">
+                ant: antProperties()
+                doc: xml(${diamonds.coverity.report.file})
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="ido-validate-confml.id" target="ido-validate-confml">
+        <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/confml-validate.xml.ftl">
+            <data expandProperties="yes">
+                ant: antProperties()
+                doc: xml(${build.drive}/output/logs/post/${build.id}_validate_confml.xml)
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="rndsdk-create-api-descr-xml.id" target="rndsdk-create-api-descr-xml">
+        <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/apimetrics.xml.ftl">
+            <data expandProperties="yes">
+                ant: antProperties()
+                doc: xml(${build.drive}/output/apidescr/apidescr.xml)
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="render-validate-policy.id" target="render-validate-policy" >
+        <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/validate-policy-log.xml.ftl">
+            <data expandProperties="yes">
+                ant: antProperties()
+                doc: xml(${validate.policy.log})
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+
+    <hlm:targetMessageTrigger id="cmt-generate-diamond-summary.id" target="cmt-generate-diamond-summary">
+        <hlm:fileMessage file="${diamonds.build.output.dir}/cmt_summary.xml" />
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="iad-check-pkg-version.id" target="iad-check-pkg-version" >
+        <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/iad-check-pkg-version_fmpp.xml.ftl">
+            <data expandProperties="yes">
+                dbPath: ${metadata.dbfile}
+                ant: antProperties()
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="check-tool-dependencies.id" target="check-tool-dependencies">
+        <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/tool.xml.ftl">
+            <data expandProperties="yes">
+                ant: antProperties()
+                doc: xml(${build.drive}/build/doc/ivy/tool-dependencies-${build.type}.xml)
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+    <!-- the rendering target should import the templates manually and use single fmpp call,
+        but currently it is not doing it. So using a file message to send data to diamonds.-->
+    <hlm:targetMessageTrigger id="ca-generate-diamond-summary.id" target="ca-generate-diamond-summary">
+        <hlm:fileMessage file="${diamonds.build.output.dir}/ca_summary_library.xml" />
+        <hlm:fileMessage file="${diamonds.build.output.dir}/ca_summary_header.xml" />
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="publish.id" target="publish">
+        <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/publish.xml.ftl">
+            <data expandProperties="yes">
+                ant: antProperties()
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+</project>
\ No newline at end of file
--- a/buildframework/helium/config/ivy/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/config/ivy/ivy.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -35,35 +35,19 @@
     </info>
 
     <configurations>
-        <conf name="core" description="Core Helium tools from SymSEE."/>
+        <conf name="core" description="Helium libraries for SF and Nokia."/>
         <conf name="subcon" extends="core" description="Helium libraries for SF and Nokia."/>
         <conf name="core_install" extends="subcon" description="Core Helium libraries."/>
         <conf name="product" extends="core" description="Product build libraries."/>
-        <conf name="ido" extends="core" description="IDO build tools from SymSEE."/>
         <conf name="sf_install" description="SF build libraries."/>
+        <conf name="ido" extends="core" description="IDO build."/>
         <conf name="ido_install" extends="ido" description="IDO build libraries."/>
         <conf name="internal" extends="ido" description="Internal libraries."/>
     </configurations>
     
     <publications/>
     
-    <dependencies defaultconfmapping="core->default;subcon->default;core_install->default;ido_install->default;sf_install->default">
-        <!-- Core dependencies -->
-        <dependency org="SWEPT" name="ant" rev="1.7" conf="core"/>
-        <dependency org="SWEPT" name="java" rev="1.6" conf="core"/>
-        <dependency org="SWEPT" name="perl" rev="5.6.1" conf="core"/>
-        <dependency org="SWEPT" name="python" rev="2.6" conf="core"/>
-
-        <!-- Dependency for product builds -->
-        <dependency org="SWEPT" name="unzip" rev="5.40" conf="product->default"/>
-        
-        <!-- IDO dependencies -->
-        <dependency org="SWEPT" name="7zip" rev="4" 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"/>
-        <dependency org="SWEPT" name="ctc" rev="6.5" conf="ido->default"/>
+    <dependencies defaultconfmapping="subcon->default;core_install->default;ido_install->default;sf_install->default">
         
         <!-- These dependencies are not in Ibiblio Maven2 so they need to be referenced explicitly by url -->
         <dependency org="python" name="eggs_subcon" rev="1.0" conf="subcon"/>
@@ -144,12 +128,6 @@
         <!-- License: BSD -->
         <dependency org="javax.xml.soap" name="saaj-api" rev="1.3" transitive="false" conf="core_install"/>
         
-        <!--
-        sun.mail
-        <dependency org="" name="dsn" rev="latest.integration" transitive="false" conf="core_install"/>
-        <dependency org="" name="smtp" rev="latest.integration" transitive="false" conf="core_install"/>
-        -->
-        
         <!-- Installed using installer -->
         <!-- License: MIT -->
         <dependency org="java" name="jep" rev="2.3-java6" transitive="false" conf="subcon"/>
--- a/buildframework/helium/config/ivy/modules/7zip-4.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : 7zip-4.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="7zip"
-          revision="4"/>
-    <publications>
-        <artifact name="7za" type="exe" versionArgs=""/> 
-    </publications>
-</ivy-module>
\ No newline at end of file
--- a/buildframework/helium/config/ivy/modules/ant-1.7.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : ant-1.7.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="ant"
-          revision="1.7"/>
-    <description>Apache Ant. Used for the core build process.</description>
-    <publications/>
-</ivy-module>
-
--- a/buildframework/helium/config/ivy/modules/ccm-6.5_7.1.ivy.xml	Wed Jun 16 16:51:40 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_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/modules/codescanner-2.0.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : codescanner-2.0.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="codescanner"
-          revision="2.0"/>
-    <publications>
-        <artifact name="codescanner" type="exe" versionArgs=""/> 
-    </publications>
-</ivy-module>
--- a/buildframework/helium/config/ivy/modules/codescanner-2.1.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : codescanner-2.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="codescanner"
-          revision="2.1"/>
-    <publications>
-        <artifact name="codescanner" type="exe" versionArgs=""/> 
-    </publications>
-</ivy-module>
--- a/buildframework/helium/config/ivy/modules/ctc-6.5.ivy.xml	Wed Jun 16 16:51:40 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="ctc"
-          revision="6.5"/>
-    <publications>
-        <artifact name="ctc" type="exe" versionArgs="-h" versionExp=".*6\.5\.[5-9].*"/> 
-    </publications>
-</ivy-module>
-
--- a/buildframework/helium/config/ivy/modules/java-1.6.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : java-1.6.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="java" revision="1.6"/>
-    <publications>
-        <artifact name="java" type="exe" versionArgs="-version"/> 
-    </publications>
-</ivy-module>
--- a/buildframework/helium/config/ivy/modules/java13-1.3.1.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : java13-1.3.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="java13" revision="1.3.1"/>
-    <publications>
-        <artifact name="c:\\apps\\j2sdk_1.3.1_06\\jre\\bin\\java.exe" type="exe" versionArgs="-version"/> 
-    </publications>
-</ivy-module>
--- a/buildframework/helium/config/ivy/modules/perl-5.6.1.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : perl-5.6.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="perl"
-          revision="5.6.1"/>
-    <publications>
-        <artifact name="perl" type="exe" versionArgs="-v"/> 
-    </publications>
-</ivy-module>
\ No newline at end of file
--- a/buildframework/helium/config/ivy/modules/python-2.5.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : python-2.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="python"
-          revision="2.5"/>
-    <publications>
-        <artifact name="python" type="exe" versionArgs="--version" versionExp=".*2\.[56].*"/> 
-    </publications>
-</ivy-module>
\ No newline at end of file
--- a/buildframework/helium/config/ivy/modules/python-2.6.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : python-2.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="python"
-          revision="2.6"/>
-    <publications>
-        <artifact name="python" type="exe" versionArgs="--version" versionExp=".*2\.6(\.\d+)?*"/> 
-    </publications>
-</ivy-module>
\ No newline at end of file
--- a/buildframework/helium/config/ivy/modules/sbs-2.12.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : sbs-2.4.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="sbs"
-          revision="2.12"/>
-    <publications>
-        <artifact name="sbs" ext="bat" type="exe" versionArgs="-version" versionExp=".*2\.12.\.*"/> 
-    </publications>
-</ivy-module>
\ No newline at end of file
--- a/buildframework/helium/config/ivy/modules/symsee-7.2.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : symsee-7.2.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="symsee"
-          revision="7.2"/>
-    
-    <publications/>
-    
-    <dependencies>
-        <dependency org="SWEPT" name="ant" rev="1.7"/>
-        <dependency org="SWEPT" name="java" rev="[1.5.0_12,1.6.0_02]"/>
-        <dependency org="SWEPT" name="perl" rev="5.6.1"/>
-        <dependency org="SWEPT" name="python" rev="2.5"/>
-        <dependency org="SWEPT" name="codescanner" rev="2.0.1"/>
-    </dependencies>
-    
-</ivy-module>
\ No newline at end of file
--- a/buildframework/helium/config/ivy/modules/unzip-5.40.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : unzip-5.40.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="unzip"
-          revision="5.40"/>
-    <publications>
-        <artifact name="unzip" type="exe" versionArgs="-v"/> 
-    </publications>
-</ivy-module>
\ No newline at end of file
--- a/buildframework/helium/config/ivy/tools_ivy_settings.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/config/ivy/tools_ivy_settings.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -23,7 +23,6 @@
 <!-- Ivy settings file for environment tools and dependency libraries. -->
 <ivysettings>
     
-    <typedef name="tool" classname="com.nokia.ivy.ToolResolver"/>
     <typedef name="version-range" classname="org.apache.ivy.plugins.version.VersionRangeMatcher"/>
     
     <caches useOrigin="true"/>
@@ -43,16 +42,6 @@
         <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" />
-            </filesystem>
-            
-            <tool name="artifact-tool-resolver" validate="false">
-                <artifact pattern="[name]"/>
-            </tool>
-        </dual>
     </resolvers>
 
     <triggers>
@@ -73,7 +62,6 @@
 
     
     <modules>
-        <module organisation="SWEPT" name=".*" resolver="tool-resolver" />
         <module organisation="python" name=".*" resolver="download" />
         <module organisation="java" name=".*" resolver="download" />
         <module organisation="helium-external" name=".*" resolver="helium-svn" />
--- a/buildframework/helium/config/metadata_filter_config_default.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/config/metadata_filter_config_default.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -55,16 +55,22 @@
 
     <hlm:metadatafilterset id="filterset.sbs">
         <metadatafilterset refid="filterset.common" />
+        <metadatafilterset refid="filterset.emake" />
     </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.sbs.checksource">
+        <metadatafilter priority="error" regex="^Actual case on disk   ->.*" description="sbs checksource error" />
+    </hlm:metadatafilterset>
 
     <hlm:metadatafilterset id="filterset.compile">
         <metadatafilterset refid="filterset.common" />
         <hlm:metadatafilterset refid="filterset.compile.abld.deprecated" />
+        <metadatafilterset refid="filterset.emake" />
     </hlm:metadatafilterset>
     
     <hlm:metadatafilterset id="filterset.compile.abld.deprecated">
@@ -83,7 +89,13 @@
     </hlm:metadatafilterset>
 
     <hlm:metadatafilterset id="filterset.ant.output">
-        <metadatafilterset refid="filterset.common" />
+        <metadatafilter priority="warning" regex="\d+\)\s*ERROR:.*Traceback.*" description="imaker errors from ant log are treated as warning."/>
+        <metadatafilter priority="warning" regex="ERROR.*:File\s+.*\s+has changed and the package version has not been updated." description="Validation script errors already handled by signaling."/>
+        <metadatafilter priority="error" regex="^ERROR:.*" />
+        <metadatafilter priority="error" regex="^.*is not recognized as an internal or external command.*" />
+        <metadatafilter priority="error" regex="^.*Traceback \(most recent call last\).*" />
+        <metadatafilter priority="error" regex="^Application encountered an unexpected error\.\s*Stopping\.\s*" />
+        <metadatafilter priority="warning" regex="^WARNING:.*" />
     </hlm:metadatafilterset>
 
     <hlm:metadatafilterset id="filterset.imaker">
@@ -125,7 +137,11 @@
     <hlm:metadatafilterset id="filterset.ats">
         <metadatafilterset refid="filterset.common" />
     </hlm:metadatafilterset>
-
+    
+    <hlm:metadatafilterset id="filterset.matti">
+        <metadatafilterset refid="filterset.common" />
+    </hlm:metadatafilterset>
+    
     <hlm:metadatafilterset id="filterset.aste">
         <metadatafilterset refid="filterset.common" />
     </hlm:metadatafilterset>
@@ -135,4 +151,9 @@
         <metadatafilter priority="error" regex=".*file I/O fault.*" description="To capture the error generated by signsis" />
     </hlm:metadatafilterset>
     
+    <hlm:metadatafilterset id="filterset.emake">
+        <metadatafilter priority="error" regex="^ERROR\s+EC\d+:.*$" description="To capture emake errors" />
+        <metadatafilter priority="warning" regex="^WARNING\s+EC\d+:.*$" description="To capture emake warnings" />
+    </hlm:metadatafilterset>
+    
 </project>
--- a/buildframework/helium/config/metadata_regex.csv	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/config/metadata_regex.csv	Fri Aug 13 14:59:05 2010 +0300
@@ -41,7 +41,7 @@
 CRITICAL,.*[Ww]arning:?\s+(#111-D|#1166-D|#117-D|#128-D|#1293-D|#1441-D|#170-D|#174-D|#175-D|#185-D|#186-D|#223-D|#231-D|#257-D|#284-D|#368-D|#414-D|#430-D|#47-D|#514-D|#546-D|#68-D|#69-D|#830-D|#940-D|#836-D|A1495E|L6318W|C2874W|C4127|C4355|C4530|C4702|C4786|LNK4049).*,
 REMARK,.*Command line warning D4025 : .*,
 REMARK,".*:\d+: warning: cannot find matching deallocation function.*",
-WARNING,.*\\\\(?)\(\d+\)\s:\sWarning:\s\(\d+\).*,
+WARNING,.*\\\\(.*?)\(\d+\)\s:\sWarning:\s\(\d+\).*,
 WARNING,(\d+\))?\s.*WARNING:.*,
 WARNING,(BLDMAKE |MAKEDEF )?WARNING:.*,
 WARNING,.*\(\d+\) : warning C.*,
--- a/buildframework/helium/config/signaling_config_default.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/config/signaling_config_default.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -27,7 +27,7 @@
     
     <!-- 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}"
+        <hlm:emailNotifier defaultTemplate="${helium.dir}/tools/common/templates/log/email_new.html.ftl" title="[signal] ${signal.name} - [message] ${signal.message}"
             smtp="${email.smtp.server}" ldap="${email.ldap.server}" notifyWhen="fail">
         </hlm:emailNotifier>
     </hlm:notifierList>
@@ -57,7 +57,7 @@
 
     <!-- Only for backward compatibility -->
     <hlm:notifierList id="defaultSignalAlwaysNotifier">
-        <hlm:emailNotifier templateSrc="${helium.dir}/tools/common/templates/log/email_new.html.ftl" title="[signal] ${signal.name}"
+        <hlm:emailNotifier defaultTemplate="${helium.dir}/tools/common/templates/log/email_new.html.ftl" title="[signal] ${signal.name}"
             smtp="${email.smtp.server}" ldap="${email.ldap.server}" notifyWhen="always">
         </hlm:emailNotifier>
     </hlm:notifierList>
@@ -144,6 +144,10 @@
     <hlm:signalInput id="publishSignalInput" failbuild="defer">
         <hlm:notifierListRef refid="defaultFailNotifier" />
     </hlm:signalInput>
+    
+    <hlm:signalInput id="ConEValidateSignalInput" failbuild="defer">
+        <hlm:notifierListRef refid="defaultFailNotifier" />
+    </hlm:signalInput>
 
     <hlm:signalInput id="testOneSignalInput" failbuild="now" />
 
@@ -167,7 +171,7 @@
         <hlm:notifierListRef refid="defaultFailNotifier" />
     </hlm:signalInput>
 
-    <hlm:signalListenerConfig id="prepWorkAreaSignal" target="prep-work-area" message="Errors happened during Preparing Work Area">
+    <hlm:signalListenerConfig id="prepWorkAreaSignal" target="prep-work-area" message="Errors during Preparing Work Area">
         <hlm:targetCondition>
             <hlm:hasSeverity severity="error" file="${build.cache.log.dir}/signals/${build.id}_ccm_get_input.log.status.xml" />
         </hlm:targetCondition>
@@ -197,7 +201,7 @@
     </hlm:signalListenerConfig>
 
 
-    <hlm:signalListenerConfig id="subconRomsSignal" target="subcon-roms" message="Errors happened during subcon rom image">
+    <hlm:signalListenerConfig id="subconRomsSignal" target="subcon-roms" message="Errors during subcon rom image">
         <hlm:targetCondition>
             <hlm:hasSeverity severity="error" file="${build.signal.status.dir}/${build.id}_subcon_roms.log.status.xml" />
         </hlm:targetCondition>
@@ -226,7 +230,7 @@
         </signalNotifierInput>
     </hlm:signalListenerConfig>
 
-    <hlm:signalListenerConfig id="fotaSignal" target="fota-a-build" message="Fota execution finished">
+    <hlm:signalListenerConfig id="fotaSignal" target="fota-a-build" message="FOTA execution had errors">
         <hlm:targetCondition>
             <hlm:hasSeverity severity="error" file="${build.signal.status.dir}/${build.id}_fota.log.xml" />
         </hlm:targetCondition>
@@ -240,7 +244,7 @@
         </signalNotifierInput>
     </hlm:signalListenerConfig>
 
-    <hlm:signalListenerConfig id="dataPackagingSignal" target="build-icreatordp" message="DP creation finished">
+    <hlm:signalListenerConfig id="dataPackagingSignal" target="build-icreatordp" message="DP creation had errors">
         <hlm:targetCondition>
             <hlm:hasSeverity severity="error" file="${build.signal.status.dir}/${build.id}_dp.log.status.xml" />
         </hlm:targetCondition>
@@ -258,7 +262,7 @@
         <hlm:notifierListRef refid="defaultFailNotifier" />
     </hlm:signalInput>
 
-    <hlm:signalListenerConfig id="atsSignal" target="ats-test" message="ATS creation finished">
+    <hlm:signalListenerConfig id="atsSignal" target="ats-test" message="ATS had errors">
         <targetCondition>
             <hlm:hasSeverity severity="error" file="${build.signal.status.dir}/${build.id}_ats.log.status.xml" />
         </targetCondition>
@@ -272,7 +276,7 @@
         </signalNotifierInput>
     </hlm:signalListenerConfig>
 
-    <hlm:signalListenerConfig id="asteSignal" target="ats-aste" message="ASTE finished">
+    <hlm:signalListenerConfig id="asteSignal" target="ats-aste" message="ASTE had errors">
         <hlm:targetCondition>
             <hlm:hasSeverity severity="error" file="${build.signal.status.dir}/${build.id}_aste.log.status.xml" />
         </hlm:targetCondition>
@@ -286,7 +290,7 @@
         </signalNotifierInput>
     </hlm:signalListenerConfig>
 
-    <hlm:signalListenerConfig id="mattiSignal" target="matti-test" message="ATS MATTI creation finished">
+    <hlm:signalListenerConfig id="mattiSignal" target="matti-test" message="ATS MATTI creation had errors">
         <targetCondition>
             <hlm:hasSeverity severity="error" file="${build.signal.status.dir}/${build.id}_matti.log.status.xml" />
         </targetCondition>
@@ -316,7 +320,7 @@
         <hlm:notifierListRef refid="defaultFailNotifier" />
     </hlm:signalInput>
 
-    <hlm:signalListenerConfig id="signalValidatePolicyInvalidOrMissing" target="render-validate-policy" message="Policy file validation">
+    <hlm:signalListenerConfig id="signalValidatePolicyInvalidOrMissing" target="render-validate-policy" message="Policy file validation had errors">
         <targetCondition>
             <hlm:hasSeverity severity="error" file="${build.signal.status.dir}/${build.id}_validate-policy.summary.status.xml" />
         </targetCondition>
@@ -342,7 +346,7 @@
         <hlm:notifierListRef refid="defaultFailNotifier" />
     </hlm:signalInput>
 
-    <hlm:signalListenerConfig id="getEnvSignal" target="preparation-getenv" message="Getenv finished">
+    <hlm:signalListenerConfig id="getEnvSignal" target="preparation-getenv" message="Getenv had errors">
         <targetCondition>
             <hlm:hasSeverity severity="error" file="${build.signal.status.dir}/${build.id}_getenv.log.status.xml" />
         </targetCondition>
@@ -364,7 +368,7 @@
         <hlm:notifierListRef refid="defaultFailNotifier" />
     </hlm:signalInput>
 
-    <hlm:signalListenerConfig id="signalConfigureQt" target="configure-qt" message="Configuring Qt framework">
+    <hlm:signalListenerConfig id="signalConfigureQt" target="configure-qt" message="Configuring Qt framework had errors">
         <targetCondition>
             <hlm:hasSeverity severity="error" file="${build.signal.status.dir}/${qt.configure.log.name}.status.xml" />
         </targetCondition>
@@ -386,7 +390,7 @@
         <hlm:notifierListRef refid="defaultSignalFailNotifier" />
     </hlm:signalInput>
 
-    <hlm:signalListenerConfig id="sisFilesSignal" target="sisfiles" message="sisfiles finished">
+    <hlm:signalListenerConfig id="sisFilesSignal" target="sisfiles" message="sisfiles had errors">
         <hlm:targetCondition>
             <hlm:hasSeverity severity="error" file="${build.signal.status.dir}/${build.id}_sisfiles.log.status.xml" 
  />
--- a/buildframework/helium/config/version.txt	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/config/version.txt	Fri Aug 13 14:59:05 2010 +0300
@@ -1,5 +1,5 @@
 #Helium version - DO NOT EDIT
 #Fri Dec 18 15:07:03 EET 2009
-last.major.helium.version=9.0
-second.last.major.helium.version=8.0
-helium.version=10.0.0
+last.major.helium.version=10.0.0
+second.last.major.helium.version=9.0
+helium.version=11.0.0
--- a/buildframework/helium/doc/api_rst/project.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/api_rst/project.rst.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -71,6 +71,9 @@
 </#if>
 :Location: <@helium_api_location_path location="${target.location}"/>
 :Scope: ${target.scope}
+<#if target.since?length &gt; 0>
+:Since: ${target.since}
+</#if>
 <#if target.ifDependency?length &gt; 0>
 :Condition: Target **is** run if property defined: :hlm-p:`${target.ifDependency}`
 </#if>
@@ -78,6 +81,7 @@
 :Condition: Target **is not** run if property defined: ``${target.unlessDependency}``
 </#if>
 
+
 <#recurse target.documentation>
 
 <#assign propertyList=target.propertyDependency?sort>   
@@ -90,6 +94,16 @@
 </#if>
 
 
+<#assign signalsList=target.signal?sort>   
+<#if signalsList?size &gt; 0>
+**Signals**
+
+<#list signalsList as signal>
+- ``${signal}``
+</#list>
+</#if>
+
+
 **Target dependencies**
 
 .. raw:: html
@@ -139,6 +153,9 @@
 :Location: <@helium_api_location_path location="${property.location}"/>
 :Type: ${property.type}
 :Scope: ${property.scope}
+<#if property.scope?length &gt; 0>
+:Since: ${property.since}
+</#if>
 :Editable: ${property.editable}
 <#if property.defaultValue?size &gt; 1>
 :Default value: ``${property.defaultValue}``
@@ -180,6 +197,9 @@
 
 :Location: <@helium_api_location_path location="${macro.location}"/>
 :Scope: ${macro.scope}
+<#if macro.scope?length &gt; 0>
+:Since: ${macro.since}
+</#if>
 
 <#recurse macro.documentation>
 
--- a/buildframework/helium/doc/api_rst/properties_list.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/api_rst/properties_list.rst.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -30,11 +30,11 @@
 </#list>
 
 .. csv-table:: Helium properties
-   :header: "Property", "Project", "Summary"
+   :header: "Property", "Project", "Summary", "Default Value"
    
 <#list propertyCache?keys?sort as name>
 <#assign property=propertyCache[name]>
-    ":hlm-t:`${name}`", "${property?parent.name}", "${property.summary?replace("^", "    ", "rm")?replace("\"", "\"\"", "rm")?trim}"
+    ":hlm-t:`${name}`", "${property?parent.name}", "${property.summary?replace("^", "    ", "rm")?replace("\"", "\"\"", "rm")?trim}", "<#if property.defaultValue?length &lt; 25>${property.defaultValue}</#if>"
 </#list>
 
 
--- a/buildframework/helium/doc/default/.templates/sidebar.html	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/default/.templates/sidebar.html	Fri Aug 13 14:59:05 2010 +0300
@@ -1,7 +1,8 @@
-
+<!--
 <h3>API Search</h3>
 <form class="search" action="api/search.html" method="get">
  <input type="text" name="q" size="18" /> <input type="submit" value="Go" />
  <input type="hidden" name="check_keywords" value="yes" />
  <input type="hidden" name="area" value="default" />
-</form>
\ No newline at end of file
+</form>
+-->
\ No newline at end of file
--- a/buildframework/helium/doc/default/conf.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/default/conf.py	Fri Aug 13 14:59:05 2010 +0300
@@ -122,9 +122,9 @@
 #html_use_smartypants = True
 
 # Custom sidebar templates, maps document names to template names.
-html_sidebars = {
-   'index': 'sidebar.html'
-}
+#html_sidebars = {
+#   'index': 'sidebar.html'
+#}
 
 # Additional templates that should be rendered to pages, maps page names to
 # template names.
--- a/buildframework/helium/doc/src/.templates/indexcontent.html.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/.templates/indexcontent.html.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -24,14 +24,12 @@
   <p><strong>Parts of the documentation:</strong></p>
   <table class="contentstable" align="center"><tr>
     <td width="50%">
+<#if !ant?keys?seq_contains("sf")>
       <p class="biglink"><a class="biglink" href="{{ pathto("releasenotes/index") }}">Release notes</a><br/>
          <span class="linkdescr">what's new</span></p>
+</#if>
       <p class="biglink"><a class="biglink" href="{{ pathto("quick_start_guide") }}">Quick Start Guide</a><br/>
          <span class="linkdescr">start here</span></p>
-<#if !(ant?keys?seq_contains("sf"))>
-      <p class="biglink"><a class="biglink" href="http://lmp.nokia.com/lms/lang-en/taxonomy/TAX_Search.asp?UserMode=0&SearchStr=helium">E-learning</a><br/>
-         <span class="linkdescr">multimedia introduction</span></p>
-</#if>
       <p class="biglink"><a class="biglink" href="{{ pathto("feature_list") }}">Feature list</a><br/>
          <span class="linkdescr">what is supported</span></p>
       <p class="biglink"><a class="biglink" href="{{ pathto("manual/index") }}">Manual</a><br/>
@@ -50,6 +48,7 @@
     </td></tr>
   </table>
 
+<#if !ant?keys?seq_contains("sf")>
   <p><strong>Customer documentation:</strong></p>
   <table class="contentstable" align="center"><tr>
     <td width="50%">
@@ -60,5 +59,5 @@
          <span class="linkdescr">development teams</span></p>
     </td></tr>
   </table>
-
+</#if>
 {% endblock %}
--- a/buildframework/helium/doc/src/development/coding_conventions.rst	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/development/coding_conventions.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -73,6 +73,7 @@
    "``hlm-p``", "Properties"
    "``hlm-m``", "Macros"
    
+   It is **not** possible to link to the task or anything in the Java documentation. 
    
 Creating Index References
 `````````````````````````
--- a/buildframework/helium/doc/src/development/developer_guide.rst	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/development/developer_guide.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -63,6 +63,37 @@
 ``/tools/common``
     Common libraries for Java, Perl and Python and XML schemas.
     
+Anatomy of a library project
+----------------------------
+
+::
+   
+   + builder
+      - build.xml
+      - bld.bat
+      - bld
+      + antlibs
+         Ant specific dependencies needed to execute ant properly
+         e.g: Java checkstyle, Code coverage tools
+         The jar in that folder will not be used as compilation dependencies
+   + <layer>
+       + doc
+          General documentation of the project
+       + settings
+          + ivysettings.xml
+       + deps
+          + <org>
+             + <name>
+                + <rev>
+                   - <name>-<rev>.jar
+          + ...
+       + java
+          + component1
+          + componentn ...
+       + python
+          + component1
+          + componentn ...
+   + <layer> ...
 
 Ant script structure
 --------------------
@@ -71,7 +102,7 @@
 
 
 .. index::
-  single: Custom Ant library
+  single: Custom Ant libraries
 
 Custom Ant libraries
 ====================
@@ -85,6 +116,242 @@
 
 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.
 
+Structure
+---------
+
+A component is a self contained structure which implements a set of feature related to a specific domain (e.g: Diamonds, SCM). The following diagram shows 
+the physical structure of a component.
+
+::
+   
+   + <component_name>
+         - build.xml
+         - ivy.xml
+         + src
+            + com
+               + nokia
+                   + helium
+                      + <component_name>
+                          + ant
+                             + taskdefs
+                               source of the Ant tasks
+                             + types
+                               source of the Ant DataType 
+                             + listeners
+                               source of the Ant Listener
+                             + conditions
+                               source of the Ant Conditions
+         + tests
+           - build.xml
+           - bld.bat
+           - bld.sh
+           + antunits
+              - test_xxx.ant.xml* - Unittest implemented using AntUnit  
+           + data
+             data used for the the unittests.
+           + src
+             + com
+                + nokia
+                   + helium
+                      + <component_name>
+                         + tests
+                            source of junit unittests.
+
+build.xml file
+--------------
+
+This is the simplest file you must have at component level, ``<name of the component>`` is really important
+as it defines the future name of the JAR file.
+::
+   
+   <project name="<name of the component>">
+       <description>Component build file.</description>
+       <import file="../../builder/java/macros.ant.xml"/>
+   </project>
+
+ivy.xml file
+------------
+
+The ``ivy.xml`` file is used to gather the relevant dependencies to build your component and to order
+the build of the components correctly::
+    
+   <?xml version="1.0" encoding="ISO-8859-1"?>
+   <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="<name of the component>"
+           status="integration">
+       </info>
+       <dependencies>
+          <dependency name="<name of an another component>" rev="latest.integration" conf="default" />
+          <dependency org="dom4j" name="dom4j" rev="1.2.9" conf="default" />
+       </dependencies>
+   </ivy-module>
+   
+More info about Ivy can be found from: http://ant.apache.org/ivy/
+
+AntUnit files
+-------------
+
+The builder will automatically test all the AntUnit files from ``<component>/tests/antunit``.
+Test must be written by keeping in mind that source tree must remain unmodified after the testing (please use the ``test.temp.dir``).
+
+Test file example::
+   
+   <project name="test-<component>-<feature>" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+      <description>Helium unittests.</description>
+   
+      <target name="setUp">
+         <delete dir="${test.temp.dir}" failonerror="false" />
+         <mkdir dir="${test.temp.dir}" />
+      </target>
+
+      <target name="tearDown">
+         <delete dir="${test.temp.dir}" failonerror="false" />
+         <mkdir dir="${test.temp.dir}" />
+      </target>
+      
+      <target name="test-file-generation">
+         <echo message="foo-bar" file="${test.temp.dir}/demo.txt" />
+         <au:assertFileExists file="${test.temp.dir}/demo.txt" />
+      </target>
+   </project>
+
+Source code license
+-------------------
+
+Each file should include the following license header::
+   
+   /*
+    * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+    * All rights reserved.
+    * This component and the accompanying materials are made available
+    * under the terms of the License "Eclipse Public License v1.0"
+    * which accompanies this distribution, and is available
+    * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+    *
+    * Initial Contributors:
+    * Nokia Corporation - initial contribution.
+    *
+    * Contributors:
+    *
+    * Description:  
+    *
+    */
+
+Documentation
+-------------
+
+All classes and methods must be documented.
+Ant facade classes like task or type must be doclet documented. This implies the javadoc
+to be user and not developer oriented, for instance examples of the task/type usage are really appreciated.
+Also all setter methods visible through Ant must be documented properly using *@ant.required* 
+or *@ant.not-required* javadoc style attributes.
+
+You can find more information on how to document Ant tasks using the doclet plugin on http://doclet.neuroning.com/. 
+
+General coding guidelines
+-------------------------
+
+ * Java components must not use ``getProperty()`` with a hardcoded name coming from helium (e.g.: ``getProject().getProperty("helium.dir"))`` The only exceptions to this are:
+    * Ant listeners (the name of the property must be linked to the listener not to Helium!)
+    * Code under the legacy component.
+ * It is forbidden to share unittest data between components (else it breaks the "self-contained" principle).
+
+
+Ant type and task guidelines
+----------------------------
+
+In order to match as must as  configurability concepts, Helium custom types and tasks must follow  development guidelines as 
+much as possible. You can find then on http://.apache.org/_task_guidelines.html.
+
+Logging
+-------
+
+Developer must preferably use standard Ant logging for any user log output.
+Internal debug logging must be implemented using the log4j framework.
+
+ * ANT Listeners must use log4j logging framework - using Ant logging system might cause some looping issues.
+ * Ant ``Type`` and ``Task`` classes must use the Ant logging mechanism to report to the user.
+ * Generic framework code (that which doesn't link to Ant directly) must use log4j. 
+ * Usage of ``System.out.println()`` should be avoided.
+ * All the unhandled exceptions should be considered as errors and should be reported as such:
+    * use ``log("message", Project.MSG_ERR)`` under Ant.
+    * ``log.error()`` otherwise.
+    * Exceptions to this rule must be clearly commented under the code.
+ * Debug information:
+    * log4j framework (``log.debug()``) must be used to push information to the Helium debug log - so debug information is not
+      directly visible by the user.
+    * The Ant logging framework can also be used to log Type/Task debug info (but log4j is preferred).
+    * The ``printStackTrace()`` method should be used on below scenarios:
+       * At the time of an unknown exception.
+       * Should be used with exceptions other than ``BuildException``.
+       * In case it is difficult to debug the issue with ``Exception.getMessage()``.
+       * Use when debugging complex issues (this doesn't mean the line should remain in the code after development).
+       * When it is required to print the all the information about the occurring ``Exception``. 
+
+
+This is an example on how to use logging::
+   
+   import org.apache.log4j.Logger;
+   
+   class MyClass extends Task {
+       private static Logger log = Logger.getLogger(MyClass.class);
+       
+       public void execute() {
+           log("Executing...");
+           log.debug("some useful debug information.");
+       }
+   }
+
+Please find more information on log4j from the online manual: http://logging.apache.org/log4j/1.2/manual.html.
+
+Debug log
+``````````
+
+The log4j debug output is written to ``hlm_debug.log`` that is stored under ``HELIUM_CACHE_DIR``. This may be set one of these two values::
+
+    %TEMP%\helium\%USERNAME%\%JOB_ID%
+    %TEMP%\helium\%USERNAME%
+    
+Ensure ``TEMP`` is set to a location that is visible to all so the file can be accessed from all accounts.
+
+Exceptions
+----------
+
+Exceptional event reporting and handling is crutial in software development. Developer must make sure it is done accordingly
+to the framework it is currently using:
+
+ * To report a build failure under Ant a ``BuildException`` must be used.
+    But we have to keep in mind that a ``BuildException`` is not tracked because it derives from ``RuntimeException``.
+    So we have to be careful with those and try to limit their puprose to the original usage: Ant build failure.
+ * It is preferable to use a meaningful exception type like ``FileNotFoundException``.
+ * Throwing or catching raw exceptions like ``Exception``, ``RuntimeException`` should be avoided.  
+ 
+Deprecation
+-----------
+
+Deprecation is an inevitable in involving software. The usage of deprecation implies most of the time the replacement of a feature 
+by an newer. To make sure it has the minimum impact on the user, we need to provide both features for at least one major release, so 
+the customer has time to do the relevant modification to migrate. In order to ease as much as possible the deployment and the migration
+to a newer version of any Ant object please follow this guidelines:
+ 
+ * Ant attributes replacement
+    * Use the @Deprecated annotation on the Java code to make sure this method is not in use anymore under our code.
+    * Log a warning message to the user using Ant logging. Please use the following template:
+        * The usage of the '<deprecated_attribute_name>' attribute is deprecated, please consider using the '<new_attribute_name>' attribute.
+    * Try to keep the functionality by adapting the code inside the deprecated setter to use the newer API.
+    
+Example of Ant attribute deprecation for a Java task::
+   
+   @Deprecated
+   public void setDb(File database) {
+       log("The usage of the 'db' attribute is deprecated, please consider using the 'database' attribute.", Project.MSG_WARN);
+       this.database = database;
+   }
+
+ 
 .. index::
   single: How to build the delivery?
 
@@ -196,3 +463,80 @@
     
 A new Ivy config file can be added for a non-jar or egg type file.
 
+
+Feature enable Configuration
+============================
+
+If we are adding new features (which are similar to diamonds, coverage toosl), then those feature needs to enabled in the build sequence using 'feature.enabled' property.
+
+Using feature.enabled property we need to set intermediate property and that intermidiate property should have the name pattern as internal.feature.enabled.
+
+Intermidiate properties should be set using ant <condition> task. Do not use antcontrib <if> task (avoid as much as possible).
+
+We need to trigger the targets using intermidiate property. 
+
+Target based feature testing
+----------------------------
+
+And depending target should be called using intermediate property.
+
+Ex::
+    
+    feature.enabled = true
+    
+    <condition property="internal.feature.enabled">
+        <istrue value="${feature.enabled}"/>
+    </condition>
+    
+    <target name="xyz" if="internal.feature.enabled"/>
+    
+If any property is deprecated then that should be documented in the respective .ant.xml.
+
+Ex::
+
+    <!-- Set to true to enable feature - deprecated: Start using feature.enabled property
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0 
+    -->
+    <property name="old.feature" value="true"/>
+    
+    feature.enabled = true
+    old.feature = false
+    
+    <condition property="internal.feature.enabled">
+        <or>
+            <istrue value="${feature.enabled}"/>
+            <isset property="old.feature"/>
+        </or>
+    </condition>
+    
+    <target name="xyz" if="internal.feature.enabled"/>
+        
+
+Task base feature testing
+-------------------------
+
+If the if task is used inside a target it is then preferable to use the feature.enabled property directly:
+
+::
+   
+   <target name="target-name">
+       ...
+       <if>
+          <or>
+              <istrue value="${feature.enabled}"/>
+              <isset property="old.feature"/>          
+          </or>
+          <then>
+              ...
+          </then>
+          ...
+       </if>
+       ...
+   </target>
+   
+
+Of course the 'old.feature' will be kept for one major release and removed in the next one.
+ 
\ No newline at end of file
--- a/buildframework/helium/doc/src/feature_list.rst	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/feature_list.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -87,6 +87,7 @@
 * Can upload distribution policy file related errors like missing, invalid encoding and error type A, B, C.
 * Can upload List of Illegal APIs names if disable.analysis.tool is not set.
 * Can upload custom build tags.
+* Can upload confml problems.
 * Logging can be skipped if desired.
 
 
@@ -206,6 +207,7 @@
 * Build duplicates detection.
 * Internal exports detection.
 * Codescanner task.
+* Validate the confml files using ConE tool.
 
 .. index::
   single: feature - Publishing
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/doc/src/manual/configuring_features.rst.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,69 @@
+..  ============================================================================ 
+    Name        : configuring_features.rst
+    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:
+    
+    ============================================================================
+
+####################
+Configuring Helium Features
+####################
+
+Introduction
+-------------------------------
+
+This describes how to configure the Helium features.
+
+Helium supports a number of features and this sections gives information on how to configure/enable those features.
+
+We could configure features by enabing/disabling repective properties::
+
+    publishing build results into diamonds.
+    Publishing build artificats.
+    Enabling blocks features.
+    Enabling to use dragonfly and many more.
+
+Properties need to be defined for enabling/disabling the features.
+-------------------------------------------------------------
+<#assign propertyCache = {}>
+<#list doc.antDatabase.project.property as property>
+    <#assign propertyCache = propertyCache + {property.name: property}>
+</#list>
+ 
+.. csv-table:: Feature properties
+   :header: "Property name", "Description", "Allowed value", "Deprecated property"
+   
+<#list propertyCache?keys?sort as name>
+<#assign property=propertyCache[name]>
+<#if name?ends_with(".enabled")>
+    <#assign deprecatedProperty="">
+    <#assign deprecatedMessage="">
+    <#list propertyCache?keys?sort as propName>
+        <#assign deprecatedName=propertyCache[propName]>
+        <#if deprecatedName.summary?contains(name) && deprecatedName.summary?contains("deprecated")>
+            <#assign deprecatedProperty=":hlm-p:`${propName}`,">
+            <#assign deprecatedMessage="${deprecatedName.deprecated}">
+        </#if>
+    </#list>
+    ":hlm-p:`${name}`", "${property.summary?replace("^", "    ", "rm")?replace("\"", "\"\"", "rm")?trim}", "true/false", "${deprecatedProperty}${deprecatedMessage}"
+</#if>
+</#list>
+   
+   
+   
+   
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/doc/src/manual/coverity.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,237 @@
+.. index::
+  module: Coverity Prevent Tool
+  
+========================
+Coverity Prevent Tool
+========================
+
+.. contents::
+
+This document describes requirements and how to run Coverity Prevent tool with sbs builds using Helium. 
+
+Introduction
+-------------------------
+
+- Coverity Prevent analyzes source code to find defects early in the development cycle, reducing the risks associated with coding. Included with Prevent are workflow tools that track and manage defects from initial discovery through final resolution.
+- With high precision, Coverity Prevent analyzes source code and detects critical software defects in the following categories:
+
+ **Quality**
+  Coverity Prevent detects bugs at compile-time that can cause run-time crashes. For example: memory leaks, use-after-free errors, and illegal pointer accesses.
+
+ **Security** 
+  Early during development, Coverity Prevent can detect the security vulnerabilities that hackers can exploit and help you eliminate serious problems, such as denial of service, data or memory corruption, and privilege escalation. Vulnerabilities detected can include buffer overruns, integer overflows, format string errors, and SQL injection attacks.
+        
+ **Concurrency**
+  Coverity Prevent can detect errors in multi-threaded programs that, given the complexity of concurrent programming, can be extremely difficult to track down or reproduce. Detected defects include potential deadlocks or misuse of locks.
+
+Description
+-------------------------
+
+- Coverity Prevent tool is integrated with Helium to measure C++ code coverage.
+- Helium does measure C++ code coverage and gives output results in the format of HTML and errors could be submitted to remote database server.
+- Helium runs coverity prevet tool commands, in sequential using targets. Those targets are defined below..
+- Helium runs Coverity Prevent tool targets if ``coverity.enabled`` is set to ``true``
+- Coverity command can be run using the ``<hlm:coverity>`` task.
+- Coverity task will validate is the command passed to task is starts with ``cov-`` and then it will run the command.
+- Coverity command options can passed through the datatypes ``<hlm:coverityoptions>`` or ``<hlm:arg>``.
+- Below example shows how parameters can be passed to coverity command:
+   
+.. code-block:: xml
+        
+        <hlm:coverity command="cov-link" dir="${build.drive}/">
+            <hlm:arg name="--dir" value="${coverity.inter.dir}"/>
+            <hlm:arg name="--collect" value=""/>
+            <hlm:arg name="-of" value="${coverity.link.dir}/all.link"/>
+        </hlm:coverity>
+        
+.. code-block:: xml
+        
+        <hlm:coverityoptions id="coverity.analyze.options">
+            <hlm:arg name="--dir" value="${coverity.analyze.dir}"/>
+            <hlm:arg name="--all" value=""/>
+            <hlm:arg name="--symbian" value=""/>
+            <hlm:arg name="--append" value=""/>
+            <hlm:arg name="--enable-callgraph-metrics" value=""/>
+        </hlm:coverityoptions>
+        
+        <hlm:coverity command="cov-analyze" dir="${build.drive}/">
+            <hlm:coverityoptions refid="coverity.analyze.options"/>
+        </hlm:coverity>
+
+Helium Targets
+--------------------------
+
+Coverity configure
+::::::::::::::::::::::::
+
+ The ``cov-configure`` command configures a compiler or family of compilers. By default, if no other configuration file or directory is specified, 
+ the configuration is created at <install_dir>/config/coverity_config.xml. Each invocation of cov-configure adds a compiler configuration 
+ in its own subdirectory of the directory containing the coverity_config.xml file, and coverity_config.xml contains an include directive for 
+ that compiler-specific configuration.
+
+- These configuration files are generated by ``run-coverity-configure`` target.
+- If the configuration options need to be changed, then define a ``coverity.config.options`` reference in the respective configuration file.
+
+Ex:
+
+.. code-block:: xml
+        
+        <hlm:coverityoptions id="coverity.config.options">
+            <hlm:arg name="--config" value="${coverity.config.dir}/coverity_config.xml"/>
+            <hlm:arg name="--template" value=""/>
+            <hlm:arg name="--comptype" value="armcc"/>
+            <hlm:arg name="--compiler" value="armcc.exe"/>
+        </hlm:coverityoptions>
+  
+Coverity build
+::::::::::::::::::::::::
+
+ The cov-build command intercepts all calls to the compiler invoked by the build system.
+
+ Usually the cov-build command name and option can prefix the original build command. However, if the build command depends on features 
+ of the command shell that usually invokes it, such as certain shell variables or non-alphanumeric arguments, you can invoke it using a 
+ wrapper script. This preserves the original behavior because the build command is again invoked directly by the kind of shell on which 
+ it depends. 
+
+- Coverity Prevent tool build command integrated with SBS task. 
+- Coverity task extends the "sbstask", so what ever the arguments we pass for sbstask will remain same for coverity tool also.
+- For example 
+
+.. code-block:: xml
+        
+        <hlm:coveritybuild  sbsinput="@{sbs.input}" 
+                            sysdeffile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml"
+                            layerpatternsetref="${sbs.patternset}" 
+                            workingdir="${build.drive}/" 
+                            execute="true"
+                            failonerror="false"
+                            outputlog="${sbs.log.file}" 
+                            cleanlog = "${sbs.clean.log}"
+                            erroroutput="${sbs.log.file}.sbs_error.log"
+                            statslog="${sbs.log.file}.info.xml">
+                <hlm:coverityoptions refid="coverity.build.options"/>
+        </hlm:coveritybuild>
+     
+- In above example Coverity Prevent tool is integrated with sbs using task "coveritybuild".
+- This task is slightly difference from sbstask as it accepts the coverity tool parameters required while running coverity tool.
+- In the above example we have mentioned "coverity.build.options" which are required for cov-build command.
+- coverityoptions datatype will follow below syntax.
+
+.. code-block:: xml
+        
+        <hlm:coverityoptions id="coverity.build.options">
+            <arg name="--config" value="${coverity.config.dir}/coverity_config.xml"/>
+            <arg name="--dir" value="${coverity.inter.dir}"/>
+            <arg name="--auto-diff" value=""/>
+            <arg name="--preprocess-first" value=""/>
+            <arg name="--record-only" value=""/>
+        </hlm:coverityoptions>
+
+- Internally "coveritybuild" task will run the "cov-build" with parameters passed with "<hlm:coverityoptions>" datatype and sbs commands.
+- Above arguments are passed by default in helium. If it is required to remove/change the default parameters (by helium)into cov-build, 
+  we need to override the datatype "coverityoptions".
+
+- Command resulted for above example is shown below with "@{sbs.input} = dfs_build_input_armv5".
+
+    | cov-build.exe --auto-diff  --record-only  --config Y:/output/coverity/config/coverity_config.xml 
+    | --preprocess-first  --dir Y:/output/coverity/intermediate sbs -s Y:/output/build/canonical_system_definition_dfs_build.xml 
+    | -c armv5 -k --logfile Y:/output/logs/compile/ido_helloworld_tb92_blr_ci_9.2.30_armv5_dfs_build.log 
+    | --makefile=Y:/output/logs/compile/ido_helloworld_tb92_blr_ci_9.2.30_armv5_dfs_build
+
+Coverity emit
+::::::::::::::::::::::::
+ 
+ The ``cov-emit`` command parses a source file and outputs it into a directory (emit repository) that can later be analyzed with ``cov-analyze``. 
+ The ``cov-emit`` command is typically called by ``cov-translate``, which is in turn typically called by ``cov-build`` (``cov-emit`` is a low-level command 
+ and is not normally called directly). 
+ 
+ Re-running the cov-build with replay option will reduce the build time by ~ 20% 
+ 
+ - Coverity emit command run by target ``run-coverity-emit``.
+ 
+Coverity analyze
+::::::::::::::::::::::::
+
+ Sometimes the same file is compiled several times with different command-line options. Due to the inherent difficulty of tracking linkage 
+ information, the ``cov-analyze`` command cannot automatically determine which files are linked together. To avoid errors in function call 
+ resolution (especially in C code, which doesn't have any name mangling), use the ``cov-link`` command to get this information. 
+ 
+ and also
+ 
+ working with link files is faster than collecting data from the intermediate directory multiple times
+ 
+ So run the ``cov-link`` commands and analyze the database using ``cov-analyze`` command.
+ 
+- Coverity code analysis is done by target ``run-coverity-analyze``.
+- Analysis is done in 2 stages. First runs ``cov-link`` and then ``cov-analyze`` command.
+
+**cov-link command**
+
+  1. Run cov-link with the --collect and -of options to collect linkage information on all files compiled in an emit directory.
+  
+  2. Create one or more additional link files by filtering information using either an argument or a portion of the pathname that 
+     was used during command-line compilation. Compiled files are identified based on:
+   * A portion of the pathname to the file when it was compiled. Use the -s option to specify a Perl regular expression to use when looking 
+     at the pathname.
+   
+   * The options given on the command line when it was compiled. Use the -a, -r, -na, and -nr options to group by command-line options.
+    
+  3. Use the link files created in the previous steps, and the emit repository in the original intermediate directory, to create a new intermediate directory with an emit repository with resolved function calls. Then use cov-analyze on the new intermediate directory.
+
+**cov-analyze**
+ command analyzes the code previously parsed and emitted into an intermediate directory. The result is a set of XML files 
+ in the <intermediate_directory>/c/output directory that contain a description of the defects. The cov-analyze command also stores analysis 
+ information in the intermediate directory, which speeds up future runs.
+
+ A log file with information about the checkers used in the analysis, including notices of crashes, is created at 
+ <intermediate_directory>/c/output/analysis-log.txt.gz. 
+
+ Note that behind the scenes, cov-analyze actually calls cov-internal-analyze-c to run the analysis. If you look at running processes, 
+ both cov-analyze and cov-internal-analyze-c are listed. During an analysis, cov-analyze monitors cov-internal-analyze-c, and can 
+ seamlessly restart the analysis in case of failure.
+ 
+ - ``coverity.analyze.options`` could be set if it required to disable/enable the checkers.
+
+  .. code-block:: xml
+ 
+    <hlm:coverityoptions id="coverity.analyze.options">
+        <hlm:arg name="--dir" value="${coverity.analyze.dir}"/>
+        <hlm:arg name="--all" value=""/>
+        <hlm:arg name="--symbian" value=""/>
+        <hlm:arg name="--append" value=""/>
+        <hlm:arg name="--enable-callgraph-metrics" value=""/>
+    </hlm:coverityoptions>
+
+
+Coverity defect manager
+:::::::::::::::::::::::
+
+ The ``cov-commit-defects`` command takes defects stored as *.errors.xml files in the <intermediate directory>/<domain>/output directory and 
+ commits them to the Defect Manager database as a new product run. Once committed, you can view the defects in the Defect Manager alongside 
+ the source code that generated them. The defect XML files are created by the ``cov-analyze``command, which scan and evaluate the 
+ preprocessed source files in the <intermediate directory>/<domain>/emit directory.
+        
+- Coverity defects can be submitted to a remote coverity defect database using the ``run-commit-defects`` target.
+- To enable the target user should set ``coverity.commit.defects.enabled`` to ``true`` and ``coverity.enabled`` to ``true``.
+- Username and Password for the Coverity Defect Manager  should be set in the `.netrc file`_::
+
+    machine coverity login <user name> password <password>
+
+.. csv-table:: Coverity feature flags
+   :header: "Flags to set", "Action performed", "Allowed value"
+   
+   ":hlm-t:`coverity.commit.defects.enabled`", "If user wants to commit the defects using existing intermediate folder and run target 
+   ``run-commit-defects``", "true/false"
+   ":hlm-t:`coverity.commit.defects.enabled` and `coverity.enabled`", "If user want to generate the intermididate folder and then commit 
+   defects, first intermediate folders will get generated and defects will commited into database. By default this build sequence will 
+   happen.", "true/false"
+
+- Below properties must be set for defects to be committed to the database:
+
+.. csv-table:: Coverity defect manager properties
+   :header: "Property name", "Description"
+   
+   ":hlm-t:`coverity.defect.manager.server`", "Coverity defect manager server/IP address. Ex: server.domain.extension or 100.220.530.101"
+   ":hlm-t:`coverity.defect.manager.port`", "Coverity defect manager HTTP port number"
+   ":hlm-t:`coverity.defect.manager.product`", "Coverity defect manager product/platform to submit the coverity errors."
+   
--- a/buildframework/helium/doc/src/manual/debugging.rst	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-..  ============================================================================ 
-    Name        : debugging.rst
-    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:
-    
-    ============================================================================
-
-.. index::
-  module: Debugging
-
-#########
-Debugging
-#########
-
-
-.. contents::
-   
-   
-.. _Troubleshooting-label:
-
-Troubleshooting
-===============
-
-This section contains details on how to find errors and problems within helium itself (for helium contributors) and within the configuration files
-and ANT tasks etc. for the build managers and subcons.
-
-.. index::
-  single: Output Logs
-
-.. index::
-  single: Logs
-
-Output Logs
------------
-
-When running Helium there are a large number of output logs created to assist with debugging and determining what has been performed and what has not. All of the log files are generated in the build area, usually under the ``output\logs`` folder. Many of the logs are created in different formats, e.g. the Bill Of Materials log file exists as .html, .xml and .txt (all the same information). Some of the logs exist as different file formats giving different information at various stages of the activity, e.g. the cenrep logs in which case generally the .html files are a summary of the whole activity.
-For mc product builds the following log files are created 
-where xx is the name of the build + build id e.g. 12.030_ant_env.log
-where nn is the variant number(s):
-
-.. csv-table:: build logs
-   :header: "Log name", "File type", "Purpose"
-
-    "xx_ant_env.log", "Ant environment Log", "Lists all the environment varaibles"
-    "xx_ant_build.log", "Ant build Log", "Lists all the ANT tasks that have been executed"
-    "xx_BOM.html", "BOM listing", "lists all the projects and tasks included in the build"
-    "xx_bom_delta.html", "BOM delta listing", "lists all the delta projects and tasks included in the build"
-    "xx.roms.log", "ROM creation log", "lists all the .iby, .txt, etc. files included in the ROM creation, including missing files"
-    "xx_scan2.html", "Compilation summary", "Lists all the components built with their errors (0 if no errors)"
-    "xx_zips_scan2.html", "zips creation log", "lists all the zip files created and whether there are any errors"
-    "hlm_listener.log", "Helium debug log", "Helium debug log for internal data [Helium runtime information] and it can be found inside HELIUM_CACHE_DIR folder"
-    "hlm_debug.log", "Helium debug log", "Helium debug log for all other debug log (all java logs) and it can be found inside HELIUM_CACHE_DIR folder"
-       
-Targets and their logs
-;;;;;;;;;;;;;;;;;;;;;;
-
-.. image:: dependencies_log.grph.png
-
-.. index::
-  single: Troubleshooting
-
-
-Troubleshooting - Helium
-------------------------
-
-Use the :hlm-t:`diagnostics` command provide debugging information when reporting problems. It lists all the environment variables and all the Ant 
-properties and all the Ant targets within Helium so you might find it useful to pipe it to a log file so that you can read all of the output at your leisure::
-
-    hlm diagnostics > diag.log
-
-.. index::
-  single: Failing early in the build
-
-Failing early in the build
-;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-The :hlm-p:`failonerror` property is defined in ``helium.ant.xml`` and has the default value ``false``. It is used to control whether the ``<exec>`` 
-tasks fail when errors occur or the build execution just continues. The build can be configured to "fail fast" if this is set to ``true``, 
-either on the command line or in a build configuration before importing ``helium.ant.xml``. Given that many ``exec`` tasks will return an 
-error code due to build errors, it is not recommended to set this to true for regular builds.
-
--- a/buildframework/helium/doc/src/manual/index.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/manual/index.rst.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -33,8 +33,8 @@
    retrieving
 </#if>
    configuring
+   configuring_features
    running
-   debugging
    stages
    stage_matti
 <#if !ant?keys?seq_contains("sf")>
@@ -43,10 +43,11 @@
    iad
 </#if>
    documentation
-   quality
    cruisecontrol
    sysdef3
+   messaging
    metrics
+   coverity
 
    
    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/doc/src/manual/messaging.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,92 @@
+Messaging
+=========
+
+Currently the communication to external services (diamonds, ats, internal logging framework)
+are done within helium as REST / SOAP client, which is not scalable and had limitations
+and lot of overheads in terms communication with those external services.
+
+ 
+
+Overview
+--------
+
+The messaging framework is aimed to address this issue by defining
+the input using which the data is exchanged to the external system. Currently the
+main focus is to define the input format for the messaging framework and to work with
+existing framework. In the future directly interact with the messaging system to exchange
+data to the external system.
+
+Currently there are three types of messages could be defined, which works with
+existing system to send data to diamonds.
+
+Text Message
+~~~~~~~~~~~~
+
+Any text message to be sent to the diamonds could be possible with the message type
+definition. Example to use it as below,
+
+
+.. code-block:: xml
+
+      <hlm:textMessage id="initial-message" text="<diamonds-build>
+    <schema>21</schema><build>
+    <category>ido_BtDo_tb101-release_btservices_sbs-ec</category>
+    <name>IDO_BtDo_tb101-release_btservices_10.1.69</name>
+    <started>2010-08-04T13:23:54</started></build></diamonds-build>" />
+
+File Message
+~~~~~~~~~~~~
+
+Any file which needs to be sent using messaging framework could be defined 
+using file message. Example to use it as below,
+
+.. code-block:: xml
+
+      <hlm:fileMessage id="initial-message" file="${build.output.dir}/initial-message.xml" />
+      
+Here the the attribute value for file attribute pointing to the file to be sent is forwarded
+to the destination.
+
+
+FMPP Message
+~~~~~~~~~~~~
+
+Any message generated by processing the fmpp template data could be defined using
+the fmpp message. Example is,
+
+.. code-block:: xml
+
+      <hlm:fmppMessage target="diamonds" sourceFile="tool.xml.ftl"&gt;
+          <data expandProperties="yes"&gt;
+          ant: antProperties()
+          </data>
+      </hlm:fmppMessage>
+      
+The above definition format is similar to fmpp conversion task, except that it has
+limitation to convert one file using the template. Before sending data, the input template
+is converted and an internal file message is created with the converted file path and 
+sent to the diamonds.
+
+TargetMessage Trigger
+~~~~~~~~~~~~~~~~~~~~~
+
+TargetMessageTrigger type maps a message to a particular target and could be used to
+send the input message for the target execution. Example is as below,
+
+
+.. code-block:: xml
+
+
+        <hlm:targetMessageTrigger id="codescanner.id" target="ido-codescanner">
+            <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/codescanner.xml.ftl">
+                <data expandProperties="yes">
+                    ant: antProperties()
+                    doc: xml(${ido.codescanner.output.dir}/problemIndex.xml)
+                </data>
+            </hlm:fmppMessage>
+        </hlm:targetMessageTrigger>
+ 
+
+In the above example, the target ido-codescanner contains an fmpp message. When
+the target executes the target ido-codescanner at the end of execution which converts
+the input file using template and the output file is sent to diamonds.
\ No newline at end of file
--- a/buildframework/helium/doc/src/manual/metrics.rst	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/manual/metrics.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -61,7 +61,7 @@
     <property name="diamonds.host" value="new.diamonds.server"/>*  
     <property name="diamonds.port" value="newport"/>*
 
-* If you define the property :hlm-p:`skip.diamonds` to ``true`` Diamonds is disabled.
+* If you define the property :hlm-p:`diamonds.enabled` to ``false`` Diamonds is disabled.
 
 
 .. index::
--- a/buildframework/helium/doc/src/manual/running.rst	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/manual/running.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -98,25 +98,12 @@
 
 
 .. index::
-  single: Tools version checking
-
-Tools version checking
-======================
-
-Tool version checking can be performed to ensure that all tools have correct versions present. At the same time, a path setting file will be created. Calling this file will add tools into path, so hard coding paths is no longer needed.
-
-To perform checking run the command::
-
-  hlm check-tool-versions
-
-
-.. index::
   single: Build output
 
 Build output
 ================
 
-When a build is running the targets being executed are listed on the screen there is no need to pipe this to a file as the ant targets are logged in the   ``\*_main.ant.log`` for product and IDO builds. Once the build is complete it will say on the screen whether the build was successful or failed. If it has failed it should give an indication of where and why it failed on the screen but for more information you must examine the output logs. If the build says it was successfult this does not necessarily mean that the build compiled all components successfully, you must examine the logs to check that all is compiled and linked correctly. See :ref:`Troubleshooting-label` for information on logs and where they kept.
+When a build is running the targets being executed are listed on the screen there is no need to pipe this to a file as the ant targets are logged in the   ``\*_main.ant.log`` for product and IDO builds. Once the build is complete it will say on the screen whether the build was successful or failed. If it has failed it should give an indication of where and why it failed on the screen but for more information you must examine the output logs. If the build says it was successfult this does not necessarily mean that the build compiled all components successfully, you must examine the logs to check that all is compiled and linked correctly.
 
 The result of the build (compiled files, linked (flash) files etc.) are  stored in the usual folders and directories under the ``\epoc32`` directory.
 
@@ -156,9 +143,9 @@
 
 Diamonds
 --------
-Logging to the Diamonds metrics database can be disabled by setting the property:: 
+Logging to the Diamonds metrics database could be disabled by setting the property:: 
 
-    skip.diamonds=true
+    diamonds.enabled=false
 
 Internal data
 -------------
@@ -166,9 +153,33 @@
 Helium can collect internal data about builds for the purpose of improving support. This can be disabled by setting an environment variable::
 
     set HLM_DISABLE_INTERNAL_DATA=1
+    
+Output logs
+-----------
+
+There are a large number of output logs created to assist with understanding the build and determining what has been performed and what has not. All of the log files are generated in the build area, usually under the ``output/logs`` folder. Many of the logs are created in different formats, e.g. the Bill Of Materials log file exists as HTML, XML and text (all the same information). Some of the logs exist as different file formats giving different information at various stages of the activity, e.g. the cenrep logs in which case generally the HTML files are a summary of the whole activity.
+
+.. image:: dependencies_log.grph.png
 
  
 Troubleshooting
 ================
 
-See :ref:`Troubleshooting-label` for information on how to find faults with Helium.
\ No newline at end of file
+This section contains details on how to find errors and problems within Helium itself (for helium contributors) and within the configuration files
+and Ant tasks etc. for build managers and subcons.
+
+Diagnostics
+------------
+
+Use the :hlm-t:`diagnostics` command provide debugging information when reporting problems. It lists all the environment variables and all the Ant 
+properties and all the Ant targets within Helium::
+
+    hlm diagnostics > diag.log
+
+Failing early in the build
+---------------------------
+
+The :hlm-p:`failonerror` property is defined in ``helium.ant.xml`` and has the default value ``false``. It is used to control whether the ``<exec>`` 
+tasks fail when errors occur or the build execution just continues. The build can be configured to "fail fast" if this is set to ``true``, 
+either on the command line or in a build configuration before importing ``helium.ant.xml``. Given that many ``exec`` tasks will return an 
+error code due to build errors, it is not recommended to set this to true for regular builds.
\ No newline at end of file
--- a/buildframework/helium/doc/src/manual/stage_ats.rst.inc.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/manual/stage_ats.rst.inc.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -63,20 +63,23 @@
 The test generation code expects ``.pkg`` file in the ``group`` directory of test component to be compiled, to get the paths of the files 
 (can be data, configuration, initialization, etc files) to be installed and where to install on the phone. 
 
+
 Three STEPS to setup ATS with Helium
 --------------------------------------
 
 **Step 1: Configure System Definition Files**
  If the tsrc directory structure meets the criteria defined in the `new API test automation guidelines`_, then test components 
- should be included in the System Definition files; **layers** in ``layers.sysdef.xml`` file and **configuration** in ``build.sysdef.xml`` 
- file (`Structure of System Definition files`_).
+ should be included in the System Definition files.
+
+**System Definition Files supporting layers.sysdef.xml**
+ **layers** in ``layers.sysdef.xml`` file and **configuration** in ``build.sysdef.xml`` file (`Structure of System Definition files version 1.4`_).
  
  <#if !(ant?keys?seq_contains("sf"))>
 .. _`new API test automation guidelines`: http://s60wiki.nokia.com/S60Wiki/Test_Asset_Guidelines
-.. _`Structure of System Definition files`: http://delivery.nmp.nokia.com/trac/helium/wiki/SystemDefinitionFiles
+.. _`Structure of System Definition files version 1.4`: http://delivery.nmp.nokia.com/trac/helium/wiki/SystemDefinitionFiles
 </#if>
 
-A template of layer in layers.sysdef.xml
+A template of layer in layers.sysdef.xml for system definition files
 
 .. code-block:: xml
 
@@ -96,6 +99,47 @@
 * In the above, two modules means two drop files will be created; ``module`` may have one or more ``unit``
 * By using property ``exclude.test.layers``, complete layers can be excluded and the components inside that layer will not be included in the AtsDrop. This property is a comma (,) separated list
 
+**System Definition Files version 3.0 (SysDefs3)** (new Helium v.10.79)
+ The `structure of System Definition files version 3.0`_ is different than previous versions of system definition files. In SysDefs3, package definition files are used for components specification. Instead of layers naming conventions, filters are used to identify test components and test types, for example: "test, unit_test, !api_test" etc.
+
+<#if !(ant?keys?seq_contains("sf"))>
+.. _`structure of System Definition files version 3.0`: http://wikis.in.nokia.com/view/SWManageabilityTeamWiki/PkgdefUse
+<#else>
+.. _`structure of System Definition files version 3.0`: sysdef3.rst
+</#if>
+
+An example template for defining test components in a package definition file.
+
+.. code-block:: xml
+
+      <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_test">
+              <unit bldFile="test_nested/tc1/group" mrp="" />
+          </component>
+          
+          <component id="tc2" name="tc2" purpose="development" filter="test">
+            <meta rel="testbuild">
+              <group name="drop_tc2_and_tc3" /> 
+            </meta>
+            <unit bldFile="test_nested/tc2/group" mrp="" />
+          </component>
+          
+          <component id="tc3" name="tc3" purpose="development" filter="test">
+            <meta rel="testbuild">
+              <group name="drop_tc2_and_tc3" /> 
+            </meta>
+            <unit bldFile="test_nested/tc3/group" mrp="" />
+          </component>
+          
+        </collection>
+      </package>
+
+* Filter "test" must be specified for every test component. If it is not specified, the component will not be considered as a test component.
+* <meta>/<group> are now used to group test components, it work in the same way as <module>...<module> in sysdef v1.4 works. The components having same group name are grouped together. 
+  Separate drop files are created for different groups. In the above example, if only 'test' is selected, then two drop files will be created, one with tc1 and the other one with tc2 and tc3. 
+
 
 **Step 2: Configure ATS properties in build.xml**
 
@@ -114,35 +158,37 @@
 .. csv-table:: ATS Ant properties
    :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.server`", "[must]", "For example: ``4fix012345`` or ``catstresrv001.company.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`", "[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`", "[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.report.type`", "[allowed]", "Value of the ats email report, for ATS4 set to 'no_attachment' so email size is reduced"
+    ":hlm-p:`ats.flashfiles.minlimit`", "[allowed]", "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`", "[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.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``."
+    ":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}``."
-    ":hlm-p:`ats.multiset.enabled`", "[allowed]", "Should be ``True`` so a set is used for each pkg file in a component, this allows tests to run in parallel on several devices."
+    ":hlm-p:`ats.multiset.enabled`", "[allowed]", "Should be ``true`` so a set is used for each pkg file in a component, this allows tests to run in parallel on several devices."
     ":hlm-p:`ats.diamonds.signal`", "[allowed]", "Should be ``true`` so at end of the build diamonds is checked for test results and Helium fails if tests failed."
     ":hlm-p:`ats.delta.enabled`", "[allowed]", "Should be ``true`` so only ADOs changed during :hlm-t:`do-prep-work-area` are tested by ATS."
     ":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."
+    ":hlm-p:`ats.singledrop.enabled`", "[allowed]", "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."
+    ":hlm-p:`ats.java.importer.enabled`", "[allowed]", "If set to 'true', for older uploader is used for ats3 which shows improved error message."
+    ":hlm-p:`ats.test.filterset`", "[allowed]", "(new Helium v.10.79)Contains a name of test filterset (see example below). A filterset is used to select/unselect test components. The filter(s) is/are effective when the same filters are defined in the package definition file for component(s)."
 
 An example of setting up properties:
 
@@ -159,12 +205,19 @@
     <property name="ats.target.platform" value="armv5 urel" />
     <property name="ats.test.timeout" value="60" />
     <property name="ats.testrun.name" value="${r'$'}{build.id}_${r'$'}{ats.product.name}_${r'$'}{major.version}.${r'$'}{minor.version}" />
-    <property name="ats.trace.enabled" value="False" />
-    <property name="ats.ctc.enabled" value="False" />
-    <property name="ats.obey.pkgfiles.rule" value="False" />
+    <property name="ats.trace.enabled" value="false" />
+    <property name="ats.ctc.enabled" value="false" />
+    <property name="ats.obey.pkgfiles.rule" value="false" />
     <property name="ats.report.location" value="${r'$'}{publish.dir}/${r'$'}{publish.subdir}" />
     <property name="eunit.test.package" value="" />
     <property name="eunitexerunner.flags" value="/E S60AppEnv /R Off" />
+    <property name="ats.test.filterset" value="sysdef.filters.tests" />
+
+    <hlm:sysdefFilterSet id="sysdef.filters.tests">
+        <filter filter="test, " type="has" />
+        <config file="bldvariant.hrh" includes="" />
+    </hlm:sysdefFilterSet>
+    
         
         ...
         <import file="${r'$'}{helium.dir}/helium.ant.xml" />
@@ -183,7 +236,7 @@
 
 **STEP 3: Call target ats-test**
 
-To execute the target, a property should be set(``<property name="enabled.ats" value="true" />``).
+To execute the target, a property should be set(``<property name="ats.enabled" value="true" />``).
 
 Then call :hlm-t:`ats-test`, which will create the ATSDrop.zip (test package).
 
@@ -221,7 +274,7 @@
 Skip Sending AtsDrop to ATS
 ----------------------------
 
-By setting property of ``skip.ats.sending``, ``ats-test`` target only creates a drop file, and does not send the drop (or package) to ATS server.
+By setting property of ``ats.upload.enabled`` to ``false``, ``ats-test`` target only creates a drop file, and does not send the drop (or package) to ATS server.
 
 Customizing the test.xml in ATS
 --------------------------------
@@ -239,11 +292,11 @@
 * **prepostaction.xml** goes before first postaction
 * **postpostaction.xml** goes after last postaction
 
-The files must be in the directory custom under the tsrc folder processed. 
+The files must be in the directory 'custom' under the 'tsrc' or 'group' folder to be processed. 
 
 The files need to be proper XML snippets that fit to their place. In case of an error an error is logged and a comment inserted to the generated XML file.
 
-A postaction section customization file ( prepostaction.xml or postpostaction.xml) could look like this
+A postaction section customization file (prepostaction.xml or postpostaction.xml) could look like this
 
 .. code-block:: xml
 
@@ -376,7 +429,7 @@
 .. csv-table:: ATS Ant properties
    :header: "Property name", "Edit status", "Description"
    
-    ":hlm-p:`ats.server`", "[must]", "For example: ``4fio00105`` 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.server`", "[must]", "For example: ``4fio00105`` or ``catstresrv001.company.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. For example: ``\\\\trwsem00\\some_folder\\``. In case, ``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:`ats.aste.testasset.location`", "[must]", "Location of SW Test Assets, if the TestAsset is not packaged then it is first compressed to a ``.zip`` file. It should be a UNC path."
--- a/buildframework/helium/doc/src/manual/stage_compilation.rst.inc.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/manual/stage_compilation.rst.inc.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -105,9 +105,7 @@
 ------------------
 
 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**. 
+
+   It is possible to enable CTC instrumenting while building with SBSv2. To proceed you need to define the ``ctc.enabled`` 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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/doc/src/manual/stage_final.rst.inc.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,64 @@
+<#--
+============================================================================ 
+Name        : stage_final.rst.inc.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:
+
+============================================================================
+-->
+
+.. index::
+  single: Stage - Final operations
+
+Stage: Final operations
+=======================
+
+Final operation are steps which could happen at the workflow completion.
+
+
+Running a target at build completion
+------------------------------------
+
+Helium offers the possibility to run a final target despite any error which could occur during the build.
+The configuration of the target is done using the **hlm.final.target** property.
+
+e.g:
+::
+   
+   <property name="hlm.final.target" value="my-final-target" />
+   
+
+Running action on failure
+-------------------------
+
+The signaling framework will automatically run all signalExceptionConfig in case of Ant failure at the
+end of the build. 
+
+This example shows how simple task can be run in case of failure: 
+::
+   
+       <hlm:signalExceptionConfig id="signal.exception.config">
+           <hlm:notifierList>
+               <hlm:executeTaskNotifier>
+                   <echo>Signal: ${r'$'}{signal.name}</echo>
+                   <echo>Message: ${r'$'}{signal.message}</echo>
+                   <runtarget target="build-log-summary" />
+               </hlm:executeTaskNotifier>
+           </hlm:notifierList>
+       </hlm:signalExceptionConfig>
+   
+
+
--- a/buildframework/helium/doc/src/manual/stage_matti.rst.inc.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/manual/stage_matti.rst.inc.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -32,9 +32,9 @@
 .. _`and the matti website`:  http://trmatti1.nmp.nokia.com/help/
 </#if>  
 
-The set up of parameters is very similar (a few less parameters and it mostly uses ATS values). The main difference is that once the drop file has been uploaded to the ATS server it uses MATTI to perform the tests and not ATS, this is achieved by calling the MATTIDrop.py script instead of the ATSE or ATS scripts when creating the drop file (the drop file contains the flash files and the ruby tests to be performed).
+The set up of parameters is very similar (a few less parameters and it mostly uses ATS values). The main difference is that once the drop file has been uploaded to the ATS server it uses MATTI to perform the tests (the drop file contains the flash files, the ruby tests/sip profiles, data files, sis files and/or parameters file in xml format).
 
-The following parameters are the ones that are not listed in the ATS parameters, all other parameters required are as listed in the ATS section above.
+The following parameters are the ones that are not listed in the ATS parameters, all other parameters required are as listed in the ATS section above, which include :hlm-p:`ats.server`, :hlm-p:`ats.email.list`, :hlm-p:`ats.email.format`, :hlm-p:`ats.email.subject`, :hlm-p:`ats.testrun.name`, :hlm-p:`ats.product.name`, :hlm-p:`ats.flashfiles.minlimit`, :hlm-p:`ats.flash.images` and :hlm-p:`ats.upload.enabled`. 
 
 * [must] - must be set by user
 * [recommended] - should be set by user but not mandatory
@@ -43,34 +43,32 @@
 .. csv-table:: ATS Ant properties
    :header: "Property name", "Edit status", "Description"
    
-    ":hlm-p:`matti.scripts`", "[must]", "The location of the test scrips as ruby test files i.e. .rb files."
-    ":hlm-p:`enabled.matti`", "[must]", "Enable MATTI testing to occur, if not present the target :hlm-t:`matti-test` will not run."
-    ":hlm-p:`template.file`", "[must]", "Location of the matti template file."
-    ":hlm-p:`ats.sis.images.dir`", "[recommended]", "Location of the the SIS installation files needed to flash to the phone (if required and present)."
-    ":hlm-p:`ats.script.type`", "[must]", "Always set to import, this means the MATTI server will retrieve the tests."
-    ":hlm-p:`ats.image.type`", "[must]", "Image type whether Engineering English or localised."
-    ":hlm-p:`ats.flashfiles.minlimit`", "[must]", "Minimum number of flash files required in to add to the drop file."
-    ":hlm-p:`tsrc.data.dir`", "[recommended]", "Test source code data directory. only required for testing the Ant MATTI code."
-    ":hlm-p:`ta.flag.list`", "[recommended]", "TA flag list."
+    ":hlm-p:`matti.enabled`", "[must]", "Enable MATTI testing to occur, if not present the target :hlm-t:`matti-test` will not run."
+    ":hlm-p:`matti.asset.location`", "[must]", "The location of the test asset where  ruby test files, sip profiles, hardware data etc are located."
+    ":hlm-p:`matti.test.profiles`", "[must]", "Test profiles to be executed should be mentioned in this comma separated list e.g., 'bat, fute'."
+    ":hlm-p:`matti.sierra.enabled`", "[must]", "Mustbe set to 'true' if sierra is engine is to be used. If true .sip files are used otherwise .rb (ruby) files are used to execute tests-"
+    ":hlm-p:`matti.test.timeout`", "[must]", "Separate but similar property to ats.test.timeout for matti tests."
+    ":hlm-p:`matti.parameters`", "[must]", "Matti test parameters can be given through Matti parameters xml file."
+    ":hlm-p:`matti.sis.files`", "[must]", "There are special sis files required to execute with test execution. This is a comma separated list in which several sis files can be deifned in a certain format like '<src file on build area>#<destination to save the file on memory card>#<destination to install the file>' e.g. <x:\dir1\abc.sis#f:\memory1\abc.sis#c:\phonememory\private\abc.sis>"
+    ":hlm-p:`matti.sierra.parameters`", "[must]", "Sierra parameters are set using this property. e.g. '--teardown --ordered'"
+    ":hlm-p:`matti.template.file`", "[allowed]", "Location of the matti template file."
     
 
 All you need to do is setup the following parameters:
 
 .. code-block:: xml
 
-    <property name="enabled.matti" value="true" />
-    <property name="matti.scripts" value="${r'$'}{helium.dir}/tests/data/matti" />
-    <property name="template.file" value="${r'$'}{helium.dir}\tools\common\python\lib\ats3\matti\template\matti_demo.xml" />
-    <property name="ats.sis.images.dir" location="${r'$'}{build.drive}\output\matti\sis" />
-    <property name="ats.product.name" value="" />
-    <property name="ats.test.timeout" value="60" />
+    <property name="matti.enabled" value="true" />
+    <property name="matti.asset.location" value="\\server\share\matti_testcases, x:\dir\matti_testcases," />
+    <property name="matti.test.profiles" value="bat, fute" />
+    <property name="matti.sierra.enabled" value="true" />
+    <property name="matti.test.timeout" value="1200" />
+    <property name="matti.parameters" value="x:\dir\mattiparameters\matti_parameters.xml" />
+    <property name="matti.sis.files" value="x:\sisfiles\abc.sis#f:\data\abc.sis#C:\abc.sis, x:\sisfiles\xyz.sis#f:\data\xyz.sis#F:\xyz.sis" />
+    <property name="matti.sierra.parameters" value="--ordered" />
+    <property name="matti.template.file" value="x:\dir\templates\matti_template_2.xml" />
+    
 
-    <!--ATS testing properties-->
-    <property name="tsrc.data.dir" value="data_rom" />
-    <property name="ats.ctc.enabled" value="True" />
-    <property name="ats.flashfiles.minlimit" value="2"/>
-    <property name="ta.flag.list" value="TA_M, TA_MU, TA_MMAPPFW,TA_MM"/>
-    <property name="ats.server" value="12345675:80"/>
 
 In order to upload and view the test run you need to have a valid user ID and password that matches that in your ``.netrc`` file. To create the account open a web browser window and enter the name of the ats.server with /ATS at the end e.g. http://123456:80/ATS. Click on the link in the top right hand corner to create the account. To view the test run once your account is active you need to click on the 'test runs' tab.
 
@@ -79,4 +77,4 @@
 
     hlm -Dbuild.number=001 -Dbuild.drive=z: -Dcore.build.version=001 matti-test
 
-If it displays the message 'Testdrop created!' with the file name then the ``MATTIDrops.py`` script has done what it needs to do. The next thing to check is that the drop file has been uploaded to the ATS server OK. If that is performed successfully then the rest of the testing needs to be performed by the ATS server. There is also a ``test.xml`` file created that contains details needed for debugging any problems that might occur. To determine if the tests have run correctly you need to read the test run details from the server.
+If it displays the message 'Matti testdrop created successfully!', script has done what it needs to do. The next thing to check is that the drop file has been uploaded to the ATS server OK. If that is performed successfully then the rest of the testing needs to be performed by the ATS server. There is also a ``test.xml`` file created that contains details needed for debugging any problems that might occur. To determine if the tests have run correctly you need to read the test run details from the server.
--- a/buildframework/helium/doc/src/manual/stage_preparation.rst.inc.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/manual/stage_preparation.rst.inc.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -29,9 +29,31 @@
 At the start of preparation a new directory is created for the build and subst'ed to ``build.drive``. If a directory with this name already exists, it is renamed to have a current timestamp on the end.
 
 .. index::
-  single: How to prepare the build area?
+  single: How to prepare the build area
+
+How to prepare the build area
+-----------------------------
+
+Helium supports the creation of an environment based on a release store in a network drive. The main requirement from that release is to publish release metadata with the content.
+
+.. csv-table:: Ant properties to modify
+   :header: "Property", "Description", "Values"
 
-How to prepare the build area?
-------------------------------
+   ":hlm-p:`s60.grace.server`", "UNC path to network drive.", ""
+   ":hlm-p:`s60.grace.service`", "Service name.", ""
+   ":hlm-p:`s60.grace.product`", "Product name.", ""
+   ":hlm-p:`s60.grace.release`", "Regular expression to match release under the product directory.", ""
+   ":hlm-p:`s60.grace.revision`", "Regular expresion to match a new build revision", "e.g: (_\d+)?"
+   ":hlm-p:`s60.grace.cache`",
+   ":hlm-p:`s60.grace.checkmd5.enabled`",
+   ":hlm-p:`s60.grace.usetickler`", "Validate the release based on the tickler.", "true, false(default)"
 
-TODO
+Once configured you can invoke Helium:
+
+    > hlm -Dbuild.number=1 -Dbuild.drive=X: ido-update-build-area-grace
+
+    > dir X:
+    ...
+    ...
+
+You should then have the latest/mentioned release un-archived under the X: drive.
\ No newline at end of file
--- a/buildframework/helium/doc/src/manual/stages.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/manual/stages.rst.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -1,6 +1,6 @@
 <#--
 ============================================================================ 
-Name        : 
+Name        : stages.rst.ftl
 Part of     : Helium 
 
 Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
@@ -46,7 +46,7 @@
 
 .. include:: stage_releasing.rst.inc
 
-Cenrep creation (S60 3.2.3 - 5.x)
+Stage: Cenrep creation (S60 3.2.3 - 5.x)
 =================================
 <#if !(ant?keys?seq_contains("sf"))>
 See: http://configurationtools.nmp.nokia.com/builds/cone/docs/cli/generate.html?highlight=generate
@@ -109,10 +109,57 @@
 
 .. include:: stage_matti.rst.inc
 
-Check EPL License header.
+Stage: 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
+* This will validate source files present on the build area to contain EPL license. 
+
+.. index::
+  single: Compatibility Analyser (CA)
+
+Stage: Compatibility Analyser
+=============================
+
+The Compatibility Analyser is a tool used to compare **binary** header and library files to ensure that the version being checked has not made any changes to the interfaces which may cause the code to not work correctly. Helium supplies a target that calls this Compatibility Analyser. Users who wish to use this tool first need to read the CA user guide found under SW DOcMan at: http://bhlns002.apac.nokia.com/symbian/symbiandevdm.nsf/WebAllByID2/DSX05526-EN/s60_compatibility_analyser_users_guide.doc. 
+
+The Compatibility Analyser is supplied as part of SymSEE, there is a wiki page for the tool found at http://s60wiki.nokia.com/S60Wiki/Compatibility_Analyser. As part of the configuration a default BC template file has been provided at Helium\tools\quality\CompatibilityAnalyser\config_template.txt make the necessary changes to this file (as described in the user guide). The supplied example file works with CA versions 2.0.0 and above which is available in SymSEE version 12.1.0 and above. The configurations that will need changing are:
+ * BASELINE_SDK_DIR
+ * BASELINE_SDK_S60_VERSION
+ * CURRENT_SDK_DIR
+ * REPORT_FILE_HEADERS
+ * REPORT_FILE_LIBRARIES
+
+The default configuration is supplied as part of tools\quality\CompatibilityAnalyser\compatibilty.ant.xml where there are a few properties that need to be set (overriding of these is recommended in your own config file):
+
+
+.. csv-table:: Compatibility Analyser Ant properties
+   :header: "Property name", "Edit status", "Description"
+   
+    ":hlm-p:`ca.enabled`", "[must]", "Enables the bc-check and ca-generate-diamond-summary targets to be executed, when set to true."
+    ":hlm-p:`bctools.root`", "[must]", "Place where the CheckBC and FilterBC tools are e.g. C:/APPS/carbide/plugins/com.nokia.s60tools.compatibilityanalyser.corecomponents_2.0.0/BCTools"
+    ":hlm-p:`default.bc.config`", "[must]", "Place where the CheckBC default configuration file is, it is copied from this location to the output folder for use by checkBC.py e.g. helium/tools/quality/compatibility_analyser/ca_config_template.txt"
+    ":hlm-p:`bc.config.dir`", "[must]", "The bc_config_template.txt file (default configuration file) will be copied from the folder it is saved in within helium to the location named in this property where it will be used ( in conjunction with the bc.config.file property). e.g. build.log.dir/bc"
+    ":hlm-p:`bc.config.file`", "[must]", "The bc_config_template.txt file (default configuration file) will be copied from the folder it is saved in within helium to the location named and named as defined in this property where it will be used. You need to make sure this is not the same name as any other IDO or person using the build area. e.g. bc.config.dir/bc.config"
+    ":hlm-p:`bc.check.libraries.enabled`", "[must]", "Enables the Binary Comparison for libraries when set to 'true'."
+    ":hlm-p:`lib.param.val`", "[must]", "Defines the parameter that checkBC.py is called with  -la (all libraries checked)  or -ls lib (single library checked) (lib = the name of library to check) or -lm file.name (multiple libraries checked) the file.name is a file that contains the names of the library(ies) to be checked."
+    ":hlm-p:`bc.check.headers.enabled`", "[must]", "Enables the Binary Comparison for headers when set to 'true'."
+    ":hlm-p:`head.param.val`", "[must]", "Defines the parameter that checkBC.py is called with -ha (all headers checked) or -hs file (single header checked) (file= name of header file to check) or -hm file.name (multiple headers checked) the file.name is a file that contains the names of the header(s) to be checked"
+    ":hlm-p:`bc.check.report.id`", "[must]", "Adds this to the CA output file name to give it a unique name."
+    ":hlm-p:`ido.ca.html.output.dir`", "[must]", "Defines the location of CA output and the input for the diamonds creation target. e.g. build.log.dir/build.id_ca"
+
+and then run the target:
+
+::
+
+    hlm -Dbuild.number=nnn -Dbuild.drive=n: bc_check
+
+where nnn is the build number and n: is the substed drive letter.
+
+The results of the output from the analysis are placed in the \output\logs\BC folder under the substed build drive and are called libraries_report_?.xml and headers_report_?.xml, the reports can be viewed in Web-formatted layout, based on the BBCResults.xsl stylesheet which is copied to the \output\logs\BC folder on the build drive.
+
+
+.. include:: stage_final.rst.inc
+
--- a/buildframework/helium/doc/src/manual/sysdef3.rst	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/manual/sysdef3.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -8,7 +8,7 @@
 How to configure the feature?
 -----------------------------
 
-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 
+In order to enable the support you first need to define the **sysdef3.enabled** property to true. Then define a resource ant element to either 
 point to root definition file or package_definition.xml file.
 
 e.g:
@@ -40,8 +40,8 @@
 
 
 The package_map.xml must be placed under the root directory of the package. **package_definition.xml** without package_map.xml are considered
-as invalid by the copying step and the automatic root system definition file generation. Only exception to that rule is for the virtual package
-which must be placed exactly two level under the root of the package.
+as invalid by the copying step and the automatic root system definition file generation. Only exception to that rule is for the vendor 
+package_definition.xml which must be placed exactly two level under the root of the package.
 
 Example of package structure:
 ::
--- a/buildframework/helium/doc/src/quick_start_guide.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/doc/src/quick_start_guide.rst.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -56,7 +56,7 @@
 
 <#if ant?keys?seq_contains("sf")>
 
-.. include:: sf.html
+.. include:: sf.rst
 
 </#if>
 
Binary file buildframework/helium/external/python/lib/2.5/4Suite_XML-1.0.2-py2.5-win32.egg has changed
Binary file buildframework/helium/external/python/lib/2.5/PyXML-0.8.4-py2.5-win32.egg has changed
Binary file buildframework/helium/external/python/lib/2.5/lxml-1.3.5-py2.5-win32.egg has changed
Binary file buildframework/helium/external/python/lib/2.6/4Suite_XML-1.0.2-py2.6-win32.egg has changed
Binary file buildframework/helium/external/python/lib/2.6/PyXML-0.8.4-py2.6-win32.egg has changed
--- a/buildframework/helium/external/python/lib/2.6/easy-install.pth	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-import sys; sys.__plen = len(sys.path)
-./PyXML-0.8.4-py2.6-win32.egg
-./4Suite_XML-1.0.2-py2.6-win32.egg
-./lxml-2.2.1-py2.6-win32.egg
-import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)
Binary file buildframework/helium/external/python/lib/2.6/lxml-2.2.1-py2.6-win32.egg has changed
Binary file buildframework/helium/external/python/lib/common/Amara-1.2.0.1-py2.5.egg has changed
Binary file buildframework/helium/external/python/lib/common/Jinja2-2.2.1-py2.5.egg has changed
--- a/buildframework/helium/external/python/lib/common/easy-install.pth	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/external/python/lib/common/easy-install.pth	Fri Aug 13 14:59:05 2010 +0300
@@ -1,14 +1,11 @@
 import sys; sys.__plen = len(sys.path)
 ./setuptools-0.6c5-py2.5.egg
-./Amara-1.2.0.1-py2.5.egg
 ./coverage-2.85-py2.5.egg
 ./docutils-0.5-py2.5.egg
 ./epydoc-3.0beta1-py2.5.egg
 ./Jinja-1.2-py2.5-win32.egg
-./Jinja2-2.2.1-py2.5.egg
 ./nose-0.11.1-py2.6.egg
 ./mocker-0.10.1-py2.5.egg
-./path-2.2-py2.5.egg
 ./pygments-0.10-py2.5.egg
 ./simplejson-1.9.1-py2.5-win32.egg
 ./sphinx-0.5.1-py2.5.egg
Binary file buildframework/helium/external/python/lib/common/path-2.2-py2.5.egg has changed
--- a/buildframework/helium/external/python/lib/common/threadpool.py	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,337 +0,0 @@
-
-# -*- coding: UTF-8 -*-
-"""Easy to use object-oriented thread pool framework.
-
-A thread pool is an object that maintains a pool of worker threads to perform
-time consuming operations in parallel. It assigns jobs to the threads
-by putting them in a work request queue, where they are picked up by the
-next available thread. This then performs the requested operation in the
-background and puts the results in a another queue.
-
-The thread pool object can then collect the results from all threads from
-this queue as soon as they become available or after all threads have
-finished their work. It's also possible, to define callbacks to handle
-each result as it comes in.
-
-The basic concept and some code was taken from the book "Python in a Nutshell"
-by Alex Martelli, copyright 2003, ISBN 0-596-00188-6, from section 14.5
-"Threaded Program Architecture". I wrapped the main program logic in the
-ThreadPool class, added the WorkRequest class and the callback system and
-tweaked the code here and there. Kudos also to Florent Aide for the exception
-handling mechanism.
-
-Basic usage:
-
->>> pool = TreadPool(poolsize)
->>> requests = makeRequests(some_callable, list_of_args, callback)
->>> [pool.putRequest(req) for req in requests]
->>> pool.wait()
-
-See the end of the module code for a brief, annotated usage example.
-
-Website : http://chrisarndt.de/en/software/python/threadpool/
-"""
-
-__all__ = [
-  'makeRequests',
-  'NoResultsPending',
-  'NoWorkersAvailable',
-  'ThreadPool',
-  'WorkRequest',
-  'WorkerThread'
-]
-
-__author__ = "Christopher Arndt"
-__version__ = "1.2.3"
-__revision__ = "$Revision: 1.5 $"
-__date__ = "$Date: 2006/06/23 12:32:25 $"
-__license__ = 'Python license'
-
-# standard library modules
-import sys
-import threading
-import Queue
-
-# exceptions
-class NoResultsPending(Exception):
-    """All work requests have been processed."""
-    pass
-
-class NoWorkersAvailable(Exception):
-    """No worker threads available to process remaining requests."""
-    pass
-
-# classes
-class WorkerThread(threading.Thread):
-    """Background thread connected to the requests/results queues.
-
-    A worker thread sits in the background and picks up work requests from
-    one queue and puts the results in another until it is dismissed.
-    """
-
-    def __init__(self, requestsQueue, resultsQueue, **kwds):
-        """Set up thread in daemonic mode and start it immediatedly.
-
-        requestsQueue and resultQueue are instances of Queue.Queue passed
-        by the ThreadPool class when it creates a new worker thread.
-        """
-
-        threading.Thread.__init__(self, **kwds)
-        self.setDaemon(1)
-        self.workRequestQueue = requestsQueue
-        self.resultQueue = resultsQueue
-        self._dismissed = threading.Event()
-        self.start()
-
-    def run(self):
-        """Repeatedly process the job queue until told to exit."""
-
-        while not self._dismissed.isSet():
-            # thread blocks here, if queue empty
-            request = self.workRequestQueue.get()
-            if self._dismissed.isSet():
-                # if told to exit, return the work request we just picked up
-                self.workRequestQueue.put(request)
-                break # and exit
-            try:
-                self.resultQueue.put(
-                    (request, request.callable(*request.args, **request.kwds))
-                )
-            except:
-                request.exception = True
-                self.resultQueue.put((request, sys.exc_info()))
-
-    def dismiss(self):
-        """Sets a flag to tell the thread to exit when done with current job.
-        """
-
-        self._dismissed.set()
-
-
-class WorkRequest:
-    """A request to execute a callable for putting in the request queue later.
-
-    See the module function makeRequests() for the common case
-    where you want to build several WorkRequests for the same callable
-    but with different arguments for each call.
-    """
-
-    def __init__(self, callable, args=None, kwds=None, requestID=None,
-      callback=None, exc_callback=None):
-        """Create a work request for a callable and attach callbacks.
-
-        A work request consists of the a callable to be executed by a
-        worker thread, a list of positional arguments, a dictionary
-        of keyword arguments.
-
-        A callback function can be specified, that is called when the results
-        of the request are picked up from the result queue. It must accept
-        two arguments, the request object and the results of the callable,
-        in that order. If you want to pass additional information to the
-        callback, just stick it on the request object.
-
-        You can also give a callback for when an exception occurs. It should
-        also accept two arguments, the work request and a tuple with the
-        exception details as returned by sys.exc_info().
-
-        requestID, if given, must be hashable since it is used by the
-        ThreadPool object to store the results of that work request in a
-        dictionary. It defaults to the return value of id(self).
-        """
-
-        if requestID is None:
-            self.requestID = id(self)
-        else:
-            try:
-                hash(requestID)
-            except TypeError:
-                raise TypeError("requestID must be hashable.")
-            self.requestID = requestID
-        self.exception = False
-        self.callback = callback
-        self.exc_callback = exc_callback
-        self.callable = callable
-        self.args = args or []
-        self.kwds = kwds or {}
-
-
-class ThreadPool:
-    """A thread pool, distributing work requests and collecting results.
-
-    See the module doctring for more information.
-    """
-
-    def __init__(self, num_workers, q_size=0):
-        """Set up the thread pool and start num_workers worker threads.
-
-        num_workers is the number of worker threads to start initialy.
-        If q_size > 0 the size of the work request queue is limited and
-        the thread pool blocks when the queue is full and it tries to put
-        more work requests in it (see putRequest method).
-        """
-
-        self.requestsQueue = Queue.Queue(q_size)
-        self.resultsQueue = Queue.Queue()
-        self.workers = []
-        self.workRequests = {}
-        self.createWorkers(num_workers)
-
-    def createWorkers(self, num_workers):
-        """Add num_workers worker threads to the pool."""
-
-        for i in range(num_workers):
-            self.workers.append(WorkerThread(self.requestsQueue,
-              self.resultsQueue))
-
-    def dismissWorkers(self, num_workers):
-        """Tell num_workers worker threads to quit after their current task.
-        """
-
-        for i in range(min(num_workers, len(self.workers))):
-            worker = self.workers.pop()
-            worker.dismiss()
-
-    def addWork(self, callable, args=None, kwds=None, requestID=None, callback=None, exc_callback=None, block=True, timeout=0):
-        request = WorkRequest(callable, args, kwds, requestID, callback, exc_callback)
-        self.putRequest(request, block, timeout)
-        
-    def putRequest(self, request, block=True, timeout=0):
-        """Put work request into work queue and save its id for later."""
-
-        assert isinstance(request, WorkRequest)
-        self.requestsQueue.put(request, block, timeout)
-        self.workRequests[request.requestID] = request
-
-    def poll(self, block=False):
-        """Process any new results in the queue."""
-
-        while True:
-            # still results pending?
-            if not self.workRequests:
-                raise NoResultsPending
-            # are there still workers to process remaining requests?
-            elif block and not self.workers:
-                raise NoWorkersAvailable
-            try:
-                # get back next results
-                request, result = self.resultsQueue.get(block=block)
-                # has an exception occured?
-                if request.exception and request.exc_callback:
-                    request.exc_callback(request, result)
-                # hand results to callback, if any
-                if request.callback and not \
-                  (request.exception and request.exc_callback):
-                    request.callback(request, result)
-                del self.workRequests[request.requestID]
-            except Queue.Empty:
-                break
-
-    def wait(self):
-        """Wait for results, blocking until all have arrived."""
-
-        while 1:
-            try:
-                self.poll(True)
-            except NoResultsPending:
-                break
-
-# helper functions
-def makeRequests(callable, args_list, callback=None, exc_callback=None):
-    """Create several work requests for same callable with different arguments.
-
-    Convenience function for creating several work requests for the same
-    callable where each invocation of the callable receives different values
-    for its arguments.
-
-    args_list contains the parameters for each invocation of callable.
-    Each item in 'args_list' should be either a 2-item tuple of the list of
-    positional arguments and a dictionary of keyword arguments or a single,
-    non-tuple argument.
-
-    See docstring for WorkRequest for info on callback and exc_callback.
-    """
-
-    requests = []
-    for item in args_list:
-        if isinstance(item, tuple):
-            requests.append(
-              WorkRequest(callable, item[0], item[1], callback=callback,
-                exc_callback=exc_callback)
-            )
-        else:
-            requests.append(
-              WorkRequest(callable, [item], None, callback=callback,
-                exc_callback=exc_callback)
-            )
-    return requests
-
-################
-# USAGE EXAMPLE
-################
-
-if __name__ == '__main__':
-    import random
-    import time
-
-    # the work the threads will have to do (rather trivial in our example)
-    def do_something(data):
-        time.sleep(random.randint(1, 5))
-        result = round(random.random() * data, 5)
-        # just to show off, we throw an exception once in a while
-        if result > 3:
-            raise RuntimeError("Something extraordinary happened!")
-        return result
-
-    # this will be called each time a result is available
-    def print_result(request, result):
-        print "**Result: %s from request #%s" % (result, request.requestID)
-
-    # this will be called when an exception occurs within a thread
-    def handle_exception(request, exc_info):
-        print "Exception occured in request #%s: %s" % \
-          (request.requestID, exc_info[1])
-
-    # assemble the arguments for each job to a list...
-    data = [random.randint(1, 10) for i in range(20)]
-    # ... and build a WorkRequest object for each item in data
-    requests = makeRequests(do_something, data, print_result, handle_exception)
-
-    # or the other form of args_lists accepted by makeRequests: ((,), {})
-    data = [((random.randint(1, 10), ), {}) for i in range(20)]
-    requests.extend(
-      makeRequests(do_something, data, print_result, handle_exception)
-    )
-
-    # we create a pool of 3 worker threads
-    main = ThreadPool(3)
-
-    # then we put the work requests in the queue...
-    for req in requests:
-        main.putRequest(req)
-        print "Work request #%s added." % req.requestID
-    # or shorter:
-    # [main.putRequest(req) for req in requests]
-
-    # ...and wait for the results to arrive in the result queue
-    # by using ThreadPool.wait(). This would block until results for
-    # all work requests have arrived:
-    # main.wait()
-
-    # instead we can poll for results while doing something else:
-    i = 0
-    while 1:
-        try:
-            main.poll()
-            print "Main thread working..."
-            time.sleep(0.5)
-            if i == 10:
-                print "Adding 3 more worker threads..."
-                main.createWorkers(3)
-            i += 1
-        except KeyboardInterrupt:
-            print "Interrupted!"
-            break
-        except NoResultsPending:
-            print "All results collected."
-            break
-
Binary file buildframework/helium/external/python/lib/linux/4Suite-XML-1.0.2.tar.gz has changed
Binary file buildframework/helium/external/python/lib/linux/PyXML-0.8.4.tar.gz has changed
--- a/buildframework/helium/external/python/lib/linux/easy-install.pth	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-import sys; sys.__plen = len(sys.path)
-./PyXML-0.8.4.egg
-./4Suite_XML-1.0.2.egg
-./lxml-1.3.6.egg
-import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)
Binary file buildframework/helium/external/python/lib/linux/lxml-1.3.6.tgz has changed
--- a/buildframework/helium/helium.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/helium.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -24,9 +24,9 @@
     <description>
     Main full build targets and properties
     </description>
+    
     <property environment="env" />
 	
-    
     <!-- Load the current Helium version. -->
     <!--* @property helium.version
     @type string
@@ -34,591 +34,19 @@
     -->
     <property file="${helium.dir}/config/version.txt"/>
 
-    <!-- Libraries
-    ======================================================================-->
+
     <import file="helium_preinclude.ant.xml"/>
     
-    <!-- The path where Helium-specific outputs are written to.
-    @type string
-    @scope private
-    -->
-    <property name="helium.build.dir" location="${helium.dir}/build"/>
-    
-    <hlm:typedef file="${helium.dir}/tools/common/common.antlib.xml" uri="http://www.nokia.com/helium"/> 
-    
-    <!-- Location of generated logging config.
-    @type string
-    @scope private
-    -->
-    <property name="logging.output.file" location="${cache.dir}/logging.${env.PID}.conf" />
-    <fmpp sourceFile="${helium.dir}/config/logging.conf.ftl" outputFile="${logging.output.file}" quiet="true">
-        <data expandProperties="yes">
-            ant: antProperties()
-        </data>
-    </fmpp>
-     
-    <!-- Properties
-    ======================================================================-->
-    <!-- Used to specify which team configuration is being used. These configuration files are under /mc/mc_build/teams.
-    @type string
-    -->
-    <property name="team" value="${env.TEAM}"/>
-
-    <!-- See if 'bn' is defined as a shortcut for build.number. -->
-    <if>
-        <isset property="bn"/>
-        <then>
-            <!-- Build number
-            @type integer
-            @scope public
-            -->
-            <property name="build.number" value="${bn}"/>
-        </then>
-    </if>
-    
-    <!-- If build.drive not define then search the next free drive -->
-    <if>
-        <and>
-            <not>
-                <isset property="build.drive"/>
-            </not>    
-            <os family="windows"/>
-        </and>
-        <then>
-            <!-- used to track if build.drive has predefined or not
-            @type flag
-            @scope private
-            -->
-            <property name="build.drive.notdefined" value="true"/> 
-            <exec osfamily="windows" executable="python" failonerror="true" outputproperty="build.drive">
-                <arg line="-m searchnextdrive"/>               
-            </exec>
-            <if>
-                <equals arg1="${build.drive}" arg2="Error: No free drive!"/>
-                <then>            
-                    <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>
-    
-    <!-- For unix os prep.build.dir is equivalent to build.drive -->
-    <condition property="prep.build.dir" value="${build.drive}">
-        <and>
-            <isset property="build.drive"/>
-            <os family="unix"/>
-        </and>
-    </condition>
-    
     
-    <if>
-        <and>
-            <isset property="major.version"/>
-            <isset property="minor.version"/>
-        </and>
-        <then>
-            <!-- This Defaults to the ${major.version}.${minor.version} combo and is available so that 1 number can be used (dot can be removed)
-            @type string
-            -->
-            <property name="core.build.version" value="${major.version}.${minor.version}"/>
-        </then>
-        <else>
-            <!-- This Defaults to the ${major.version}.${minor.version} combo and is available so that 1 number can be used (dot can be removed)
-            @type string
-            -->
-            <property name="core.build.version" value="${env.USERNAME}"/>
-        </else>
-    </if>
-    
-    <!--* @property read.build.int
-    If defined, indicates that the build number should be read from an incrementing text file.
-    @type string
-    @scope public
-    -->
-    <!--* @property build.tag
-    If defined, defines the prefix for the build number when it is read from an incrementing text file.
-    @type string
-    @scope public
-    -->
-    <if>
-        <and>
-            <isset property="read.build.int"/>
-            <not>
-                <isset property="build.number"/>
-            </not>
-        </and>
-        <then>
-            <if>
-                <isset property="build.tag"/>
-                <then>
-                    <property name="build.tag.ext" value="${build.tag}."/>
-                </then>
-                <else>
-                    <property name="build.tag.ext" value=""/>
-                    <property name="build.tag" value=""/>
-                </else>
-            </if>
-            <!-- Use an internal directory to store text files for assigning build number information. -->
-            <!-- The directory where the build integer database text files are stored.
-            @type string
-            @scope private
-            -->
-            <property name="build.int.db.dir" location="${publish.root.dir}/internal/build_int_db"/>
-            <mkdir dir="${build.int.db.dir}"/>
-            <property name="build.int.db.file" value="${build.int.db.dir}/${build.name}_${core.build.version}_${build.tag}_build_int_db.txt"/>
-            <if>
-                <available file="${build.int.db.file}"/>
-                <then>
-                    <echo>Reading from existing build number property file.</echo>
-                    <property file="${build.int.db.file}"/>
-                    <echo>Build int = ${build.int}</echo>
-                    <!-- Read the comments in the file too, for history information. -->
-                    <loadfile property="build.int.db.file.comments" srcFile="${build.int.db.file}">
-                        <filterchain>
-                            <linecontains>
-                                <contains value="# history: "/>
-                            </linecontains>
-                        </filterchain>
-                    </loadfile>
-                    <!-- Set the property in case nothing was found. -->
-                    <property name="build.int.db.file.comments" value=""/>
-                    <echo>History comments:
-${build.int.db.file.comments}</echo>
-                    <!-- Build number
-                    @type integer
-                    @scope public
-                    -->
-                    <property name="build.number" value="${build.tag.ext}${build.int}"/>
-                    <echo>Writing incremented build int back to file.</echo>
-                    <propertyfile file="${build.int.db.file}" comment="build.int database file">
-                        <entry key="build.int" type="int" default="001" operation="+" pattern="000"/>
-                    </propertyfile>
-                    <tstamp>
-                        <format property="build.int.db.file.tstamp" pattern="dd/MM/yyyy-HH:mm:ss"/>
-                    </tstamp>
-                    <concat destfile="${build.int.db.file}" append="true">
-${build.int.db.file.comments}
-# history: ${env.COMPUTERNAME};${env.USERNAME};${build.int.db.file.tstamp};${build.int}
-                    </concat>
-                </then>
-                <else>
-                    <echo>Build number property file not found. Creating a new one.</echo>
-                    <property name="new.build.int" value="001"/>
-                    <!-- Build number
-                    @type integer
-                    @scope public
-                    -->
-                    <property name="build.number" value="${build.tag.ext}${new.build.int}"/>
-                    <echo>Build number = ${build.number}</echo>
-                    <propertyfile file="${build.int.db.file}" comment="build.int database file">
-                        <entry key="build.int" type="int" default="001" operation="+" pattern="000"/>
-                    </propertyfile>
-                </else>
-            </if>
-        </then>
-    </if>
-
-
-    <!-- Define a number of properties that should be consistent amongst all builds. They can be overridden
-    within any config or team Ant file though. -->
-    <!-- A general label for this type of build. Currently if not defined, product.name will be used to set this property, but this will likely be removed in future.
-    @type string
-    @editable required
-    -->
-    <property name="build.name" value="helium"/>
-    <if>
-        <and>
-            <isset property="core.build.version"/>
-            <isset property="build.number"/>
-        </and>
-        <then>
-            <!-- Version of the build.
-            @type string
-            @scope private
-            -->
-            <property name="build.version" value="${core.build.version}.${build.number}"/>
-        </then>
-        <else>
-            <!-- Version of the build.
-            @type string
-            @scope private
-            -->
-            <property name="build.version" value="${env.USERNAME}"/>
-        </else>
-    </if>
-    
-    <!-- A unique ID for the build.
-    @type string
-    @scope private
-    -->
-    <property name="build.id" value="${build.name}_${build.version}"/>
-    <!-- The general type of the build. This is used for checking the tools environment. Potential values include core, ido, product.
-    @type string
-    -->
-    <property name="build.type" value="core"/>
-    <condition property="epocroot" value="${env.EPOCROOT}" else="${env.EPOCROOT}/">
-        <matches pattern="^.*[\\/]$" string="${env.EPOCROOT}" />
-    </condition>
-    <!-- The data model XML file for the Ant configuration.
-    @type string
-    @scope private
-    -->
-    <property name="data.model.file" location="${helium.dir}/config/helium_data_model.xml"/>
-    <!-- The data model XML file for the Ant configuration parsed.
-    @type string
-    @scope private
-    -->
-    <property name="data.model.parsed" location="${helium.build.dir}/datamodel.out"/>
-    <condition property="data.model.xsl" value="${helium.dir}/extensions/nokia/config/helium_nokia_data_model.xsl" else="${helium.dir}/config/helium_data_model.xsl">
-        <available file="${helium.dir}/extensions/nokia/config/helium_nokia_data_model.xsl"/>
-    </condition>
-    <!-- Location of helium database
-    @type string
-    @scope private
-    -->
-    <property name="database.file" location="${basedir}/build/database.xml"/>
-    <!-- Directory where CCM operations will be performed.
-    @type string
-    -->
-    <property name="ccm.base.dir" location="${ccm.home.dir}\${minor.version}"/>
-    <!-- This is the directory where the build area is prepared. Once created it is substed to the build.drive.
-    @type string
-    @scope private
-    -->
-    <property name="prep.build.dir" location="${prep.root.dir}/${build.id}"/>
-    <!-- This is the directory where build output is placed.
-    @type string
-    @scope private
-    -->
-    
-    <!-- If build.drive not define then prep.buil.dir is the value for build.drive for unix os -->
-    <condition property="build.drive" value="${prep.build.dir}">
-        <and>
-            <not>
-                <isset property="build.drive"/>
-            </not>    
-            <os family="unix"/>
-        </and>
-    </condition>
-    
-    <property name="build.output.dir" location="${build.drive}/output"/>
-    <!-- This is where the diamonds output XML files are stored.
-    @type string
-    @scope private
-    -->
-    <property name="diamonds.build.output.dir" location="${build.output.dir}/diamonds"/>
-    <!-- This is the directory where sisfiles are placed.
-    @type string
-    @scope private
-    -->
-    <property name="build.sisfiles.dir" location="${build.output.dir}/sisfiles"/>
-    <!-- This is the directory where build area is archived after the build has finished.
-    @type string
-    @scope private
-    -->
-    <property name="zips.build.dir" location="${build.output.dir}/build_area/engineering_english"/>
-    <!-- This is the directory where build area is archived after the localisation.
-    @type string
-    @scope private
-    -->
-    <property name="zips.loc.dir" location="${build.output.dir}/build_area/localised"/>
-    <!-- The directory where subcon zips are stored.
-    @type string
-    @scope private
-    -->
-    <property name="subcon.zips.dir" location="${build.output.dir}/build_area/subcon"/>
-    <!-- This is the directory where flash files are archived.
-    @type string
-    @scope private
-    -->
-    <property name="zips.flashfiles.dir" location="${build.output.dir}/zips_flashfiles"/>
-    <!-- This is where the build logs are stored.
-    @type string
-    @scope private
-    -->
-    <property name="build.log.dir" location="${build.output.dir}/logs"/>
-    <!-- This is where the signal related files are stored.
-    @type string
-    @scope private
-    -->
-    <property name="build.signal.status.dir" location="${build.log.dir}/signals"/>
-    <!-- This is the email template path where it updates the build status based on metadata database contents. The default file could (email_status_orm.html.ftl under tools\common\template\log)be used as the base and any additional info could be added
-    @type string
-    -->
-    <property name="build.status.email.template" location="${helium.dir}/tools/common/templates/log/email_status_orm.html.ftl" />
-    <!-- Location of build metadata database.
-    @type string
-    @scope private
-    -->
-    <condition property="metadata.dbfile" value="${build.log.dir}/${build.id}_metadata_db" else="${build.log.dir}/${build.id}${env.PID}_metadata_db">
-        <isset property="build.number"/>
-    </condition>
+    <hlm:typedef file="${helium.dir}/tools/common/common.antlib.xml" uri="http://www.nokia.com/helium"/>
     
-    <!-- Directory to store temporary files generated during the process.
-    @type string
-    @scope private
-    -->
-    <property name="temp.build.dir" location="${build.output.dir}/temp_build_files"/>
-    <!-- The 'failonerror' attribute for exec tasks.
-    @type boolean
-    @scope public
-    -->
-    <property name="failonerror" value="false"/>
-    <!-- Maximum allowable errors in a build.
-    @type number
-    -->
-    <property name="build.errors.limit" value="0"/>
-    <!-- Unsubsted drive after build finished. If not defined then helium should left the drive as subst. Set the value as "yes" if you want to unsubst after build finished.
-    @type string
-    -->
-    <property name="unsubst.after.build" value="no"/>
-    <!-- display warnings at build startup if required properties are not defined.
-    @type string
-    @scope private
-    -->
-    <property name="validate.properties.at.startup" value="yes"/>
-    <!-- A unique name for the WA Sources ZIP file.
-    @type string
-    @scope private
-    -->
-    <property name="zip.wa.file" value="${build.drive}/output/src/${build.id}_sources.zip"/>
-    <!-- The location and name of the target times log file. Default value is: ${build.log.dir}/${build.id}_targetTimesLog.csv
-    @type string
-    -->
-    <property name="target.times.log.file" value="${build.log.dir}/${build.id}_targetTimesLog.csv"/>
-
-    <!-- Cache related properties. -->
-    <!-- Directory where Helium can store files on a temporary basis for a user per build.
-    @type string
-    @scope private
-    -->
-    <property name="build.cache.dir" location="${cache.dir}/${build.id}"/>
-    <!-- Directory where Helium can store log files on a temporary basis for a user per build.
-    @type string
-    @scope private
-    -->
-    <property name="build.cache.log.dir" location="${build.cache.dir}/logs"/>
-    <mkdir dir="${build.cache.log.dir}"/>
-    
-    <!-- Path location for the memory tracing data captured by the TracingLogger.
-    @type string
-    @scope private
-    -->
-    <property name="tracing.csv.file" location="${build.cache.dir}/logs/${build.id}_traces.csv"/>
-    
-    <!-- Publish dir configuration. Defines subdir first and next toplevel properties. -->
-    <!-- Subdir part of the publish dir, relative to publish.root.dir
-    @type string
-    -->
-    <property name="publish.subdir" value="${build.name}/builds/${core.build.version}/${build.id}"/>
-    <!-- Subdir part of the publish release dir, relative to publish.root.dir
-    @type string
-    @scope private
-    -->
-    <property name="publish.release.subdir" value="${build.name}/releases/${core.build.version}/${build.id}"/>
-    <!-- Directory where the build is published (includes build.id)
-    @type string
-    -->
-    <property name="publish.dir" location="${publish.root.dir}/${publish.subdir}"/>
-    <!-- The directory where the release of this build is published to on the local network.
-    @type string
-    @scope private
-    -->
-    <property name="publish.release.dir" location="${publish.root.dir}/${publish.release.subdir}"/>
-    <condition property="is.published" else="false">
-        <isset property="publish"/>
-    </condition>
-    
-    <!-- The directory where flash images of build can be found
-    @type string
-    @scope private
-    -->
-    <property name="release.images.dir" value="${build.output.dir}/release_flash_images"/>
-    <!-- Defines location of binaries created in build. Used in check-capability target while generating capability scan report.
-    @type string
-    @scope private
-    -->
-    <property name="binary.root" value="${build.drive}/epoc32/release/armv5/urel" />
-    <!-- Location of python library
-    @type string
-    @scope private
-    -->
-    <property name="python.dir" value="${helium.dir}/external/python/lib"/>
-    <!-- @type string
-    @scope private
-    -->
-    <property name="python.tools" value="${helium.dir}/external/python/bin"/>
-
-    <!-- EBS is selected as the default build system, but ec for Electric Cloud could be used. -->
-    <!-- This specifies which build system is used. Default for this is ebs You can use ec for Electric Cloud..
-    @type string
-    -->
-    <property name="build.system" value="ebs"/>
-    <!-- Path for the output XML file generated by genxml used as input to EBS or EC.
-    @type string
-    @scope private
-    -->
-    <property name="genxml.output.file" location="${temp.build.dir}/${build.id}.${sysdef.configuration}.xml" />
-    <!-- The path of the generated canonical System Definition file that contains all the input System Definition file content.
-    @type string
-    @scope private
-    -->
-    <property name="canonical.sysdef.file" value="${build.output.dir}/build/canonical_system_definition.xml"/>
-    <!-- @type string
-    @scope private
-    -->
-    <property name="build.system.${build.system}" value="Not used"/>
-    <!-- This is the file where build summary is stored.
-    @type string
-    @scope private
-    -->
-    <property name="build.summary.file" location="${build.log.dir}/summary/${build.id}_summary.log.xml"/>
-    <property name="error.summary.file" location="${build.log.dir}/summary/${build.id}_error_summary.log.xml"/>
-    <!-- Defines name of the log file.
-    @type string
-    @scope private
-    -->
-    <property name="build.log" value="${build.log.dir}/${build.id}_main.ant.log"/>
-    <!-- Diamonds Configuration file with full path used for diamonds listener.
-    @type string
-    -->
-    <property name="diamonds.listener.configuration.file" location="${helium.dir}/config/diamonds_config.xml.ftl"/>
-    <!-- Path where ant XML files dynamically downloaded from jar file.
-    @type string
-    @scope private
-    -->
-    <property name="antlib.import.module.path" location="${helium.dir}/tools/hlm-antlib-imports"/>
-    
-    <!-- Following are temporarily defined here until global tools available-->
-    <!-- This specifies the directory where Electric Cloud history files are stored. Currently defined in helium.ant.xml and mapped related to publish.root.dir
-    @type string
-    @scope private
-    -->
-    <property name="ec.history.dir" location="${publish.root.dir}\${product.family}\ec_history"/>
-    <!-- Version of build
-    @type string
-    -->
-    <property name="release.label" value="${build.version}"/>
-    <!-- mode is either serial / parallel - default is parallel
-    @type string
-    -->
-    <property name="ec.mode" value="parallel" />
-    <!-- Setting this to "1" will force xml2mak to generate only warnings (instead of errors) for duplicate components in the component list
-    @type string
-    @scope private
-    -->
-    <property name="ec.allow.duplicates" value="0" />
-    <!-- Defines log file where to record archiving of engineering english area.
-    @type string
-    @scope private
-    -->
-    <property name="zip.ee.log.file" location="${build.log.dir}/${build.id}_ee_zip.log" />
-    <!-- The path to the localization zipping log file.
-    @type string
-    @scope private
-    -->
-    <property name="zip.localised.log.file" location="${build.log.dir}/${build.id}_localised_zip.log" />
-    <!-- Defines log file where to record archiving of subcon environment.
-    @type string
-    @scope private
-    -->
-    <property name="zip.subcon.log.file" value="${build.log.dir}/${build.id}_subcon_zip.log" />
-    <!-- The log file name for zipping subcon_roms.
-    @type string
-    @scope private
-    -->
-    <property name="zip.subcon_roms.log.file" location="${build.log.dir}/${build.id}_subcon_roms_zip.log" />
-    <!-- The log file name for zipping trace_roms.
-    @type string
-    @scope private
-    -->
-    <property name="zip.trace_roms.log.file" location="${build.log.dir}/${build.id}_trace_roms_zip.log" />
-    <!-- target to be executed in case of exceptions (mainly to generate the summary and raise signal).
-    @type string
-    @scope private
-    -->
-    <property name="exceptions.target" value="hlm-exception-handler"/>
-    <!-- The tools dependencies Ivy settings configuration file.
-    @type string
-    -->
-    <property name="tools.ivy.config.file" location="${helium.dir}/config/ivy/tools_ivy_settings.xml" />
-    
-    <!-- A file where persistent properties for a build should be stored.
-    @type string
-    @scope private
-    -->
-    <property name="build.property.cache.file" location="${diamonds.build.output.dir}/build_properties_cache.txt" />
-    <!-- The path for the Python script to handle the ccm task bridge to the ccm.py module.
-    @type string
-    @scope private
-    -->
-    <property name="ccmtask.python.script.file" location="${helium.dir}/tools/preparation/synergy/ccmtask.jep" />
-    <!-- Level of ant logging.
-    @type string
-    -->
-    <property name="ant.loglevel" value="verbose"/>
-
-    <if>
-        <available file="${build.property.cache.file}"/>
-        <then>
-            <property file="${build.property.cache.file}"/>
-        </then>
-    </if>
-    
-
-    <!-- Default number of threads is 2 * NUMBER_OF_PROCESSORS, but this can be overridden by defining the
-    property manually. -->
-    <if>
-        <not>
-            <isset property="number.of.threads"/>
-        </not>
-        <then>
-            <if>
-                <isset property="env.NUMBER_OF_PROCESSORS"/>
-                <then>
-                    <math result="number.of.threads" operand1="${env.NUMBER_OF_PROCESSORS}" operation="*" operand2="2" datatype="int"/>
-                </then>
-                <else>
-                    <!-- how many parallel threads can run
-                    @type string
-                    @scope public
-                    -->
-                    <property name="number.of.threads" value="2"/>
-                </else>
-            </if>
-        </then>
-    </if>
-    
-    <!--* @property product.family
-    In product builds defines the product family that the build product belong to.
-    @type string
-    @editable required
-    @scope public
-    -->
-    
-    <!--* @property product.list
-    In product builds defines the list of products that are build in the configuration. Property is used in rom image creation, localisation release notes creation and data packaging.
-    @type string
-    @editable required
-    @scope public
-    -->
-     
-    <!--* @property diamonds.build.tags
-    
-    @type string
-    @editable optional
-    @scope public
-    -->
+    <!-- Import default configuration settings. -->
+    <import file="tools/common/default_config.ant.xml"/>
 
     <!-- Import basic targets.
         
     The intention would be to split the targets into separate files somewhat
-    matching the build phases located inside \nbuild and import each one here.
+    matching the build phases and import each one here.
     -->
     <import file="extensions/nokia/build.xml" optional="true"/>
     <import file="tools/preparation/preparation.ant.xml"/>
@@ -643,28 +71,8 @@
     <import file="config/signaling_config_default.ant.xml"/>
     <import file="config/stages_config_default.ant.xml"/>
     <import file="config/metadata_filter_config_default.ant.xml"/>
+    <import file="config/diamonds_config_default.ant.xml"/>
 
-    
-    <!-- Top level build execution targets.
-        
-    All of these should simply depend on other targets. They should not contain any tasks.
-    -->
-    
-    <!-- Top-level target for platform builds. -->
-    <target name="platform-build"
-            depends="prep,prebuild,compile-main,postbuild,build-roms,zip-ee,publish-generic,
-                     report,final"
-            description="The default platform build"/>
-    
-    <!-- Top-level target for IBUSAL builds. -->
-    <target name="ibusal-build"
-            depends="prep-drive,init-build-area,prebuild,build-info,log-build-env,
-                     check-env-prep,diamonds,prep-copy,set-arm-version,
-                     create-canonical-sysdef-file,compile-main,zip-ee"
-            description="The default IBUSAL build"/>
+</project>
 
-    <!-- Top-level target for IDO builds. -->
-    <target name="ido-build"
-            depends="diamonds,compile-clean,compile-main,build-roms"
-            description="IDO build"/>
-</project>
+
--- a/buildframework/helium/helium_preinclude.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/helium_preinclude.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -24,19 +24,9 @@
 <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.
+    Users can import this file and use Helium and external 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"/>
-    <taskdef resource="com/nokia/helium/signal/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
-    <taskdef resource="com/nokia/helium/scm/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
-    <taskdef resource="com/nokia/helium/metadata/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
-    <taskdef resource="com/nokia/helium/quality/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
-    <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	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/hlm	Fri Aug 13 14:59:05 2010 +0300
@@ -16,13 +16,13 @@
 # Description: 
 #
 if [ ! $HELIUM_HOME ] ; then
-    export HELIUM_HOME=$(dirname $(readlink /proc/$$/fd/255))
+    export HELIUM_HOME=$(dirname $(readlink -f $0))
 fi
 
 export LANG="en_US.UTF-8"
-export ANT_ARGS="-lib $HELIUM_HOME/extensions/nokia/external/antlibs2 -lib $HELIUM_HOME/external/antlibs2 -logger com.nokia.ant.HeliumLogger -Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor -listener com.nokia.helium.diamonds.ant.HeliumListener -listener com.nokia.helium.logger.ant.listener.StatusAndLogListener -listener com.nokia.helium.core.ant.listener.TargetTimesLogGeneratorListener"
+export ANT_ARGS="-lib $HELIUM_HOME/external/antlibs2 -logger com.nokia.ant.HeliumLogger -Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor -listener com.nokia.helium.logger.ant.listener.StatusAndLogListener -listener com.nokia.helium.core.ant.listener.TargetTimesLogGeneratorListener"
 
-TEMP_PYTHONPATH="$HELIUM_HOME/external/python/lib/common:$HELIUM_HOME/external/python/lib/auto:$HELIUM_HOME/tools/common/python/scripts:$HELIUM_HOME/extensions/nokia/external/python/lib/2.5:$HELIUM_HOME/extensions/nokia/tools/common/python/lib"
+TEMP_PYTHONPATH="$HELIUM_HOME/external/python/lib/common:$HELIUM_HOME/external/python/lib/auto:$HELIUM_HOME/extensions/nokia/external/python/lib/2.5:$HELIUM_HOME/extensions/nokia/tools/common/python/lib"
 
 TEMP_PERL5LIB="$HELIUM_HOME/tools/common/packages"
 if [ ! $PERL5LIB ] ; then
@@ -74,14 +74,14 @@
 fi 
 
 if [ ! -f "$HELIUM_HOME/external/antlibs2/helium-checktools-1.0.jar" ] ; then
-    echo A required jar '$HELIUM_HOME/external/antlibs2/helium-checktools-1.0.jar' is missing. Verification of basic tools used by Helium cannot be done. Contact Helium support.
+    echo "Please build helium from nokia_builder or builder dir run 'bld && bld get-deps'"
     exit 1
 else 
     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 [ $? -eq 0 ] ; then
-      exec ant -Dpython.cachedir=$PYTHON_CACHEDIR -Dhelium.dir=$HELIUM_HOME -Dpython.path=$PYTHONPATH -Dcache.dir=$HELIUM_CACHE_DIR $*
+        exec ant -Dpython.cachedir=$PYTHON_CACHEDIR -Dhelium.dir=$HELIUM_HOME -Dpython.path=$JYTHONPATH -Dcache.dir=$HELIUM_CACHE_DIR $*
     else
-        echo Build aborted with error
+        exit 1
     fi    
 fi   
--- a/buildframework/helium/hlm.bat	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/hlm.bat	Fri Aug 13 14:59:05 2010 +0300
@@ -48,8 +48,8 @@
 
 REM Needed by python logging
 set PID=1
-perl "%HELIUM_HOME%\tools\common\bin\getppid.pl" > %TEMP%\%USERNAME%pid.txt
-set /p PID=< %TEMP%\%USERNAME%pid.txt
+perl "%HELIUM_HOME%\tools\common\bin\getppid.pl" > "%TEMP%\%USERNAME%pid.txt"
+set /p PID=< "%TEMP%\%USERNAME%pid.txt"
 
 REM Configure Apache Ant
 if not defined TESTED_ANT (
@@ -57,18 +57,12 @@
 )
 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 (
-	set ANT_OPTS=-Xmx896M -Dlog4j.configuration=com/nokia/log4j.xml
-)
 
 set SIGNALING_ANT_ARGS= -Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor
 set LOGGING_ANT_ARGS= -listener com.nokia.helium.logger.ant.listener.StatusAndLogListener
-REM -listener com.nokia.helium.logger.ant.listener.StatusAndLogListener
-set DIAMONDS_ANT_ARGS= -listener com.nokia.helium.diamonds.ant.HeliumListener
 
 if not defined HLM_DISABLE_INTERNAL_DATA (
 set INTERNAL_DATA_ANT_ARGS= -listener com.nokia.helium.internaldata.ant.listener.Listener
-echo Internal data listening enabled.
 )
 
 
@@ -78,7 +72,7 @@
 
 
 if not defined ANT_ARGS (
-set ANT_ARGS=-lib "%HELIUM_HOME%\external\antlibs2" -lib "%HELIUM_HOME%\extensions\nokia\external\antlibs" -logger com.nokia.ant.HeliumLogger  %DIAMONDS_ANT_ARGS% %INTERNAL_DATA_ANT_ARGS% %SIGNALING_ANT_ARGS% %LOGGING_ANT_ARGS% %TARGET_TIMES_GENERATOR%
+set ANT_ARGS=-lib "%HELIUM_HOME%\external\antlibs2" -logger com.nokia.ant.HeliumLogger  %INTERNAL_DATA_ANT_ARGS% %SIGNALING_ANT_ARGS% %LOGGING_ANT_ARGS% %TARGET_TIMES_GENERATOR% -listener com.nokia.helium.environment.ant.listener.ExecListener
 )
 
 REM Shall we impose the EPOCROOT?
@@ -97,9 +91,9 @@
 for /f "tokens=1-2 delims=." %%a in ("%pythonversion%") do (set pythonversion=%%a.%%b)
 
 set PYTHONPATH=%HELIUM_HOME%\external\python\lib\auto;%HELIUM_HOME%\external\python\lib\%pythonversion%
-set PYTHONPATH=%PYTHONPATH%;%HELIUM_HOME%\external\python\lib\common;%HELIUM_HOME%\tools\common\python\scripts
+set PYTHONPATH=%PYTHONPATH%;%HELIUM_HOME%\external\python\lib\common
 set PYTHONPATH=%PYTHONPATH%;%HELIUM_HOME%\extensions\nokia\external\python\lib\%pythonversion%
-set PYTHONPATH=%PYTHONPATH%;%HELIUM_HOME%\extensions\nokia\tools\common\python\lib;%SBS_HOME%\python
+set PYTHONPATH=%PYTHONPATH%;%SBS_HOME%\python
 set PERL5LIB=%HELIUM_HOME%\tools\common\packages
 set COPYCMD=/y
 
@@ -129,22 +123,21 @@
 )
 
 REM Call the Helium generated batch file if it exists
-REM This must match with the cache.dir property in helium.ant.xml
 if defined JOB_ID  (
-	set HELIUM_CACHE_DIR=%TEMP%\helium\%USERNAME%\%JOB_ID%
-)ELSE set HELIUM_CACHE_DIR=%TEMP%\helium\%USERNAME%
+	set HELIUM_CACHE_DIR="%TEMP%\helium\%USERNAME%\%JOB_ID%"
+)ELSE set HELIUM_CACHE_DIR="%TEMP%\helium\%USERNAME%"
 
 if not exist %HELIUM_CACHE_DIR% (
 md %HELIUM_CACHE_DIR%
 )
 
 REM pass cache dir to a property for log4j log file
-if defined ANT_OPTS (
-	set ANT_OPTS=%ANT_OPTS% -Dlog4j.cache.dir=%HELIUM_CACHE_DIR% 
-    call %HELIUM_HOME%\external\python\configure_jython.bat
+if not defined ANT_OPTS (
+    set ANT_OPTS=-Xmx896M -Dlog4j.configuration=com/nokia/log4j.xml -Dlog4j.cache.dir=%HELIUM_CACHE_DIR% -Dpython.verbose=warning
+    call "%HELIUM_HOME%\external\python\configure_jython.bat"
 )
 
-call ant -Dhelium.dir="%HELIUM_HOME%" -Dcache.dir="%HELIUM_CACHE_DIR%" %*
+call ant -Dhelium.dir="%HELIUM_HOME%" -Dcache.dir=%HELIUM_CACHE_DIR% %*
 
 endlocal
 goto :eof
Binary file buildframework/helium/sf/deps/amara/4Suite_XML/1.0.2/4Suite-XML-1.0.2.tar.gz has changed
Binary file buildframework/helium/sf/deps/amara/4Suite_XML/1.0.2/4Suite_XML-1.0.2.py2.6-win32.egg has changed
--- a/buildframework/helium/sf/deps/amara/4Suite_XML/1.0.2/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-<?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="amara"
-        module="4Suite_XML"
-        status="release"
-        revision="1.0.2" />
-    <publications>
-        <artifact type="egg" ext="py2.6-${platform}.egg" conf="default"/>
-    </publications>
-</ivy-module>
Binary file buildframework/helium/sf/deps/amara/amara/1.2.0.1/amara-1.2.0.1.egg has changed
--- a/buildframework/helium/sf/deps/amara/amara/1.2.0.1/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-<?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="amara"
-        module="amara"
-        status="release"
-        revision="1.2.0.1" />
-    <publications>
-        <artifact type="egg" conf="default"/>
-    </publications>
-    <dependencies>
-        <dependency org="amara" name="4Suite_XML" rev="latest.integration" conf="default" />
-    </dependencies>
-</ivy-module>
--- a/buildframework/helium/sf/deps/com.nokia.helium.config/helium-sf-config/1.0/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/deps/com.nokia.helium.config/helium-sf-config/1.0/ivy.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -41,6 +41,7 @@
         <dependency org="com.nokia.helium" name="helium-antdata" rev="latest.integration" conf="default"/>
         <dependency org="com.nokia.helium" name="helium-antunit" rev="latest.integration" conf="default"/>
         <dependency org="com.nokia.helium" name="helium-antcoverage" rev="latest.integration" conf="default"/>
+        <dependency org="com.nokia.helium" name="helium-environment" rev="latest.integration" conf="default"/>
         <dependency org="com.nokia.helium" name="helium-imaker" rev="latest.integration" conf="default"/>
         <dependency org="com.nokia.helium" name="helium-internaldata" rev="latest.integration" conf="default"/>
         <dependency org="com.nokia.helium" name="helium-metadata" rev="latest.integration" conf="default"/>
Binary file buildframework/helium/sf/deps/org.apache.xml/serializer/1.0/serializer-1.0.jar has changed
Binary file buildframework/helium/sf/deps/org.apache.xml/serializer/2.7.0/serializer-2.7.0.jar has changed
Binary file buildframework/helium/sf/deps/org.apache.xml/xalan/1.0/xalan-1.0.jar has changed
Binary file buildframework/helium/sf/deps/org.apache.xml/xalan/2.7.0/xalan-2.7.0.jar has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/deps/py_dom_xpath/py_dom_xpath/0.1/ivy.xml	Fri Aug 13 14:59:05 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="py_dom_xpath"
+        module="py_dom_xpath"
+        status="release"
+        revision="0.1" />
+    <publications>
+        <artifact type="egg" ext="py2.6.egg" conf="default" />
+    </publications>
+</ivy-module>
Binary file buildframework/helium/sf/deps/py_dom_xpath/py_dom_xpath/0.1/py_dom_xpath-0.1.py2.6.egg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/deps/pyxml/pyxml/0.8.4/ivy.xml	Fri Aug 13 14:59:05 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="pyxml"
+        module="pyxml"
+        status="release"
+        revision="0.8.4" />
+    <publications>
+        <artifact type="egg" ext="py2.6.egg" conf="default" />
+    </publications>
+</ivy-module>
Binary file buildframework/helium/sf/deps/pyxml/pyxml/0.8.4/pyxml-0.8.4.py2.6.egg has changed
Binary file buildframework/helium/sf/deps/xpath-task/xpath-task/0.1/xpath-task-0.1.jar has changed
--- a/buildframework/helium/sf/doc/src/structure.rst	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,249 +0,0 @@
-==============================
-Project Development guidelines
-==============================
-
-
-Helium now contains its Java and Python components into its structure. Its main requirements to build the delivery are:
- * Ant 1.7.0
- * JDK 1.6 or newer
- * Python 2.6
-
-The project is split in several sub-modules which cover specific features.
-
-Anatomy of the project
-======================
-
-::
-   
-   + builder
-      - build.xml
-      - bld.bat
-      - bld
-      + antlibs
-         Ant specific dependencies needed to execute ant properly
-         e.g: Java checkstyle, Code coverage tools
-         The jar in that folder will not be used as compilation dependencies
-   + <layer>
-       + doc
-          General documentation of the project
-       + settings
-          + ivysettings.xml
-       + deps
-          + <org>
-             + <name>
-                + <rev>
-                   - <name>-<rev>.jar
-          + ...
-       + java
-          + component1
-          + componentn ...
-       + python
-          + component1
-          + componentn ...
-   + <layer> ...
-
-
-Anatomy of a Component
-======================
-
-A component is a self contained structure which implements a set of feature related to a specific domain (e.g: Diamonds, SCM). The following diagram shows 
-the physical structure of a component.
-
-::
-   
-   + <component_name>
-         - build.xml
-         - ivy.xml
-         + src
-            + com
-               + nokia
-                   + helium
-                      + <component_name>
-                          + ant
-                             + taskdefs
-                               source of the Ant tasks
-                             + types
-                               source of the Ant DataType 
-                             + listeners
-                               source of the Ant Listener
-                             + conditions
-                               source of the Ant Conditions
-         + tests
-           - build.xml
-           - bld.bat
-           - bld.sh
-           + antunits
-              - test_xxx.ant.xml* - Unittest implemented using AntUnit  
-           + data
-             data used for the the unittests.
-           + src
-             + com
-                + nokia
-                   + helium
-                      + <component_name>
-                         + tests
-                            source of junit unittests.
-
-The build.xml
--------------
-
-This is simplest file you must have at component level, **<name of the component>** is really important
-as it defines the future name of the jar file.
-::
-   
-   <project name="<name of the component>">
-       <description>Component build file.</description>
-       <import file="../../builder/java/macros.ant.xml"/>
-   </project>
-
-The ivy.xml
------------
-
-The ivy.xml is used to gather the relevant dependencies to build your component, and to order
-the build of the components correctly:
-
-::
-    
-   <?xml version="1.0" encoding="ISO-8859-1"?>
-   <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="<name of the component>"
-           status="integration">
-       </info>
-       <dependencies>
-          <dependency name="<name of an another component>" rev="latest.integration" conf="default" />
-          <dependency org="dom4j" name="dom4j" rev="1.2.9" conf="default" />
-       </dependencies>
-   </ivy-module>
-   
-More info about Ivy can be found from: http://ant.apache.org/ivy/
-
-Antunit files
--------------
-
-The builder will automatically test all the antunit files from <base_component>/tests/antunits.
-Test must be written by keeping in mind that src tree must remain unmodified after the testing (please use the test.temp.dir).
-
-Example of test file:
-::
-   
-   <project name="test-<component>-<feature>" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
-      <description>Helium unittests.</description>
-   
-      <target name="setUp">
-         <delete dir="${test.temp.dir}" failonerror="false" />
-         <mkdir dir="${test.temp.dir}" />
-      </target>
-
-      <target name="tearDown">
-         <delete dir="${test.temp.dir}" failonerror="false" />
-         <mkdir dir="${test.temp.dir}" />
-      </target>
-      
-      <target name="test-file-generation">
-         <echo message="foo-bar" file="${test.temp.dir}/demo.txt" />
-         <au:assertFileExists file="${test.temp.dir}/demo.txt" />
-      </target>
-   </project>
-
-
-
-General guidelines
-==================
-
-Source code license
--------------------
-Each file added to the project should include the following license header.
-::
-   
-   /*
-    * 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:  
-    *
-    */
-
-Documentation
--------------
-
-All classes and methods must be documented. Ant facade classes (like Task or DataType)
-must be Antdoclet documented (preferably with usage example).
-
-You can find more information on how to document Ant task using the Antdoclet plugin on http://antdoclet.neuroning.com/.
-
-General coding guidelines
--------------------------
-
- * Java components must not use getProperty() with hardcoded name coming from helium (e.g: getProject().getProperty("helium.dir")), only exceptions:
-    * Ant Listeners (name of the property must be link to the listener not to helium!)
-    * Code under the legacy component.
- * It is forbidden to share unittest data between components (else it breaks the self-contained principle).
- 
-Logging
--------
-
-Developer must preferably use standard Ant logging for any user log output.
-Internal debug logging must be implemented using Log4J framework.
-
- * ANT Listeners must use log4j logging framework - using Ant logging system might cause some looping issues.
- * Ant Type and Task must use the Ant logging mechanism to report to the user.
- * Generic framework (part of the code which doesn't links to Ant directly) must use Log4J. 
- * Usage of System.out.println should be avoided.
- * All the non-handled exceptions should be considered as errors and should be reported as such:
-    * use log("message", Project.MSG_ERR) under Ant
-    * log.error() otherwise.
-    * Exception to this rule must be clearly commented under the code.
- * Debug information:
-    * Log4J framework (log.debug()) must be used to push information to the Helium debug log - so debug information are not
-      directly visible by the user.
-    * Ant logging framework can also be use to log Type/Task debug info (but log4j is preferred).
-    * PrintStackTrace method should be used on below scenario's:
-       * At the time of unknown exception.
-       * Should be used with exceptions other than BuildException.
-       * In case it is difficult to debug the issue with Exception.getMessage().
-       * use this method during debugging complex issue (this doesn't mean the line should remain in the code after development).
-       * When it is required to print the all the information about the occurring Exception. 
-
-
-This is an example on how to use logging:
-::
-   
-   import org.apache.log4j.Logger;
-   
-   class MyClass extends Task {
-       private static Logger log = Logger.getLogger(MyClass.class);
-       
-       public void execute() {
-           log("Executing...");
-           log.debug("some useful debug information.");
-       }
-   }
-
-
-Please find more information on Log4J from the online manual: http://logging.apache.org/log4j/1.2/manual.html.
-
-
-Exception
----------
-
-Exceptional event reporting and handling is crutial in software development. Developer must make sure it is done accordingly
-to the framework it is currently using:
-
- * To report a build failure under Ant the BuildException must be used.
-    But we have to keep in mind that a BuildException is not tracked because it derives from the RuntimeError type.
-    So we have to be careful with those and try to limit their puprose to the original usage: Ant build failure.
- * It is preferable to have meaningful exception type like: FileNotFoundException.
- * Developer should try to avoid as much as possible the throw or catch raw type of exception like Exception, RuntimeError.  
-   
--- a/buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/AntMacros.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/AntMacros.java	Fri Aug 13 14:59:05 2010 +0300
@@ -31,8 +31,9 @@
      */
     public void add(String macro) {
         for (MacroHolder mh : antMacros) {
-            if (mh.equals(macro))
+            if (mh.equals(macro)) {
                 return;
+            }
         }
         this.antMacros.add(new MacroHolder(macro));
     }
--- a/buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/AntScriptDefs.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/AntScriptDefs.java	Fri Aug 13 14:59:05 2010 +0300
@@ -31,8 +31,9 @@
      */
     public void add(String scriptDef) {
         for (ScriptDefHolder sh : antScriptdefs) {
-            if (sh.equals(scriptDef))
+            if (sh.equals(scriptDef)) {
                 return;
+            }
         }
         this.antScriptdefs.add(new ScriptDefHolder(scriptDef));
     }
--- a/buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/listener/HlmAntUnitListener.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/listener/HlmAntUnitListener.java	Fri Aug 13 14:59:05 2010 +0300
@@ -206,8 +206,7 @@
         Hashtable<String, Target> projectTargets = project.getTargets();
         Enumeration<String> targetEnum = projectTargets.keys();
         while (targetEnum.hasMoreElements()) {
-            String key = targetEnum.nextElement();
-            System.out.println(key + ": " + projectTargets.get(key));
+            String key = targetEnum.nextElement();            
             if (!isAntUnitTestTarget(key) && key.length() > 0) {
                 antTargets.add((Target) projectTargets.get(key));
             }
--- a/buildframework/helium/sf/java/antdata/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/ivy.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -30,6 +30,7 @@
     <dependencies>
         <dependency org="dom4j" name="dom4j" rev="latest.integration" conf="default" />
         <dependency org="info.bliki" name="bliki" rev="latest.integration" conf="default" />
+        <dependency org="log4j" name="log4j" rev="1.2.9" conf="default" />
         <dependency org="org.freemarker" name="freemarker" rev="latest.integration" conf="default" />
         <dependency org="jaxen" name="jaxen" rev="latest.integration" conf="default" />
     </dependencies>
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntComment.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntComment.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,12 +17,11 @@
 
 package com.nokia.helium.ant.data;
 
-import java.io.IOException;
 import java.text.BreakIterator;
 import java.util.HashMap;
 import java.util.StringTokenizer;
 
-import org.apache.tools.ant.Project;
+import org.apache.log4j.Logger;
 import org.dom4j.Comment;
 import org.dom4j.Node;
 
@@ -31,17 +30,19 @@
  * fileset, etc. It should preceed the object.
  */
 public class AntComment {
+    private static Logger log = Logger.getLogger(AntComment.class);
+
     private String summary = "";
     private String parsedDocText = "";
     private HashMap<String, String> tags;
     private String objectName = "";
     private boolean isMarkedComment;
 
-    public AntComment() throws IOException {
+    public AntComment() {
         this(null);
     }
 
-    public AntComment(Comment comment) throws IOException {
+    public AntComment(Comment comment) {
         tags = new HashMap<String, String>();
         if (comment != null) {
             
@@ -60,7 +61,7 @@
                 String[] splitStrings = text.split("\\s", 3);
                 objectName = splitStrings[1];
                 if (objectName == null) {
-                    log("Comment block: object name is not defined.", Project.MSG_WARN);
+                    log.warn("Comment block: object name is not defined.");
                     objectName = "";
                 }
                 if (splitStrings.length > 2) {
@@ -74,7 +75,7 @@
         }
     }
 
-    private void parseCommentText(String text) throws IOException {
+    private void parseCommentText(String text) {
         if (text.length() > 0) {
             StringTokenizer tokenizer = new StringTokenizer(text, "@");
 
@@ -96,8 +97,9 @@
                 while (tokenizer.hasMoreElements()) {
                     String tagText = (String) tokenizer.nextElement();
                     String[] tagParts = tagText.split("\\s", 2);
-                    if (tagParts.length > 1)
+                    if (tagParts.length > 1) {
                         tags.put(tagParts[0], tagParts[1].trim());
+                    }
                 }
             }
         }
@@ -161,10 +163,6 @@
     public boolean isMarkedComment() {
         return isMarkedComment;
     }
-
-    private void log(String string, int msgWarn) {
-        System.out.println(string);
-    }
     
     /**
      * Clean the whitespace of the doc text.
@@ -173,7 +171,6 @@
      */
     static String getCleanedDocNodeText(Node docNode) {
         Node preceedingWhitespaceNode = docNode.selectSingleNode("preceding-sibling::text()");
-        // System.out.println(whitespace);
         int indent = 0;
         if (preceedingWhitespaceNode != null) {
             String text = preceedingWhitespaceNode.getText();
@@ -181,8 +178,6 @@
             if (lines.length > 0) {
                 indent = lines[lines.length - 1].length();
             }
-            // System.out.println("indent: " + lines[lines.length -
-            // 1].length());
         }
         
         String text = docNode.getText();
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntFile.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntFile.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,16 +18,19 @@
 package com.nokia.helium.ant.data;
 
 import java.io.File;
+import java.io.FileReader;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.tools.ant.Project;
 import org.dom4j.Document;
-import org.dom4j.DocumentException;
 import org.dom4j.Element;
 import org.dom4j.Node;
-import org.dom4j.io.SAXReader;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
 
 /**
  * An Ant build file. It could be a project file or an antlib file.
@@ -46,22 +49,33 @@
     public AntFile(Database database, String path, String scope) throws IOException {
         this.database = database;
         this.path = new File(path);
-        SAXReader xmlReader = new SAXReader();
-        try {
-            doc = xmlReader.read(path);
+
+        readDoc();
+        Element node = doc.getRootElement();
+        if (node.getName().equals("project")) {
+            fileObjectMeta = new ProjectMeta(this, node);
+        }
+        else {
+            fileObjectMeta = new AntlibMeta(this, node);
+        }
+
+        fileObjectMeta.setScopeFilter(scope);
+        fileObjectMeta.setRuntimeProject(rootProject);
 
-            Element node = doc.getRootElement();
-            if (node.getName().equals("project")) {
-                fileObjectMeta = new ProjectMeta(this, node);
-            }
-            else {
-                fileObjectMeta = new AntlibMeta(this, node);
-            }
+    }
 
-            fileObjectMeta.setScopeFilter(scope);
-            fileObjectMeta.setRuntimeProject(rootProject);
+    private void readDoc() throws IOException {
+        try {
+            DocumentFactoryWithLocator documentFactory = new DocumentFactoryWithLocator();
+            SAXContentHandlerExt contentHandler = new SAXContentHandlerExt(documentFactory);
+            documentFactory.setContentHandler(contentHandler);
+            XMLReader xmlReader = XMLReaderFactory.createXMLReader();
+            xmlReader.setContentHandler(contentHandler);
+            xmlReader.setProperty("http://xml.org/sax/properties/lexical-handler", contentHandler);
+            xmlReader.parse(new InputSource(new FileReader(path)));
+            doc = contentHandler.getDocument();
         }
-        catch (DocumentException e) {
+        catch (SAXException e) {
             throw new IOException(e.getMessage());
         }
     }
@@ -83,9 +97,8 @@
      * Get the meta object for the Ant project in this build file.
      * 
      * @return The project meta object.
-     * @throws DocumentException
      */
-    public RootAntObjectMeta getRootObjectMeta() throws IOException {
+    public RootAntObjectMeta getRootObjectMeta() {
         return fileObjectMeta;
     }
 
@@ -107,8 +120,7 @@
         Element node = doc.getRootElement();
         List<AntFile> antlibFiles = new ArrayList<AntFile>();
         if (node.getName().equals("project")) {
-            List<Node> typedefs = node
-                    .selectNodes("//*[namespace-uri()='http://www.nokia.com/helium' and local-name()='typedef']");
+            List<Node> typedefs = node.selectNodes("//*[namespace-uri()='http://www.nokia.com/helium' and local-name()='typedef']");
             for (Node typedefNode : typedefs) {
                 String filePath = ((Element) typedefNode).attributeValue("file");
                 filePath = getProject().replaceProperties(filePath);
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntObjectMeta.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntObjectMeta.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,7 +17,7 @@
 
 package com.nokia.helium.ant.data;
 
-import java.io.IOException;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -33,19 +33,22 @@
  */
 public class AntObjectMeta {
 
-    public static final Map<String, Integer> SCOPES = new HashMap<String, Integer>() {
-        {
-            put("public", new Integer(1));
-            put("protected", new Integer(2));
-            put("private", new Integer(3));
-        }
-    };
+    public static final Map<String, Integer> SCOPES;
+    
+    static {
+        Map<String, Integer> tempMap = new HashMap<String, Integer>();
+        tempMap.put("public", new Integer(1));
+        tempMap.put("protected", new Integer(2));
+        tempMap.put("private", new Integer(3));
+        SCOPES = Collections.unmodifiableMap(tempMap);
+    }
+    
     /** The default scope if an element does not have a defined scope. */
     public static final String DEFAULT_SCOPE = "public";
 
     private static AntComment emptyComment;
 
-    private Project rootProject;
+    private Project runtimeProject;
 
     /** The parent meta object. */
     private AntObjectMeta parent;
@@ -55,12 +58,7 @@
     private AntComment comment = emptyComment;
 
     static {
-        try {
-            emptyComment = new AntComment();
-        }
-        catch (IOException e) {
-            e.printStackTrace();
-        }
+        emptyComment = new AntComment();
     }
 
     /**
@@ -68,20 +66,19 @@
      * 
      * @param parent The parent meta object.
      * @param node The XML node of the Ant object.
-     * @throws IOException
      */
-    public AntObjectMeta(AntObjectMeta parent, Node node) throws IOException {
+    public AntObjectMeta(AntObjectMeta parent, Node node) {
         this.parent = parent;
         this.node = node;
         processComment();
     }
 
     public Project getRuntimeProject() {
-        return rootProject;
+        return runtimeProject;
     }
 
     public void setRuntimeProject(Project project) {
-        this.rootProject = project;
+        this.runtimeProject = project;
     }
 
     /**
@@ -142,15 +139,6 @@
         String name = getAttr("name");
         if (name.length() == 0) {
             name = getComment().getObjectName();
-//            if (name.length() == 0) {
-//                try {
-//                    System.out.println("name is 0 length: " + getLocation());
-//                    // System.out.println(node.toString());
-//                }
-//                catch (IOException e) {
-//                    e.printStackTrace();
-//                }
-//            }
         }
         return name;
     }
@@ -159,11 +147,14 @@
      * Returns the location path of the object.
      * 
      * @return Location path string.
-     * @throws IOException
      */
-    public String getLocation() throws IOException {
+    public String getLocation() {
         RootAntObjectMeta rootMeta = getRootMeta();
-        return rootMeta.getFile().getCanonicalPath();
+        String location = rootMeta.getFilePath();
+        if (node instanceof ElementWithLocation) {
+            location += ":" + ((ElementWithLocation)node).getLineNumber();
+        }
+        return location;
     }
 
     /**
@@ -203,7 +194,7 @@
             throw new IllegalArgumentException("Invalid scope filter: " + scopeFilter);
         }
         String scope = getScope();
-        if (!SCOPES.containsKey(scope)) {
+        if (scope.length() > 0 && !SCOPES.containsKey(scope)) {
             log("Invalid scope: " + scope + ", " + toString(), Project.MSG_WARN);
             return false;
         }
@@ -219,6 +210,16 @@
     public String getDeprecated() {
         return comment.getTagValue("deprecated");
     }
+    
+    /**
+     * Returns the content of the "since" tag that should indicate which release this feature
+     * was first added.
+     * 
+     * @return Since release number.
+     */
+    public String getSince() {
+        return comment.getTagValue("since");
+    }
 
     /**
      * Returns the source XML of the object.
@@ -246,7 +247,7 @@
         this.comment = comment;
     }
 
-    private void processComment() throws IOException {
+    private void processComment()  {
         Comment commentNode = getCommentNode();
         if (commentNode != null) {
             comment = new AntComment(commentNode);
@@ -289,4 +290,8 @@
             project.log(text, level);
         }
     }
+    
+    public String toString() {
+        return getName();
+    }
 }
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntlibMeta.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntlibMeta.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 package com.nokia.helium.ant.data;
 
 import java.io.IOException;
-import org.dom4j.DocumentException;
+
 import org.dom4j.Element;
 
 /**
@@ -26,7 +26,7 @@
  */
 public class AntlibMeta extends RootAntObjectMeta {
 
-    public AntlibMeta(AntFile antFile, Element node) throws DocumentException, IOException {
+    public AntlibMeta(AntFile antFile, Element node) throws IOException {
         super(antFile, node);
 
         // Only parse a project comment if it is marked
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/CommentMeta.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/CommentMeta.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,8 +16,6 @@
 
 package com.nokia.helium.ant.data;
 
-import java.io.IOException;
-
 import org.dom4j.Comment;
 
 /**
@@ -25,7 +23,7 @@
  */
 public class CommentMeta extends AntObjectMeta {
 
-    public CommentMeta(AntObjectMeta parent, Comment comment) throws IOException {
+    public CommentMeta(AntObjectMeta parent, Comment comment) {
         super(parent, comment);
     }
 
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/Database.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/Database.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,6 +16,22 @@
 
 package com.nokia.helium.ant.data;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Target;
+
+import com.nokia.helium.freemarker.WikiMethod;
+
 import freemarker.cache.ClassTemplateLoader;
 import freemarker.cache.FileTemplateLoader;
 import freemarker.cache.MultiTemplateLoader;
@@ -24,44 +40,26 @@
 import freemarker.template.DefaultObjectWrapper;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
-import java.io.File;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Target;
-import org.dom4j.Document;
-import org.dom4j.DocumentException;
-import org.dom4j.DocumentHelper;
-import org.dom4j.Element;
-import org.dom4j.Node;
-import org.dom4j.XPath;
-import org.dom4j.io.SAXReader;
-
-import com.nokia.helium.freemarker.WikiMethod;
 
 /**
- * Reads the current ant project and a fileset and generates a xml file with a
- * summary of targets, macros and properties.
+ * Reads the current ant project and a fileset and generates a xml file with a summary of targets,
+ * macros and properties.
  */
 public class Database {
     /** The default scope filter if no scope filter is defined. */
     public static final String DEFAULT_SCOPE = "public";
+    public static final Map<String, String> NAMESPACE_MAP;
 
     private Project rootProject;
     private Map<String, AntFile> antfilesMap;
     private Map<String, PackageMeta> packagesMap;
     private String scopeFilter;
 
-    private HashMap<String, String> namespaceMap = new HashMap<String, String>();
-    private HashMap<String, List<String>> globalSignalList = new HashMap<String, List<String>>();
-    private Document signaldoc;
+    static {
+        Map<String, String> tempMap = new HashMap<String, String>();
+        tempMap.put("hlm", "http://www.nokia.com/helium");
+        NAMESPACE_MAP = Collections.unmodifiableMap(tempMap);
+    }
 
     public Database(Project project) throws IOException {
         this(project, DEFAULT_SCOPE);
@@ -73,7 +71,6 @@
         this.scopeFilter = scopeFilter;
         antfilesMap = new HashMap<String, AntFile>();
         packagesMap = new HashMap<String, PackageMeta>();
-        namespaceMap.put("hlm", "http://www.nokia.com/helium");
 
         if (project != null) {
             Map<String, Target> targets = project.getTargets();
@@ -88,13 +85,6 @@
                 }
             }
         }
-
-        Collection<AntFile> antFiles = getAntFiles();
-        Iterator<AntFile> antFilesIter = antFiles.iterator();
-        while (antFilesIter.hasNext()) {
-            AntFile antFile = (AntFile) antFilesIter.next();
-            readSignals(antFile.getFile().getCanonicalPath());
-        }
     }
 
     private void log(String string, int level) {
@@ -118,7 +108,6 @@
 
             // See if project is part of a package
             checkPackageMembership(antfile);
-            readSignals(antFilePath);
 
             // See if any antlibs are defined
             List<AntFile> antlibFiles = antfile.getAntlibs();
@@ -141,61 +130,6 @@
         packageMeta.addObject(rootObjectMeta);
     }
 
-    @SuppressWarnings("unchecked")
-    private void readSignals(String antFile) throws IOException {
-        SAXReader xmlReader = new SAXReader();
-        Document antDoc;
-        try {
-            antDoc = xmlReader.read(new File(antFile));
-        }
-        catch (DocumentException e) {
-            throw new IOException(e.getMessage());
-        }
-
-        XPath xpath = DocumentHelper.createXPath("//hlm:signalListenerConfig");
-        xpath.setNamespaceURIs(namespaceMap);
-        List<Node> signalNodes = xpath.selectNodes(antDoc);
-        for (Iterator<Node> iterator = signalNodes.iterator(); iterator.hasNext();) {
-            signaldoc = antDoc;
-            Element propertyNode = (Element) iterator.next();
-            String signalid = propertyNode.attributeValue("id");
-            String signaltarget = propertyNode.attributeValue("target");
-            List<String> existinglist = globalSignalList.get(signaltarget); 
-            String failbuild = findSignalFailMode(signalid, signaldoc);
-            if (existinglist == null) {
-                existinglist = new ArrayList<String>();
-            }
-            existinglist.add(signalid + "," + failbuild);
-            globalSignalList.put(signaltarget, existinglist);
-        }
-    }
-
-    public List<String> getSignals(String target) {
-        return globalSignalList.get(target);
-    }
-
-    @SuppressWarnings("unchecked")
-    private String findSignalFailMode(String signalid, Document antDoc) {
-        XPath xpath2 = DocumentHelper.createXPath("//hlm:signalListenerConfig[@id='" + signalid
-                + "']/signalNotifierInput/signalInput");
-        xpath2.setNamespaceURIs(namespaceMap);
-        List signalNodes3 = xpath2.selectNodes(antDoc);
-
-        for (Iterator iterator3 = signalNodes3.iterator(); iterator3.hasNext();) {
-            Element propertyNode3 = (Element) iterator3.next();
-            String signalinputid = propertyNode3.attributeValue("refid");
-
-            XPath xpath3 = DocumentHelper.createXPath("//hlm:signalInput[@id='" + signalinputid + "']");
-            xpath3.setNamespaceURIs(namespaceMap);
-            List signalNodes4 = xpath3.selectNodes(antDoc);
-            for (Iterator iterator4 = signalNodes4.iterator(); iterator4.hasNext();) {
-                Element propertyNode4 = (Element) iterator4.next();
-                return propertyNode4.attributeValue("failbuild");
-            }
-        }
-        return null;
-    }
-
     public void setScopeFilter(String scopeFilter) {
         if (!(scopeFilter.equals("public") || scopeFilter.equals("protected") || scopeFilter.equals("private"))) {
             throw new IllegalArgumentException("Invalid scope value");
@@ -233,7 +167,6 @@
                 antlibs.add((AntlibMeta) rootObject);
             }
         }
-        // antfiles.addAll(antfilesMap.values());
         Map<String, Object> root = new HashMap<String, Object>();
         root.put("projects", projects);
         root.put("antlibs", antlibs);
@@ -259,7 +192,7 @@
         return antfilesMap.values();
     }
 
-    public List<PropertyMeta> getProperties() throws IOException {
+    public List<PropertyMeta> getProperties() {
         List<PropertyMeta> propertiesList = new ArrayList<PropertyMeta>();
         for (AntFile antfile : antfilesMap.values()) {
             RootAntObjectMeta rootMeta = antfile.getRootObjectMeta();
@@ -269,6 +202,17 @@
         }
         return propertiesList;
     }
+    
+    public List<PropertyCommentMeta> getCommentProperties() {
+        List<PropertyCommentMeta> propertiesList = new ArrayList<PropertyCommentMeta>();
+        for (AntFile antfile : antfilesMap.values()) {
+            RootAntObjectMeta rootMeta = antfile.getRootObjectMeta();
+            if (rootMeta instanceof ProjectMeta) {
+                propertiesList.addAll(((ProjectMeta) rootMeta).getPropertyCommentBlocks());
+            }
+        }
+        return propertiesList;
+    }
 
     public List<PackageMeta> getPackages() throws IOException {
         List<PackageMeta> packages = new ArrayList<PackageMeta>();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/DocumentFactoryWithLocator.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+
+package com.nokia.helium.ant.data;
+
+import org.dom4j.DocumentFactory;
+import org.dom4j.Element;
+import org.dom4j.QName;
+import org.xml.sax.Locator;
+
+/**
+ * A dom4j DocumentFactory that supports adding location information into Element objects.
+ */
+@SuppressWarnings("serial")
+public class DocumentFactoryWithLocator extends DocumentFactory {
+
+    private SAXContentHandlerExt contentHandler;
+
+    public Element createElement(QName qname) {
+        ElementWithLocation element = new ElementWithLocation(qname);
+        Locator locator = contentHandler.getDocumentLocator();
+        element.setLocation(locator.getLineNumber(), locator.getColumnNumber());
+        return element;
+    }
+
+    public void setContentHandler(SAXContentHandlerExt contentHandler) {
+        this.contentHandler = contentHandler;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/ElementWithLocation.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+
+package com.nokia.helium.ant.data;
+
+import org.dom4j.QName;
+import org.dom4j.dom.DOMElement;
+
+/**
+ * An Element that additionally stores location information about the element.
+ */
+@SuppressWarnings("serial")
+public class ElementWithLocation extends DOMElement {
+    
+    private int lineNumber;
+    private int columnNumber;
+
+    public ElementWithLocation(QName qname) {
+        super(qname);
+    }
+    void setLocation(int lineNumber, int columnNumber) {
+        this.lineNumber = lineNumber;
+        this.columnNumber = columnNumber;
+    }
+
+    int getLineNumber() {
+        return lineNumber;
+    }
+
+    int getColumnNumber() {
+        return columnNumber;
+    }
+}
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/MacroMeta.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/MacroMeta.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,7 +17,6 @@
 
 package com.nokia.helium.ant.data;
 
-import java.io.IOException;
 import java.util.List;
 
 import org.dom4j.Element;
@@ -28,7 +27,7 @@
  */
 public class MacroMeta extends TaskContainerMeta {
 
-    public MacroMeta(AntObjectMeta parent, Element objNode) throws IOException {
+    public MacroMeta(AntObjectMeta parent, Element objNode) {
         super(parent, objNode);
     }
 
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/ProjectMeta.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/ProjectMeta.java	Fri Aug 13 14:59:05 2010 +0300
@@ -21,12 +21,15 @@
 import java.io.IOException;
 import java.text.BreakIterator;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 import org.dom4j.Comment;
-import org.dom4j.DocumentException;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
 import org.dom4j.Element;
 import org.dom4j.Node;
+import org.dom4j.XPath;
 
 /**
  * Meta object for an Ant project.
@@ -36,7 +39,7 @@
 
     private String description = "";
 
-    public ProjectMeta(AntFile antFile, Element node) throws DocumentException, IOException {
+    public ProjectMeta(AntFile antFile, Element node) throws IOException {
         super(antFile, node);
 
         // Only parse a project comment if it is marked
@@ -45,7 +48,6 @@
         }
 
         Element descriptionNode = ((Element) getNode()).element("description");
-        // System.out.println(descriptionNode);
         if (descriptionNode != null) {
             description = AntComment.getCleanedDocNodeText(descriptionNode);
         }
@@ -73,7 +75,6 @@
             text = getDocumentation();
         }
         BreakIterator iterator = BreakIterator.getSentenceInstance();
-        // BreakIterator iterator = BreakIterator.getLineInstance();
         iterator.setText(text);
         String summary = "";
         if (iterator.next() > 0) {
@@ -83,7 +84,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public List<TargetMeta> getTargets() throws IOException {
+    public List<TargetMeta> getTargets() {
         ArrayList<TargetMeta> objects = new ArrayList<TargetMeta>();
         List<Node> nodes = getNode().selectNodes("target");
         for (Node targetNode : nodes) {
@@ -97,7 +98,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public List<PropertyMeta> getProperties() throws IOException {
+    public List<PropertyMeta> getProperties() {
         List<PropertyMeta> properties = new ArrayList<PropertyMeta>();
         List<Node> propertyNodes = getNode().selectNodes("//property[string-length(@name)>0]");
         for (Node propNode : propertyNodes) {
@@ -111,7 +112,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public List<MacroMeta> getMacros() throws IOException {
+    public List<MacroMeta> getMacros() {
         ArrayList<MacroMeta> objects = new ArrayList<MacroMeta>();
         List<Element> nodes = getNode().selectNodes("//macrodef | //scriptdef");
         for (Element node : nodes) {
@@ -150,7 +151,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public List<PropertyCommentMeta> getPropertyCommentBlocks() throws IOException {
+    public List<PropertyCommentMeta> getPropertyCommentBlocks() {
         ArrayList<PropertyCommentMeta> objects = new ArrayList<PropertyCommentMeta>();
         List<Node> nodes = getNode().selectNodes("//comment()");
         for (Node node : nodes) {
@@ -158,9 +159,48 @@
             if (text.startsWith(DOC_COMMENT_MARKER + " @property")) {
                 PropertyCommentMeta propertyCommentMeta = new PropertyCommentMeta(this, (Comment) node);
                 propertyCommentMeta.setRuntimeProject(getRuntimeProject());
-                objects.add(propertyCommentMeta);
+                if (propertyCommentMeta.matchesScope(getScopeFilter())) {
+                    objects.add(propertyCommentMeta);
+                }
             }
         }
         return objects;
     }
+
+    @SuppressWarnings("unchecked")
+    public void getConfigSignals(String targetName, List<String> signals) {
+        XPath xpath = DocumentHelper.createXPath("//hlm:signalListenerConfig[@target='"
+            + targetName + "']");
+        xpath.setNamespaceURIs(Database.NAMESPACE_MAP);
+        List<Node> signalNodes = xpath.selectNodes(getNode());
+        for (Iterator<Node> iterator = signalNodes.iterator(); iterator.hasNext();) {
+            Element propertyNode = (Element) iterator.next();
+            String signalid = propertyNode.attributeValue("id");
+            String failbuild = findSignalFailMode(signalid, getNode().getDocument());
+            signals.add(signalid + "(" + failbuild + ")");
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private String findSignalFailMode(String signalid, Document antDoc) {
+        XPath xpath2 = DocumentHelper.createXPath("//hlm:signalListenerConfig[@id='" + signalid
+            + "']/signalNotifierInput/signalInput");
+        xpath2.setNamespaceURIs(Database.NAMESPACE_MAP);
+        List signalNodes3 = xpath2.selectNodes(antDoc);
+
+        for (Iterator iterator3 = signalNodes3.iterator(); iterator3.hasNext();) {
+            Element propertyNode3 = (Element) iterator3.next();
+            String signalinputid = propertyNode3.attributeValue("refid");
+
+            XPath xpath3 = DocumentHelper.createXPath("//hlm:signalInput[@id='" + signalinputid
+                + "']");
+            xpath3.setNamespaceURIs(Database.NAMESPACE_MAP);
+            List signalNodes4 = xpath3.selectNodes(antDoc);
+            for (Iterator iterator4 = signalNodes4.iterator(); iterator4.hasNext();) {
+                Element propertyNode4 = (Element) iterator4.next();
+                return propertyNode4.attributeValue("failbuild");
+            }
+        }
+        return null;
+    }
 }
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/PropertyCommentMeta.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/PropertyCommentMeta.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,8 +17,6 @@
 
 package com.nokia.helium.ant.data;
 
-import java.io.IOException;
-
 import org.dom4j.Comment;
 
 /**
@@ -31,9 +29,8 @@
      * 
      * @param parent The parent meta object.
      * @param propertyNode XML node representing the comment.
-     * @throws IOException
      */
-    public PropertyCommentMeta(AntObjectMeta parent, Comment comment) throws IOException {
+    public PropertyCommentMeta(AntObjectMeta parent, Comment comment) {
         super(parent, comment);
     }
 
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/PropertyMeta.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/PropertyMeta.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,8 +17,6 @@
 
 package com.nokia.helium.ant.data;
 
-import java.io.IOException;
-
 import org.apache.tools.ant.Project;
 import org.dom4j.Element;
 import org.dom4j.Node;
@@ -33,7 +31,7 @@
     public static final String BOOLEAN_TYPE = "boolean";
     public static final String DEFAULT_TYPE = STRING_TYPE;
 
-    public PropertyMeta(AntObjectMeta parent, Node propNode) throws IOException {
+    public PropertyMeta(AntObjectMeta parent, Node propNode) {
         super(parent, propNode);
     }
 
@@ -80,21 +78,10 @@
      */
     @Override
     public String getScope() {
-        String scope = getComment().getTagValue("scope");
-        if (scope.equals("")) {
-            Element parent = getNode().getParent();
-            if (parent.getName().equals("project")) {
-                scope = "public";
-                //if (getComment().getDocumentation().equals("")) {
-                //    System.out.println(getName() + " no comment");
-                //}
-            }
-            else {
-                scope = "private";
-                //if (!getComment().getDocumentation().equals("")) {
-                //    System.out.println(getName() + " no scope");
-                //}
-            }
+        String scope = super.getScope();
+        Element parent = getNode().getParent();
+        if (getComment().getTagValue("scope").length() == 0 && !parent.getName().equals("project")) {
+            scope = "private";
         }
         return scope;
     }
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/RootAntObjectMeta.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/RootAntObjectMeta.java	Fri Aug 13 14:59:05 2010 +0300
@@ -31,11 +31,13 @@
     static final String DEFAULT_PACKAGE = "(default)";
 
     private AntFile antFile;
+    private String filepath;
     private String scopeFilter;
 
     public RootAntObjectMeta(AntFile antFile, Element node) throws IOException {
         super(null, node);
         this.antFile = antFile;
+        this.filepath = antFile.getFile().getCanonicalPath();
     }
 
     public String getPackage() {
@@ -49,6 +51,15 @@
     public AntFile getAntFile() {
         return antFile;
     }
+    
+    /**
+     * Returns the location path of the object.
+     * 
+     * @return Location path string.
+     */
+    public String getFilePath() {
+        return filepath;
+    }
 
     public void setScopeFilter(String scopeFilter) {
         this.scopeFilter = scopeFilter;
@@ -76,3 +87,5 @@
         return objects;
     }
 }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/SAXContentHandlerExt.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+
+package com.nokia.helium.ant.data;
+
+import org.dom4j.DocumentFactory;
+import org.dom4j.io.SAXContentHandler;
+import org.xml.sax.Locator;
+
+/**
+ * An extension of SAXContentHandler that allows the Locator to be accessed.
+ */
+public class SAXContentHandlerExt extends SAXContentHandler {
+    private Locator locator;
+
+    public SAXContentHandlerExt(DocumentFactory documentFactory) {
+        super(documentFactory, null);
+    }
+
+    public void setDocumentLocator(Locator documentLocator) {
+        super.setDocumentLocator(documentLocator);
+        this.locator = documentLocator;
+    }
+
+    public Locator getDocumentLocator() {
+        return locator;
+    }
+}
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/TargetMeta.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/TargetMeta.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,8 +17,9 @@
 
 package com.nokia.helium.ant.data;
 
-import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
 import java.util.List;
 import java.util.StringTokenizer;
 import java.util.regex.Matcher;
@@ -38,9 +39,8 @@
  */
 public class TargetMeta extends TaskContainerMeta {
 
-    public TargetMeta(AntObjectMeta parent, Node node) throws IOException {
+    public TargetMeta(AntObjectMeta parent, Node node) {
         super(parent, node);
-        // callAntTargetVisitor();
     }
 
     public String getIf() {
@@ -79,9 +79,14 @@
 
     public List<String> getSignals() {
         List<String> signals = super.getSignals();
-        List<String> additionalSignals = getDatabase().getSignals(getName());
-        if (additionalSignals != null) {
-            signals.addAll(additionalSignals);
+        Collection<AntFile> antFiles = getDatabase().getAntFiles();
+        for (Iterator<AntFile> iterator = antFiles.iterator(); iterator.hasNext();) {
+            AntFile antFile = (AntFile) iterator.next();
+            RootAntObjectMeta rootObjectMeta = antFile.getRootObjectMeta();
+            if (rootObjectMeta instanceof ProjectMeta) {
+                ProjectMeta projectMeta = (ProjectMeta)rootObjectMeta;
+                projectMeta.getConfigSignals(getName(), signals);
+            }
         }
         return signals;
     }
@@ -120,7 +125,6 @@
                 String propertyName = node.attributeValue("name");
                 if (propertyName != null && !propertyList.contains(propertyName)) {
                     propertyList.add(propertyName);
-                    // System.out.println("prop "+propertyName);
                     log("property matches :" + propertyName, Project.MSG_DEBUG);
                 }
             }
@@ -129,24 +133,20 @@
         private void extractUsedProperties(String text) {
             Pattern p1 = Pattern.compile("\\$\\{([^@$}]*)\\}");
             Matcher m1 = p1.matcher(text);
-            log(text, Project.MSG_DEBUG);
             while (m1.find()) {
                 String group = m1.group(1);
                 if (!propertyList.contains(group)) {
                     propertyList.add(group);
-                    // System.out.println("m1 "+group + " "+ text);
                 }
                 log("property matches: " + group, Project.MSG_DEBUG);
             }
 
             Pattern p2 = Pattern.compile("\\$\\{([^\n]*\\})\\}");
             Matcher m2 = p2.matcher(text);
-            log(text, Project.MSG_DEBUG);
             while (m2.find()) {
                 String group = m2.group(1);
                 if (!propertyList.contains(group)) {
                     propertyList.add(group);
-                    // System.out.println("m2 "+group + " "+ text);
                 }
                 log("property matches: " + group, Project.MSG_DEBUG);
             }
@@ -158,7 +158,6 @@
                 String group = m3.group(1);
                 if (!propertyList.contains(group)) {
                     propertyList.add(group);
-                    // System.out.println("m3 "+group + " "+ text);
                 }
                 log("property matches: " + group, Project.MSG_DEBUG);
             }
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/TaskContainerMeta.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/TaskContainerMeta.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,7 +16,6 @@
  */
 package com.nokia.helium.ant.data;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -35,7 +34,7 @@
     private ArrayList<String> signals;
     private ArrayList<String> executables;
 
-    public TaskContainerMeta(AntObjectMeta parent, Node node) throws IOException {
+    public TaskContainerMeta(AntObjectMeta parent, Node node) {
         super(parent, node);
         callAntTargetVisitor();
     }
@@ -56,7 +55,7 @@
         return executables;
     }
 
-    private void callAntTargetVisitor() throws IOException {
+    private void callAntTargetVisitor() {
         // Add antcall/runtarget dependencies
         antcallTargets = new ArrayList<String>();
         logs = new ArrayList<String>();
@@ -84,7 +83,6 @@
         @Override
         public void visit(Element node) {
             String name = node.getName();
-            // System.out.println(name);
             if (name.equals("antcall") || name.equals("runtarget")) {
                 String text = node.attributeValue("target");
                 targetList.add(text);
@@ -106,17 +104,10 @@
             }
 
             if (name.endsWith("signal") || name.endsWith("execSignal")) {
-                // System.out.println(name);
-                String signalid = node.attributeValue("name"); // getProject().replaceProperties(node.attributeValue("name"));
-                // String failbuild = signalType(signalid, node.getDocument());
+                String signalid = node.attributeValue("name");
 
                 if (signalList != null) {
-                    // if (failbuild != null) {
-                    // signalList.add(signalid + "," + failbuild);
-                    // }
-                    // else {
                     signalList.add(signalid);
-                    // }
                 }
             }
 
@@ -130,8 +121,7 @@
         private void addLog(String text) {
             if (text != null && logList != null) {
                 for (String log : text.split(" ")) {
-                    // TODO
-                    String fulllogname = log; // getProject().replaceProperties(log);
+                    String fulllogname = log;
                     if (!logList.contains(log) && (fulllogname.endsWith(".log") || fulllogname.endsWith(".html"))) {
                         log = log.replace("--log=", "");
                         logList.add(log);
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/TypeMeta.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/TypeMeta.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,8 +17,6 @@
 
 package com.nokia.helium.ant.data;
 
-import java.io.IOException;
-
 import org.dom4j.Element;
 
 /**
@@ -26,7 +24,7 @@
  */
 public class TypeMeta extends AntObjectMeta {
 
-    public TypeMeta(AntObjectMeta parent, Element node) throws IOException {
+    public TypeMeta(AntObjectMeta parent, Element node) {
         super(parent, node);
     }
 
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/database.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/database.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -25,6 +25,7 @@
             <description>${macro.description}</description>
             <scope>${macro.scope}</scope>
             <deprecated>${macro.deprecated}</deprecated>
+            <since>${macro.since}</since>
             <location>${macro.location}</location>
             <summary>${macro.summary}</summary>
             <documentation>${wiki(macro.documentation)}</documentation>
@@ -46,6 +47,7 @@
         <description>${wiki(project.description)}</description>
         <scope>${project.scope}</scope>
         <deprecated>${project.deprecated}</deprecated>
+        <since>${project.since}</since>
         <location>${project.location}</location>
         <summary>${project.summary}</summary>
         <documentation>${wiki(project.documentation)}</documentation>
@@ -68,6 +70,7 @@
             <description>${target.description}</description>
             <scope>${target.scope}</scope>
             <deprecated>${target.deprecated}</deprecated>
+            <since>${target.since}</since>
             <location>${target.location}</location>
             <summary>${target.summary}</summary>
             <documentation>${wiki(target.documentation)}</documentation>
@@ -109,6 +112,7 @@
             <editable>${property.editable}</editable>
             <scope>${property.scope}</scope>
             <deprecated>${property.deprecated}</deprecated>
+            <since>${property.since}</since>
             <location>${property.location}</location>
             <summary>${property.summary}</summary>
             <documentation>${wiki(property.documentation)}</documentation>
@@ -118,13 +122,14 @@
         </#list>
         
         <#list project.propertyCommentBlocks as property>
-        <property>
+        <property definedInComment="true">
             <name>${property.name}</name>
             <defaultValue>No default value.</defaultValue>
             <type>${property.type}</type>
             <editable>${property.editable}</editable>
             <scope>${property.scope}</scope>
             <deprecated>${property.deprecated}</deprecated>
+            <since>${property.since}</since>
             <location>${property.location}</location>
             <summary>${property.summary}</summary>
             <documentation>${wiki(property.documentation)}</documentation>
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/taskdefs/AntConfigLintTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/taskdefs/AntConfigLintTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -83,7 +83,6 @@
     public void execute() {
         errorsTotal = 0;
         try {
-            System.out.println(getProject());
             db = new Database(getProject());
             if (checks.size() == 0) {
                 throw new BuildException("No checks defined.");
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/taskdefs/DatabaseTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/taskdefs/DatabaseTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -29,18 +29,20 @@
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.types.FileSet;
 import org.apache.tools.ant.types.ResourceCollection;
+
 import com.nokia.helium.ant.data.Database;
 
 /**
- * Reads the current Ant project and any additional filesets and generates a xml
- * file with a summary of targets, macros and properties.
+ * Reads the current Ant project and/or Ant files and generates a XML file with a summary
+ * of targets, macros and properties.
  * 
- * @ant.task name="database"
+ * @ant.task name="database" category="Database"
  */
 public class DatabaseTask extends Task {
+    private static final String DEFAULT_SCOPE = "public";
+
     private File outputFile;
-    // private boolean excludeParsedFiles
-    private String scope = "public";
+    private String scope = DEFAULT_SCOPE;
     private boolean filesetonly;
     private List<ResourceCollection> rcs = new ArrayList<ResourceCollection>();
 
@@ -70,14 +72,13 @@
     public void setOutput(File outputFile) {
         this.outputFile = outputFile;
     }
-    
-    public void setFilesetOnly(boolean f)
-    {
-        filesetonly = f; 
+
+    public void setFilesetOnly(boolean filesetonly) {
+        this.filesetonly = filesetonly;
     }
 
     /**
-     * Defines what level of visibility to display Ant objects at.
+     * Defines what level of visibility to display Ant objects at. Default value is "public".
      * 
      * @param scope The visibility level, either public, protected or private.
      */
@@ -110,10 +111,12 @@
 
             // Output the database file
             Database db;
-            if (filesetonly)
+            if (filesetonly) {
                 db = new Database(null);
-            else
+            }
+            else {
                 db = new Database(getProject());
+            }
             db.setScopeFilter(scope);
             db.addAntFilePaths(antFilePaths);
             FileWriter out = new FileWriter(outputFile);
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/types/WrongTypePropertyCheck.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/types/WrongTypePropertyCheck.java	Fri Aug 13 14:59:05 2010 +0300
@@ -30,9 +30,6 @@
 public class WrongTypePropertyCheck extends AntLintCheck {
     public static final String DESCRIPTION = "Property value does not match type";
 
-    public WrongTypePropertyCheck() {
-    }
-
     @Override
     public void run() throws IOException {
         List<PropertyMeta> properties = getDb().getProperties();
--- a/buildframework/helium/sf/java/antdata/tests/data/test_project.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/tests/data/test_project.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -1,6 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!-- 
 ============================================================================ 
-Name        : antlib.xml 
+Name        : test_project.ant.xml 
 Part of     : Helium AntLib
 
 Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
@@ -79,7 +80,7 @@
         </sequential>
     </macrodef>
     
-    <!-- @property user.defined.property
+    <!--* @property user.defined.property
         
     This property must be defined by the user.
     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antdata/tests/data/test_project_scopes.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,69 @@
+<!-- 
+============================================================================ 
+Name        : test_project.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:
+
+============================================================================
+-->
+<!-- 
+This project is part of the tests package...
+        
+@package tests
+-->
+<project name="test_project" default="check-target">
+    
+    <!-- This is a property comment summary.
+    @scope public
+    -->
+    <property name="property.public" value="value1"/>
+    
+    <!-- This is a property comment summary.
+    @scope private
+    -->
+    <property name="property.private" value="value2"/>
+
+    
+    <!--* @property user.defined.property.public
+
+    @scope public
+    -->
+    
+    <!--* @property user.defined.property.private
+
+    @scope private
+    -->
+    
+    <target name="fubar">
+        <!-- This is a property comment summary.
+        @scope public
+        -->
+        <property name="nested.property.public" value="value1"/>
+        
+        <!-- This is a property comment summary.
+        @scope private
+        -->
+        <property name="nested.property.private" value="value2"/>
+        
+        <!-- This is a property comment summary.
+        -->
+        <property name="nested.property.undefined_scope" value="value3"/>
+    </target>
+
+</project>
+
+
+
--- a/buildframework/helium/sf/java/antdata/tests/src/com/nokia/helium/ant/data/tests/TestMeta.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/tests/src/com/nokia/helium/ant/data/tests/TestMeta.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,6 +17,8 @@
 
 package com.nokia.helium.ant.data.tests;
 
+import static org.junit.Assert.assertTrue;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.StringWriter;
@@ -28,7 +30,6 @@
 import org.dom4j.DocumentHelper;
 import org.dom4j.Node;
 import org.junit.Test;
-import static org.junit.Assert.*;
 
 import com.nokia.helium.ant.data.Database;
 
@@ -82,4 +83,32 @@
         assertTrue(macro.valueOf("scope").equals("public"));
         assertTrue(macro.valueOf("deprecated").equals(""));
     }
+    
+    @Test
+    public void testProjectMetaScope() throws IOException, DocumentException {
+        readPropertyTotal("public", 3);
+        readPropertyTotal("private", 7);
+    }
+
+    private void readPropertyTotal(String scope, int total) throws IOException, DocumentException {
+        Database db = new Database(null, scope);
+        List<String> paths = new ArrayList<String>();
+        File testAntFile = new File(System.getProperty("testdir"), "tests/data/test_project_scopes.ant.xml");
+        paths.add(testAntFile.getCanonicalPath());
+        db.setScopeFilter(scope);
+        db.addAntFilePaths(paths);
+        StringWriter out = new StringWriter();
+        db.toXML(out);
+
+        Document doc = DocumentHelper.parseText(out.toString());
+        System.out.println(doc.asXML());
+
+        Node database = doc.selectSingleNode("//antDatabase");
+        
+        Node project = database.selectSingleNode("project");
+
+        List properties = project.selectNodes("property");
+        System.out.println(properties.size());
+        assertTrue(properties.size() == total);
+    }
 }
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/antlib.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -45,7 +45,8 @@
     <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"/>
-
+    <typedef name="checkTryCatchBlock" classname="com.nokia.helium.antlint.ant.types.CheckTryCatchBlock"/>
+    
     <!-- Reporters -->
     <typedef name="antlintConsoleReporter" classname="com.nokia.helium.antlint.ant.types.ConsoleReporter"/>
     <typedef name="antlintCheckstyleReporter" classname="com.nokia.helium.antlint.ant.types.CheckstyleXmlReporter"/>
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/taskdefs/AntLintTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/taskdefs/AntLintTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -21,10 +21,12 @@
 import java.util.ArrayList;
 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 com.nokia.helium.antlint.ant.AntlintException;
 import com.nokia.helium.antlint.ant.Reporter;
 import com.nokia.helium.antlint.ant.Severity;
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/AbstractCheck.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/AbstractCheck.java	Fri Aug 13 14:59:05 2010 +0300
@@ -22,6 +22,7 @@
 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;
 
@@ -31,7 +32,7 @@
  */
 public abstract class AbstractCheck extends DataType implements Check {
 
-    private boolean enabled;
+    private boolean enabled = true;
     private Severity severity;
     private Reporter reporter;
 
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/AbstractScriptCheck.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/AbstractScriptCheck.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,11 +18,11 @@
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.IOException;
 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;
 
@@ -75,8 +75,9 @@
                 output2.write("try:\n");
                 for (String line : text.split("\n")) {
                     if (line.trim().startsWith("import ")
-                            || line.trim().startsWith("from "))
+                            || line.trim().startsWith("from ")) {
                         output2.write("    " + line + "\n");
+                    }
                 }
 
                 output2.write("except ImportError, e:\n");
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckAntCall.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckAntCall.java	Fri Aug 13 14:59:05 2010 +0300
@@ -29,8 +29,8 @@
 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
+ * <code>CheckAntCall</code> is used to check whether antcall is used with no param elements and
+ * calls the target with no dependencies
  * 
  * <pre>
  * Usage:
@@ -63,8 +63,7 @@
     /**
      * Check against the given node.
      * 
-     * @param node
-     *            is the node to check.
+     * @param node is the node to check.
      */
     @SuppressWarnings("unchecked")
     private void checkAntCalls(Element node) {
@@ -72,18 +71,11 @@
             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);
+                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);
                 }
             }
         }
@@ -104,7 +96,8 @@
         try {
             doc = saxReader.read(antFilename);
             elementTreeWalk(doc.getRootElement(), "target", targetNodes);
-        } catch (DocumentException e) {
+        }
+        catch (DocumentException e) {
             throw new AntlintException("Invalid XML file " + e.getMessage());
         }
 
@@ -125,16 +118,14 @@
     /**
      * Check the availability dependent targets of the given target.
      * 
-     * @param targetName
-     *            is the target for which dependent targets to be loked up.
+     * @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);
+        Target targetDependency = (Target) getProject().getTargets().get(targetName);
         dependencyCheck = targetDependency != null
-                && targetDependency.getDependencies().hasMoreElements();
+            && targetDependency.getDependencies().hasMoreElements();
         return dependencyCheck;
     }
 
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckDuplicateNames.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckDuplicateNames.java	Fri Aug 13 14:59:05 2010 +0300
@@ -56,13 +56,14 @@
 
         for (String macroName : macros) {
             if (macros.contains(macroName + "Macro")
-                    || macros.contains(macroName + "macro"))
+                    || macros.contains(macroName + "macro")) {
                 this.getReporter()
                         .report(
                                 this.getSeverity(),
                                 macroName + " and " + macroName + "Macro"
                                         + " found duplicate name",
                                 this.getAntFile(), 0);
+            }
         }
     }
 
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckIndentation.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckIndentation.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,12 +17,13 @@
 package com.nokia.helium.antlint.ant.types;
 
 import java.io.File;
+import java.io.IOException;
 
+import javax.xml.parsers.ParserConfigurationException;
 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;
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckProjectName.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckProjectName.java	Fri Aug 13 14:59:05 2010 +0300
@@ -53,9 +53,6 @@
 
     /**
      * {@inheritDoc}
-     * 
-     * @throws SAXException
-     * @throws ParserConfigurationException
      */
     public void run(Element node) {
         if (node.getName().equals("project")) {
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckPropertyName.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckPropertyName.java	Fri Aug 13 14:59:05 2010 +0300
@@ -23,7 +23,6 @@
 import java.util.regex.Pattern;
 
 import org.dom4j.Document;
-
 import org.dom4j.DocumentException;
 import org.dom4j.Element;
 import org.dom4j.io.SAXReader;
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckPythonTasks.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckPythonTasks.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,10 +18,10 @@
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.IOException;
 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;
@@ -93,8 +93,9 @@
             PrintWriter output = new PrintWriter(new FileOutputStream(file));
             if (!text.equals("")) {
                 output.write("def abc():");
-                for (String line : text.split("\n"))
+                for (String line : text.split("\n")) {
                     output.write("    " + line + "\n");
+                }
             }
             output.close();
         } catch (IOException e) {
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckScriptDef.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckScriptDef.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,12 +18,12 @@
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.IOException;
 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;
@@ -127,19 +127,22 @@
             PrintWriter output = new PrintWriter(new FileOutputStream(file));
 
             for (String line : text.split("\n")) {
-                if (line.trim().startsWith("import"))
+                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");
+            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");
+                if (!line.trim().startsWith("import")) {
+                    output.write("        " + line + "\n");
+                }
             }
-            output.write("} }");
+            output.write("    }\n");
+            output.write("}\n");
             output.close();
         } catch (IOException e) {
             throw new BuildException("Not able to write Beanshell File "
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckTabCharacter.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckTabCharacter.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,15 +17,16 @@
 package com.nokia.helium.antlint.ant.types;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.List;
-import java.io.IOException;
 
+import javax.xml.parsers.ParserConfigurationException;
 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 org.xml.sax.SAXException;
 
 import com.nokia.helium.antlint.AntLintHandler;
 import com.nokia.helium.antlint.ant.AntlintException;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckTryCatchBlock.java	Fri Aug 13 14:59:05 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.io.IOException;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckTryCatchBlock</code> is used to check for empty and more than one
+ * catch elements in a given try-catch block.
+ * 
+ * <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;checkTryCatchBlock&quot; severity=&quot;error&quot; enabled=&quot;true&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="checkTryCatchBlock" category="AntLint"
+ * 
+ */
+public class CheckTryCatchBlock extends AbstractCheck {
+
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public File getAntFile() {
+        return antFile;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    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();
+            TryCatchBlockHandler handler = new TryCatchBlockHandler();
+            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());
+        }
+    }
+
+    public String toString() {
+        return "CheckTryCatchBlock";
+    }
+
+    private class TryCatchBlockHandler extends DefaultHandler {
+
+        private Locator locator;
+        private int catchCounter;
+
+        /**
+         * {@inheritDoc}
+         */
+        public void setDocumentLocator(Locator locator) {
+            this.locator = locator;
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public void startElement(String uri, String localName, String qName,
+                Attributes attributes) throws SAXException {
+            if (localName.equals("trycatch")) {
+                catchCounter = 0;
+            } else if (localName.equals("catch")) {
+                catchCounter++;
+            }
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public void endElement(String uri, String localName, String qName)
+            throws SAXException {
+            if (localName.equals("trycatch") && catchCounter == 0) {
+                getReporter().report(getSeverity(),
+                        "<trycatch> block found without <catch> element",
+                        getAntFile(), locator.getLineNumber());
+            } else if (localName.equals("trycatch") && catchCounter > 1) {
+                getReporter().report(
+                        getSeverity(),
+                        "<trycatch> block found with " + catchCounter
+                                + " <catch> elements.", getAntFile(),
+                        locator.getLineNumber());
+            }
+        }
+    }
+}
--- a/buildframework/helium/sf/java/antlint/tests/antunit/test_antlint.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/tests/antunit/test_antlint.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -329,5 +329,23 @@
         </au:assertTrue>
     </target>
     
-    
+    <target name="test-check-try-catch-block-with-empty-catch-block">
+        <au:expectfailure>
+            <hlm:antlint>
+                <fileset file="${antlint.test.dir}/data/sample.ant.xml"/>
+                <hlm:checkTryCatchBlock severity="error" />
+            </hlm:antlint>
+        </au:expectfailure>
+        <au:assertLogContains text="trycatch> block found without " level="info"/>
+    </target>
+
+    <target name="test-check-try-catch-block-with-multiple-catch-block">
+        <au:expectfailure>
+            <hlm:antlint>
+                <fileset file="${antlint.test.dir}/data/sample.ant.xml"/>
+                <hlm:checkTryCatchBlock severity="error" />
+            </hlm:antlint>
+        </au:expectfailure>
+        <au:assertLogContains text="trycatch> block found with 2 " level="info"/>
+    </target>
 </project>
--- a/buildframework/helium/sf/java/antlint/tests/data/sample.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/tests/data/sample.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -247,5 +247,52 @@
         <echo>checking indentation</echo>
      </target>
      
+    <target name="check-empty-catch-finally-block-in-trycatch">
+        <echo>checking for empty catch block in try-catch</echo>
+        <trycatch property="test.try">
+            <try>
+                <condition/>
+            </try>
+        </trycatch>
+    </target> 
+
+    <target name="check-empty-catch-block-in-trycatch">
+        <echo>checking for empty catch block in try-catch</echo>
+        <trycatch property="test.try">
+            <try>
+                <condition/>
+            </try>
+            <finally>
+                <echo> inside finally </echo>
+            </finally>
+        </trycatch>
+    </target> 
+
+    <target name="check-empty-finally-block-in-trycatch">
+        <echo>checking for empty catch block in try-catch</echo>
+        <trycatch property="test.try">
+            <try>
+                <condition/>
+            </try>
+            <catch>
+                <echo> inside catch </echo>
+            </catch>
+        </trycatch>
+    </target> 
+    
+    <target name="check-multiple-catch-blocks-in-trycatch">
+        <echo>checking for empty catch block in try-catch</echo>
+        <trycatch property="test.try">
+            <try>
+                <condition/>
+            </try>
+            <catch>
+                <echo> inside catch1 </echo>
+            </catch>
+            <catch>
+                <echo> inside catch2 </echo>
+            </catch>
+        </trycatch>
+    </target> 
      
 </project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/taskdefs/CcmTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/taskdefs/CcmTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -27,6 +27,8 @@
 import java.util.jar.JarFile;
 import java.util.zip.ZipEntry;
 
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
 import org.python.util.PythonInterpreter;
 
 import com.nokia.helium.ccmtask.ant.commands.AddTask;
@@ -34,6 +36,8 @@
 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.CreateReleaseTag;
+import com.nokia.helium.ccmtask.ant.commands.DeleteReleaseTag;
 import com.nokia.helium.ccmtask.ant.commands.Reconcile;
 import com.nokia.helium.ccmtask.ant.commands.Role;
 import com.nokia.helium.ccmtask.ant.commands.Snapshot;
@@ -41,10 +45,6 @@
 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.
@@ -220,7 +220,6 @@
     /**
      * 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");
--- a/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/taskdefs/ccmtask.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/taskdefs/ccmtask.py	Fri Aug 13 14:59:05 2010 +0300
@@ -36,18 +36,18 @@
 logger = logging.getLogger("ccm.ant")
 session = None
 
-def execute_update(command):
+def execute_update(session, command):
     java_ccmtask.log(str('Updating project: ' + command.getProject()))
     project = session.create(command.getProject())
     project.update()
 
-def execute_role(command):
+def execute_role(session, 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):
+def execute_synchronize(session, command):
     if not command.getProject():
         raise Exception("The 'project' attribute has not been defined.")
     java_ccmtask.log(str('Synchronizing project: ' + command.getProject()))
@@ -55,14 +55,14 @@
     project = session.create(command.getProject())
     project.sync(command.getRecursive())    
         
-def execute_reconcile(command):
+def execute_reconcile(session, 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):
+def execute_snapshot(session, command):
     if not command.getProject():
         raise Exception("The 'project' attribute has not been defined.")
     if not command.getDir():
@@ -74,7 +74,7 @@
     else:
         project.snapshot(command.getDir(), command.getRecursive())
 
-def execute_changereleasetag(command):
+def execute_changereleasetag(session, command):
     if not command.getFolder():
         raise Exception("The 'folder' attribute has not been defined.")
     if not command.getReleaseTag():
@@ -86,7 +86,7 @@
         if task.release != str(command.getReleaseTag()):
             task.release = str(command.getReleaseTag())
             
-def execute_checkout(command):
+def execute_checkout(session, 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()))
@@ -114,7 +114,7 @@
             purpose = None
         project.checkout(session.create(command.getRelease()), version, purpose, recursive)
 
-def execute_createreleasetag(command):
+def execute_createreleasetag(session, command):
     java_ccmtask.log(str('creating a release tag'))
     if not command.getProject():
         raise Exception("The 'project' attribute has not been defined.")
@@ -123,7 +123,7 @@
         new_release_tag = command.getNewTag();
         project.create_release_tag(command.getRelease(), new_release_tag)
 
-def execute_deletereleasetag(command):
+def execute_deletereleasetag(session, command):
     java_ccmtask.log(str('deleting a release tag'))
     if not command.getProject():
         raise Exception("The 'project' attribute has not been defined.")
@@ -132,7 +132,7 @@
         new_release_tag = command.getNewTag();
         project.delete_release_tag(command.getRelease(), new_release_tag)
 
-def execute_workarea(command):
+def execute_workarea(session, 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()))
@@ -163,11 +163,11 @@
         wat = None
     project.work_area(maintain, recursive, relative, path, pst, wat)
 
-def execute_addtask(command):
+def execute_addtask(session, command):
     if command.getFolder() != None:
         tasks = []        
         ccmfolder = session.create("Folder " + command.getFolder())
-        role = find_folder_information(command)
+        role = find_folder_information(session, command)
         if role == "build_mgr":
             java_ccmtask.log("Changing role to %s" % role)
             session.role = "build_mgr"
@@ -181,7 +181,7 @@
         for task in tasks:
             ccmfolder.append(task)
     
-def find_folder_information(command):
+def find_folder_information(session, command):
     cmdline = "folder -sh i " + command.getFolder()    
     result = session.execute(cmdline)
     result_array = str(result).split('\r')
@@ -193,7 +193,7 @@
             else:
                 return "developer"
 
-def execute_exists(command):
+def execute_exists(session, command):
     fpn = None
     if command.getObject() != None:
         fpn = command.getObject()
@@ -210,12 +210,11 @@
     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
+def execute_close(session, command):
+    java_ccmtask.log(str("Closing session %s." % str(session)))
+    if hasattr(session, 'close_on_exit'):
+        session.close_on_exit = True    
     session.close()
-    session = None
     
 def referenceToObject(obj):
     if obj.isReference() == 1:
@@ -235,9 +234,9 @@
     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)
+    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)
@@ -249,7 +248,7 @@
     method_name = 'execute_' + command.getName()
     method = sys.modules['__main__'].__dict__[method_name]
     try:
-        method(command)
+        method(session, command)
     except Exception, e:
         if java_ccmtask.getVerbose() == 1:
             import traceback
--- a/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/types/SessionSet.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/types/SessionSet.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,8 +17,9 @@
  
 package com.nokia.helium.ccmtask.ant.types;
 
+import java.util.Vector;
+
 import org.apache.tools.ant.types.DataType;
-import java.util.Vector;
 
 /**
  * This class implement an Ant Datatype that represents a set of
--- a/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/types/TaskSet.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/types/TaskSet.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,8 +17,9 @@
  
 package com.nokia.helium.ccmtask.ant.types;
 
+import java.util.Vector;
+
 import org.apache.tools.ant.types.DataType;
-import java.util.Vector;
 
 /**
  * This class abstract a synergy session.
--- a/buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/CheckEngine.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/CheckEngine.java	Fri Aug 13 14:59:05 2010 +0300
@@ -46,7 +46,7 @@
     /**
      * Method verifies Ant version.
      */
-    public void verifyAntVersion() {
+    public void verifyAntVersion() throws CheckToolException {
         String expVersion = configuration.getProperty("ant.version");
         String errorMsg = "Supported Ant version is not defined in 'helium.basic.tools.config' file under helium config folder.";
         verifyIsExpectedToolVersionConfigured(expVersion, errorMsg);
@@ -59,7 +59,7 @@
     /**
      * Method verifies Python version.
      */
-    public void verifyPythonVersion() {
+    public void verifyPythonVersion() throws CheckToolException {
         String expVersion = configuration.getProperty("python.version");
         String errorMsg = "Supported Python version is not defined in 'helium.basic.tools.config' file under helium config folder.";
         verifyIsExpectedToolVersionConfigured(expVersion, errorMsg);
--- a/buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/CheckToolException.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/CheckToolException.java	Fri Aug 13 14:59:05 2010 +0300
@@ -21,7 +21,7 @@
  * failure occurred during checking of tools required by the Helium.
  * 
  */
-public class CheckToolException extends RuntimeException {
+public class CheckToolException extends Exception {
 
     private static final long serialVersionUID = 1L;
 
--- a/buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/HeliumToolsCheckerMain.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/HeliumToolsCheckerMain.java	Fri Aug 13 14:59:05 2010 +0300
@@ -14,6 +14,7 @@
  * Description: 
  *
  */
+
 package com.nokia.helium.checktools;
 
 import java.io.FileInputStream;
@@ -21,12 +22,11 @@
 import java.util.Properties;
 
 /**
- * HeliumToolsCheckerMain is the main class which is used to trigger the
- * checking of basic tools required by the Helium.
+ * HeliumToolsCheckerMain is the main class which is used to trigger the checking of basic tools
+ * required by the Helium.
  * 
- * Note: HeliumToolsCheckerMain requires a '-config' parameter to be passed as
- * the argument. The config parameter should be followed by a valid location of
- * the configuration file.
+ * Note: HeliumToolsCheckerMain requires a '-config' parameter to be passed as the argument. The
+ * config parameter should be followed by a valid location of the configuration file.
  * 
  */
 public final class HeliumToolsCheckerMain {
@@ -34,12 +34,10 @@
     private Properties configuration;
     private CheckEngine checkEngine;
 
-    
     /**
      * Create an instance of HeliumToolsCheckerMain.
      * 
-     * @param configFile
-     *            is the config file to read.
+     * @param configFile is the config file to read.
      */
     private HeliumToolsCheckerMain(String configFile) {
         loadConfiguration(configFile);
@@ -54,7 +52,7 @@
         try {
             checkEngine.verifyAntVersion();
         } catch (CheckToolException e) {
-            System.out.println("*** Error: " + e.getMessage());
+            println("*** Error: " + e.getMessage());
         }
     }
 
@@ -65,7 +63,7 @@
         try {
             checkEngine.verifyPythonVersion();
         } catch (CheckToolException e) {
-            System.out.println("*** Error: " + e.getMessage());
+            println("*** Error: " + e.getMessage());
         }
     }
 
@@ -81,16 +79,14 @@
     /**
      * Method loads the configuration details from the given file.
      * 
-     * @param configFile
-     *            is the configuration file to be loaded.
+     * @param configFile is the configuration file to be loaded.
      */
     private void loadConfiguration(String configFile) {
         try {
             configuration = new Properties();
             configuration.load(new FileInputStream(configFile));
         } catch (IOException th) {
-            System.out.println("Error occured while loading config file: "
-                    + configFile);
+            println("Error occured while loading config file: " + configFile);
             System.exit(-1);
         }
     }
@@ -98,8 +94,7 @@
     /**
      * Main method to trigger tool check.
      * 
-     * @param args
-     *            contains command line arguments passed.
+     * @param args contains command line arguments passed.
      * @throws Exception
      */
     public static void main(String[] args) throws Exception {
@@ -108,29 +103,31 @@
 
         // check for configuration file
         if (args.length == 2 && args[0].equalsIgnoreCase("-config")) {
-            if (args[1] == null
-                    || (args[1] != null && args[1].trim().isEmpty())) {
-                System.out.println("*** Error: Parameter '-config' not set for HeliumToolsCheckerMain");
+            if (args[1] == null || (args[1] != null && args[1].trim().isEmpty())) {
+                println("*** Error: Parameter '-config' not set for HeliumToolsCheckerMain");
                 System.exit(-1);
             }
             configFile = args[1];
         }
 
         if (configFile != null) {
-            HeliumToolsCheckerMain checkerMain = new HeliumToolsCheckerMain(
-                    configFile);
+            HeliumToolsCheckerMain checkerMain = new HeliumToolsCheckerMain(configFile);
             checkerMain.checkAnt();
             checkerMain.checkPython();
             if (checkerMain.checkFailed()) {
                 System.exit(-1);
             }
-        } else {
-            System.out.println("*** Error: Missing '-config' argument for HeliumToolsCheckerMain");
-            System.out
-                    .println("Usage: java [main-class-name] -config [location of configuration file]");
-            System.out
-                    .println("Example: java com.nokia.helium.checktools.HeliumToolsCheckerMain -config \"config/helium.basic.tools.config\"");
+        }
+        else {
+            println("*** Error: Missing '-config' argument for HeliumToolsCheckerMain");
+            println("Usage: java [main-class-name] -config [location of configuration file]");
+            println("Example: java com.nokia.helium.checktools.HeliumToolsCheckerMain -config \"config/helium.basic.tools.config\"");
             System.exit(-1);
         }
     }
+
+    @SuppressWarnings("PMD.SystemPrintln")
+    public static void println(String text) {
+        System.out.println(text);
+    }
 }
--- a/buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/OSResolver.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/OSResolver.java	Fri Aug 13 14:59:05 2010 +0300
@@ -48,7 +48,7 @@
      *            is the command to be formatted.
      * @return the formatted OS specific command string.
      */
-    public static String getCommand(String cmd) {
+    public static String getCommand(String cmd) throws CheckToolException {
         StringBuffer buffer = new StringBuffer();
         if (isOs("windows")) {
             if (!isOs("win9x")) {
@@ -71,7 +71,7 @@
      *            The OS family
      * @return true if the OS matches; otherwise false.
      */
-    public static boolean isOs(String family) {
+    public static boolean isOs(String family) throws CheckToolException {
         boolean retValue = false;
         if (family != null) {
             // windows probing logic relies on the word 'windows' in
--- a/buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/ToolChecker.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/checktools/src/com/nokia/helium/checktools/ToolChecker.java	Fri Aug 13 14:59:05 2010 +0300
@@ -38,7 +38,7 @@
      *            is the message to be displayed on failure.
      */
     public void verifyIsExpectedToolVersionConfigured(String expVersion,
-            String errorMsg) {
+            String errorMsg) throws CheckToolException {
         if (expVersion == null
                 || (expVersion != null && expVersion.trim().isEmpty())) {
             raiseError(errorMsg);
@@ -58,16 +58,17 @@
      *            is the message to be displayed on failure.
      */
     public void verifyToolVersion(String command, String expVersion,
-            String versionString2match, String errorMsg) {
+            String versionString2match, String errorMsg) throws CheckToolException {
         String[] versions = expVersion.split(",");
         String installedVersion = getInstalledToolVersion(command);
         boolean valid = false;
         for (String expver : versions) {
-            if (!valid)
+            if (!valid) {
                 valid = installedVersion.contains(versionString2match + expver);
+            }
         }
         if (!valid) {
-            System.out.println("Installed Version : " + installedVersion);
+            HeliumToolsCheckerMain.println("Installed Version : " + installedVersion);
             raiseError(errorMsg);
         }
     }
@@ -78,7 +79,7 @@
      * @param message
      *            is the failure message.
      */
-    public void raiseError(String message) {
+    public void raiseError(String message) throws CheckToolException {
         incrementErrorCount();
         throw new CheckToolException(message);
     }
@@ -90,7 +91,7 @@
      *            is the command string to execute.
      * @return the actual tool version.
      */
-    public String getInstalledToolVersion(String cmd) {
+    public String getInstalledToolVersion(String cmd) throws CheckToolException {
         String input = null;
         String error = null;
         try {
@@ -129,10 +130,12 @@
             versionString = os.toString();
         } finally {
             try {
-                if (os != null)
+                if (os != null) {
                     os.close();
-                if (is != null)
+                }
+                if (is != null) {
                     is.close();
+                }
             } catch (IOException e) {
                 e = null; // ignore the exception
             }
--- a/buildframework/helium/sf/java/checktools/tests/src/com/nokia/helium/checktools/tests/TestCheckEngine.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/checktools/tests/src/com/nokia/helium/checktools/tests/TestCheckEngine.java	Fri Aug 13 14:59:05 2010 +0300
@@ -53,7 +53,7 @@
     /**
      * Method tests the ant version with valid version set.
      */
-    public void testVerifyAntVersionValid() {
+    public void testVerifyAntVersionValid() throws CheckToolException {
         CheckToolException cte = null;
         Properties props = new Properties();
         String str = new ToolChecker().getInstalledToolVersion(OSResolver
@@ -73,7 +73,7 @@
     /**
      * Method tests the python version with invalid version set.
      */
-    public void testVerifyPythonVersionInValid() {
+    public void testVerifyPythonVersionInValid() throws CheckToolException {
         CheckToolException cte = null;
         Properties props = new Properties();
         props.setProperty("python.version", "0.0.0.0");
@@ -91,7 +91,7 @@
     /**
      * Method tests the python version with valid version set.
      */
-    public void testVerifyPythonVersionValid() {
+    public void testVerifyPythonVersionValid() throws CheckToolException {
         CheckToolException cte = null;
         Properties props = new Properties();
         String str = new ToolChecker().getInstalledToolVersion(OSResolver
--- a/buildframework/helium/sf/java/checktools/tests/src/com/nokia/helium/checktools/tests/TestOSResolver.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/checktools/tests/src/com/nokia/helium/checktools/tests/TestOSResolver.java	Fri Aug 13 14:59:05 2010 +0300
@@ -31,8 +31,9 @@
 
     /**
      * Method to test getCommand.
+     * @throws CheckToolException 
      */
-    public void testGetCommand() {
+    public void testGetCommand() throws CheckToolException {
         String result = OSResolver.getCommand("test");
         String osName = System.getProperty("os.name").toLowerCase(Locale.US);
         boolean isWindows = osName.indexOf("windows") > -1;
@@ -50,7 +51,7 @@
     /**
      * Method to test whether the given os is of Windows family or not.
      */
-    public void testIsOSWindowsFamily() {
+    public void testIsOSWindowsFamily() throws CheckToolException  {
         String osName = System.getProperty("os.name").toLowerCase(Locale.US);
         boolean isWindows = osName.indexOf("windows") > -1;
         boolean result = OSResolver.isOs("windows");
@@ -64,7 +65,7 @@
     /**
      * Method to test whether the given os is of unix family or not.
      */
-    public void testIsOSUnixFamily() {
+    public void testIsOSUnixFamily() throws CheckToolException  {
         String osName = System.getProperty("os.name").toLowerCase(Locale.US);
         String pathSeparator = System.getProperty("path.separator");
         boolean isUnix = pathSeparator.equals(":")
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/EmailDataSender.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/EmailDataSender.java	Fri Aug 13 14:59:05 2010 +0300
@@ -19,20 +19,27 @@
 
 import java.util.Arrays;
 import java.util.Properties;
-import java.util.Hashtable;
 import java.util.zip.GZIPOutputStream;
 import java.io.BufferedInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
-import javax.mail.*;
-import javax.mail.internet.*;
-import javax.naming.*;
-import javax.naming.directory.*;
+
+import javax.mail.BodyPart;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
 
 import javax.activation.DataHandler;
 import javax.mail.util.ByteArrayDataSource;
+import javax.mail.internet.AddressException;
+
 import org.apache.log4j.Logger;
 import org.apache.commons.io.FileUtils;
 
@@ -46,7 +53,7 @@
 
     // Address email is sent from
     private String from;
-    
+
     // The target address
     private String[] toAddressList;
 
@@ -57,18 +64,15 @@
 
     // Configured smtp server address
     private String smtpServerAddress;
+
     /**
-    * Constructor
-    * 
-    * @param String
-    *            comma separeted email recepients list
-    * @param String
-    *            smtp server 
-    * @param String
-    *            ldap server
-    */
-    public EmailDataSender(String toStrings, String smtpServer,
-            String ldapAddress) {
+     * Constructor
+     * 
+     * @param String comma separeted email recepients list
+     * @param String smtp server
+     * @param String ldap server
+     */
+    public EmailDataSender(String toStrings, String smtpServer, String ldapAddress) {
         if (toStrings != null) {
             String[] splitList = toStrings.split(",");
             toAddressList = splitList;
@@ -76,152 +80,128 @@
         smtpServerAddress = smtpServer;
         ldapURL = ldapAddress;
     }
+
     /**
-    * Constructor
-    * 
-    * @param String
-    *            email recepient list in array
-    * @param String
-    *            smtp server 
-    * @param String
-    *            ldap server
-    */
-    public EmailDataSender(String[] toList, String smtpServer,
-            String ldapAddress) {
+     * Constructor
+     * 
+     * @param String email recepient list in array
+     * @param String smtp server
+     * @param String ldap server
+     */
+    public EmailDataSender(String[] toList, String smtpServer, String ldapAddress) {
         toAddressList = toList;
         smtpServerAddress = smtpServer;
         ldapURL = ldapAddress;
     }
+
     /**
-    * Constructor
-    * 
-    * @param String
-    *            email recepients list in array
-    * @param String
-    *            smtp server 
-    * @param String
-    *            ldap server
-    * @param String
-    *            root domain in ldap server
-    */
-    public EmailDataSender(String[] toList, String smtpServer,
-            String ldapAddress, String rootdn) {
+     * Constructor
+     * 
+     * @param String email recepients list in array
+     * @param String smtp server
+     * @param String ldap server
+     * @param String root domain in ldap server
+     */
+    public EmailDataSender(String[] toList, String smtpServer, String ldapAddress, String rootdn) {
         toAddressList = toList;
         smtpServerAddress = smtpServer;
         ldapURL = ldapAddress;
         this.rootdn = rootdn;
     }
+
     /**
-    * Set sender address.
-    *
-    * @param String
-    *            mail sender address
-    */
+     * Set sender address.
+     * 
+     * @param String mail sender address
+     */
     public void setFrom(String from) {
         this.from = from;
     }
+
     /**
-    * Add current user to recipient list.
-    *    
-    */
-    public void addCurrentUserToAddressList() {
+     * Add current user to recipient list.
+     * 
+     */
+    public void addCurrentUserToAddressList() throws EmailSendException {
         // Create an empty array if needed
-        if (toAddressList == null)
+        if (toAddressList == null) {
             toAddressList = new String[0];
+        }
         try {
-            String userEmail;
-            userEmail = getUserEmail();
-            toAddressList = Arrays.copyOf(toAddressList,
-                    toAddressList.length + 1);
-            toAddressList[toAddressList.length - 1] = userEmail;
-        } catch (javax.mail.internet.AddressException e) {
-            return;    //does this so that it passes checkstyle and builds
-        } catch (javax.naming.NamingException e) {
-            return;    //without it build complains that errors are thrown and not caught
-                       //methods are used else where and are caught and exercised.
+            String[] tmpToAddressList = Arrays.copyOf(toAddressList, toAddressList.length + 1);
+            tmpToAddressList[tmpToAddressList.length - 1] = getUserEmail();
+            toAddressList = tmpToAddressList;
+        } catch (LDAPException ex) {
+            throw new EmailSendException(ex.getMessage(), ex);
         }
     }
+
     /**
-    * Get recipient address list.
-    * 
-    * @return
-    *       Recipient address list.
-    */
+     * Get recipient address list.
+     * 
+     * @return Recipient address list.
+     */
     private InternetAddress[] getToAddressList() {
         int toListLength = 0;
-        if (toAddressList != null)
+        if (toAddressList != null) {
             toListLength = toAddressList.length;
+        }
         InternetAddress[] addressList = new InternetAddress[toListLength];
         try {
-            log.debug("getToAddressList:length: "
-                    + toListLength);
+            log.debug("getToAddressList:length: " + toListLength);
             for (int i = 0; i < toListLength; i++) {
-                log.debug("getToAddressList:address:"
-                        + toAddressList[i]);
+                log.debug("getToAddressList:address:" + toAddressList[i]);
                 addressList[i] = new InternetAddress(toAddressList[i]);
             }
-        } catch (javax.mail.internet.AddressException aex) {
+        }
+        catch (AddressException aex) {
             log.error("AddressException: " + aex);
         }
         return addressList;
     }
+
     /**
-    * Send xml data without compression
-    * 
-    * @param String
-    *            purpose of this email
-    * @param String
-    *            file to send 
-    * @param String
-    *            mime type
-    * @param String
-    *            subject of email
-    * @param String
-    *            header of email
-    */
-    public void sendData(String purpose, String fileToSend, String mimeType,
-            String subject, String header) {
+     * Send xml data without compression
+     * 
+     * @param String purpose of this email
+     * @param String file to send
+     * @param String mime type
+     * @param String subject of email
+     * @param String header of email
+     */
+    public void sendData(String purpose, File fileToSend, String mimeType,
+            String subject, String header) throws EmailSendException {
         sendData(purpose, fileToSend, mimeType, subject, header, false);
     }
 
-   
     /**
-    * Sending the XML data(compressed) through email.
-    * 
-    * @param String
-    *            purpose of this email
-    * @param String
-    *            file to send     
-    * @param String
-    *            subject of email
-    * @param String
-    *            header of email
-    */
-    public void compresseAndSendData(String purpose, String fileToSend,
-            String subject, String header) {
+     * Sending the XML data(compressed) through email.
+     * 
+     * @param String purpose of this email
+     * @param String file to send
+     * @param String subject of email
+     * @param String header of email
+     */
+    public void compresseAndSendData(String purpose, File fileToSend,
+            String subject, String header) throws EmailSendException {
         sendData(purpose, fileToSend, null, subject, header, true);
     }
+
     /**
-    * Send xml data 
-    * 
-    * @param String
-    *            purpose of this email
-    * @param String
-    *            file to send 
-    * @param String
-    *            mime type
-    * @param String
-    *            subject of email
-    * @param String
-    *            header of mail
-    * @param boolean
-    *            compress data if true
-    */
-    public void sendData(String purpose, String fileToSend, String mimeType,
-            String subject, String header, boolean compressData) {
+     * Send xml data
+     * 
+     * @param String purpose of this email
+     * @param String file to send
+     * @param String mime type
+     * @param String subject of email
+     * @param String header of mail
+     * @param boolean compress data if true
+     */
+    public void sendData(String purpose, File fileToSend, String mimeType,
+            String subject, String header, boolean compressData) throws EmailSendException {
         try {
             log.debug("sendData:Send file: " + fileToSend + " and mimetype: " + mimeType);
-            if (fileToSend != null) {
+            if (fileToSend != null && fileToSend.exists()) {
                 InternetAddress[] toAddresses = getToAddressList();
                 Properties props = new Properties();
                 if (smtpServerAddress != null) {
@@ -230,27 +210,22 @@
                 }
                 Session mailSession = Session.getDefaultInstance(props, null);
                 MimeMessage message = new MimeMessage(mailSession);
-                String subjectToSend = subject;
-                if (subject == null) {
-                    subjectToSend = "";
-                }
-                message.setSubject(subjectToSend);
+                message.setSubject(subject == null ? "" : subject);
                 MimeMultipart multipart = new MimeMultipart("related");
                 BodyPart messageBodyPart = new MimeBodyPart();
                 ByteArrayDataSource dataSrc = null;
-                String fileName = new File(fileToSend).getName();
+                String fileName = fileToSend.getName();
                 if (compressData) {
                     log.debug("Sending compressed data");
                     dataSrc = compressFile(fileToSend);
                     dataSrc.setName(fileName + ".gz");
                     messageBodyPart.setFileName(fileName + ".gz");
-                } else {
+                }
+                else {
                     log.debug("Sending uncompressed data:");
-                    dataSrc = new ByteArrayDataSource(new FileInputStream(
-                            new File(fileToSend)), mimeType);
+                    dataSrc = new ByteArrayDataSource(new FileInputStream(fileToSend), mimeType);
 
-                    message.setContent(FileUtils.readFileToString(new File(
-                            fileToSend)), "text/html");
+                    message.setContent(FileUtils.readFileToString(fileToSend), "text/html");
                     multipart = null;
                 }
                 String headerToSend = null;
@@ -266,113 +241,82 @@
                     message.setContent(multipart);
                 }
                 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);
-                } catch (javax.naming.NamingException e) {
-                    // We are Ignoring the errors as no need to fail the build.
-                    log.debug("Error retrieving current user email address: " + e.getMessage(), e);
+                    message.setFrom(getFromAddress());
+                }
+                catch (AddressException e) {
+                    throw new EmailSendException("Error retrieving the from address: " + e.getMessage(), e);
+                } catch (LDAPException e) {
+                    throw new EmailSendException("Error retrieving the from address: " + e.getMessage(), e);
                 }
                 message.addRecipients(Message.RecipientType.TO, toAddresses);
                 log.info("Sending email alert: " + subject);
                 Transport.send(message);
             }
-        } catch (javax.mail.MessagingException e) {
-            String errorMessage = e.getMessage();
+        } catch (MessagingException e) {
             String fullErrorMessage = "Failed sending e-mail: " + purpose;
-            if (errorMessage != null) {
-                fullErrorMessage += " " + errorMessage;
+            if (e.getMessage() != null) {
+                fullErrorMessage += ": " + e.getMessage();
             }
-        } catch (java.io.IOException e) {
-            String errorMessage = e.getMessage();
+            throw new EmailSendException(fullErrorMessage, e);
+        } catch (IOException e) {
             String fullErrorMessage = "Failed sending e-mail: " + purpose;
-            if (errorMessage != null) {
-                fullErrorMessage += " " + errorMessage;
+            if (e.getMessage() != null) {
+                fullErrorMessage += ": " + e.getMessage();
             }
             // We are Ignoring the errors as no need to fail the build.
-            log.info(fullErrorMessage);
+            throw new EmailSendException(fullErrorMessage, e);
         }
     }
 
     /**
      * GZipping a string.
      * 
-     * @param data
-     *            the content to be gzipped.
-     * @param filename
-     *            the name for the file.
+     * @param data the content to be gzipped.
+     * @param filename the name for the file.
      * @return a ByteArrayDataSource.
      */
-    protected ByteArrayDataSource compressFile(String fileName)
-            throws IOException {
+    protected ByteArrayDataSource compressFile(File fileName) throws IOException {
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         GZIPOutputStream gz = new GZIPOutputStream(out);
-        BufferedInputStream bufferedInputStream = new BufferedInputStream(
-                new FileInputStream(new File(fileName)));
+        BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(fileName));
         byte[] dataBuffer = new byte[512];
         while ((bufferedInputStream.read(dataBuffer)) != -1) {
             gz.write(dataBuffer);
         }
         gz.close();
         bufferedInputStream.close();
-        ByteArrayDataSource dataSrc = new ByteArrayDataSource(
-                out.toByteArray(), "application/x-gzip");
+        ByteArrayDataSource dataSrc = new ByteArrayDataSource(out.toByteArray(), "application/x-gzip");
         return dataSrc;
     }
+
     /**
-    * Get sender address.
-    * 
-    * @return
-    *       sender address.
-    */
-    private InternetAddress getFromAddress() throws javax.mail.internet.AddressException, javax.naming.NamingException {
+     * Get sender address.
+     * 
+     * @return sender address.
+     * @throws AddressException 
+     * @throws LDAPException 
+     */
+    private InternetAddress getFromAddress() throws AddressException, LDAPException {
         if (from != null) {
             return new InternetAddress(from);
         }
         return new InternetAddress(getUserEmail());
     }
-    
+
     /**
      * Getting user email.
      * 
-     * @return
-     *    the user email address.
+     * @return the user email address.
      */
-    protected String getUserEmail() throws javax.mail.internet.AddressException, javax.naming.NamingException {
-        String username = System.getProperty("user.name");
-        log.debug("EmailDataSender:getUserEmail:username: " + username);
-
-        // Set up environment for creating initial context
-        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 + "/" + rootdn);
-
-        // Create initial context
-        DirContext ctx = new InitialDirContext(env);
-        SearchControls controls = new SearchControls();
-        controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
-        try {
-            NamingEnumeration<SearchResult> en = ctx.search("", "uid=" + username, controls);
-            if (en.hasMore()) {
-                SearchResult sr = en.next();
-                if (sr.getAttributes().get("mail") != null) {
-                    String email = (String) sr.getAttributes().get("mail").get();
-                    log.debug("getUserEmail:" + email);
-                    return email;
-                }
+    protected String getUserEmail() throws LDAPException {
+        if (ldapURL != null) {
+            LDAPHelper helper = new LDAPHelper(this.ldapURL, this.rootdn);
+            String email = helper.getUserAttributeAsString(LDAPHelper.EMAIL_ATTRIBUTE_NAME);
+            if (email == null) {
+                throw new LDAPException("Could not find email for current user. (" + System.getProperty("user.name") + ")");
             }
-        } catch (javax.naming.NameNotFoundException ex) {
-            throw new HlmAntLibException("Error finding user email for " + username );
+            return email;
         }
-        throw new HlmAntLibException("Could not find user email in LDAP.");
+        throw new LDAPException("LDAP url is not defined.");
     }
 }
-
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/EmailSendException.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,40 @@
+/*
+ * 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;
+
+/**
+ * Email sending exception handling class
+ */
+public class EmailSendException extends Exception {
+
+    private static final long serialVersionUID = 7997902958106522082L;
+
+    /**
+     * Constructor
+     * 
+     * @param String
+     *            exception message
+     */
+    public EmailSendException(String exception) {
+        super(exception);
+    }
+
+    public EmailSendException(String exception, Throwable cause) {
+        super(exception, cause);
+    }
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/HlmAntLibException.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +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;
-
-/**
- * HlmAntlib exception handling class
- */
-public class HlmAntLibException extends RuntimeException {
-
-    private static final long serialVersionUID = -2504337723465536053L;
-
-    /**
-     * Constructor
-     * 
-     * @param String
-     *            exception message
-     */
-    public HlmAntLibException(String msg) {
-        super("HlmAntLibException:generic:" + msg);
-    }
-
-    /**
-     * Constructor
-     * 
-     * @param String
-     *            module which throws the exception
-     * @param String
-     *            exception message
-     */
-    public HlmAntLibException(String module, String msg) {
-        super("HlmAntLibException:" + module + ":" + msg);
-    }
-}
\ 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/LDAPException.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,43 @@
+/*
+ * 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;
+
+/**
+ * Exception occuring during LDAP search.
+ *  
+ */
+public class LDAPException extends Exception {
+
+    private static final long serialVersionUID = -4843665216704377558L;
+
+    /**
+     * Create an exception with a message.
+     * @param message the error message
+     */
+    public LDAPException(String message) {
+        super(message);
+    }
+
+    /**
+     * Create an exception with a message and a root cause.
+     * @param message the error message
+     * @param cause the root cause
+     */
+    public LDAPException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/LDAPHelper.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,123 @@
+/*
+ * 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;
+
+import java.util.Hashtable;
+
+import javax.naming.Context;
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+
+/**
+ * Simpler LDAP interface to retrieve user base attribute. 
+ *
+ */
+public class LDAPHelper {
+    public static final String EMAIL_ATTRIBUTE_NAME = "mail";
+    private String ldapURL;
+    private String rootdn;
+    
+    /**
+     * Construct a LDAP helper for a specific server.
+     * @param ldapURL the ldap url (e.g: ldap://server:389)
+     * @param rootdn the rootdn value.
+     */
+    public LDAPHelper(String ldapURL, String rootdn) {
+        if (ldapURL == null) {
+            throw new IllegalArgumentException("The ldap server url cannot be null.");
+        }
+        if (rootdn == null) {
+            throw new IllegalArgumentException("The rootdn cannot be null.");
+        }
+        this.ldapURL = ldapURL;
+        this.rootdn = rootdn;
+    }
+    
+    /**
+     * Get the value of the LDAP attribute for a filter.
+     * @param filter the filter to search for
+     * @param attribute the attribute name.
+     * @return the value of the attribute as a string., if the value is not a String then it is 
+     *         stringify using toString. Returns null if not found.
+     * @throws LDAPException
+     */
+    public String getAttributeAsString(String filter, String attribute) throws LDAPException {
+        if (filter == null) {
+            throw new IllegalArgumentException("filter cannot be null.");
+        }
+        if (attribute == null) {
+            throw new IllegalArgumentException("attribute cannot be null.");
+        }
+        // Set up environment for creating initial context
+        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 + "/" + 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();
+                if (sr.getAttributes().get(attribute) != null) {
+                    Object value = sr.getAttributes().get(attribute).get();
+                    if (value instanceof String) {
+                        return (String)value;
+                    } else {
+                        return value.toString();
+                    }
+                }
+            }
+        } catch (NameNotFoundException ex) {
+            throw new LDAPException("Could not find " +  filter + " attribute " + attribute + " in LDAP: " + ex.getMessage(), ex);
+        } catch (NamingException ex) {
+            throw new LDAPException("Could not find " +  filter + " attribute " + attribute + " in LDAP: " + ex.getMessage(), ex);
+        }
+        return null;
+    }
+
+    /**
+     * Get the value of the LDAP attribute for current user. (based on user.name).
+     * @param attribute the attribute name.
+     * @return the value of the attribute as a string., if the value is not a String then it is 
+     *         stringify using toString. Returns null if not found.
+     * @throws LDAPException
+     */
+    public String getUserAttributeAsString(String attribute) throws LDAPException {
+        return getUserAttributeAsString(System.getProperty("user.name"), attribute);
+    }
+
+    /**
+     * Get the value of the LDAP attribute for username.
+     * @param username the user to search for
+     * @param attribute the attribute name.
+     * @return the value of the attribute as a string., if the value is not a String then it is 
+     *         stringify using toString. Returns null if not found.
+     * @throws LDAPException
+     */
+    public String getUserAttributeAsString(String username, String attribute) throws LDAPException {
+        return getAttributeAsString("uid=" + username, attribute);
+    }
+
+}
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/LogSource.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/LogSource.java	Fri Aug 13 14:59:05 2010 +0300
@@ -28,9 +28,9 @@
  */
 public class LogSource extends DataType {
 
-    public File getFilename() {
+    public File getFilename() throws LogSourceException {
         //will be implemented by subclasses
-        throw new HlmAntLibException("Improper logsource usage"); 
+        throw new LogSourceException("Improper logsource usage"); 
     }
 
 }
\ 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/LogSourceException.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,36 @@
+/*
+ * 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;
+
+/**
+ * LogSource exception handling class
+ */
+public class LogSourceException extends Exception {
+
+
+    /**
+     * Constructor
+     * 
+     * @param String
+     *            exception message
+     */
+    public LogSourceException(String exception) {
+        super(exception);
+    }
+
+}
\ 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/MessageCreationException.java	Fri Aug 13 14:59:05 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.core;
+
+/**
+ * Exception class for Messagecreation implementation
+ * 
+ */
+public class MessageCreationException extends Exception {
+
+    /**
+     * Constructor
+     * 
+     * @exception - exception to be processed.
+     */
+
+    public MessageCreationException(String exception) {
+        super("Message Creation Error: " + exception);
+    }
+}
\ 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/MultiCauseBuildException.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,164 @@
+/*
+ * 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.PrintStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Vector;
+
+import org.apache.tools.ant.BuildException;
+
+/**
+ * A MultiCauseBuildException class used by the HeliumExecutor plugin to store
+ * the failures caused in the course of a build.
+ * 
+ */
+public class MultiCauseBuildException extends BuildException {
+
+    private static final long serialVersionUID = -4843675216704377447L;
+
+    private Vector<Throwable> causes = new Vector<Throwable>();
+
+    /**
+     * Construct a new multicause build exception with no detail message and no
+     * cause.
+     */
+    public MultiCauseBuildException() {
+        super();
+    }
+
+    /**
+     * Construct a new multi-cause build exception with the given detail message
+     * and no cause.
+     * 
+     * @param msg
+     *            Detail message.
+     */
+    public MultiCauseBuildException(String msg) {
+        super(msg);
+    }
+
+    /**
+     * Construct a new multi-cause build exception with no detail message and
+     * the given cause.
+     * 
+     * @param cause
+     *            the cause of failure.
+     */
+    public MultiCauseBuildException(Throwable cause) {
+        super();
+        causes.add(cause);
+    }
+
+    /**
+     * Construct a new multi-cause exception with the given detail message and
+     * the given cause.
+     * 
+     * @param msg
+     *            Detail message.
+     * @param cause
+     *            the cause of failure
+     * 
+     */
+    public MultiCauseBuildException(String msg, Throwable cause) {
+        super(msg);
+        causes.add(cause);
+    }
+
+    /**
+     * Method adds the given throwable instance.
+     * 
+     * @param th
+     *            the throwbale instance to be added.
+     */
+    public void add(Throwable th) {
+        causes.add(th);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public StackTraceElement[] getStackTrace() {
+        List<StackTraceElement> stackTraceElements = new ArrayList<StackTraceElement>();
+        for (Throwable th : causes) {
+            stackTraceElements.addAll(Arrays.asList(th.getStackTrace()));
+        }
+        return stackTraceElements
+                .toArray(new StackTraceElement[stackTraceElements.size()]);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void printStackTrace(PrintStream ps) {
+        synchronized (ps) {
+            super.printStackTrace(ps);
+            int i = 1;
+            for (Throwable cause : causes) {
+                ps.printf("MultiCauseBuildException caused by [%d]: ", i++);
+                cause.printStackTrace(ps);
+            }
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void printStackTrace(PrintWriter pw) {
+        synchronized (pw) {
+            super.printStackTrace(pw);
+            int i = 1;
+            for (Throwable cause : causes) {
+                pw.printf("MultiCauseBuildException caused by [%d]: ", i++);
+                cause.printStackTrace(pw);
+            }
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getMessage() {
+        String message = super.getMessage();
+        for (Throwable th : causes) {
+            if (message == null) {
+                message = th.getMessage();
+            } else {            
+                message += "\n" + th.getMessage();
+            }
+        }
+        return message;
+    }
+
+    /**
+     * Returns the location of the error and the error message.
+     * 
+     * @return the location of the error and the error message
+     */
+    public String toString() {
+        StringBuffer buffer = new StringBuffer();
+        for (Throwable th : causes) {
+            buffer.append(th);
+            buffer.append("\n");
+        }
+        return buffer.toString();
+    }
+
+}
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/PPHash.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +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;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-
-import freemarker.template.ObjectWrapper;
-import freemarker.template.SimpleCollection;
-import freemarker.template.SimpleScalar;
-import freemarker.template.TemplateCollectionModel;
-import freemarker.template.TemplateHashModelEx;
-import freemarker.template.TemplateModel;
-import fmpp.Engine;
-import fmpp.models.AddTransform;
-import fmpp.models.ClearTransform;
-import fmpp.models.CopyWritableVariableMethod;
-import fmpp.models.NewWritableHashMethod;
-import fmpp.models.NewWritableSequenceMethod;
-import fmpp.models.RemoveTransform;
-import fmpp.models.SetTransform;
-
-/**
- * Downgraded implementation which makes the PPHash public (from FMPP).
- */
-public class PPHash implements TemplateHashModelEx {
-    private Map<String, TemplateModel> map = new HashMap<String, TemplateModel>();
-
-    /**
-    * Constructor
-    *     
-    */
-    public PPHash() {
-        // transforms
-        put("set", new SetTransform());
-        put("add", new AddTransform());
-        put("remove", new RemoveTransform());
-        put("clear", new ClearTransform());
-
-        // methods
-        put("newWritableSequence", new NewWritableSequenceMethod());
-        put("newWritableHash", new NewWritableHashMethod());
-        put("copyWritable", new CopyWritableVariableMethod());
-
-        // constants
-        put("slash", File.separator);
-        put("version", Engine.getVersionNumber());
-        put("freemarkerVersion", Engine.getFreeMarkerVersionNumber());
-
-    }
-    /**
-    * Get number of templates.
-    * 
-    * @return
-    *       Number of templates.
-    */
-    public int size() {
-        return map.size();
-    }
-
-    /**
-    * Get templates.
-    * 
-    * @return
-    *       templates.
-    */
-    public TemplateCollectionModel keys() {
-        return new SimpleCollection(map.keySet(), ObjectWrapper.SIMPLE_WRAPPER);
-    }
-    
-    /**
-    * Get template values.
-    * 
-    * @return
-    *       template values.
-    */
-    public TemplateCollectionModel values() {
-        return new SimpleCollection(map.values(), ObjectWrapper.SIMPLE_WRAPPER);
-    }
-
-    /**
-    * Get a template.
-    * 
-    * @param String
-    *            key for template
-    * @return
-    *       a template.
-    */
-    public TemplateModel get(String key) {
-        return map.get(key);
-    }
-
-     /**
-    * Check if there are any template.
-    * 
-    * @return
-    *       True if no template.
-    */
-    public boolean isEmpty() {
-        return map.isEmpty();
-    }
-     /**
-    * Add template
-    *     
-    * @param String
-    *            name of template
-    * @param TemplateModel
-    *            value
-    */
-    public void put(String name, TemplateModel value) {
-        map.put(name, value);
-    }
-     /**
-    * Add template
-    *     
-    * @param String
-    *            name of template
-    * @param String
-    *            value
-    */
-    public void put(String name, String value) {
-        map.put(name, new SimpleScalar(value));
-    }
-
-     /**
-    * Delete template
-    *     
-    * @param String
-    *            name of template
-    */
-    public void remove(String name) {
-        map.remove(name);
-    }
-}
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/PPInputSource.java	Wed Jun 16 16:51:40 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.helium.core;
-/**
- * Template source.
- */
-public class PPInputSource implements TemplateInputSource {
-
-    private String name = "pp";
-
-     /**
-    * Get source name
-    *     
-    * @return 
-    *        name of source
-    */
-    @Override
-    public String getSourceName() {
-        return name;
-    }
-
-     /**
-    * Get hash
-    *     
-    * @return 
-    *        hash
-    */
-    public PPHash getPPHash() {
-        return new PPHash();
-    }
-}
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/TemplateProcessor.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/TemplateProcessor.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,16 +17,17 @@
 
 package com.nokia.helium.core;
 
-import freemarker.template.Template;
-import freemarker.template.Configuration;
-
+import java.io.File;
 import java.io.FileWriter;
-import java.io.File;
+import java.util.HashMap;
 import java.util.List;
-import java.util.HashMap;
 import java.util.Map;
+
 import org.apache.log4j.Logger;
 
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+
 /**
  * Template processor.
  * 
@@ -61,10 +62,6 @@
                     PropertiesSource propSource = (PropertiesSource) source;
                     templateMap.put(propSource.getSourceName(), propSource
                             .getProperties());
-                } else if (source instanceof PPInputSource) {
-                    PPInputSource ppSource = (PPInputSource) source;
-                    templateMap.put(ppSource.getSourceName(), ppSource
-                            .getPPHash());
                 }
             }
         } catch (java.io.IOException e) {
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/HeliumExecutor.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/HeliumExecutor.java	Fri Aug 13 14:59:05 2010 +0300
@@ -14,262 +14,283 @@
  * Description:  
  *
  */
-
 package com.nokia.helium.core.ant;
 
-import java.util.StringTokenizer;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.List;
-import java.io.BufferedReader;
-import java.io.FileWriter;
-import java.io.InputStream;
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.JarURLConnection;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
-
-import org.apache.tools.ant.taskdefs.ImportTask;
-import org.apache.tools.ant.helper.DefaultExecutor;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Target;
-import org.apache.tools.ant.Location;
-import com.nokia.helium.core.ant.types.*;
-
-import java.util.HashMap;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
-import org.apache.log4j.Logger;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.BuildLogger;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectHelper;
+import org.apache.tools.ant.helper.DefaultExecutor;
+
+import com.nokia.helium.core.MultiCauseBuildException;
+import com.nokia.helium.core.ant.types.HlmDefList;
 
 /**
  * This class implements a flexible Ant Executor which allows dynamic discovery
  * and automatic loading of new features. It also supports pre/post actions to
  * be executed.
+ * 
  */
 public class HeliumExecutor extends DefaultExecutor {
-    private HashMap<String, Vector<HlmDefinition>> preOperations = new HashMap<String, Vector<HlmDefinition>>();
-    private HashMap<String, Vector<HlmDefinition>> postOperations = new HashMap<String, Vector<HlmDefinition>>();
-    private HashMap<String, Vector<HlmExceptionHandler>> exceptionHandlers = new HashMap<String, Vector<HlmExceptionHandler>>();
-    private Project project;
-    private Logger log = Logger.getLogger(HeliumExecutor.class);
+
+    private static final String HELP_TARGET = "help";
+
+    private List<HlmDefList> hlmDefCache = new ArrayList<HlmDefList>();
+    private MultiCauseBuildException failure;
 
     /**
-     * Override the default Ant executor.
+     * Execute the specified Targets for the specified Project.
      * 
      * @param project
-     *            Object of the project
+     *            the Ant Project.
      * @param targetNames
-     *            Array of target names to execute
-     * 
+     *            String[] of Target names.
+     * @throws BuildException
+     *             on error
      */
     public void executeTargets(Project project, String[] targetNames) {
-        this.project = project;
-        log.debug("Running executeTargets");
-        BuildException failure = null;
-        try {
-            loadModules(project);
-            doOperations(preOperations, project, targetNames);
-            super.executeTargets(project, targetNames);
-        } catch (BuildException e) {
-            // Saving current issue
-            // We are Ignoring the errors as no need to fail the build.
-            failure = e;
+        if (targetNames.length > 1 && targetNames[0].equals(HELP_TARGET)) {
+            displayHelp(project, targetNames);
+        } else {
+            executeRegularTargets(project, targetNames);
         }
+    }
 
+    /**
+     * Execute the given targets.
+     * 
+     * @param project
+     *            is the ant project
+     * @param targetNames
+     *            array of target names to be executed.
+     */
+    public void executeRegularTargets(Project project, String[] targetNames) {
+        project.log("Running executeTargets", Project.MSG_DEBUG);
+        loadModules(project);
+        handlePreBuildActions(project, targetNames);
         try {
-            doOperations(postOperations, project, targetNames);
-        } catch (BuildException e) {
-            // Treating possible new issues...
-            if (failure != null) {
-                failure = new BuildException(e.toString() + failure.toString());
-            } else {
-                failure = e;
-            }
-        }
-        // Propagating any raised issues.
-        if (failure != null) {
-            handleExceptions(project, failure);
-            throw failure;
+            super.executeTargets(project, targetNames);
+        } catch (BuildException be) {
+            recordFailure(be);
+        } finally {
+            handlePostBuildActions(project, targetNames);
+            // Propagating any raised issues.
+            handleException(project);
         }
     }
 
     /**
-     * Loading all the discovered modules.
+     * Method loads all the available helium modules from the system classpath.
      * 
-     * @param module
-     * @param prj
+     * @param project
+     *            is the ant project.
      */
-    private void loadModules(Project prj) {
-        List<File> moduleList = loadAvailableModules();
-        for (File moduleName : moduleList) {
-            loadModule(moduleName, prj);
+    @SuppressWarnings("unchecked")
+    private void loadModules(Project project) {
+        try {
+            List<URL> modules = getAvailableModules();
+            project.log("Total no of modules available : " + modules.size(), Project.MSG_DEBUG);
+            for (URL module : modules) {
+                loadModule(project, module);
+            }
+            Map<String, Object> references = (Hashtable<String, Object>)project.getReferences();
+            for (String key : references.keySet()) {
+                Object refObj = references.get(key);
+                if (refObj instanceof HlmDefList) {
+                    hlmDefCache.add((HlmDefList)refObj);
+                    project.log("Total pre build actions : "
+                            + ((HlmDefList)refObj).getPreBuildActions().size(), Project.MSG_DEBUG);
+                    project.log("Total post build actions : "
+                            + ((HlmDefList)refObj).getPostBuildActions().size(), Project.MSG_DEBUG);
+                    project.log("Total exception handlers : "
+                            + ((HlmDefList)refObj).getExceptionHandlers().size(), Project.MSG_DEBUG);
+                }
+            }            
+        } catch (BuildException be) {
+            recordFailure(be);
         }
     }
 
     /**
-     * Load a specific module.
+     * Returns a list of available helium modules from the system classpath.
      * 
-     * @param moduleLib
-     * @param prj
+     * @return a list of helium module files.
      */
-    private void loadModule(File moduleLib, Project prj) {
-        String file = getHlmAntLibFile(moduleLib);
-        if (file == null) {
-            return;
-        }
-        log.debug("Loading " + moduleLib.getName());
-        ImportTask task = new ImportTask();
-        Target target = new Target();
-        target.setName("");
-        target.setProject(prj);
-        task.setOwningTarget(target);
-        task.setLocation(new Location(file));
-        task.setFile(file);
-        task.setProject(prj);
-        task.execute();
-        String moduleName = getModuleName(moduleLib);
-        Object refObject = prj.getReference(moduleName + ".list");
-
-        if (refObject == null) {
-            log.debug(moduleName + ".list not found");
+    private List<URL> getAvailableModules() {
+        List<URL> moduleList = new ArrayList<URL>();
+        String classpathString = System.getProperty("java.class.path");
+        String[] modules = classpathString.split(File.pathSeparator);
+        File module = null;
+        URL url = null;
+        for (String moduleName : modules) {
+            module = new File(moduleName);
+            if (module != null && module.isFile()
+                    && module.getName().endsWith(".jar")) {
+                try {
+                    String hlmAntlibXmlFile = findHeliumAntlibXml(new JarFile(
+                            module));
+                    if (hlmAntlibXmlFile != null) {
+                        url = new URL("jar:" + module.toURI().toString() + "!/"
+                                + hlmAntlibXmlFile);
+                        moduleList.add(url);
+                    }
+                } catch (MalformedURLException me) {
+                    throw new BuildException(
+                            "Error occured while getting helium module "
+                                    + module + " : ", me);
+                } catch (IOException ioe) {
+                    throw new BuildException("Error reading file " + module
+                            + ": " + ioe.getMessage(), ioe);
+                }
+            }
         }
-        if (refObject != null && refObject instanceof HlmDefList) {
-            HlmDefList defList = (HlmDefList) refObject;
-            Vector<HlmDefinition> tempDefList = new Vector<HlmDefinition>(
-                    defList.getPreDefList());
-            if (tempDefList != null) {
-                preOperations.put(moduleName, tempDefList);
-            }
-            Vector<HlmDefinition> tempPostDefList = new Vector<HlmDefinition>(
-                    defList.getPostDefList());
-            if (tempPostDefList != null) {
-                postOperations.put(moduleName, tempPostDefList);
-            }
-            Vector<HlmExceptionHandler> tempExceptionDefList = defList
-                    .getExceptionHandlerList();
-            if (tempExceptionDefList != null) {
-                exceptionHandlers.put(moduleName, tempExceptionDefList);
-            }
-            log.debug("loadModule:pre-opsize: "
-                    + preOperations.size());
-            log.debug("loadModule:post-opsize: "
-                    + postOperations.size());
-            log.debug("loadModule:exception-opsize: "
-                    + exceptionHandlers.size());
-            log.debug("Checking " + moduleLib);
-        }
+        return moduleList;
     }
 
     /**
      * Search for helium.antlib.xml under the module Jar.
      * 
-     * @param moduleLib
-     * @return
-     * @throws IOException
+     * @param jarFile
+     *            is the jar to be searched in.
+     * @return the helium.antlib.xml
      */
-    protected URL findHeliumAntlibXml(File moduleLib) throws IOException {
-        JarFile jarFile = new JarFile(moduleLib);
-        Enumeration<JarEntry> jee = jarFile.entries();
-        while (jee.hasMoreElements()) {
-            JarEntry je = jee.nextElement();
+    private String findHeliumAntlibXml(JarFile jarFile) {
+        String hlmAntlibXmlFile = null;
+        for (Enumeration<JarEntry> jarEntries = jarFile.entries(); jarEntries
+                .hasMoreElements();) {
+            JarEntry je = jarEntries.nextElement();
             if (je.getName().endsWith("/helium.antlib.xml")) {
-                return new URL("jar:" + moduleLib.toURI().toString() + "!/"
-                        + je.getName());
+                hlmAntlibXmlFile = je.getName();
+                break;
             }
         }
-        return null;
+        return hlmAntlibXmlFile;
     }
 
     /**
-     * Retrieve the found helium.antlib.xml. TODO improve if possible without
-     * extracting the file.
+     * Method loads the specified module .
      * 
-     * @param moduleLib
-     * @return
+     * @param project
+     *            is the ant project.
+     * @param module
+     *            the helium module to be loaded.
      */
-    private String getHlmAntLibFile(File moduleLib) {
-        log.debug("[HeliumExecutor] Checking " + moduleLib);
-        try {
-            URL url = findHeliumAntlibXml(moduleLib);
-            if (url == null)
-                return null;
-            log.debug("Getting " + url);
-
-            JarURLConnection jarConnection = (JarURLConnection) url
-                    .openConnection();
-            JarEntry jarEntry = jarConnection.getJarEntry();
-            JarFile jarFile = new JarFile(moduleLib);
-            InputStream is = jarFile.getInputStream(jarEntry);
-            InputStreamReader isr = new InputStreamReader(is);
-            BufferedReader reader = new BufferedReader(isr);
-            File file = File.createTempFile("helium", "antlib.xml");
-            file.deleteOnExit();
-            FileWriter writer = new FileWriter(file);
-            String line;
-            while ((line = reader.readLine()) != null) {
-                writer.write(line + "\n");
-            }
-            writer.close();
-            reader.close();
-            log.debug("Temp file " + file.getAbsolutePath());
-            return file.getAbsolutePath();
-        } catch (IOException ex) {
-            log.error("Error: " + ex.getMessage(), ex);
-            return null;
-        }
+    private void loadModule(Project project, URL module) {
+        project.log("Loading module : " + module.toString(), Project.MSG_DEBUG);
+        ProjectHelper helper = (ProjectHelper) project
+                .getReference(ProjectHelper.PROJECTHELPER_REFERENCE);
+        helper.parse(project, module);
     }
 
-    private void doOperations(
-            HashMap<String, Vector<HlmDefinition>> operations, Project prj,
-            String[] targetNames) {
-        log.debug("doOperations: start");
-        for (String moduleName : operations.keySet()) {
-            log.debug("doOperations: module: " + moduleName);
-            for (HlmDefinition definition : operations.get(moduleName)) {
-                definition.execute(prj, moduleName, targetNames);
+    /**
+     * Method handles all the pre build events.
+     * 
+     * @param project
+     *            is the ant project.
+     * @param targets
+     *            an array of target names.
+     */
+    private void handlePreBuildActions(Project project, String[] targets) {
+        for (HlmDefList hlmDefList : hlmDefCache) {
+            for (PreBuildAction event : hlmDefList.getPreBuildActions()) {
+                try {
+                    event.executeOnPreBuild(project, targets);
+                } catch (BuildException be) {
+                    // Saving current issue
+                    // We are Ignoring the errors as no need to fail the build.
+                    recordFailure(be);
+                }
             }
         }
     }
 
-    private void handleExceptions(Project prj, Exception e) {
-        for (String moduleName : this.exceptionHandlers.keySet()) {
-            log.debug("handleExceptions: module: " + moduleName);
-            for (HlmExceptionHandler exceptionHandler : this.exceptionHandlers
-                    .get(moduleName)) {
-                exceptionHandler.handleException(prj, moduleName, e);
+    /**
+     * Method handles all the post build events.
+     * 
+     * @param project
+     *            is the ant project.
+     * @param targets
+     *            an array of target names.
+     */
+    private void handlePostBuildActions(Project project, String[] targets) {
+        for (HlmDefList hlmDefList : hlmDefCache) {
+            for (PostBuildAction event : hlmDefList.getPostBuildActions()) {
+                try {
+                    event.executeOnPostBuild(project, targets);
+                } catch (BuildException be) {
+                    // Treating possible new issues...
+                    recordFailure(be);
+                }
             }
         }
     }
 
-    private String getModuleName(File moduleLib) {
-        String name = moduleLib.getName();
-        name = name.substring(0, name.lastIndexOf('.'));
-        // The module name can ends with a version
-        if (name.matches("(\\w|-)+-\\d+(\\.\\d+)+")) {
-            name = name.substring(0, name.lastIndexOf('-'));
+    /**
+     * Records a build failure.
+     * 
+     * @param be
+     *            a build failure.
+     */
+    private void recordFailure(BuildException be) {
+        if (failure == null) {
+            failure = new MultiCauseBuildException();
         }
-        return name;
+        failure.add(be);
     }
 
-    private List<File> loadAvailableModules() {
-        List<File> moduleList = new ArrayList<File>();
-        String classpathString = System.getProperty("java.class.path");
-        StringTokenizer tokenizier = new StringTokenizer(classpathString,
-                File.pathSeparator);
-        String token;
-        while (tokenizier.hasMoreTokens()) {
-            token = (String) tokenizier.nextToken();
-            if (new File(token).isFile() && token.endsWith(".jar")) {
-                moduleList.add(new File(token));
+    /**
+     * Method handles the recored build failures if any.
+     * 
+     * @param project
+     *            is the ant project.
+     */
+    private void handleException(Project project) {
+        if (failure != null) {
+            for (HlmDefList hlmDefList : hlmDefCache) {
+                for (HlmExceptionHandler handler : hlmDefList
+                        .getExceptionHandlers()) {
+                    try {
+                        handler.handleException(project, failure);
+                    } catch (BuildException be) {
+                        // Treating possible new issues...
+                        recordFailure(be);
+                    }
+                }
+            }
+            throw failure;
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private void displayHelp(Project project, String[] targetNames) {
+        if (targetNames.length > 1) {
+            project.setProperty("help.item", targetNames[1]);
+        }
+        // Set Emacs mode to true for all listeners, so that help text does
+        // not have [echo] at the start of each line
+        Iterator<BuildListener> iter = project.getBuildListeners().iterator();
+        while (iter.hasNext()) {
+            BuildListener listener = iter.next();
+            if (listener instanceof BuildLogger) {
+                BuildLogger logger = (BuildLogger) listener;
+                logger.setEmacsMode(true);
             }
         }
-        return moduleList;
+        // Run the 'help' target
+        project.executeTarget(HELP_TARGET);
     }
-
-    protected Project getProject() {
-        return project;
-    }
-}
\ No newline at end of file
+}
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/HlmDefinition.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +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.Project;
-
-/**
- * This interface defines the API of an HeliumExecutor task. 
- */
-public interface HlmDefinition {
-    
-    /**
-     * This method will implement the action to be performed by the 
-     * HeliumExecutor plugin. 
-     * @param prj
-     * @param module
-     */
-    void execute(Project prj, String module, String[] targetNames);
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/HlmExceptionHandler.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/HlmExceptionHandler.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,36 +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:  
-*
-*/
-
+ * 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.Project;
 
 /**
- * This interface defines the API of an HeliumExecutor task. 
+ * This interface defines the API of an HeliumExecutor task and is used for
+ * exception handling in helium.
  */
 public interface HlmExceptionHandler {
-    
+
     /**
-     * This method will implement the action to be performed by the 
-     * HeliumExecutor plugin. 
-     * @param project
-     * @param module
-     * @param exception
+     * Method handles the given exception.
+     * 
+     * @param project is the ant project.
+     * @param exception is the exception to be handled.
      */
-    void handleException(Project project, String module, Exception exception);
+    void handleException(Project project, Exception exception);
 }
\ 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/Message.java	Fri Aug 13 14:59:05 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.core.ant;
+
+import java.io.InputStream;
+import com.nokia.helium.core.MessageCreationException;
+
+/**
+ * Interface describing the method a Message must implements.
+ *
+ */
+public interface Message {
+
+    /**
+     * Get an InputStream on the serialize the message
+     * @return an InputStream
+     * @throws MessageCreationException happens in case of serialization error.
+     */
+    InputStream getInputStream() throws MessageCreationException;
+}
\ 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/PostBuildAction.java	Fri Aug 13 14:59:05 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.core.ant;
+
+import org.apache.tools.ant.Project;
+
+/**
+ * This interface defines the API of an HeliumExecutor task. The Sub classes
+ * performing any post build actions should implement this interface.
+ * 
+ */
+public interface PostBuildAction {
+
+    /**
+     * Method executes a post build action.
+     * 
+     * @param project
+     *            is the ant project.
+     * @param targetNames
+     *            an array of target names.
+     */
+    void executeOnPostBuild(Project project, String[] targetNames);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/PreBuildAction.java	Fri Aug 13 14:59:05 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;
+
+import org.apache.tools.ant.Project;
+
+/**
+ * This interface defines the API of an HeliumExecutor task. The Sub classes
+ * performing any pre build actions should implement this interface.
+ * 
+ */
+public interface PreBuildAction {
+
+    /**
+     * Method executes a pre build action.
+     * 
+     * @param project
+     *            is the ant project.
+     * @param targetNames
+     *            an array of target names.
+     */
+    void executeOnPreBuild(Project project, String[] targetNames);
+}
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/antlib.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -39,9 +39,13 @@
     <typedef name="resourceSet" classname="com.nokia.helium.core.ant.types.ResourceSet"/>
 
     <!-- Type definition -->
+   <typedef name="stage" classname="com.nokia.helium.core.ant.types.Stage"/> 
+    <typedef name="targetMessageTrigger" classname="com.nokia.helium.core.ant.types.TargetMessageTrigger"/> 
     <typedef name="deflist" classname="com.nokia.helium.core.ant.types.HlmDefList"/>
     <typedef name="importdef" classname="com.nokia.helium.core.ant.types.HlmImportDef"/>
     <typedef name="listenerdef" classname="com.nokia.helium.core.ant.types.HlmListenerDef"/>
-    
+    <typedef name="textMessage" classname="com.nokia.helium.core.ant.types.TextMessage"/>
+    <typedef name="fileMessage" classname="com.nokia.helium.core.ant.types.FileMessage"/>
+    <typedef name="fmppMessage" classname="com.nokia.helium.core.ant.types.FMPPMessage"/>
     <typedef name="prettyprintxml" classname="com.nokia.helium.core.ant.filters.PrettyPrintXmlFilter"/> 
 </antlib>
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/conditions/XMLLogCondition.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/conditions/XMLLogCondition.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,12 +18,16 @@
 package com.nokia.helium.core.ant.conditions;
 
 import java.io.File;
-import org.apache.tools.ant.BuildException;
+
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
-import org.xml.sax.*;
-import org.xml.sax.helpers.*;
-import com.nokia.helium.core.ant.types.ConditionType;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.taskdefs.condition.Condition;
+import org.apache.tools.ant.types.DataType;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
 
 /**
  * This class implements a Ant Condition which report true if it finds any
@@ -42,7 +46,7 @@
  * 
  * @ant.type name="hasSeverity" category="Core"
  */
-public class XMLLogCondition extends ConditionType {
+public class XMLLogCondition extends DataType implements Condition {
 
     // The severity to count
     private String severity;
@@ -84,8 +88,9 @@
             //this.log("Error: Log file does not exist " + fileName);
             return -1;
         }
-        if (severity == null)
+        if (severity == null) {
             throw new BuildException("'severity' attribute is not defined");
+        }
 
         //this.log("Looking for severity '" + severity + "' under '" + fileName.getAbsolutePath() + "'");
         SAXParserFactory factory = SAXParserFactory.newInstance();
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/filters/PrettyPrintXmlFilter.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/filters/PrettyPrintXmlFilter.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,6 +17,7 @@
 
 package com.nokia.helium.core.ant.filters;
 
+import java.io.IOException;
 import java.io.StringWriter;
 
 import org.apache.tools.ant.BuildException;
@@ -25,7 +26,6 @@
 import org.dom4j.DocumentHelper;
 import org.dom4j.io.OutputFormat;
 import org.dom4j.io.XMLWriter;
-import java.io.IOException;
 
 /**
  * Prints xml file in pretty format.
@@ -59,8 +59,9 @@
                 throw new BuildException(exc.getMessage(), exc);
             } finally {
                 try {
-                    if (writer != null)
+                    if (writer != null) {
                         writer.close();
+                    }
                 } catch (IOException exc) {
                     throw new BuildException(exc.getMessage(), exc);
                 }
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/listener/TargetTimesLogGeneratorListener.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/listener/TargetTimesLogGeneratorListener.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,8 +17,8 @@
 package com.nokia.helium.core.ant.listener;
 
 import java.io.DataOutputStream;
+import java.io.File;
 import java.io.FileOutputStream;
-import java.io.File;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -92,8 +92,9 @@
                             targetTimesLogCsv, true);
                     timesLogOut = new DataOutputStream(timesLogFileStream);
                     // Display (sorted) hashtable.
-                    for (String targetTime : targetTimesTable)
+                    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/GetFreeDriveTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/GetFreeDriveTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,14 +17,15 @@
 
 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;
 
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.taskdefs.condition.Os;
+
 /**
  * Returns Next Free Drive available to use
  * 
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/GetValueFromVariableSetTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/GetValueFromVariableSetTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,34 +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: 
-*
-*/
+ * 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.util.Vector;
+
 import org.apache.tools.ant.BuildException;
-import java.util.Vector;
+import org.apache.tools.ant.Task;
 
 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.
- *  
+ * To retrive a variable value from a collection of variable set based on name, which contains
+ * property-value in pair.
+ * 
  * <pre>
  * Example:
  * 
@@ -42,23 +43,24 @@
  * &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>();
-    
+
+    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.
+     * 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;
@@ -66,6 +68,7 @@
 
     /**
      * 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) {
@@ -73,7 +76,8 @@
     }
 
     /**
-     * Helper function to create the VariableIFImpl object. 
+     * Helper function to create the VariableIFImpl object.
+     * 
      * @return created VariableIFImpl instance
      */
     public VariableSet createVariableIFImpl() {
@@ -82,9 +86,9 @@
         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) {
@@ -95,23 +99,24 @@
         if (variableMaps.isEmpty()) {
             throw new BuildException("variable interface cannot be null");
         }
-        if (variableMaps.size() > 1 ) {
+        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)
+        if (name == null) {
             throw new BuildException("'name' attribute has not been defined.");
-        if (property == null)
-            throw new BuildException(
-                    "'property' 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)) {
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/LDAPTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/LDAPTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,11 +17,12 @@
 
 package com.nokia.helium.core.ant.taskdefs;
 
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import javax.naming.*;
-import javax.naming.directory.*;
-import java.util.Hashtable;
+
+import com.nokia.helium.core.LDAPException;
+import com.nokia.helium.core.LDAPHelper;
 
 /**
  * Task is to search data from LDAP server.
@@ -41,43 +42,41 @@
     private String filter;
     private String key;
     private String property;
+    private boolean failOnError = true;
 
     /**
      * Method executes current task.
      */
     public void execute() {
-        if (url == null)
+        if (url == null) {
             throw new BuildException("'url' attribute is not defined");
-        if (rootdn == null)
+        }
+        if (rootdn == null) {
             throw new BuildException("'rootdn' attribute is not defined");
-        if (filter == null)
+        }
+        if (filter == null) {
             throw new BuildException("'filter' attribute is not defined");
-        if (property == null)
+        }
+        if (property == null) {
             throw new BuildException("'property' attribute is not defined");
-        if (key == null)
+        }
+        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;
+            LDAPHelper helper = new LDAPHelper(url, rootdn);
+            String value = helper.getAttributeAsString(filter, key);
+            if (value != null) {
+                getProject().setNewProperty(property, value);
+            } else {
+                log("Could not find value for key: " + key, Project.MSG_WARN);
             }
-        } catch (NamingException exc) {
-            throw new BuildException(exc.getMessage());
+        } catch (LDAPException exc) {
+            log(exc.getMessage(), Project.MSG_ERR);
+            if (failOnError) {
+                throw new BuildException(exc.getMessage(), exc);
+            }
         } 
     }
 
@@ -175,4 +174,14 @@
     public void setKey(String key) {
         this.key = key;
     }
+
+    /**
+     * Defines if the task should fail on error or not found.
+     * @param failOnError
+     * @ant.not-required Default is true
+     */
+    public void setFailOnError(boolean failOnError) {
+        this.failOnError = failOnError;
+    }
+
 }
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/PythonTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/PythonTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -23,6 +23,7 @@
 import java.io.PrintWriter;
 
 import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.taskdefs.ExecTask;
 import org.apache.tools.ant.types.Commandline;
@@ -153,11 +154,12 @@
             execTask.setOutput(output);
             try {
                 execTask.execute();
-            } catch (BuildException t) {
-                if (iFailonerror)
-                    throw new BuildException(t.getMessage());
-                else
-                    log(t.getMessage(), 0); // MSG_ERR=0
+            } catch (BuildException ex) {
+                if (iFailonerror) {
+                    throw new BuildException(ex.getMessage(), ex);
+                } else {
+                    log(ex.getMessage(), Project.MSG_ERR);
+                }
             }
         } else if (iText != null) {
             // Write the content of the script using Echo task
@@ -188,15 +190,16 @@
                 if (!fileDeleted && iFailonerror) {
                     throw new BuildException("Could not delete script file!");
                 }
-            } catch (IOException e) {
+            } catch (IOException ex) {
                 if (iFailonerror) {
-                    throw new BuildException(e.getMessage());
+                    throw new BuildException(ex.getMessage(), ex);
                 }
-                log("Error while running python task " + e.getMessage());
+                log("Error while running python task: " + ex.getMessage(), Project.MSG_ERR);
             } finally {
                 // make sure we delete the file anyway
-                if (tempfile != null)
+                if (tempfile != null) {
                     tempfile.delete();
+                }
             }
         }
     }
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/RetryTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/RetryTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -24,7 +24,7 @@
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.TaskContainer;
-import org.apache.tools.ant.taskdefs.*;
+import org.apache.tools.ant.taskdefs.Sleep;
 
 /**
  * Retries the nested task a set number of times
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/SerializePathTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/SerializePathTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,12 +18,20 @@
 
 package com.nokia.helium.core.ant.taskdefs;
 
-import java.io.*;
-import java.util.Vector;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
 import java.util.Iterator;
+import java.util.Vector;
 
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.Path;
 
 /**
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/ValidateUserLoginTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/ValidateUserLoginTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,12 +17,21 @@
  
 package com.nokia.helium.core.ant.taskdefs;
 
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
+import java.util.Hashtable;
+
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+
 import org.apache.tools.ant.BuildException;
-import javax.naming.*;
-import javax.naming.directory.*;
-import java.util.Hashtable;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
 import org.apache.tools.ant.taskdefs.condition.Condition;
 
 /**
@@ -61,8 +70,9 @@
     public void execute()
     {
         
-        if (property == null)
+        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))) {
@@ -113,18 +123,24 @@
     
     public void validateParameters(String url, String rootdn, String filter, String key, String searchdn, String password) {
         
-        if (url == null)
+        if (url == null) {
             throw new BuildException("'url' attribute is not defined");
-        if (rootdn == null)
+        }
+        if (rootdn == null) {
             throw new BuildException("'rootdn' attribute is not defined");
-        if (filter == null)
+        }
+        if (filter == null) {
             throw new BuildException("'filter' attribute is not defined");
-        if (key == null)
+        }
+        if (key == null) {
             throw new BuildException("'key' attribute is not defined");
-        if (searchdn == null)
+        }
+        if (searchdn == null) {
             throw new BuildException("'searchdn' attribute is not defined");
-        if (password == null)
+        }
+        if (password == null) {
             throw new BuildException("'password' attribute is not defined");
+        }
     }
     
     public boolean authenticateUser(String ldapurl, String rooTdn) {
@@ -136,7 +152,7 @@
         env.put(Context.SECURITY_PRINCIPAL, rooTdn);
         env.put(Context.SECURITY_CREDENTIALS, password);
         try {
-            DirContext authContext = new InitialDirContext(env);
+            DirContext authContext = new InitialDirContext(env); //NOPMD
             return true;
         } catch (NamingException e) {
             // We are Ignoring the errors as no need to fail the build.
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/XMLLogCountTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/XMLLogCountTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -21,6 +21,7 @@
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Task;
+
 import com.nokia.helium.core.ant.conditions.XMLLogCondition;
 
 /**
@@ -78,8 +79,9 @@
      * @throws BuildException
      */
     public void execute() {
-        if (property == null)
+        if (property == null) {
             throw new BuildException("'property' attribute is not defined");
+        }
         
         XMLLogCondition cond = new XMLLogCondition();
         cond.setFile(fileName);
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/ConditionType.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +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.ProjectComponent;
-import org.apache.tools.ant.taskdefs.condition.Condition;
-
-/**
- * Base class for conditions.
- */
-public class ConditionType extends ProjectComponent implements Condition {
-    
-    public boolean eval() {
-        return false;
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/FMPPMessage.java	Fri Aug 13 14:59:05 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.core.ant.types;
+
+import java.io.File;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.types.DataType;
+import org.apache.log4j.Logger;
+import fmpp.tools.AntTask;
+import fmpp.tools.AntTask.AntAttributeSubstitution;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.FileInputStream;
+import com.nokia.helium.core.MessageCreationException;
+import com.nokia.helium.core.ant.Message;
+
+
+/**
+ * Helper class to store the list of targets to be recorded and to be sent for diamonds.
+ *
+ * Example 1:
+ * <pre>
+ *   &lt;hlm:fmppMessage target="diamonds" sourceFile="tool.xml.ftl"&gt;
+ *        &lt;data expandProperties="yes"&gt;
+ *           ant: antProperties()
+ *       &lt;/data&gt;
+ *   &lt;/hlm:fmppMessage&gt;
+ * </pre>
+ * @ant.type name="fmppMessage" category="Core" 
+ */
+public class FMPPMessage extends DataType implements Message {
+
+    private File outputFile;
+
+    private AntTask task = new AntTask();
+    
+    private Logger log = Logger.getLogger(FMPPMessage.class);
+
+    public void setSourceFile(File sourceFile) {
+        if (!sourceFile.exists()) {
+            throw new BuildException("input file : " + sourceFile + " doesn't exists");
+        }
+        task.setSourceFile(sourceFile);
+    }
+    
+    public void setFreemarkerLinks(String freemarkerLinks) {
+        task.setFreemarkerLinks(freemarkerLinks);
+    }
+
+    public void addConfiguredData(AntAttributeSubstitution ats) {
+        task.addConfiguredData(ats);
+    }
+
+    public void addConfiguredFreemarkerLinks(AntAttributeSubstitution ats) {
+        task.addConfiguredFreemarkerLinks(ats);
+    }
+    public void setTemplateData(String templateData) {
+        task.setTemplateData(templateData);
+    }
+
+    public InputStream getInputStream() throws MessageCreationException {
+        InputStream stream = null;
+        try {
+            task.setProject(getProject());
+            outputFile = File.createTempFile("fmppmessage", ".xml");
+            outputFile.deleteOnExit();
+            task.setTaskName("fmpp");
+            task.setOutputFile(outputFile);
+            task.execute();
+            log.debug("outputfile in getinputstream: " + outputFile);
+            stream = new FileInputStream(outputFile);
+        } catch (BuildException bex) {
+            throw new MessageCreationException(bex.getMessage());
+        }
+        catch (IOException iex) {
+            throw new MessageCreationException(iex.getMessage());
+        }
+        return stream;
+    }
+}
\ 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/FileMessage.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,70 @@
+/*
+* 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.io.File;
+import com.nokia.helium.core.MessageCreationException;
+import com.nokia.helium.core.ant.Message;
+
+import org.apache.tools.ant.types.DataType;
+
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.FileInputStream;
+    
+/**
+ * Helper class to store the list of targets to be recorded and to be sent for diamonds.
+ *
+ * Example 1:
+ * <pre>
+ *     &lt;hlm:filemessage id="initial-message" file="${build.output.dir}/temp.xml" /&gt;
+ * 
+ * </pre>
+ * @ant.type name="fileMessage" category="Core" 
+ */
+public class FileMessage extends DataType implements Message {
+    
+    private File file;
+    
+    /**
+     * Helper function set file to send as message
+     * 
+     * @param inputFile to be sent.
+     */
+    public void setFile(File inputFile) {
+        file = inputFile;
+    }
+
+    /**
+     * Helper function to the stream for the file
+     * 
+     * @return stream of the file content
+     */
+    public InputStream getInputStream() throws MessageCreationException {
+        if (file == null) {
+            throw new MessageCreationException("file attribute is not defined at " + this.getLocation().toString());
+        }
+        try {
+            return  new FileInputStream(file);
+        } catch (FileNotFoundException ex) { 
+            throw new MessageCreationException("file Not found:" + file);
+        }
+    }
+
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmDefList.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmDefList.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,108 +1,85 @@
 /*
-* 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:  
-*
-*/
-
+ * 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.Vector;
+
 import org.apache.tools.ant.types.DataType;
+
 import com.nokia.helium.core.ant.HlmExceptionHandler;
+import com.nokia.helium.core.ant.PostBuildAction;
+import com.nokia.helium.core.ant.PreBuildAction;
 
 /**
+ * HlmDefList is a class used to store the pre/post build events and the
+ * exception handlers.
  * 
+ * @ant.type name="deflist" category="Core"
  */
 public class HlmDefList extends DataType {
 
-    private Vector<HlmPreDefImpl> preDefList = new Vector<HlmPreDefImpl>();
-    private Vector<HlmPostDefImpl> postDefList = new Vector<HlmPostDefImpl>();
-    private Vector<HlmExceptionHandler> exceptionHandlerList = new Vector<HlmExceptionHandler>();
-
-    /**
-     * Creates an empty hlm post-action definition and adds it to the list.
-     */
-    public HlmPreDefImpl createHlmPreDefImpl() {
-        HlmPreDefImpl def = new HlmPreDefImpl();
-        add(def);
-        return (HlmPreDefImpl) def;
-    }
+    private Vector<PreBuildAction> preBuildActions = new Vector<PreBuildAction>();
+    private Vector<PostBuildAction> postBuildActions = new Vector<PostBuildAction>();
+    private Vector<HlmExceptionHandler> exceptionHandlers = new Vector<HlmExceptionHandler>();
 
     /**
-     * Creates an empty hlm post-action definition and adds it to the list.
+     * Method to add a pre/post build action or an exception handler.
+     * 
+     * @param type
+     *            is the datatype representing a pre/post build action or an
+     *            exception handler.
      */
-    public HlmPostDefImpl createHlmPostDefImpl() {
-        HlmPostDefImpl def = new HlmPostDefImpl();
-        add(def);
-        return (HlmPostDefImpl) def;
-    }
-
-    /**
-     * Add a given variable to the list
-     * 
-     * @param var
-     *            variable to add
-     */
-    public void add(HlmPreDefImpl definition) {
-        if (definition != null) {
-            preDefList.add(definition);
+    public void add(DataType type) {
+        if (type instanceof PreBuildAction) {
+            preBuildActions.add((PreBuildAction) type);
+        }
+        if (type instanceof PostBuildAction) {
+            postBuildActions.add((PostBuildAction) type);
+        }
+        if (type instanceof HlmExceptionHandler) {
+            exceptionHandlers.add((HlmExceptionHandler) type);
         }
     }
 
     /**
-     * Add a post-action to the list.
+     * Get the list of pre build actions.
+     * 
+     * @return the list of pre build actions.
      */
-    public void add(HlmPostDefImpl definition) {
-        if (definition != null) {
-            postDefList.add(definition);
-        }
-    }
-    
-    /**
-     * Add a exception handler to the list.
-     */
-    public void add(HlmExceptionHandler exceptionHandler) {
-        if (exceptionHandler != null) {
-            exceptionHandlerList.add(exceptionHandler);
-        }
+    public Vector<PreBuildAction> getPreBuildActions() {
+        return preBuildActions;
     }
 
     /**
-     * Get the pre-action list.
+     * Get the list of post build actions.
      * 
-     * @return a vector containing all the pre-actions
+     * @return the list of post build actions.
      */
-    public Vector<HlmPreDefImpl> getPreDefList() {
-        return preDefList;
+    public Vector<PostBuildAction> getPostBuildActions() {
+        return postBuildActions;
     }
 
     /**
-     * Get the post-action list.
+     * Get the list of exception handlers.
      * 
-     * @return a vector containing all the post-actions
+     * @return the list of exception handlers
      */
-    public Vector<HlmPostDefImpl> getPostDefList() {
-        return postDefList;
-    }
-    
-    /**
-     * Get the exception handler list.
-     * 
-     * @return a vector containing all the exception handlers
-     */
-    public Vector<HlmExceptionHandler> getExceptionHandlerList() {
-        return exceptionHandlerList;
+    public Vector<HlmExceptionHandler> getExceptionHandlers() {
+        return exceptionHandlers;
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmFinalTargetDef.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmFinalTargetDef.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,54 +1,62 @@
 /*
-* 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:  
-*
-*/
+ * 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.Hashtable;
+
+import org.apache.log4j.Logger;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Target;
-import java.util.Hashtable;
-import org.apache.log4j.Logger;
+import org.apache.tools.ant.types.DataType;
 
+import com.nokia.helium.core.ant.PostBuildAction;
 
 /**
- * Class to execute the final target as post operation.
+ * Class to execute the final target as post build action.
+ * 
+ * @ant.type name="finaltargetdef" category="Core"
  */
-public class HlmFinalTargetDef extends HlmPostDefImpl
-{
+public class HlmFinalTargetDef extends DataType implements PostBuildAction {
     private Logger log = Logger.getLogger(HlmFinalTargetDef.class);
-    
+
     /**
      * This post action will execute the final target if any to be executed.
+     * 
      * @param prj
      * @param module
      * @param targetNames
      * 
      */
-    public void execute(Project prj, String module, String[] targetNames) {
-        String finalTargetName = prj.getProperty("hlm.target.final");
-        log.debug("Calling final target" + finalTargetName);
+    @SuppressWarnings("unchecked")
+    public void executeOnPostBuild(Project project, String[] targetNames) {
+        String finalTargetName = project.getProperty("hlm.target.final");
+        log.debug("Calling final target : " + finalTargetName);
         if (finalTargetName != null) {
-            Hashtable targets = prj.getTargets();
-            Target finalTarget = (Target)targets.get(finalTargetName);
+            // verify the target exists.
+            Hashtable targets = project.getTargets();
+            Target finalTarget = (Target) targets.get(finalTargetName);
             if (finalTarget == null) {
-                log.info("The final target : " + finalTargetName + " not available skipping");
+                log.info("The final target : " + finalTargetName
+                        + " not available skipping");
                 return;
             }
-            finalTarget.execute();
+            // let's the project execute the target.
+            project.executeTarget(finalTargetName);
         }
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmImportDef.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmImportDef.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,41 +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:  
-*
-*/
-
+ * 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.io.File;
+
 import org.apache.log4j.Logger;
-import org.apache.tools.ant.taskdefs.ImportTask;
-import org.apache.tools.ant.Target;
 import org.apache.tools.ant.Location;
 import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Target;
+import org.apache.tools.ant.taskdefs.ImportTask;
+import org.apache.tools.ant.types.DataType;
 
-import java.io.File;
+import com.nokia.helium.core.ant.PreBuildAction;
 
 /**
  * This class implements an Executor importer pre-action.
  * 
  * @ant.type name="importdef" category="Core"
  */
-public class HlmImportDef extends HlmPreDefImpl {
+public class HlmImportDef extends DataType implements PreBuildAction {
 
     private static Logger log = Logger.getLogger(HlmImportDef.class);
-    
-    private File file ;
+
+    private File file;
 
     public void setFile(File file) {
         this.file = file;
@@ -44,16 +46,17 @@
     /**
      * Will import the given file.
      */
-    public void execute(Project prj, String module, String[] targetNames) {
-        log.debug("importdef:prj name" + prj.getName() + ". fileName" + file.toString());
+    public void executeOnPreBuild(Project project, String[] targetNames) {
+        log.debug("importdef:prj name" + project.getName() + ". fileName"
+                + file.toString());
         ImportTask task = new ImportTask();
         Target target = new Target();
         target.setName("");
-        target.setProject(prj);
+        target.setProject(project);
         task.setOwningTarget(target);
         task.setLocation(new Location(file.getAbsolutePath()));
         task.setFile(file.toString());
-        task.setProject(prj);
+        task.setProject(project);
         task.execute();
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmListenerDef.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmListenerDef.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,33 +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:  
-*
-*/
-
+ * 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.Project;
+import org.apache.log4j.Logger;
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.BuildListener;
-import org.apache.log4j.Logger;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.DataType;
+
+import com.nokia.helium.core.ant.PreBuildAction;
 
 /**
  * This class implements a listener registration action.
  * 
  * @ant.type name="listenerdef" category="Core"
  */
-public class HlmListenerDef extends HlmPreDefImpl {
+public class HlmListenerDef extends DataType implements PreBuildAction {
 
     private String classname;
     private Logger log = Logger.getLogger(HlmListenerDef.class);
@@ -39,18 +42,22 @@
     /**
      * Register given listener to the project.
      */
-    public void execute(Project prj, String module, String[] targetNames) {
+    public void executeOnPreBuild(Project project, String[] targetNames) {
         try {
             Class<?> listenerClass = Class.forName(classname);
             BuildListener listener = (BuildListener) listenerClass
                     .newInstance();
-            prj.addBuildListener(listener);
+            project.addBuildListener(listener);
+            log.debug(classname + " is registered");
         } catch (ClassNotFoundException ex) {
-            log.debug("Class not found exception:" + ex.getMessage(), ex);
+            throw new BuildException("Class not found exception:"
+                    + ex.getMessage(), ex);
         } catch (InstantiationException ex1) {
-            log.debug("Class Instantiation exception:" + ex1.getMessage(), ex1);
+            throw new BuildException("Class Instantiation exception:"
+                    + ex1.getMessage(), ex1);
         } catch (IllegalAccessException ex1) {
-            log.debug("Illegal Class Access exception:" + ex1.getMessage(), ex1);
+            throw new BuildException("Illegal Class Access exception:"
+                    + ex1.getMessage(), ex1);
         }
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmPostDefImpl.java	Wed Jun 16 16:51:40 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.types;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.DataType;
-import org.apache.log4j.Logger;
-
-import com.nokia.helium.core.ant.HeliumExecutor;
-import com.nokia.helium.core.ant.HlmDefinition;
-
-/**
- * Implement an abstract post-action.
- */
-public class HlmPostDefImpl extends DataType implements HlmDefinition {
-    private Logger log = Logger.getLogger(HeliumExecutor.class);
-    
-    /**
-     * Do nothing.
-     */
-    public void execute(Project prj, String module, String[] targetNames) {
-        // Empty method. Implemented by extending classes.
-    }
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/HlmPreDefImpl.java	Wed Jun 16 16:51:40 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.types;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.DataType;
-
-import com.nokia.helium.core.ant.HlmDefinition;
-
-/**
- * Implement an abstract pre-action.
- */
-public class HlmPreDefImpl extends DataType implements HlmDefinition {
-    /**
-     * Do nothing.
-     */
-    public void execute(Project prj, String module, String[] targetNames) {
-        // empty will implemented by the sub classes.
-    }
-}
\ 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/Stage.java	Fri Aug 13 14:59:05 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.core.ant.types;
+
+import org.apache.tools.ant.types.DataType;
+import org.apache.tools.ant.BuildException;
+import org.apache.log4j.Logger;
+    
+/**
+ * A <code>Stage</code> is a Data type which stores Stage information.
+ * 
+ * <p>
+ * A Stage is defined by setting three attributes name, start and end targets, both should be a
+ * valid target name in the project.
+ * 
+ * <p>
+ * Usage:
+ * 
+ * <pre>
+ *      &lt;hlm:stage id="preparation" starttarget="stagetest" endtarget="stagetest"/&gt;              
+ * </pre>
+ *  
+ * @ant.type name="stage" category="Core"
+ * 
+ */
+public class Stage extends DataType {
+
+    //Default id is used as the stage name so overriding is possible.
+    private Logger log = Logger.getLogger(Stage.class);
+    private String stageName;
+    
+    private String startTarget;
+    
+    private String endTarget;
+
+    public void setStageName(String name) {
+        log.debug("stage-name:" + name);
+        if (stageName != null) {
+            throw new BuildException("no supported attribute stageName externally");
+        }
+        stageName = name;
+    }
+    
+    public String getStageName() {
+        return stageName;
+    }
+    /**
+     * Returns the stage start target. 
+     * @return stage start target name. 
+     */
+    public String getStartTarget() {
+        return startTarget;
+    }
+
+    /**
+     * Returns the stage end target.
+     * @return end target name
+     */
+    public String getEndTarget() {
+        return endTarget;
+    }
+
+    /**
+     * Set the starting target.
+     * 
+     * @param start is the starting point to set.
+     * @ant.required
+     */
+    public void setStartTarget(String name) {
+        startTarget = name;
+    }
+
+    /**
+     * Set the end target.
+     * 
+     * @param end is the end point to set.
+     * @ant.required
+     */
+    public void setEndTarget(String name) {
+        endTarget = name;
+    }
+    
+    /** Check is the end target set to current target.
+     * 
+     * @param target
+     * @return
+     */
+    public boolean isEndTarget( String target ) {
+        return this.endTarget.equals( target );
+    }    
+}
\ 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/TargetMessageTrigger.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,95 @@
+/*
+* 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.List;
+
+import org.apache.tools.ant.types.DataType;
+import java.util.ArrayList;
+import com.nokia.helium.core.ant.Message;
+    
+/**
+ * Helper class to store the list of targets to be recorded and to be sent for diamonds.
+ *
+ * Example 1:
+ * <pre>
+ *    &lt;hlm:targetMessageTrigger id="diamonds.id" target="diamonds"&gt;
+ *        &lt;hlm:fmppMessage&gt;
+ *            &lt;converterTask id="tools-conversion" sourceFile="${helium.dir}/tools/common/templates/diamonds/tool.xml.ftl" outputFile="${build.output.dir}/tool.xml"&gt;
+ *                &lt;data expandProperties="yes"&gt;
+ *                    ant: antProperties()
+ *                &lt;/data&gt;
+ *            &lt;/converterTask&gt;
+ *        &lt;/hlm:fmppMessage&gt;
+ *    &lt;/hlm:targetMessageTrigger&gt;
+ * <pre>
+ * @ant.type name="TargetMessageTrigger" category="Core" 
+ */
+ 
+ 
+public class TargetMessageTrigger extends DataType {
+
+    private String targetName;
+    
+    private boolean condition = true;
+    
+    private List<Message> messageList = new ArrayList<Message>();
+
+    /**
+     * Helper function to add message to the list.
+     * 
+     * @param message message to be added to the list
+     */
+    public void add(Message message) {
+        messageList.add(message);
+    }
+
+    public void setCondition(boolean condition) {
+        this.condition = condition;
+    }
+    public boolean isTriggerNeeded() {
+        return condition;
+    }
+    /**
+     * To get the message list to be processed further.
+     * 
+     * @return the message list. 
+     */
+    public List<Message> getMessageList() {
+        return messageList;
+    }
+
+    /**
+     * Sets the target name for which the message to be processed.
+     * 
+     * @param name of the target.
+     */
+    public void setTarget(String name) {
+        targetName = name;
+    }
+    
+    /**
+     * Helper function to get the target name for which the message is processed.
+     * 
+     * @return target name.
+     */
+    public String getTargetName() {
+        return targetName;
+    }
+}
\ 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/TextMessage.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,74 @@
+/*
+* 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.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+
+import org.apache.tools.ant.types.DataType;
+
+import com.nokia.helium.core.MessageCreationException;
+import com.nokia.helium.core.ant.Message;
+
+   
+/**
+ * Helper class to store the text message.
+ *
+ * Example 1:
+ * <pre>
+ *     &lt;hlm:textMessage id="initial-message" text="helloworld" /&gt;
+ * </pre>
+ * @ant.type name="textMessage" category="Core" 
+ */
+public class TextMessage extends DataType implements Message {
+    private String text;
+    
+    /**
+     * Helper function to set the text to be sent.
+     * 
+     * @param text to be sent.
+     */
+    /**
+     * Helper function to return the contents as stream.
+     * 
+     * @return content as input stream.
+     */
+    public InputStream getInputStream() throws MessageCreationException {
+        if (text == null) {
+            throw new MessageCreationException("text attribute is not defined at " + this.getLocation());
+        }
+        try {
+            return new ByteArrayInputStream(text.getBytes("UTF-8"));
+        } catch (UnsupportedEncodingException uex) {
+            throw new MessageCreationException(uex.getMessage());                
+        }
+    }
+    
+    /**
+     * Text message to send.
+     * 
+     * @param text to be sent.
+     * @ant.required
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+ 
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/VariableImpl.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/VariableImpl.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,14 +18,14 @@
 package com.nokia.helium.core.ant.types;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.DataType;
-import org.apache.tools.ant.BuildException;
-import org.apache.commons.lang.StringUtils;
+import org.codehaus.plexus.util.StringUtils;
 
 import com.nokia.helium.core.ant.MappedVariable;
-import java.util.Arrays;
 
 /**
  * Helper class to store the command line variables
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/VariableSet.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/VariableSet.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,19 +17,18 @@
  
 package com.nokia.helium.core.ant.types;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.types.DataType;
+
 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;
-
 /**
  * Helper class to store the variable set (list of variables
  * with name / value pair)
@@ -108,8 +107,9 @@
             for (Variable variable : variables) {
                 if (variable instanceof MappedVariable) {
                     allVariables.put(((MappedVariable)variable).getName(), (MappedVariable)variable);
-                } else if (variable instanceof VariableSet)
+                } else if (variable instanceof VariableSet) {
                     allVariables.putAll(((VariableSet)variable).getVariablesMap());
+                }
             }
             return allVariables;
         }
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/plexus/CommandBase.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/plexus/CommandBase.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,19 +1,20 @@
 /*
-* 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:  
-*
-*/
+ * 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.plexus;
 
 import java.io.File;
@@ -21,18 +22,17 @@
 import java.util.Vector;
 
 import org.apache.log4j.Logger;
-import org.codehaus.plexus.util.Os;
+import org.apache.tools.ant.taskdefs.condition.Os;
 import org.codehaus.plexus.util.cli.CommandLineException;
 import org.codehaus.plexus.util.cli.CommandLineUtils;
 import org.codehaus.plexus.util.cli.Commandline;
 import org.codehaus.plexus.util.cli.StreamConsumer;
 
 /**
- * This abstract class implements some basic support to execute commands and 
- * redirect outputs to StreamConsumer. You can have common stream consumers or
- * execution base streamconsumers. The exception type raised 
- * can be controlled by the implementing class.
- *
+ * This abstract class implements some basic support to execute commands and redirect outputs to
+ * StreamConsumer. You can have common stream consumers or execution base streamconsumers. The
+ * exception type raised can be controlled by the implementing class.
+ * 
  * @param <T>
  */
 public abstract class CommandBase<T extends Exception> {
@@ -42,12 +42,14 @@
 
     /**
      * Get the executable name.
+     * 
      * @return
      */
     protected abstract String getExecutable();
 
     /**
      * Throw an exception with message and cause.
+     * 
      * @param message
      * @param t
      * @throws T
@@ -56,6 +58,7 @@
 
     /**
      * Throw an exception with message only.
+     * 
      * @param message
      * @throws T
      */
@@ -64,18 +67,18 @@
     }
 
     /**
-     * Location where to execute the command. The default location
-     * is the current directory.
+     * Location where to execute the command. The default location is the current directory.
+     * 
      * @return a File object pointing to a directory.
      */
     public File getWorkingDir() {
         return new File(".");
     }
-    
+
     /**
-     * Add a LineHandler to the CommandBase instance.
-     * LineHandlers could be used to record/log the output stream
-     * command invocation.
+     * Add a LineHandler to the CommandBase instance. LineHandlers could be used to record/log the
+     * output stream command invocation.
+     * 
      * @param lineHandler a lineHandle instance
      */
     public void addOutputLineHandler(StreamConsumer lineHandler) {
@@ -83,11 +86,11 @@
             outputHandlers.add(lineHandler);
         }
     }
-    
+
     /**
-     * Add a LineHandler to the CommandBase instance.
-     * LineHandlers could be used to record/log the output error stream
-     * command invocation.
+     * Add a LineHandler to the CommandBase instance. LineHandlers could be used to record/log the
+     * output error stream command invocation.
+     * 
      * @param lineHandler a lineHandle instance
      */
     public void addErrorLineHandler(StreamConsumer lineHandler) {
@@ -107,13 +110,11 @@
     }
 
     /**
-     * Execute the command given by getExecutable with args as list of arguments and custom StreamConsumer.
+     * Execute the command given by getExecutable with args as list of arguments and custom
+     * StreamConsumer.
      * 
-     * @param args
-     *            an array representing blocks arguments
-     * @param output
-     *            the StreamConsumer to analyze the output with. If null it is
-     *            ignored.
+     * @param args an array representing blocks arguments
+     * @param output the StreamConsumer to analyze the output with. If null it is ignored.
      * @throws T
      */
     public void execute(String[] args, StreamConsumer output) throws T {
@@ -121,20 +122,16 @@
     }
 
     /**
-     * Execute the command given by getExecutable with args as list of arguments and custom StreamConsumer.
-     * Also env content will be added to the environment. 
+     * Execute the command given by getExecutable with args as list of arguments and custom
+     * StreamConsumer. Also env content will be added to the environment.
      * 
-     * @param args
-     *            an array representing blocks arguments
-     * @param env
-     *            additional key to add the environment
-     * @param output
-     *            the StreamConsumer to analyze the output with. If null it is
-     *            ignored.
+     * @param args an array representing blocks arguments
+     * @param env additional key to add the environment
+     * @param output the StreamConsumer to analyze the output with. If null it is ignored.
      * @throws T
      */
     public void executeCmdLine(String argLine, Map<String, String> env, StreamConsumer output)
-            throws T {
+        throws T {
         Commandline cmdLine = new Commandline();
         cmdLine.createArg().setValue(getExecutable());
         if (argLine != null) {
@@ -143,19 +140,19 @@
         executeCmd(cmdLine, env, output);
     }
 
-    private void executeCmd(Commandline cmdLine, Map<String, String> env, StreamConsumer output)     throws T  {
+    private void executeCmd(Commandline cmdLine, Map<String, String> env, StreamConsumer output)
+        throws T {
         if (env != null) {
             for (Map.Entry<String, String> entry : env.entrySet()) {
                 cmdLine.addEnvironment(entry.getKey(), entry.getValue());
             }
         }
         cmdLine.setWorkingDirectory(getWorkingDir());
-        
+
         // This is only needed on windows.
         if (Os.isFamily(Os.FAMILY_WINDOWS)) {
-            cmdLine.createArg().setLine("&& exit %%ERRORLEVEL%%");    
+            cmdLine.createArg().setLine("&& exit %%ERRORLEVEL%%");
         }
-        
 
         StreamMultiplexer inputMux = new StreamMultiplexer();
         if (output != null) {
@@ -173,36 +170,28 @@
         }
 
         try {
-            int err = CommandLineUtils.executeCommandLine(cmdLine, inputMux,
-                    errorMux);
+            int err = CommandLineUtils.executeCommandLine(cmdLine, inputMux, errorMux);
             // check its exit value
             log.debug("Execution of " + getExecutable() + " returned: " + err);
             if (err != 0) {
-                throwException(errorRecorder.getBuffer() + " (return code: " + err
-                        + ")");
+                throwException(errorRecorder.getBuffer() + " (return code: " + err + ")");
             }
-        } catch (CommandLineException e) {
-            throwException(
-                    "Error executing " + getExecutable() + ": "
-                            + e.toString());
+        }
+        catch (CommandLineException e) {
+            throwException("Error executing " + getExecutable() + ": " + e.toString());
         }
     }
 
     /**
-     * Execute the command given by getExecutable with args as list of arguments and custom StreamConsumer.
-     * Also env content will be added to the environment. 
+     * Execute the command given by getExecutable with args as list of arguments and custom
+     * StreamConsumer. Also env content will be added to the environment.
      * 
-     * @param args
-     *            an array representing blocks arguments
-     * @param env
-     *            additional key to add the environment
-     * @param output
-     *            the StreamConsumer to analyze the output with. If null it is
-     *            ignored.
+     * @param args an array representing blocks arguments
+     * @param env additional key to add the environment
+     * @param output the StreamConsumer to analyze the output with. If null it is ignored.
      * @throws T
      */
-    public void execute(String[] args, Map<String, String> env, StreamConsumer output)
-            throws T {
+    public void execute(String[] args, Map<String, String> env, StreamConsumer output) throws T {
         Commandline cmdLine = new Commandline();
         cmdLine.createArg().setValue(getExecutable());
         if (args != null) {
@@ -210,5 +199,5 @@
         }
         executeCmd(cmdLine, env, output);
     }
-    
+
 }
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/plexus/FileStreamConsumer.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/plexus/FileStreamConsumer.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,12 +16,12 @@
 */
 package com.nokia.helium.core.plexus;
 
+import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
-import java.io.BufferedWriter;
 
 import org.apache.log4j.Logger;
 import org.codehaus.plexus.util.cli.StreamConsumer;
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/plexus/StreamMultiplexer.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/plexus/StreamMultiplexer.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,6 +17,7 @@
 package com.nokia.helium.core.plexus;
 
 import java.util.Vector;
+
 import org.codehaus.plexus.util.cli.StreamConsumer;
 
 /**
--- a/buildframework/helium/sf/java/core/tests/antunit/executor/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/tests/antunit/executor/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,9 +22,14 @@
 -->
 <project name="test-executor">
     <description>Helium antlib core executor test config.</description>
+    <property name="hlm.target.final" value="final-target" />
 
     <target name="target">
         <echo>Running target.</echo>
     </target>
+    
+    <target name="final-target">
+        <echo>final-target is executed as postbuild action</echo>
+    </target>
 
 </project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/tests/antunit/executor/test_executor.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/tests/antunit/executor/test_executor.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -72,12 +72,6 @@
             <arg line="-lib ../../../../antlibs"/>
             <arg line="target"/>
         </exec>
-        <exec osfamily="unix" executable="ant">
-            <arg value="-Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor"/>
-            <arg line="-lib ../../../../bin"/>
-            <arg line="-lib ../../../../lib"/>
-            <arg line="-lib ../../../../antlibs"/>
-            <arg line="target"/>
-        </exec>
+        <au:assertLogContains text="final-target is executed as postbuild action" />
     </target>
 </project>
--- a/buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/plexus/tests/TestAntStreamConsumer.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/plexus/tests/TestAntStreamConsumer.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,12 +16,14 @@
 */
 package com.nokia.helium.core.plexus.tests;
 
+import static org.junit.Assert.assertTrue;
+
 import org.apache.tools.ant.BuildEvent;
 import org.apache.tools.ant.BuildListener;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.Echo;
 import org.junit.Test;
-import static org.junit.Assert.*;
+
 import com.nokia.helium.core.plexus.AntStreamConsumer;
 
 public class TestAntStreamConsumer {
--- a/buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/plexus/tests/TestCommandBase.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/plexus/tests/TestCommandBase.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,12 +16,13 @@
 */
 package com.nokia.helium.core.plexus.tests;
 
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 import hidden.org.codehaus.plexus.interpolation.os.Os;
 
 import java.util.Hashtable;
 
 import org.junit.Test;
-import static org.junit.Assert.*;
 
 import com.nokia.helium.core.plexus.CommandBase;
 import com.nokia.helium.core.plexus.StreamRecorder;
--- a/buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/plexus/tests/TestFileStreamConsumer.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/plexus/tests/TestFileStreamConsumer.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,12 +16,14 @@
 */
 package com.nokia.helium.core.plexus.tests;
 
+import static org.junit.Assert.assertTrue;
+
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 
 import org.junit.Test;
-import static org.junit.Assert.*;
+
 import com.nokia.helium.core.plexus.FileStreamConsumer;
 
 public class TestFileStreamConsumer {
--- a/buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/plexus/tests/TestStreamRecorder.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/plexus/tests/TestStreamRecorder.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,7 +16,7 @@
 */
 package com.nokia.helium.core.plexus.tests;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertTrue;
 
 import org.junit.Test;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/tests/TestLDAPHelper.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,125 @@
+/*
+* 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.assertNotNull;
+
+import org.junit.Test;
+
+import com.nokia.helium.core.LDAPException;
+import com.nokia.helium.core.LDAPHelper;
+
+/**
+ * Testing the LDAPHelper class. Test are limited to what
+ * can be check locally.
+ * 
+ */
+public class TestLDAPHelper {
+
+    /**
+     * Test that construction fails if ldap is null
+     */
+    @Test
+    public void checkContstrutorValidationForLDAP() {
+        IllegalArgumentException error = null;
+        try {
+            new LDAPHelper(null, "");
+        } catch (IllegalArgumentException ex) {
+            error = ex;
+        }
+        assertNotNull(error);
+    }
+
+    /**
+     * Test that construction fails if rootdn is null
+     */
+    @Test
+    public void checkContstrutorValidationForRootDN() {
+        IllegalArgumentException error = null;
+        try {
+            new LDAPHelper("", null);
+        } catch (IllegalArgumentException ex) {
+            error = ex;
+        }
+        assertNotNull(error);
+    }
+
+    /**
+     * Test that construction fails if rootdn is null
+     * @throws LDAPException 
+     */
+    @Test
+    public void checkGetAttributeAsStringNullUsername() throws LDAPException {
+        IllegalArgumentException error = null;
+        LDAPHelper helper = new LDAPHelper("", "");
+        try {
+            helper.getAttributeAsString(null, "");
+        } catch (IllegalArgumentException ex) {
+            error = ex;
+        }
+        assertNotNull(error);
+    }
+
+    /**
+     * Test that construction fails if rootdn is null
+     * @throws LDAPException 
+     */
+    @Test
+    public void checkGetAttributeAsStringNullAttribute() throws LDAPException {
+        IllegalArgumentException error = null;
+        LDAPHelper helper = new LDAPHelper("", "");
+        try {
+            helper.getAttributeAsString("", null);
+        } catch (IllegalArgumentException ex) {
+            error = ex;
+        }
+        assertNotNull(error);
+    }
+
+    /**
+     * Test that construction fails if rootdn is null
+     * @throws LDAPException 
+     */
+    @Test
+    public void checkGetAttributeAsStringNullAttributeCurrentUser() throws LDAPException {
+        IllegalArgumentException error = null;
+        LDAPHelper helper = new LDAPHelper("", "");
+        try {
+            helper.getUserAttributeAsString(null);
+        } catch (IllegalArgumentException ex) {
+            error = ex;
+        }
+        assertNotNull(error);
+    }
+
+
+    /**
+     * Test that construction fails if rootdn is null
+     * @throws LDAPException 
+     */
+    @Test
+    public void checkGetAttributeAsStringInvalidUser() {
+        LDAPException error = null;
+        LDAPHelper helper = new LDAPHelper("", "");
+        try {
+            helper.getAttributeAsString("invaliduser", LDAPHelper.EMAIL_ATTRIBUTE_NAME);
+        } catch (LDAPException ex) {
+            error = ex;
+        }
+        assertNotNull(error);
+    }
+}
--- a/buildframework/helium/sf/java/diamonds/diamonds.rst	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/diamonds.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -11,14 +11,16 @@
 ------------
 Diamonds is web application that can collect all build related information and categorize
 builds. It can represent build information in different metrics. This document describes how
-to configure diamonds in helium.
+to configure diamonds in helium and minimum set of properties required.
 
 Diamonds Server setup
 ---------------------
-Please define ``diamonds.host`` property with server address and ``diamonds.port`` with server port number.
-e. g. ::
+These are the minimum set of properties required in order to start the diamonds. All the properties are
+defined automatically with already defined set of properties. The end user would not be required to change
+any thing. As these are configured once for different vendors (symbian foundation, nokia, others.)
 
     <!-- Diamonds server details -->
+    
     <property name="diamonds.host" value="diamonds.xxx.com"/>
     <property name="diamonds.port" value="9900"/>
 
@@ -27,52 +29,95 @@
 -------------------
 `diamonds` target is the initialize target for diamonds logging. Call diamonds target in build target sequence
 and this will log the already available data to diamonds and continue to log data onward as soon as they are available.
-This is done already in helium build target sequence. So user can ignore this section.
+This is done already in helium build target sequence. So user can ignore this section. Earlier the diamonds
+target needs to be called once the build area is initialized, but now this could be called even
+before, as the output for diamonds files are generated in the cache location.
 
-Disable diamonds logging
--------------------------------
-Diamonds logging can be skipped by defining the property ``skip.diamonds`` to true.
+
+Disable diamonds reporting
+--------------------------
+Diamonds reporting can be skipped by defining the property ``diamonds.enabled`` to false.
 e.g.::
 
-    hlm -Dskip.diamonds=true 
+    hlm -Ddiamonds.enabled=false 
 
 
-Add targets into diamonds configuration ftl file
-------------------------------------------------
-Diamonds detail configurations are in helium/config/diamonds_config.xml.ftl file.
-User have to add target here(this target must be already defined in configuration) 
-if they want to log some additional data to diamonds after the target execution.
-
-Define the target with the following attributes inside ``<targets>`` node:
+Diamonds Configuration details
+------------------------------
+Diamonds configurations are extendable now. The default diamonds configuration is there under
+${helium.dir}/config/diamonds_config_default.ant.xml. The configuration is based on ant properties
+and references. So if the user wants to add process and report for new information, they can add
+the details in their configurations. There are three types of information being provided using the 
+configurations and are below.
 
-.. csv-table:: Target
-   :header: "Attribute", "Description", "Required"
-   
-    "name", "Name of the target","Yes"
-    "template-file", "template file to process the data","No, if not defined, consider template file name same as target name"
-    "logfile", "log file which will be processed","No"
-    "ant-properties","set true if you need values from ant properties, default is false","No"
-    "defer", "logging will be deferred and will be logged at the build finish time. Default is false","No"
+Properties Required:
+====================
+Below are the properties requried for processing diamonds. But these are mapped to predifined properties
+in helium and no action required for the user. The end user would not be required to change
+any thing. As these are configured once for different vendors (symbian foundation, nokia, others.)
 
-e.g
+    <property name="diamonds.smtp.server" value="${email.smtp.server}" />
+    <property name="diamonds.ldap.server" value="${email.ldap.server}" />
+    <property name="diamonds.initializer.targetname" value="diamonds" />
+    <property name="diamonds.tstamp.format" value="yyyy-MM-dd'T'HH:mm:ss" />
+    <property name="diamonds.category" value="${build.family}" />
+
+Stage Configurations:
+=====================
+Stages are to record information specific to stages. Stage information is used for both logging and
+diamonds reporting. The build process needs to define stages clearly and map it with the configurations
+as below.
 
 .. code-block:: xml
 
-    <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"/>    
+      <hlm:stage id="get-baseline" startTarget="check-free-space" endTarget="enable-abiv2" />
+      <hlm:stage id="get-source" startTarget="do-prep-work-area" endTarget="create-bom" />
+      <hlm:stage id="clean-and-prep" startTarget="ido-prep-clean-dfs" endTarget="ido-pre-compile" />
+      <hlm:stage id="build" startTarget="ido-build-parallel-dfs" endTarget="compile-ctc" />
+      <hlm:stage id="rombuild" startTarget="image-creation" endTarget="image-creation" />
+      <hlm:stage id="create-ATS-drop" startTarget="ats-test" endTarget="ats-aste" />        
+      <hlm:stage id="post-build" startTarget="image-creation" endTarget="archive" />
+
+The stage configuration provides the information about the stage starting and ending target sequence.
+There should be a corresponding stagerecord for each stage, which is to store the log information
+for that specific stages, please refer to logging module for more information.
+
+Both the stages / target reporting using messaging type to provide details to be sent to diamonds
+reporting. See details in messaging sections for further details.
+
+Currently the diamonds reporting just records the start / end time using the following configuration.
+
+.. code-block:: xml
+
+    <hlm:fmppMessage id="stage.time.message" sourceFile="${diamonds.template-dir}/diamonds_stage.xml.ftl">
+        <data expandProperties="yes">
+            ant: antProperties()
+        </data>
+    </hlm:fmppMessage>
+
+The config takes a template to be used to convert, the template is converted using fmpp and all 
+the output files are processed and sent to diamonds. All the input to fmpp task could be used here.
+The template diamonds_stage.xml.ftl just reports the start / end time. In addition to duration, if 
+the user wants to send more information for the stages it could be done by overriding the 
+configuration as below and controlling using the user defined template.
+
+.. code-block:: xml
+
+    <hlm:fmppMessage id="stage.time.message" ${diamonds.custom.template.dir}/diamonds_stage_custom.xml.ftl>
+        <data expandProperties="yes">
+            ant: antProperties()
+        </data>
+    </hlm:fmppMessage>
 
 
-If no logfile provided, looks for xml file to send using <build.id_target_name.xml> file or <target_name.xml> file, 
-if both doesn't exists does nothing. tries to pass ant properties and sends it. For below example, it looks for 
-<build.id_create-bom.xml> or create_bom.xml and if any one exists then it will send that data. 
-
-::
-    
-    <target name="create-bom"/>
+Reporting based on target execution:
+====================================
+If some data needs to be sent at the end of target execution, this can be defined with below configuration.
 
-
-Using only ant properties for a specific target to send data
-
-::
-    
-    <target name="ant-prop-target" template-file="ant-prop.xml.ftl" ant-properties="true"/>
-    
+    <hlm:targetMessage id="diamonds.id" target="diamonds">
+        <hlm:fmppMessage sourceFile="${helium.dir}/tools/common/templates/diamonds/tool.xml.ftl" >
+            <data expandProperties="yes">
+                ant: antProperties()
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessage>
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/ivy.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -36,5 +36,7 @@
     <dependency org="jaxen" name="jaxen" rev="latest.integration" conf="default"/>
     <dependency org="org.apache.commons" name="commons-logging" rev="latest.integration" conf="default"/>
     <dependency org="org.apache.commons" name="commons-codec" rev="latest.integration" conf="default"/>
+    <dependency org="org.apache.commons" name="commons-codec" rev="latest.integration" conf="default"/>
+    <dependency org="xpath-task" name="xpath-task" rev="latest.integration" conf="default"/>
   </dependencies>
 </ivy-module>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/AllTargetDiamondsListener.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  
+ *
+ */
+
+package com.nokia.helium.diamonds;
+
+import java.io.BufferedWriter;
+import java.io.FileInputStream;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Vector;
+import org.apache.log4j.Logger;
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.Target;
+
+/**
+ * Generate target times
+ */
+public class AllTargetDiamondsListener extends DiamondsListenerImpl {
+
+    private static Logger log = Logger.getLogger(DiamondsListenerImpl.class);
+
+    private Vector<AntTarget> antTargets = new Vector<AntTarget>();
+
+
+    
+
+    /**
+     * Function to process logging info during begining of target execution
+     * 
+     * @param event of target execution.
+     */
+    public void targetBegin(BuildEvent buildEvent) {
+        antTargets.add(new AntTarget(buildEvent.getTarget()));
+    }
+
+    /**
+     * Function to process logging info during end of target execution
+     * 
+     * @param event of target execution.
+     */
+    public void targetEnd(BuildEvent buildEvent) {
+        for (AntTarget at : antTargets)
+        {
+            if (at.equals(buildEvent.getTarget())) {
+                at.setEndTime(new Date());
+            }
+        }
+    }
+
+    /**
+     * Function to process logging info during end of build
+     * 
+     * @param event of target execution.
+     */
+    public void buildEnd(BuildEvent buildEvent) throws DiamondsException {
+        try {
+            if (isInitialized()) {
+                File tempFile = File.createTempFile("diamonds-targets", ".xml");
+                FileWriter fstream = new FileWriter(tempFile);
+                BufferedWriter out = new BufferedWriter(fstream);
+                out.write("<targets>\n");
+                
+                for (AntTarget at : antTargets)
+                {
+                    Calendar startcalendar = Calendar.getInstance();
+                    Calendar endcalendar = Calendar.getInstance();
+                    startcalendar.setTime(at.getStartTime());
+                    if (at.getEndTime() != null)
+                    {
+                        endcalendar.setTime(at.getEndTime());
+                        endcalendar.add(Calendar.SECOND, -5);
+                        if (endcalendar.after(startcalendar))
+                        {
+                            out.write("<target>\n");
+                            out.write("<name>" + at.getName() + "</name>\n");
+                            out.write("<started>" + getTimeFormat().format(at.getStartTime()) + "</started>\n");
+                            out.write("<finished>" + getTimeFormat().format(at.getEndTime()) + "</finished>\n");
+                            out.write("</target>\n");
+                        }
+                    }
+                }
+                
+                out.write("</targets>\n");
+                out.close();
+                FileInputStream stream = new FileInputStream(tempFile);
+                log.debug("alltargetdiamondslistener file: " + tempFile);
+                mergeToFullResults(stream);
+                stream.close();
+                stream = new FileInputStream(tempFile); 
+                log.debug("diamondsclient: " + getDiamondsClient());
+                log.debug("diamondsclient: " + DiamondsConfig.getBuildId());
+                getDiamondsClient().sendData(stream, DiamondsConfig.getBuildId());
+            }
+        }
+        catch (IOException e)
+        {
+            e.printStackTrace();
+        }
+    }
+    
+    class AntTarget {
+        private String targetName;
+        private Date startTime;
+        private Date endTime;
+        private int hashCode;
+        
+        public AntTarget(Target target)
+        {
+            targetName = target.getName();
+            hashCode = target.hashCode();
+            startTime = new Date();
+        }
+        public String getName() { return targetName; }
+        public Date getStartTime() { return startTime; }
+        public Date getEndTime() { return endTime; }
+        public void setEndTime(Date e) { endTime = e; }
+        public boolean equals(Object obj) { return obj.hashCode() == hashCode; }
+        public int hashCode() { return hashCode; }
+    }
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsClient.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsClient.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,38 +1,39 @@
 /*
-* 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:  
-*
-*/
-
+ * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  
+ *
+ */
 
 package com.nokia.helium.diamonds;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpException;
 import org.apache.commons.httpclient.methods.FileRequestEntity;
 import org.apache.commons.httpclient.methods.PostMethod;
 import org.apache.commons.httpclient.methods.RequestEntity;
+import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
+
 import com.nokia.helium.core.EmailDataSender;
-
-import java.io.IOException;
-import java.io.File;
+import com.nokia.helium.core.EmailSendException;
 
 /**
- * Diamonds client used to connect to get build id and also to send the build
- * results
+ * Diamonds client used to connect to get build id and also to send the build results
  * 
  */
 public class DiamondsClient {
@@ -42,7 +43,7 @@
     private static final int SERV_NOT_FOUND = 404;
 
     private static final int SERV_OK = 200;
-    
+
     private boolean isRecordOnly;
 
     private Logger log = Logger.getLogger(DiamondsClient.class);
@@ -57,7 +58,6 @@
 
     private HttpClient httpClient;
 
-
     public DiamondsClient(String hst, String prt, String pth, String mailID) {
         host = hst;
         port = prt;
@@ -70,7 +70,8 @@
         int result = 0;
         try {
             result = httpClient.executeMethod(postMethod);
-        } catch (IOException e) {
+        }
+        catch (IOException e) {
             isRecordOnly = true;
             throw new DiamondsException("IOException while sending http request." + e.getMessage());
             // e.printStackTrace();
@@ -109,8 +110,7 @@
         // Request content will be retrieved directly
         // from the input stream
 
-        RequestEntity entity = new FileRequestEntity(input,
-                "text/xml; charset=ISO-8859-1");
+        RequestEntity entity = new FileRequestEntity(input, "text/xml; charset=ISO-8859-1");
         post.setRequestEntity(entity);
         return post;
     }
@@ -118,26 +118,71 @@
     private int processPostMethodResult(int result) {
         // Log status code
         switch (result) {
-        case INT_SERV_ERROR:
-            // log.error("Internal server error");
-            break;
-        case SERV_NOT_FOUND:
-            // log.error("Server not found");
-            break;
-        case SERV_OK:
-            // log.info("Connection to diamonds server - OK");
-            break;
-        default:
-            // log.debug("Response code: " + result);
+            case INT_SERV_ERROR:
+                // log.error("Internal server error");
+                break;
+            case SERV_NOT_FOUND:
+                // log.error("Server not found");
+                break;
+            case SERV_OK:
+                // log.info("Connection to diamonds server - OK");
+                break;
+            default:
+                // log.debug("Response code: " + result);
         }
         return result;
     }
+    
+    public String getBuildId(InputStream stream) throws DiamondsException {
+        String diamondsBuildID = null;
+        PostMethod postMethod = null;
+        try {
+            if (!isRecordOnly) {
+                String strURL = getURL();
+                log.debug("strURL:" + strURL);
+                postMethod = getPostMethod(stream, strURL);
+                log.debug("postmethod:" + postMethod);
+                int postMethodResult = httpClient.executeMethod(postMethod);
+                log.debug("postmethod-result:" + postMethodResult);
 
+                int result = processPostMethodResult(postMethodResult);
+
+                if (result == SERV_OK) {
+                    // Display and save response code which functions as a id for
+                    // the build.
+                    diamondsBuildID = postMethod.getResponseBodyAsString();
+                    log.debug("diamondsBuildID: " + diamondsBuildID);
+                }
+                else {
+                    isRecordOnly = true;
+                    log.error("Diamonds data not sent, because of connection failure.");
+                    // throw new DiamondsException("Connection Failed");
+                }
+            }
+        }
+        catch (HttpException ex) {
+            isRecordOnly = true;
+            log.debug("Diamonds data not sent:s", ex);
+            log.error("Diamonds data not sent: " + ex.getMessage());
+        }
+        catch (IOException ex) {
+            isRecordOnly = true;
+            log.debug("Diamonds data not sent:", ex);
+            log.error("Diamonds data not sent: " + ex.getMessage());
+        }
+        finally {
+            // Release current connection to the connection pool once you are
+            // done
+            if (postMethod != null) {
+                postMethod.releaseConnection();
+            }
+        }
+        return diamondsBuildID;
+    }
 
     /**
      * 
-     * @param fileName
-     *            Filename to export to Diamonds
+     * @param fileName Filename to export to Diamonds
      * @return diamonds build id
      */
     public String getBuildId(String fileName) throws DiamondsException {
@@ -156,7 +201,7 @@
                 log.debug("postmethod:" + postMethod);
                 int postMethodResult = httpClient.executeMethod(postMethod);
                 log.debug("postmethod-result:" + postMethodResult);
-    
+
                 int result = processPostMethodResult(postMethodResult);
 
                 if (result == SERV_OK) {
@@ -164,21 +209,25 @@
                     // the build.
                     diamondsBuildID = postMethod.getResponseBodyAsString();
                     log.debug("diamondsBuildID: " + diamondsBuildID);
-                } else {
+                }
+                else {
                     isRecordOnly = true;
                     log.error("Diamonds data not sent, because of connection failure.");
-                    //throw new DiamondsException("Connection Failed");
+                    // throw new DiamondsException("Connection Failed");
                 }
             }
-        } catch (HttpException ex) {
+        }
+        catch (HttpException ex) {
             isRecordOnly = true;
-            log.error("Diamonds data not sent: " + ex.getMessage());
             log.debug("Diamonds data not sent:s", ex);
-        } catch (IOException ex) {
-            isRecordOnly = true;
             log.error("Diamonds data not sent: " + ex.getMessage());
+        }
+        catch (IOException ex) {
+            isRecordOnly = true;
             log.debug("Diamonds data not sent:", ex);
-        } finally {
+            log.error("Diamonds data not sent: " + ex.getMessage());
+        }
+        finally {
             // Release current connection to the connection pool once you are
             // done
             if (postMethod != null) {
@@ -188,6 +237,43 @@
         return diamondsBuildID;
     }
 
+    private PostMethod getPostMethod(InputStream stream, String urlPath) {
+
+        // Get the Diamonds XML-file which is to be exported
+        //File input = new File(fileName);
+
+        // Prepare HTTP post
+        PostMethod post = new PostMethod(urlPath);
+
+        RequestEntity entity = new InputStreamRequestEntity(stream, "text/xml");
+        post.setRequestEntity(entity);
+        return post;
+    }
+
+    public int sendData(InputStream stream, String urlPath) {
+        PostMethod postMethod = null;
+        int result = -1;
+        if (urlPath != null && !isRecordOnly) {
+            try {
+                String strURL = getURL(urlPath);
+                postMethod = getPostMethod(stream, 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) {
+                log.error("sendData:The final data via http not sent because errors:IOException ", e);
+            }
+        }
+        return result;
+    }
+    
     public int sendData(String fileName, String urlPath) {
         PostMethod postMethod = null;
         int result = -1;
@@ -195,29 +281,28 @@
             try {
                 String strURL = getURL(urlPath);
                 postMethod = getPostMethod(fileName, strURL);
-                result = processPostMethodResult(httpClient
-                        .executeMethod(postMethod));
-            } catch (IllegalArgumentException e) {
+                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) {
+            }
+            catch (DiamondsException e) {
                 log.error("sendData:The final data via http not sent because errors:DiamondsException ", e);
-            } catch (IOException e) {
+            }
+            catch (IOException e) {
                 log.error("sendData:The final data via http not sent because errors:IOException ", e);
             }
         }
         return result;
     }
 
-    public int sendDataByMail(String fileName, String smtpServer,
-            String ldapServer) {
+    public int sendDataByMail(String fileName, String smtpServer, String ldapServer) throws EmailSendException {
         log.debug("DiamondsClient:sendDataByEmail:emailID" + emailID);
-        EmailDataSender emailSender = new EmailDataSender(emailID, smtpServer,
-                ldapServer);
+        EmailDataSender emailSender = new EmailDataSender(emailID, smtpServer, ldapServer);
         log.debug("DiamondsClient:sendDataByEmail: " + fileName);
-        emailSender.sendData("diamonds", fileName, "application/xml",
-                "[DIAMONDS_DATA]", null);
+        emailSender.sendData("diamonds", new File(fileName), "application/xml", "[DIAMONDS_DATA]", null);
         log.debug("DiamondsClient:sendDataByEmail:succeeds");
         return 0;
     }
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsConfig.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsConfig.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,32 +1,28 @@
 /*
-* 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:  
-*
-*/
-
-
+ * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  
+ *
+ */
 
 package com.nokia.helium.diamonds;
 
-import org.apache.tools.ant.BuildException;
-
-import java.util.*;
-import org.dom4j.io.SAXReader;
-import org.dom4j.Document;
-import org.dom4j.Element;
-import org.dom4j.Node;
-import org.dom4j.DocumentException;
+import java.util.HashMap;
+import java.util.Map;
+import com.nokia.helium.core.ant.types.Stage;
+import com.nokia.helium.core.ant.types.TargetMessageTrigger;
+import org.apache.tools.ant.Project;
+import java.util.Hashtable;
 import org.apache.log4j.Logger;
 
 /**
@@ -34,133 +30,77 @@
  * 
  */
 public final class DiamondsConfig {
-    private static DiamondsProperties diamondsProperties;
 
-    private static List<Stage> stages;
+    private static HashMap<String, Stage> stages = new HashMap<String, Stage>();
 
-    private static Logger log;
+    private static Logger log = Logger.getLogger(DiamondsConfig.class);
 
-    private static Map<String, Target> targets;
-
-    private static String outputDir;
+    private static String initialiserTargetName;
+    
+    private static Project project;
+    
+    private static final String DIAMONDS_HOST_PROPERTY = "diamonds.host";
+    private static final String DIAMONDS_PORT_PROPERTY = "diamonds.port";
+    private static final String DIAMONDS_PATH_PROPERTY = "diamonds.path";
+    private static final String DIAMONDS_TSTAMP_PROPERTY = "diamonds.tstamp.format";
+    private static final String DIAMONDS_MAIL_PROPERTY = "diamonds.mail";
+    private static final String DIAMONDS_LDAP_PROPERTY = "diamonds.ldap.server";
+    private static final String DIAMONDS_SMTP_PROPERTY = "diamonds.smtp.server";
+    private static final String DIAMONDS_INITIALIZER_TARGET_PROPERTY = "diamonds.initializer.targetname";
+    private static final String DIAMONDS_CATEGORY_PROPERTY = "diamonds.category";
+    
+    
+    private static final String[] PROPERTY_NAMES = {DIAMONDS_HOST_PROPERTY, DIAMONDS_PORT_PROPERTY, DIAMONDS_PATH_PROPERTY,
+        DIAMONDS_TSTAMP_PROPERTY, DIAMONDS_MAIL_PROPERTY,
+        DIAMONDS_LDAP_PROPERTY, DIAMONDS_SMTP_PROPERTY,
+        DIAMONDS_INITIALIZER_TARGET_PROPERTY, DIAMONDS_CATEGORY_PROPERTY};
 
-    private static String templateDir;
-    
-    private static String initialiserTargetName;
+    private static HashMap<String, TargetMessageTrigger> targetMessageList = new HashMap<String, TargetMessageTrigger>();
 
     private DiamondsConfig() {
     }
-    
-    /**
-     * Method accessed by loggers to load the diamonds specific configuration.
-     * 
-     * @param configFile
-     *            - configuration to load
-     * 
-     */
-    public static void parseConfiguration(String configFile)
-            throws DiamondsException {
-        if (log == null) {
-            log = Logger.getLogger(DiamondsConfig.class);
+
+
+    @SuppressWarnings("unchecked")
+    private static void initializeMessage(Project prj) {
+        Hashtable<String, Object> references = prj.getReferences();
+        for (String key : references.keySet()) {
+            Object object = references.get(key);
+            log.debug("key: " + key);
+            if (object instanceof TargetMessageTrigger) {
+                log.debug("found message map:" + object);
+                log.debug("found key: " + key);
+                TargetMessageTrigger message = (TargetMessageTrigger)object;
+                targetMessageList.put(message.getTargetName(), (TargetMessageTrigger)object);
+            }
         }
-        SAXReader saxReader = new SAXReader();
-        Document document = null;
-        try {
-            log.debug("Reading diamonds configuration.");
-            document = saxReader.read(configFile);
-        } catch (DocumentException e) {
-            // No need to fail the build due to internal Helium configuration errors.
-            log.debug("Diamonds configuration parsing error: "
-                    + e.getMessage());
+    }
+    
+    @SuppressWarnings("unchecked")
+    public static void initialize(Project prj) throws DiamondsException {
+        project = prj;
+        log.debug("Diamonds config initialization: project: " + project);
+        initializeMessage(prj);
+        for (String property : PROPERTY_NAMES ) {
+            validateProperty(property);
         }
-        parseConfig(document);
-        diamondsProperties = parseDiamondsProperties(document);
-        stages = parseStages(document);
-        targets = parseTargets(document);
-    }
-
-    /**
-     * Parses the general configuration info.
-     * 
-     * @param document
-     *            - XML config in DOM4J document
-     */
-    private static void parseConfig(Document document) {
-        log.debug("diamonds:DiamondsConfig:parsing general configuration.");
-        Node node = document.selectSingleNode("//output-dir");
-        outputDir = node.valueOf("@path");
-        node = document.selectSingleNode("//template-dir");
-        templateDir = node.valueOf("@path");
+        Hashtable<String, Object> references = prj.getReferences();
+        for (String key : references.keySet()) {
+            Object object = references.get(key); 
+            if (object instanceof Stage) {
+                log.debug("stage found: " + key);
+                Stage stageMap = (Stage)object;
+                stageMap.setStageName(key);
+                stages.put(key, (Stage)object);
+            }
+        }
     }
 
-    /**
-     * Parses the server info.
-     * 
-     * @param document
-     *            - XML config in DOM4J document
-     */
-    private static DiamondsProperties parseDiamondsProperties(Document document) {
-        log.debug("diamonds:DiamondsConfig:parsing diamonds properties.");
-        
-        Map<String, String> propertiesMap = new HashMap<String, String>();
-        
-        loadProperty(document, propertiesMap, "host");
-        loadProperty(document, propertiesMap, "port");
-        loadProperty(document, propertiesMap, "path");
-        loadProperty(document, propertiesMap, "tstampformat");
-        loadProperty(document, propertiesMap, "mail");
-        loadProperty(document, propertiesMap, "ldapserver");
-        loadProperty(document, propertiesMap, "smtpserver");
-        loadProperty(document, propertiesMap, "initialiser-target-name");
-        loadProperty(document, propertiesMap, "category-property");
-        loadProperty(document, propertiesMap, "buildid-property");
-        return new DiamondsProperties(propertiesMap);
-    }
-
-    /**
-     * Parses the Targets data from config.
-     * 
-     * @param document
-     *            - XML config in DOM4J document
-     * @return list of targets available in the config
-     */
-    @SuppressWarnings("unchecked")
-    private static Map<String, Target> parseTargets(Document document) {
-        log.debug("diamonds:DiamondsConfig:parsing for targets");
-        Map<String, Target> targets = new HashMap<String, Target>();
-        List<Element> stageNodes = document.selectNodes("//target");
-       
-        // Set initialiserTargetName according to target name defined Diamonds config file
-        initialiserTargetName = diamondsProperties.getProperty("initialiser-target-name");
-        targets.put(initialiserTargetName, new Target(initialiserTargetName,"","","",""));
-        for (Element stageNode : stageNodes) {
-            targets.put(stageNode.valueOf("@name"), new Target(stageNode
-                    .valueOf("@name"), stageNode.valueOf("@template-file"),
-                    stageNode.valueOf("@logfile"), stageNode
-                            .valueOf("@ant-properties"), stageNode
-                            .valueOf("@defer")));
+    private static void validateProperty(String propertyName) throws DiamondsException {
+        String propertyValue = project.getProperty(propertyName);
+        if (propertyValue == null) {
+            throw new DiamondsException("required property: " + propertyName + " not defined");
         }
-        return targets;
-    }
-
-    /**
-     * Parses the stages info.
-     * 
-     * @param document
-     *            - XML config in DOM4J document
-     * @return list of stages in config
-     */
-    @SuppressWarnings("unchecked")
-    private static List<Stage> parseStages(Document document) {
-        List<Stage> stages = new ArrayList<Stage>();
-        List<Element> stageNodes = document.selectNodes("//stage");
-        log.debug("diamonds:DiamondsConfig:parsing for stages");
-        for (Element stage : stageNodes) {
-            stages.add(new Stage(stage.valueOf("@name"), stage
-                    .valueOf("@start"), stage.valueOf("@end"), stage
-                    .valueOf("@logfile")));
-        }
-        return stages;
     }
 
     /**
@@ -168,7 +108,7 @@
      * 
      * @return the stages from config in memory
      */
-    static List<Stage> getStages() {
+    static Map<String, Stage> getStages() {
         return stages;
     }
 
@@ -177,8 +117,8 @@
      * 
      * @return the targets from config in memory
      */
-    static Map<String, Target> getTargets() {
-        return targets;
+    static HashMap<String, TargetMessageTrigger> getTargetsMap() {
+        return targetMessageList;
     }
 
     /**
@@ -187,7 +127,7 @@
      * @return the existance of stages in config
      */
     public static boolean isStagesInConfig() {
-        return stages != null;
+        return !stages.isEmpty();
     }
 
     /**
@@ -196,58 +136,56 @@
      * @return the targets from config in memory
      */
     public static boolean isTargetsInConfig() {
-        return targets != null;
+        return !targetMessageList.isEmpty();
+    }
+
+    public static String getHost() {
+        return project.getProperty(DIAMONDS_HOST_PROPERTY);
+    }
+
+    public static String getPort() {
+        return project.getProperty(DIAMONDS_PORT_PROPERTY);
+    }
+
+    public static String getPath() {
+        return project.getProperty(DIAMONDS_PATH_PROPERTY);
+    }
+
+    public static String getTimeFormat() {
+        return project.getProperty(DIAMONDS_TSTAMP_PROPERTY);
     }
 
-    /**
-     * Gets the diamonds properties loaded from config
-     * 
-     * @return the targets from config in memory
-     */
-    public static DiamondsProperties getDiamondsProperties() {
-        return diamondsProperties;
+    public static String getMailInfo() {
+        return project.getProperty(DIAMONDS_MAIL_PROPERTY);
+    }
+
+    public static String getLDAPServer() {
+        return project.getProperty(DIAMONDS_LDAP_PROPERTY);
     }
 
-    /**
-     * Gets the output directory
-     * 
-     * @return the output directory, loaded from config
-     */
-    static String getOutputDir() {
-        return outputDir;
+    public static String getSMTPServer() {
+        return project.getProperty(DIAMONDS_SMTP_PROPERTY);
+    }
+
+    public static String getBuildIdProperty() {
+        return "diamonds.build.id";
+    }
+
+    public static String getBuildId() {
+        return project.getProperty(getBuildIdProperty());
     }
 
     /**
-     * Gets the output directory
-     * 
-     * @return the output directory, loaded from config
-     */
-    static String getTemplateDir() {
-        return templateDir;
-    }
-    
-    /**
      * Gets the initialiserTargetName
      * 
-     * @return the initialiserTargetName, loaded from config
+     * @return the initialiserTargetName
      */
-    public static String getInitialiserTargetName() {
-        return initialiserTargetName;
+    public static String getInitializerTargetProperty() {
+        return DIAMONDS_INITIALIZER_TARGET_PROPERTY;
     }
-    
-    /**
-     * Load diamonds property into hashmap.
-     * @param doc
-     * @param hash
-     * @param name
-     * @return
-     */
-    public static void loadProperty(Document document, Map<String, String> hash, String name) {
-        Node node = document.selectSingleNode("//property[@name='" + name + "']");
-        if (node == null) {
-            throw new BuildException("diamonds: DiamondsConfig:'" + name + "' property definition is missing.");
-        }
-        hash.put(name, node.valueOf("@value"));
+
+    public static String getCategory() {
+        return project.getProperty(DIAMONDS_CATEGORY_PROPERTY);
     }
 
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsExceptionStatusUpdate.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsExceptionStatusUpdate.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,40 +1,32 @@
 /*
-* 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: To update the build status to Diamonds with signals in case of build exceptions.
-*
-*/
- 
+ * 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: To update the build status to Diamonds with signals in case of build exceptions.
+ *
+ */
+
 package com.nokia.helium.diamonds;
 
+import java.text.SimpleDateFormat;
+import org.apache.tools.ant.types.DataType;
+import java.util.Hashtable;
+import java.util.Vector;
+import org.apache.log4j.Logger;
 import org.apache.tools.ant.Project;
 import com.nokia.helium.core.ant.HlmExceptionHandler;
-import com.nokia.helium.core.PropertiesSource;
-import com.nokia.helium.core.TemplateInputSource;
-import com.nokia.helium.core.TemplateProcessor;
 import com.nokia.helium.signal.SignalStatus;
 import com.nokia.helium.signal.SignalStatusList;
 
-import org.apache.log4j.Logger;
-
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.List;
-import java.io.File;
-import java.util.ArrayList;
-import java.text.SimpleDateFormat;
-import java.util.Properties;
-
 
 /**
  * Class to store the builds status and check the signal is present in the deferred signal list.
@@ -42,7 +34,7 @@
  * With collected signal information and build status send the generated XML file to diamonds client class
  * to update the information into diamonds
  */
-public class DiamondsExceptionStatusUpdate implements HlmExceptionHandler {
+public class DiamondsExceptionStatusUpdate extends DataType implements HlmExceptionHandler {
     private Logger log = Logger.getLogger(DiamondsExceptionStatusUpdate.class);
 
     /* Initiate build status to failed as this method will be invoked in case of exceptions only */
@@ -50,13 +42,10 @@
 
     private SimpleDateFormat timeFormat;
 
-    private TemplateProcessor templateProcessor;
-
     private Hashtable<String, String> signalInformation = new Hashtable<String, String>();
 
     private String outputFile,templateFile;
 
-    private List<TemplateInputSource> sourceList = new ArrayList<TemplateInputSource>();
 
     /**
      * Implements the Exception method to update build status and signal information to diamonds.
@@ -65,109 +54,42 @@
      * @param e
      */
     @SuppressWarnings("unchecked")
-    public void handleException(Project project, String module, Exception e) {
-        templateProcessor = new TemplateProcessor();
-        Properties tempProperties = new Properties();
-        String templateDir = DiamondsConfig.getTemplateDir();
-        /* Initialize the diamond properties class to access the diamonds properties */
-        DiamondsProperties diamondsProperties = DiamondsConfig.getDiamondsProperties();
-        //Check, Is the diamonds listener is initialized?
-        if (DiamondsListenerImpl.isInitialized()) {
-            timeFormat = new SimpleDateFormat(DiamondsConfig.getDiamondsProperties().getProperty("tstampformat"));
-            /* Initialize the diamond client class required to update the information into diamonds. */
-            DiamondsClient diamondsClient = new DiamondsClient(project
-                    .getProperty(diamondsProperties.getProperty("host")),
-                    project.getProperty(diamondsProperties
-                            .getProperty("port")), project
-                            .getProperty(diamondsProperties
-                                    .getProperty("path")), project
-                                    .getProperty(diamondsProperties
-                                            .getProperty("mail")));
+    public void handleException(Project project, Exception e) {
+        Project prj = DiamondsListenerImpl.getProject();
 
-            /* Check is the signal is in deferred signal list?
-             * If so get the signal information like signal name, error message and target name
-             * 
-             */
-            if (SignalStatusList.getDeferredSignalList().hasSignalInList()) {
-                Vector<SignalStatus> signalList = SignalStatusList.getDeferredSignalList().getSignalStatusList();
-                timeFormat = new SimpleDateFormat(DiamondsConfig.getDiamondsProperties().getProperty("tstampformat"));
-                log.debug("Build Status = " + buildStatus);
-                int i = 0;
-                for (SignalStatus status : signalList) {
-                    signalInformation.put("diamond.signal.name." + i, status.getName());
-                    signalInformation.put("diamond.error.message." + i, status.getMessage());
-                    signalInformation.put("diamond.time.stamp." + i,new String(timeFormat.format(status.getTimestamp())));
-                    i += 1;
+        try {
+            if (DiamondsListenerImpl.isInitialized()) {
+                if (SignalStatusList.getDeferredSignalList().hasSignalInList()) {
+                    Vector<SignalStatus> signalList = SignalStatusList.getDeferredSignalList().getSignalStatusList();
+                    timeFormat = new SimpleDateFormat(DiamondsConfig.getTimeFormat());
+                    log.debug("Build Status = " + buildStatus);
+                    int i = 0;
+                    for (SignalStatus status : signalList) {
+                        prj.setProperty("diamond.signal.name." + i, status.getName());
+                        prj.setProperty("diamond.error.message." + i, status.getName());
+                        prj.setProperty("diamond.time.stamp." + i, new String(timeFormat.format(status.getTimestamp())));
+                        DiamondsListenerImpl.sendMessage("diamonds-signal");
+                    }
                 }
-                /* Generate the signal XML file required for diamonds to update the signal information,
-                 * using templateprocessor class
-                 */
-                templateFile = "diamonds_signal.xml.ftl";
-                outputFile = DiamondsConfig.getOutputDir() + File.separator + "diamonds-signal.xml";
-                sourceList.add(new PropertiesSource("diamondSignal", signalInformation));
-                templateProcessor.convertTemplate(templateDir, templateFile, outputFile,sourceList);
-
-                /* send the generated XML file for diamonds client to update the signals information into Diamonds */
-                log.debug("sending data to diamonds ..." + outputFile);
-                diamondsClient.sendData(outputFile, DiamondsConfig.getDiamondsProperties().getDiamondsBuildID());
-                try {
-                    DiamondsListenerImpl.mergeToFullResults(new File(outputFile));
-                } catch (DiamondsException de) {
-                    log.error("Not able to merge into full results XML file " + de.getMessage(), de);
+                if (SignalStatusList.getNowSignalList().hasSignalInList()) {
+                    Vector<SignalStatus> signalList = SignalStatusList.getNowSignalList().getSignalStatusList();
+                    buildStatus = "failed";
+                    timeFormat = new SimpleDateFormat(DiamondsConfig.getTimeFormat());
+                    log.debug("Build Status = " + buildStatus);
+                    int i = 0;
+                    for (SignalStatus status : signalList) {
+                        prj.setProperty("diamond.signal.name." + i, status.getName());
+                        prj.setProperty("diamond.error.message." + i, status.getMessage());
+                        prj.setProperty("diamond.time.stamp." + i,new String(timeFormat.format(status.getTimestamp())));
+                        i += 1;
+                    }
+                    DiamondsListenerImpl.sendMessage("diamonds.signal.message");
                 }
+                prj.setProperty("build.status", buildStatus);
+                DiamondsListenerImpl.sendMessage("diamonds.status.message");
             }
-            /* Check, is the signal is in now signal list?
-             * If so get the signal information like signal name, error message and target name
-             * 
-             */
-            if (SignalStatusList.getNowSignalList().hasSignalInList()) {
-                Vector<SignalStatus> signalList = SignalStatusList.getNowSignalList().getSignalStatusList();
-                buildStatus = "failed";
-                timeFormat = new SimpleDateFormat(DiamondsConfig.getDiamondsProperties().getProperty("tstampformat"));
-                log.debug("Build Status = " + buildStatus);
-                int i = 0;
-                for (SignalStatus status : signalList) {
-                    signalInformation.put("diamond.signal.name." + i, status.getName());
-                    signalInformation.put("diamond.error.message." + i, status.getMessage());
-                    signalInformation.put("diamond.time.stamp." + i,new String(timeFormat.format(status.getTimestamp())));
-                    i += 1;
-                }
-                /* Generate the signal XML file required for diamonds to update the signal information,
-                 * using templateprocessor class
-                 */
-                templateFile = "diamonds_signal.xml.ftl";
-                outputFile = DiamondsConfig.getOutputDir() + File.separator + "diamonds-signal.xml";
-                sourceList.add(new PropertiesSource("diamondSignal", signalInformation));
-                templateProcessor.convertTemplate(templateDir, templateFile, outputFile,sourceList);
-
-                /* send the generated XML file for diamonds client to update the signals information into Diamonds */
-                log.debug("sending data to diamonds ..." + outputFile);
-                diamondsClient.sendData(outputFile, DiamondsConfig.getDiamondsProperties().getDiamondsBuildID());
-                try {
-                    DiamondsListenerImpl.mergeToFullResults(new File(outputFile));
-                } catch (DiamondsException de) {
-                    log.error("Not able to merge into full results XML file " + de.getMessage(), de);
-                }
-            }
-            /* Generate the build status XML file required for diamonds to update the build status information,
-             * using templateprocessor class. 
-             */
-            tempProperties.put("build.status", buildStatus);
-            sourceList.add(new PropertiesSource("ant", project.getProperties()));
-            sourceList.add(new PropertiesSource("diamonds", tempProperties));
-            outputFile = DiamondsConfig.getOutputDir() + File.separator + "diamonds-status.xml";
-            templateFile = "diamonds_status.xml.ftl";
-            templateProcessor.convertTemplate(templateDir, templateFile, outputFile, sourceList);
-
-            /* send the generated XML file for diamonds client to update the build status into Diamonds */
-            log.debug("[DiamondsExceptionStatusUpdate] => sending data to diamonds ..." + outputFile);
-            diamondsClient.sendData(outputFile, DiamondsConfig.getDiamondsProperties().getDiamondsBuildID());
-            try {
-                DiamondsListenerImpl.mergeToFullResults(new File(outputFile));
-            } catch (DiamondsException de) {
-                log.error("Not able to merge into full results XML file " + de.getMessage(), de);
-            }
+        } catch (DiamondsException dex) {
+            log.debug("exception: ", dex);
         }
-
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsListenerImpl.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsListenerImpl.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,48 +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:  
-*
-*/
-
+ * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  
+ *
+ */
 
 package com.nokia.helium.diamonds;
 
 import org.apache.tools.ant.BuildEvent;
+
 import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.FileUtils;
 import java.util.Date;
-import java.util.List;
-import java.util.HashSet;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.ListIterator;
 import org.apache.log4j.Logger;
-import java.util.Properties;
-import com.nokia.helium.core.PropertiesSource;
-import com.nokia.helium.core.TemplateInputSource;
-import com.nokia.helium.core.TemplateProcessor;
+import com.nokia.helium.core.EmailSendException;
+import com.nokia.helium.core.ant.Message;
+import com.nokia.helium.core.MessageCreationException;
 import com.nokia.helium.diamonds.XMLMerger.XMLMergerException;
+import java.io.InputStream;
 
 /**
- * Base diamonds logger implementation. The common implementation like
- * initialization done here and used by sub classes.
+ * Base diamonds logger implementation. The common implementation like initialization done here and
+ * used by sub classes.
  */
 public class DiamondsListenerImpl implements DiamondsListener {
 
-    private static ArrayList<File> finalLogList = new ArrayList<File>();
+    private static ArrayList<InputStream> finalStreamList = new ArrayList<InputStream>();
 
     private static DiamondsClient diamondsClient;
 
@@ -50,97 +48,72 @@
 
     private static ArrayList<String> deferLogList = new ArrayList<String>();
 
-    private TemplateProcessor templateProcessor;
+    private static Logger log = Logger.getLogger(DiamondsListenerImpl.class);
 
-    private Project project;
+    private static Project project;
+
+    private static Object mutexObject = new Object();;
     
-    private SimpleDateFormat timeFormat;
-
-    private Date buildStartTime;
-    
-    private Logger log = Logger.getLogger(DiamondsListenerImpl.class);
+    private static SimpleDateFormat timeFormat;
 
     /**
      * Default constructor
      */
     public DiamondsListenerImpl() {
-        templateProcessor = new TemplateProcessor();
-        timeFormat = new SimpleDateFormat(DiamondsConfig
-                .getDiamondsProperties().getProperty("tstampformat"));
+    }
+    
+    public static void initialize(Project prj) {
+        project = prj;
+        log.debug("buildbegin:" + project);
+        Date date = new Date();
+        timeFormat = new SimpleDateFormat(DiamondsConfig.getTimeFormat());
+        log.debug("build.start.time:" + date);
+        project.setProperty("build.start.time", timeFormat.format(date));
     }
 
     /**
      * Function to process logging info during end of build
      * 
-     * @param event
-     *            of target execution.
+     * @param event of target execution.
      */
-    public final void buildBegin(BuildEvent buildEvent)
-            throws DiamondsException {
-        project = buildEvent.getProject();
-        buildStartTime = new Date();
+    public final void buildBegin(BuildEvent buildEvent) throws DiamondsException {
     }
     
     /**
      * Function to process logging info during end of build
      * 
-     * @param event
-     *            of target execution.
+     * @param event of target execution.
      */
     @SuppressWarnings("unchecked")
-    public final void buildEnd(BuildEvent buildEvent) throws DiamondsException {
+    public void buildEnd(BuildEvent buildEvent) throws DiamondsException {
+        log.debug("build end: " + isInitialized());
         if (isInitialized()) {
-            log.debug("diamonds:DiamondsListenerImpl:sending final data to diamonds.");
-            String output = DiamondsConfig.getOutputDir() + File.separator
-                    + "diamonds-finish.xml";
-            File outputFile = new File(output);
-            String finishTemplateFile = "diamonds_finish.xml.ftl";
-            Properties tempProperties = new Properties();
-            tempProperties.put("build.end.time", timeFormat
-                    .format(new Date()));
-            List<TemplateInputSource> sourceList = new ArrayList<TemplateInputSource>();
-            sourceList.add(new PropertiesSource("ant", project
-                    .getProperties()));
-            sourceList
-                    .add(new PropertiesSource("diamonds", tempProperties));
-            templateProcessor.convertTemplate(DiamondsConfig
-                    .getTemplateDir(), finishTemplateFile, output,
-                    sourceList);
-
-            log.info("Sending final data to diamonds.");
-            // String mergedFile = mergeFiles(output);
-            diamondsClient.sendData(output, DiamondsConfig
-                    .getDiamondsProperties().getDiamondsBuildID());
-            mergeToFullResults(outputFile);
+            project.setProperty("build.end.time", timeFormat.format(new Date()));
+            sendMessage("final.message");
             isInitialized = false;
-            DiamondsProperties props = DiamondsConfig.getDiamondsProperties();
-            String smtpServer = project.getProperty(props
-                    .getProperty("smtpserver"));
-            String ldapServer = project.getProperty(props
-                    .getProperty("ldapserver"));
-
+            InputStream first = finalStreamList.remove(0);
             try {
-                File first = finalLogList.remove(0);
-                String outputDir = DiamondsConfig.getOutputDir();
-                File fullResultsFile = new File(outputDir + File.separator
-                        + "diamonds-full-results.xml");
-                FileUtils.getFileUtils().copyFile(first, fullResultsFile);
-                XMLMerger merger = new XMLMerger(fullResultsFile);
-                HashSet<File> fileHash = new HashSet<File>(finalLogList);
-                for (File file : fileHash) {
+                //printStreamContent(first);
+                File fullResultsFile = File.createTempFile("diamonds-full-results", ".xml");
+                XMLMerger merger = new XMLMerger(first, fullResultsFile);
+                String smtpServer = DiamondsConfig.getSMTPServer();
+                String ldapServer = DiamondsConfig.getLDAPServer();
+                for (InputStream stream : finalStreamList) {
                     try {
-                        merger.merge(file);
-                    } catch (XMLMerger.XMLMergerException xe) {
+                        merger.merge(stream);
+                    }
+                    catch (XMLMerger.XMLMergerException xe) {
                         log.debug("Error during the merge: ", xe);
                     }
                 }
-//                diamondsClient.sendData(fullResultsFile.getAbsolutePath(), DiamondsConfig.getDiamondsProperties().getDiamondsBuildID());
-                diamondsClient.sendDataByMail(
-                        fullResultsFile.getAbsolutePath(), smtpServer,
-                        ldapServer);
+                diamondsClient.sendDataByMail(fullResultsFile.getAbsolutePath(), smtpServer, ldapServer);
+            } catch (EmailSendException ese) {
+                log.warn("Error occured while sending mail: " + ese.getMessage());
+                
             } catch (IOException e) {
                 log.error("Error sending diamonds final log: IOException", e);
-            } catch (XMLMergerException e) {
+            }
+            catch (XMLMergerException e) {
                 log.error("Error sending diamonds final log: XMLMergerException ", e);
             }
         }
@@ -149,8 +122,7 @@
     /**
      * Function to process logging info during begining of target execution
      * 
-     * @param event
-     *            of target execution.
+     * @param event of target execution.
      */
     public void targetBegin(BuildEvent buildEvent) throws DiamondsException {
         initDiamondsClient();
@@ -159,8 +131,7 @@
     /**
      * Function to process logging info during end of target execution
      * 
-     * @param event
-     *            of target execution.
+     * @param event of target execution.
      */
     public void targetEnd(BuildEvent buildEvent) throws DiamondsException {
     }
@@ -174,97 +145,109 @@
         return isInitialized;
     }
 
-    public static void mergeToFullResults(File xmlFile) throws DiamondsException {
-        finalLogList.add(xmlFile);
+    public static void mergeToFullResults(InputStream stream) throws DiamondsException {
+        finalStreamList.add(stream);
     }
 
-    protected String getSourceFile(String inputName) {
-        return DiamondsConfig.getOutputDir() + File.separator + inputName
-                + ".xml";
+
+    /**
+     * Helper function to return the default project passed to messages.
+     */
+    static Project getProject() {
+        return project;
     }
-    
+
+
+
     protected DiamondsClient getDiamondsClient() {
         return diamondsClient;
     }
-    
-    protected TemplateProcessor getTemplateProcessor() {
-        return templateProcessor;
-    }
-    
+
+
     protected boolean getIsInitialized() {
         return isInitialized;
     }
-    
-    protected SimpleDateFormat getTimeFormat() {
+
+    protected static SimpleDateFormat getTimeFormat() {
         return timeFormat;
     }
-    
+
     protected ArrayList<String> getDeferLogList() {
         return deferLogList;
     }
+    
+    protected static File streamToTempFile(InputStream stream) throws IOException {
+        File temp = File.createTempFile("diamonds", "xml");
+        FileOutputStream out = new FileOutputStream(temp);
+        int read = 0;
+        byte[] bytes = new byte[1024];
+ 
+        while ((read = stream.read(bytes)) != -1) {
+            out.write(bytes, 0, read);
+        }
+        out.flush();
+        out.close();
+        stream.close();
+        return temp;
+    }
 
+    private static void sendMessage(Message message, String buildID) throws DiamondsException {
+        try {
+            File tempFile = streamToTempFile(message.getInputStream());
+            tempFile.deleteOnExit();
+            if (buildID == null) {
+                buildID = diamondsClient.getBuildId(new FileInputStream(tempFile));
+                if (buildID != null) {
+                    project.setProperty(DiamondsConfig.getBuildIdProperty(), buildID);
+                    log.info("got Build ID from diamonds:" + buildID);
+                }
+            } else {
+                diamondsClient.sendData(new FileInputStream(tempFile), buildID);
+            }
+            mergeToFullResults(new FileInputStream(tempFile));
+        } catch (IOException iex) {
+            log.debug("IOException while retriving message:", iex);
+            throw new DiamondsException("IOException while retriving message");
+        } 
+        catch (MessageCreationException mex) {
+            log.debug("IOException while retriving message:", mex);
+            throw new DiamondsException("error during message retrival");
+        }
+    }
+
+    /**
+     * Send message to diamonds.
+     * @param messageId - id to look from in the ant config and to send it to diamonds.
+     *                    id is pointing to an fmpp message.
+     */
+    public static void sendMessage(String messageId) throws DiamondsException {
+        log.debug("send-message:" + messageId);
+        synchronized (mutexObject) {
+            String buildID = project.getProperty(DiamondsConfig.getBuildIdProperty());
+            Object obj = project.getReference(messageId);
+            if (obj != null) {
+                if (obj instanceof Message) {
+                    sendMessage((Message)obj, buildID);
+                }
+            } else {
+                log.debug("Message not sent for message id: " + messageId);
+            }
+        }
+    }
+    
     /**
      * Initializes the diamonds client and sends the initial data
      */
     @SuppressWarnings("unchecked")
     protected void initDiamondsClient() throws DiamondsException {
-        String outputDir = DiamondsConfig.getOutputDir();
         if (!isInitialized) {
-            String startTemplateFile = "diamonds_start.xml.ftl";
-            String output = outputDir + File.separator
-                    + "diamonds-start.log.xml";
-            new File(outputDir).mkdirs();
-            File outputFile = new File(output);
-            Properties tempProperties = new Properties();
-            tempProperties.put("build.start.time", timeFormat
-                    .format(buildStartTime));
-            List<TemplateInputSource> sourceList = new ArrayList<TemplateInputSource>();
-            sourceList.add(new PropertiesSource("ant", project
-                    .getProperties()));
-            sourceList
-                    .add(new PropertiesSource("diamonds", tempProperties));
-            DiamondsProperties diamondsProperties = DiamondsConfig
-                    .getDiamondsProperties();
-            templateProcessor.convertTemplate(DiamondsConfig
-                    .getTemplateDir(), startTemplateFile, output,
-                    sourceList);
-            mergeToFullResults(outputFile);
-
-            // String mergedFile = mergeFiles(output);
-            log.info("Initializing diamonds client");
-            diamondsClient = new DiamondsClient(project
-                    .getProperty(diamondsProperties.getProperty("host")),
-                    project.getProperty(diamondsProperties
-                            .getProperty("port")), project
-                            .getProperty(diamondsProperties
-                                    .getProperty("path")), project
-                            .getProperty(diamondsProperties
-                                    .getProperty("mail")));
-            String buildID = diamondsClient
-                    .getBuildId(outputFile.getAbsolutePath());
-            if (buildID != null) {
-                diamondsProperties.setDiamondsBuildID(buildID);
-                project.setProperty(diamondsProperties.getProperty("buildid-property"),
-                        diamondsProperties.getDiamondsBuildID());
-                log.info("Got build id from diamonds: " + buildID);
-            } else {
-                diamondsProperties.setDiamondsBuildID(buildID);
-                project.setProperty(diamondsProperties.getProperty("buildid-property"),
-                        "default");
-                log.info("diamonds build id set to default and in record only mode");
-            }
-            if (deferLogList.size() > 0) {
-                log
-                        .debug("diamonds:DiamondsListenerImpl: sending DefferList");
-                ListIterator<String> defferList = deferLogList
-                        .listIterator();
-                while (defferList.hasNext()) {
-                    String mergedDeferFile = defferList.next();
-                    mergeToFullResults(new File(mergedDeferFile));
-                    diamondsClient.sendData(mergedDeferFile, DiamondsConfig
-                            .getDiamondsProperties().getDiamondsBuildID());
-                }
-                deferLogList.clear();
+            diamondsClient = new DiamondsClient(DiamondsConfig.getHost(), 
+                    DiamondsConfig.getPort(), 
+                    DiamondsConfig.getPath(), 
+                    DiamondsConfig.getMailInfo());
+            String buildID = project.getProperty(DiamondsConfig.getBuildIdProperty());
+            if (buildID == null ) {
+                sendMessage("initial.message");
             }
             isInitialized = true;
         }
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsPostBuildStatusUpdate.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsPostBuildStatusUpdate.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,99 +1,61 @@
 /*
-* 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: To update the build status to Diamonds with signals in case of build exceptions.
-*
-*/
- 
+ * 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: To update the build status to Diamonds with signals in case of build exceptions.
+ *
+ */
+
 package com.nokia.helium.diamonds;
 
+import org.apache.log4j.Logger;
+import org.apache.tools.ant.types.DataType;
 import org.apache.tools.ant.Project;
-import com.nokia.helium.core.ant.types.*;
-import com.nokia.helium.core.PropertiesSource;
-import com.nokia.helium.core.TemplateInputSource;
-import com.nokia.helium.core.TemplateProcessor;
-
-import org.apache.log4j.Logger;
-
-import java.util.List;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Properties;
-
+import com.nokia.helium.core.ant.PostBuildAction;
 
 /**
- * Class to store the builds status and send the generated XML file to diamonds client class
- * to update the build status into diamonds
+ * Class to store the builds status and send the generated XML file to diamonds client class to
+ * update the build status into diamonds
  */
-public class DiamondsPostBuildStatusUpdate extends HlmPostDefImpl {
+public class DiamondsPostBuildStatusUpdate extends DataType implements PostBuildAction {
     private Logger log;
 
     /* Initiate build status to failed as this method will be invoked in case of exceptions only */
     private String buildStatus = "succeeded";
 
-    private TemplateProcessor templateProcessor;
+    private String outputFile, templateFile;
 
-    private String outputFile,templateFile;
-
-    private List<TemplateInputSource> sourceList = new ArrayList<TemplateInputSource>();
 
     public DiamondsPostBuildStatusUpdate() {
-        log = Logger.getLogger(DiamondsPostBuildStatusUpdate.class);    
+        log = Logger.getLogger(DiamondsPostBuildStatusUpdate.class);
     }
 
     /**
      * Override execute method to update build status to diamonds.
+     * 
      * @param prj
      * @param module
      * @param targetNames
      */
     @SuppressWarnings("unchecked")
-    public void execute(Project prj, String module, String[] targetNames) {
-        templateProcessor = new TemplateProcessor();
-        Properties tempProperties = new Properties();
-
-        /* Intialiaze the diamond properties class to access the diamonds properties */
-        DiamondsProperties diamondsProperties = DiamondsConfig.getDiamondsProperties();
-
-        //Check, Is the diamonds listener is initialized?
-        if (DiamondsListenerImpl.isInitialized()) {
-            /* Initialize the diamond client class required to update the information into diamonds. */
-            DiamondsClient diamondsClient = new DiamondsClient(getProject()
-                    .getProperty(diamondsProperties.getProperty("host")),
-                    getProject().getProperty(diamondsProperties
-                            .getProperty("port")), getProject()
-                            .getProperty(diamondsProperties
-                                    .getProperty("path")), getProject()
-                                    .getProperty(diamondsProperties
-                                            .getProperty("mail")));
-            /* Generate the build status XML file required for diamonds to update the build status information,
-             * using templateprocessor class. 
-             */
-            tempProperties.put("build.status", buildStatus);
-            sourceList.add(new PropertiesSource("ant", getProject().getProperties()));
-            sourceList.add(new PropertiesSource("diamonds", tempProperties));
-            outputFile = DiamondsConfig.getOutputDir() + File.separator + "diamonds-status.xml";
-            templateFile = "diamonds_status.xml.ftl";
-            templateProcessor.convertTemplate(DiamondsConfig.getTemplateDir(), templateFile, outputFile, sourceList);
-
-            /* send the generated XML file for diamonds client to update the build status into Diamonds */
-            log.debug("[DiamondsPostBuildStatusUpdate] => sending data to diamonds ..." + outputFile);
-            diamondsClient.sendData(outputFile, DiamondsConfig.getDiamondsProperties().getDiamondsBuildID());
-            try {
-                DiamondsListenerImpl.mergeToFullResults(new File(outputFile));
-            } catch (DiamondsException de) {
-                log.error("Not able to merge into full results XML file " + de.getMessage(), de);
+    public void executeOnPostBuild(Project project, String[] targetNames) {
+        try {
+            if (DiamondsListenerImpl.isInitialized()) {
+                Project prj = DiamondsListenerImpl.getProject(); 
+                prj.setProperty("build.status", buildStatus);
+                DiamondsListenerImpl.sendMessage("diamonds-status");
             }
+        } catch (DiamondsException de) {
+            log.error("Not able to merge into full results XML file " + de.getMessage(), de);
         }
     }
 
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsProperties.java	Wed Jun 16 16:51:40 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.diamonds;
-
-import java.util.Map;
-
-/**
- * Helper class for Diamonds properties need to connect.
- * 
- */
-public class DiamondsProperties {
-    private Map<String, String> diamondsProperties;
-
-    public DiamondsProperties(Map<String, String> configroperties) {
-        diamondsProperties = configroperties;
-    }
-
-    /**
-     * Gets the build id returned by Diamonds server.
-     * 
-     * @return build ID
-     */
-    public String getDiamondsBuildID() {
-        return diamondsProperties.get("buildid");
-    }
-
-    /**
-     * Sets the build id obtained from the server.
-     * 
-     * @param diamondsBuildID
-     */
-    public void setDiamondsBuildID(String diamondsBuildID) {
-        diamondsProperties.put("buildid", diamondsBuildID);
-    }
-
-    /**
-     * Returns the required property obtained from config
-     * 
-     * @param property
-     *            for which the values needs to be obtained.
-     * @return address of server
-     */
-    public String getProperty(String property) {
-        // need to validate the properties while assigning in constructor
-        return diamondsProperties.get(property);
-    }
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/Stage.java	Wed Jun 16 16:51:40 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.diamonds;
-
-/**
- * Helper class for Stage configuration of Diamonds.
- * 
- */
-public class Stage {
-    private String stageName;
-    private String startTargetName;
-    private String endTargetName;
-    private String source;
-
-    /**
-     * Constructor
-     * 
-     * @param stName
-     *            - name of the stage
-     * @param startTgName
-     *            - Name of the start target
-     * @param endTgName
-     *            - Name of the ending target of the stage
-     */
-    public Stage(String stName, String startTgName, String endTgName,
-            String sourceFiles) {
-        String emptyString = "";
-        if (!stName.equals(emptyString)) {
-            stageName = stName;
-        }
-        if (!startTgName.equals(emptyString)) {
-            startTargetName = startTgName;
-        }
-        if (!endTgName.equals(emptyString)) {
-            endTargetName = endTgName;
-        }
-        if (!sourceFiles.equals(emptyString)) {
-            source = sourceFiles;
-        }
-    }
-
-    /**
-     * Get the stage Name of the stage.
-     * 
-     * @return - name of the stage
-     */
-    public String getStageName() {
-        return stageName;
-    }
-
-    /**
-     * Get the stage Name of the stage.
-     * 
-     * @return - name of the stage
-     */
-    public String getSourceFile() {
-        return source;
-    }
-
-    /**
-     * gets the start target of the stage
-     * 
-     * @return - start target of the stage
-     */
-    public String getStartTargetName() {
-        return startTargetName;
-    }
-
-    /**
-     * gets the end target name of the stage.
-     * 
-     * @return - end target name of the stage
-     */
-    public String getEndTargetName() {
-        return endTargetName;
-    }
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/StageDiamondsListener.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/StageDiamondsListener.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,58 +1,55 @@
 /*
-* 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:  
-*
-*/
+ * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  
+ *
+ */
 
 package com.nokia.helium.diamonds;
 
-import 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.ArrayList;
 import java.util.Date;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
-import java.util.Set;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Enumeration;
 import java.util.Map;
-import java.io.File;
-import java.util.Iterator;
+import java.util.Set;
 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;
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Target;
+import com.nokia.helium.core.ant.types.Stage;
 
 /**
- * Diamonds client used to connect to get build id and also to send the build
- * results
+ * Diamonds client used to connect to get build id and also to send the build results
  * 
  */
 public class StageDiamondsListener extends DiamondsListenerImpl {
 
     private static final Date INVALID_DATE = new Date(-1);
 
+    private static Object mutexObject = new Object();;
+
     private Logger log = Logger.getLogger(StageDiamondsListener.class);
-    
+
     private List<Map<String, Date>> stageTargetBeginList = new ArrayList<Map<String, Date>>();
 
-    private Map<String, Stage> stageTargetEndMap = new HashMap<String, Stage>();
+    private Map<String, List<Stage>> stageTargetEndMap = new HashMap<String, List<Stage>>();
 
     private Map<String, String> stageStartTargetMap = new HashMap<String, String>();
 
@@ -60,9 +57,7 @@
 
     private boolean isTargetMapInitialized;
 
-    private Project project;
-
-    private List<Stage> stages;
+    private Map<String, Stage> stages;
 
 
     public StageDiamondsListener() {
@@ -70,30 +65,28 @@
     }
 
     public void targetBegin(BuildEvent buildEvent) throws DiamondsException {
-        project = buildEvent.getProject();
-        int hashCode = project.hashCode();
+        initDiamondsClient();
+        Project projectInStage = buildEvent.getProject();
+        int hashCode = projectInStage.hashCode();
         String targetName = buildEvent.getTarget().getName();
         if (!isTargetMapInitialized && stages != null) {
-            log
-                    .debug("diamonds:StageDiamondsListener: initializing for all stages.");
-            initStageTargetsMap();
+            log.debug("diamonds:StageDiamondsListener: initializing for all stages.");
+            initStageTargetsMap(projectInStage);
             isTargetMapInitialized = true;
         }
         String targetNameWithHashCode = targetName + "-" + hashCode;
         log.debug("targetBegin: targetNameWithHashCode: " + targetNameWithHashCode);
-        log.debug("targetBegin targetName: " + targetName +
-               " - currentStartTargetName:" + stageStartTargetMap.get(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();) {
+
+    private Date getStartTime(Stage stage) {
+        String startTargetName = stage.getStartTarget();
+        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();
@@ -101,123 +94,65 @@
                     log.debug("key: " + key);
                     Date time = stageMap.get(key);
                     log.debug("time: " + time);
-                    if ( time != INVALID_DATE) {
+                    if (time != INVALID_DATE) {
                         return time;
                     }
                 }
             }
         }
-        throw new BuildException("No time recorded " +
-                "for stage:" + stage.getStageName());
+        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 {
-        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)));
-                    getTemplateProcessor().convertTemplate(DiamondsConfig
-                            .getTemplateDir(), stageTemplateFileName,
-                            output, sourceList);
-                    mergeToFullResults(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());
+    private void sendStageInfo(String targetName, int hashCode) throws DiamondsException {
+        List<Stage> stageList = stageTargetEndMap.get(targetName);
+        synchronized (mutexObject) {
+            if (stageList != null) {
+                for (Stage stage : stageList) {
+                    if (stage != null) {
+                        log.debug("stage.name: " + stage.getStageName());
+                        log.debug("stage.start target name: " + stage.getStartTarget());
+                        String currentStageTargetName = stageStartTargetMap.get(stage.getStartTarget()
+                            + "-" + hashCode);
+                        log.debug("getStageBasedOnEndTarget: currentStargetTargetName" + currentStageTargetName);
+                        if (currentStageTargetName != null) {
+                            log.debug("stage in targetend: " + stage);
+                            if (stage != null && getIsInitialized()) {
+                                //initDiamondsClient();
+                                String stageName = stage.getStageName();
+                                log.debug("stageName in targetend: " + stageName);
+                                String stageMessage =  stageName + ".id";
+                                sendMessage(stageMessage);
+                                Date startTime = getStartTime(stage);
+                                getProject().setProperty("logical.stage", stageName);
+                                getProject().setProperty("stage.start.time", getTimeFormat().format(startTime));
+                                getProject().setProperty("stage.end.time", getTimeFormat().format(new Date()));
+                                sendMessage("stage.time.message");
+                            }
+                        }
+                    }
                 }
-            } 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());
             }
         }
     }
 
+    @SuppressWarnings("unchecked")
+    public void targetEnd(BuildEvent buildEvent) throws DiamondsException {
+        String targetName = buildEvent.getTarget().getName();
+        Project prj = buildEvent.getProject();
+        int hashCode = prj.hashCode();
+        String targetNameWithHashCode = targetName + "-" + hashCode;
+        log.debug("targetEnd: targetNamewith-hashcode: " + targetNameWithHashCode);
+        sendStageInfo(targetName, hashCode);
+    }
+
     private void findAndSetStartTimeForTargetInStageList(String targetName,
-            String targetNameWithHashCode) throws DiamondsException {
-        for (Iterator<Map<String, Date>> listIter = stageTargetBeginList.iterator(); listIter
-                .hasNext();) {
+        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-----: "
-                                + targetName);
+                    + targetName);
                 log.debug("findtime: targetNamewith-hashcode: " + targetNameWithHashCode);
                 log.debug("findtime: time: " + new Date());
                 stageMap.put(targetName, new Date());
@@ -228,18 +163,16 @@
     }
 
     @SuppressWarnings("unchecked")
-    private void initStageTargetsMap() {
-        Iterator<Stage> iter = stages.iterator();
-        while (iter.hasNext()) {
-            // stage begin process
-            Stage stage = iter.next();
-            String startTargetName = stage.getStartTargetName();
+    private void initStageTargetsMap(Project projectInStage) {
+        for (String key : stages.keySet()) {
+            Stage stage = stages.get(key);
+            String startTargetName = stage.getStartTarget();
             Map<String, Date> stageMap = new LinkedHashMap<String, Date>();
             Vector<Target> arrayList = null;
             try {
-                arrayList = project.topoSort(startTargetName, project
-                        .getTargets(), false);
-            } catch (BuildException be) {
+                arrayList = projectInStage.topoSort(startTargetName, projectInStage.getTargets(), false);
+            }
+            catch (BuildException be) {
                 log.debug("Diamonds target missing: ", be);
             }
             if (arrayList != null) {
@@ -254,16 +187,14 @@
                 stageTargetBeginList.add(stageMap);
 
                 // stage end process
-                String endTargetName = stage.getEndTargetName();
+                String endTargetName = stage.getEndTarget();
                 // 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());
+                List<Stage> existingStageList = stageTargetEndMap.get(endTargetName);
+                if (existingStageList == null) {
+                    existingStageList = new ArrayList<Stage>();
+                    stageTargetEndMap.put(endTargetName, existingStageList);
                 }
-                stageTargetEndMap.put(endTargetName, stage);
+                existingStageList.add(stage);
                 log.debug("   - End target: " + endTargetName);
             }
         }
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/Target.java	Wed Jun 16 16:51:40 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.helium.diamonds;
-
-/**
- * Helper class for the target in diamonds config.
- * 
- */
-public class Target {
-    private String targetName;
-    private String source;
-    private boolean reqAntProperties;
-    private boolean defer;
-    private String templatefile;
-
-    /**
-     * Constructor
-     * 
-     * @param target
-     *            - name of the target
-     * @param src
-     *            - input source location.
-     */
-    public Target(String target, String src) {
-        this(target, null, src, "false", "false");
-    }
-
-    /**
-     * Constructor
-     * 
-     * @param target
-     *            - name of the target
-     * @param src
-     *            - input source location.
-     * @param antProps
-     *            - boolean to pass ant properties while conversion.
-     */
-    public Target(String target, String tplfile, String src, String antProps,
-            String deferSend) {
-        String emptyString = "";
-        if (!target.equals(emptyString)) {
-            targetName = target;
-        }
-        if (!src.equals(emptyString)) {
-            source = src;
-        }
-        if (!tplfile.equals(emptyString)) {
-            templatefile = tplfile;
-        }
-        if (antProps != null && antProps.equals("true")) {
-            reqAntProperties = true;
-        }
-        if (deferSend != null && deferSend.equals("true")) {
-            defer = true;
-        }
-    }
-
-    /**
-     * Get the target name of the target to send data
-     * 
-     * @return - target name of the target to send data
-     */
-    public String getTargetName() {
-        return targetName;
-    }
-
-    /**
-     * Get the input source used for template conversion.
-     * 
-     * @return - location of the input source.
-     */
-    public String getSource() {
-        return source;
-    }
-
-    public boolean isDefer() {
-        return defer;
-    }
-
-    public String getTemplateFile() {
-        return templatefile;
-    }
-
-    /**
-     * returns true if ant properties required for conversion, obtained from
-     * configuration.
-     * 
-     * @return - name of the stage
-     */
-    public boolean isAntPropertiesRequired() {
-        return reqAntProperties;
-    }
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/TargetDiamondsListener.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/TargetDiamondsListener.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,46 +1,44 @@
 /*
-* 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:  
-*
-*/
+ * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  
+ *
+ */
 
 package com.nokia.helium.diamonds;
 
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.Target;
-import org.apache.tools.ant.Project;
-
-import java.util.ArrayList;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.List;
-import java.util.Hashtable;
 import java.util.Map;
-import java.io.File;
 import org.apache.log4j.Logger;
-import com.nokia.helium.core.PropertiesSource;
-import com.nokia.helium.core.TemplateInputSource;
-import com.nokia.helium.core.XMLTemplateSource;
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Target;
+import com.nokia.helium.core.ant.types.TargetMessageTrigger;
+import com.nokia.helium.core.ant.Message;
 
 /**
  * Listener sending data based on target configuration to diamonds.
  */
 public class TargetDiamondsListener extends DiamondsListenerImpl {
 
-    private Project project;
-    
+
     private Logger log = Logger.getLogger(TargetDiamondsListener.class);
 
-    private Map<String, com.nokia.helium.diamonds.Target> targetsMap;
+    private Map<String, TargetMessageTrigger> targetsMap;
 
     private String currentTarget;
 
@@ -48,29 +46,35 @@
      * Default constructor
      */
     public TargetDiamondsListener() {
-        targetsMap = DiamondsConfig.getTargets();
+        targetsMap = DiamondsConfig.getTargetsMap();
+        for (String key : targetsMap.keySet()) {
+            log.debug("target name: " + key);
+        }
     }
 
     private boolean isTargetsToExecute(BuildEvent buildEvent) {
-        project = buildEvent.getProject();
+        Project projectInTarget = buildEvent.getProject();
         Target target = buildEvent.getTarget();
         boolean retValue = false;
-        com.nokia.helium.diamonds.Target currentTarget = targetsMap
-                .get(target.getName());
-        String currentTargetName = null;
-        if (currentTarget != null) {
-            currentTargetName = currentTarget.getTargetName();
-        }
-        if (currentTargetName != null) {
-            String ifCondition = target.getIf();
-            String unlessCondition = target.getUnless();
-            if (ifCondition == null && unlessCondition == null) {
+        log.debug("isTargetsToExecute: target:" + target.getName() );
+        TargetMessageTrigger targetInMap = targetsMap.get(target.getName());
+        log.debug("isTargetsToExecute: targetInMap:" + targetInMap );
+        if (targetInMap != null) {
+            log.debug("target: " + target.getName());
+            log.debug("targetInMap: " + targetInMap);
+            String targetNameInMap = targetInMap.getTargetName();
+            log.debug("targetNameInMap: " + targetInMap.getTargetName());
+            if (targetNameInMap != null) {
                 retValue = true;
-            } else {
-                String ifProperty = project.getProperty(ifCondition);
-                String unlessProperty = project.getProperty(unlessCondition);
-                if (ifProperty != null || unlessProperty == null) {
-                    retValue = true;
+                String ifCondition = target.getIf();
+                if ((ifCondition != null) && (projectInTarget.getProperty(
+                        projectInTarget.replaceProperties(ifCondition)) == null)) {
+                    retValue = false;
+                }
+                String unlessCondition = target.getUnless();
+                if (unlessCondition != null && (projectInTarget.getProperty(
+                        projectInTarget.replaceProperties(unlessCondition)) != null)) {
+                    retValue = false;
                 }
             }
         }
@@ -78,118 +82,71 @@
     }
 
     /**
-     * Function to process logging info during beginning of target execution.
-     * This checks that the current target execution is in config and requires
-     * some data to be send it to diamonds.
+     * Function to process logging info during beginning of target execution. This checks that the
+     * current target execution is in config and requires some data to be send it to diamonds.
      * 
-     * @param event
-     *            of target execution.
+     * @param event of target execution.
      */
     public void targetBegin(BuildEvent buildEvent) throws DiamondsException {
+        initDiamondsClient();
         String targetName = buildEvent.getTarget().getName();
         if (isTargetsToExecute(buildEvent)) {
             currentTarget = targetName;
-            com.nokia.helium.diamonds.Target target = targetsMap
-                    .get(currentTarget);
-            if (!target.isDefer()) {
-                initDiamondsClient();
-            }
-        }
-    }
-
-    /**
-     * Function to process logging info during end of build. If the target in
-     * config, sends the data to diamonds (uses the template conversion if
-     * needed).
-     * 
-     * @param event
-     *            of target execution.
-     */
-    public void targetEnd(BuildEvent buildEvent) throws DiamondsException {
-        String targetName = buildEvent.getTarget().getName();
-        if (currentTarget != null && currentTarget.equals(targetName)) {           
-            if (getIsInitialized()) {
-                log
-                .debug("diamonds:TargetDiamondsListener:finished recording, sending data to diamonds for target: "
-                        + buildEvent.getTarget().getName());
-                sendTargetData(buildEvent, buildEvent.getTarget().getProject());
-            }
-            currentTarget = null;
         }
     }
 
     /**
-     * Sends the data to diamonds. First it looks if the template with target
-     * name exists, then it looks for input source file from config, if ant
-     * properties required from config, it uses it for template conversion. If
-     * no template file exists, sends the data directly.
+     * Function to process logging info during end of build. If the target in config, sends the data
+     * to diamonds (uses the template conversion if needed).
      * 
-     * @param event
-     *            of target execution.
+     * @param event of target execution.
      */
-    @SuppressWarnings("unchecked")
-    private void sendTargetData(BuildEvent buildEvent, Project project)
-            throws DiamondsException {
-        com.nokia.helium.diamonds.Target target = targetsMap
-                .get(currentTarget);
-        String sourceFile = target.getSource();
-        if (sourceFile == null) {
-            sourceFile = getSourceFile(target.getTargetName());
-        }
-        Hashtable<String, String> antProperties = null;
-        String targetTemplateFile = target.getTemplateFile();
-        if (targetTemplateFile == null) {
-            targetTemplateFile = target.getTargetName() + ".xml.ftl";
-        }
-        String output = DiamondsConfig.getOutputDir() + File.separator
-                + target.getTargetName() + ".xml";
-        File templateFile = new File(DiamondsConfig.getTemplateDir(),
-                targetTemplateFile);
-        List<TemplateInputSource> sourceList = new ArrayList<TemplateInputSource>();
-        if (sourceFile == null) {
-            log
-                    .debug("diamonds:TargetDiamondsListener:sourceFile not defined.");
-        } else {
-            sourceList.add(new XMLTemplateSource("doc", new File(sourceFile)));
-        }
-        // Ant?
-        if (target.isAntPropertiesRequired()) {
-            sourceList
-                    .add(new PropertiesSource("ant", project.getProperties()));
-        }
-        try {
-            if (templateFile.exists()) {
-                if (!(antProperties == null && sourceFile == null)) {
-                    getTemplateProcessor().convertTemplate(DiamondsConfig
-                            .getTemplateDir(), targetTemplateFile, output,
-                            sourceList);
+    public void targetEnd(BuildEvent buildEvent) throws DiamondsException {
+        String targetName = buildEvent.getTarget().getName();
+        if (isTargetsToExecute(buildEvent)) {
+            if (currentTarget != null && currentTarget.equals(targetName)) {
+                log.debug("targetEnd: " + targetName);
+                if (getIsInitialized()) {
+                    log.debug("diamonds:TargetDiamondsListener:finished recording, sending data to diamonds for target: "
+                        + buildEvent.getTarget().getName());
+                    sendTargetData(buildEvent, buildEvent.getTarget().getProject());
                 }
-            } else {
-                log
-                        .debug("sendTargetData: exists("
-                                + templateFile.getAbsolutePath() + ") => false");
-
+                currentTarget = null;
             }
-        } catch (com.nokia.helium.core.TemplateProcessorException e1) {
-            throw new DiamondsException("template conversion error while sending data for target:"
-                    + target + ":" + e1.getMessage());
-        }
-        File outputFile = new File(output);
-        if (outputFile.exists()) {
-            mergeToFullResults(outputFile);
-            if (!target.isDefer()) {
-                getDiamondsClient().sendData(outputFile.getAbsolutePath(),
-                        DiamondsConfig.getDiamondsProperties()
-                                .getDiamondsBuildID());
-            } else {
-                log.debug("diamonds:TargetDiamondsListener:defer logging for: "
-                        + outputFile);
-                getDeferLogList().add(output);
-            }
-        } else {
-            log.debug("diamonds:TargetDiamondsListener:outputfile "
-                    + outputFile + " does not exist");
         }
     }
 
+    private void sendData(InputStream stream) throws DiamondsException {
+        String urlPath = DiamondsConfig.getBuildId();
+        getDiamondsClient().sendData(stream, urlPath);
+        log.debug("urlPath:" + urlPath);
+    }
+    /**
+     * Sends the data to diamonds. First it looks if the template with target name exists, then it
+     * looks for input source file from config, if ant properties required from config, it uses it
+     * for template conversion. If no template file exists, sends the data directly.
+     * 
+     * @param event of target execution.
+     */
+    private void sendTargetData(BuildEvent buildEvent, Project project) throws DiamondsException {
+        TargetMessageTrigger targetMap = targetsMap.get(currentTarget);
+        if (targetMap != null) {
+            
+            List<Message> messageList = targetMap.getMessageList();
+            for ( Message message : messageList ) {
+                try {
+                    File tempFile = streamToTempFile(message.getInputStream());
+                    tempFile.deleteOnExit();
+                    sendData(new FileInputStream(tempFile));
+                    mergeToFullResults(new FileInputStream(tempFile));
+                } catch (IOException iex) {
+                    throw new DiamondsException("error closing the stream while sending data");
+                }
+                catch (com.nokia.helium.core.MessageCreationException mex) {
+                    log.debug("IOException while retriving message:", mex);
+                    throw new DiamondsException("error during message retrival");
+                }
+            }
+        }
+    }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/XMLMerger.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/XMLMerger.java	Fri Aug 13 14:59:05 2010 +0300
@@ -19,12 +19,13 @@
 package com.nokia.helium.diamonds;
 
 import java.io.File;
+import java.io.InputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.util.Iterator;
 import java.util.List;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 
 import org.apache.log4j.Logger;
 import org.dom4j.Attribute;
@@ -41,9 +42,10 @@
  */
 public class XMLMerger {
     private Logger log = Logger.getLogger(getClass());
-    private File merge;
+    private InputStream mergeStream;
     private Document doc;
     private Element root;
+    private File outputFile;
 
     /**
      * Create an XMLMerger, the merge file will be used as input and output.
@@ -51,18 +53,40 @@
      * @param merge
      * @throws XMLMergerException
      */
-    public XMLMerger(File merge) throws XMLMergerException {
-        log.debug("Merging into: " + merge.getAbsolutePath());
+    public XMLMerger(InputStream stream, File file) throws XMLMergerException {
         try {
-            this.merge = merge;
+            outputFile = file;
+            mergeStream = stream;
             SAXReader reader = new SAXReader();
-            doc = reader.read(merge);
+            doc = reader.read(mergeStream);
             root = doc.getRootElement();
         } catch (DocumentException e) {
             throw new XMLMergerException(e.getMessage());
         }        
     }
+
+    public void merge(InputStream stream) throws XMLMergerException {
+        try {
+            SAXReader reader = new SAXReader();
+            Document dataDoc = reader.read(stream);
+            merge(dataDoc);
+        } catch (DocumentException e) {
+            throw new XMLMergerException(e.getMessage());
+        }
+    }
     
+    private void merge(Document dataDoc) throws XMLMergerException {
+        Element dataRoot = dataDoc.getRootElement();
+        if (!root.getName().equals(dataRoot.getName())) {
+            throw new XMLMergerException(
+                    "Trying to merge incompatible xml format ('"
+                            + root.getName() + "'!='" + dataRoot.getName()
+                            + "')");
+        }
+        mergeNode(root, dataRoot);
+        write();
+        
+    }
     /**
      * Add all sub element of data file into the merged file. If the root
      * element name is different for the merged file an XMLMergerException is
@@ -78,14 +102,7 @@
             SAXReader reader = new SAXReader();
             Document dataDoc = reader.read(data);
             Element dataRoot = dataDoc.getRootElement();
-            if (!root.getName().equals(dataRoot.getName())) {
-                throw new XMLMergerException(
-                        "Trying to merge incompatible xml format ('"
-                                + root.getName() + "'!='" + dataRoot.getName()
-                                + "')");
-            }
-            mergeNode(root, dataRoot);
-            write();
+            merge(dataDoc);
         } catch (DocumentException e) {
             throw new XMLMergerException(e.getMessage());
         }
@@ -131,20 +148,24 @@
     @SuppressWarnings("unchecked")
     protected boolean areSame(Element a, Element b) {
         log.debug("areSame:" + a + " <=> " + b);
-        if (!a.getName().equals(b.getName()))
+        if (!a.getName().equals(b.getName())) {
             return false;
+        }
         log.debug("same attribute list size?");
-        if (a.attributes().size() != b.attributes().size())
+        if (a.attributes().size() != b.attributes().size()) {
             return false;
+        }
         log.debug("same attribute list?");
         for (Iterator<Attribute> at = a.attributes().iterator(); at.hasNext();) {
             Attribute attra = at.next();
             Attribute attrb = b.attribute(attra.getName());
-            if (attrb == null || !attra.getValue().equals(attrb.getValue()))
+            if (attrb == null || !attra.getValue().equals(attrb.getValue())) {
                 return false;
+            }
         }
-        if (!a.getTextTrim().equals(b.getTextTrim()))
+        if (!a.getTextTrim().equals(b.getTextTrim())) {
             return false;
+        }
         return true;
     }
 
@@ -153,9 +174,8 @@
      * @throws XMLMergerException
      */
     protected void write() throws XMLMergerException {
-        log.debug("Writing " + merge.getAbsolutePath());
         try {
-            FileOutputStream fos = new FileOutputStream(merge);
+            FileOutputStream fos = new FileOutputStream(outputFile);
             OutputFormat format = OutputFormat.createPrettyPrint();
             XMLWriter writer = new XMLWriter(fos, format);
             writer.write(doc);
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/ant/HeliumListener.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/ant/HeliumListener.java	Fri Aug 13 14:59:05 2010 +0300
@@ -19,19 +19,21 @@
 package com.nokia.helium.diamonds.ant;
 
 import java.io.File;
-import java.util.Hashtable;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.ArrayList;
-import java.io.IOException;
+
+import org.apache.log4j.Logger;
+import org.apache.tools.ant.BuildEvent;
 import org.apache.tools.ant.BuildListener;
-import org.apache.tools.ant.BuildException;
-import com.nokia.helium.diamonds.*;
-import com.nokia.helium.core.PropertiesSource;
-import com.nokia.helium.core.TemplateProcessor;
+import org.apache.tools.ant.Project;
 
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.Project;
-import org.apache.log4j.Logger;
+import com.nokia.helium.diamonds.AllTargetDiamondsListener;
+import com.nokia.helium.diamonds.DiamondsConfig;
+import com.nokia.helium.diamonds.DiamondsException;
+import com.nokia.helium.diamonds.DiamondsListener;
+import com.nokia.helium.diamonds.DiamondsListenerImpl;
+import com.nokia.helium.diamonds.StageDiamondsListener;
+import com.nokia.helium.diamonds.TargetDiamondsListener;
 
 /**
  * Listener class that can connect to Ant and log information regarding to build
@@ -57,7 +59,7 @@
 
     private boolean isInitialized;
 
-    private boolean skipDiamonds;
+    private boolean skipDiamonds ;
     private boolean skipDiamondsSet;
 
     /**
@@ -79,40 +81,53 @@
      */
     @SuppressWarnings("unchecked") 
     public void targetStarted(BuildEvent event) {
+        Project prj = event.getProject();
         String targetName = event.getTarget().getName();
-        project = event.getProject();
 
-        String skip = project.getProperty("skip.diamonds");
-        if (skip != null && skip.equals("true")) {
-            skipDiamonds = true;
+        String diamondsEnabled = prj.getProperty("diamonds.enabled");
+        String skip = prj.getProperty("skip.diamonds");
+        log.debug("diamondsenabled: " + diamondsEnabled);
+        log.debug("skip: " + skip);
+        if (!isInitialized) {
+            if (diamondsEnabled != null && !Project.toBoolean(diamondsEnabled)) {
+                log.info("'diamonds.enabled' is not true, to use diamonds set 'diamonds.enabled' to 'true'.");
+                skipDiamonds = true;
+                isInitialized = true;
+            } else if (skip != null && Project.toBoolean(skip)) {
+                log.info("'skip.diamonds' is deprecated. Please consider using 'diamonds.enabled'.");
+                skipDiamonds = true;
+                isInitialized = true;
+            }
         }
+        
         try {
             if (!skipDiamonds) {
                 if (!isInitialized) {
-                    String configFile = project
-                            .getProperty("diamonds.listener.configuration.file");
-                    parseConfig(configFile, project.getProperties());
-                    isInitialized = true;
-                }
-                DiamondsProperties diamondProperties = DiamondsConfig
-                        .getDiamondsProperties();
-
-                /**
-                 * Initialize Diamonds if and only if initializer-target-name has been called
-                 */
-                if (targetName.equals(DiamondsConfig.getInitialiserTargetName())) {                                        
-                    String categoryName = diamondProperties.getProperty("category-property");
-                    String category = project.getProperty(categoryName);
-                    log.debug("category:" + category);
-                    if (category != null && diamondsListeners.isEmpty()) {
-                        addListeners(event);
-                        log.info("Diamonds enabled");
+                    /**
+                     * Initialize Diamonds if and only if initializer-target-name has been called
+                     */
+                    String buildID = prj.getProperty(DiamondsConfig.getBuildIdProperty());
+                    log.debug("targetStarted:buildid:" + buildID);
+                    String initializerTargetName = prj.getProperty(DiamondsConfig.getInitializerTargetProperty());
+                    log.debug("initializerTargetName:" + initializerTargetName);
+                    log.debug("targetName:" + targetName);
+                    if ( buildID != null || (initializerTargetName != null && targetName.equals(initializerTargetName))) {
+                        isInitialized = true;
+                        project = prj;
+                        log.debug("trying to initialize diamonds config");
+                        DiamondsConfig.initialize(project);
+                        DiamondsListenerImpl.initialize(project);
+                        String category = DiamondsConfig.getCategory();
+                        log.debug("category:" + category);
+                        if (category != null && diamondsListeners.isEmpty()) {
+                            addListeners(event);
+                            log.info("Diamonds enabled");
+                        }
                     }
                 }
             } else {
                 if (!skipDiamondsSet && skipDiamonds)
                 {
-                    log.info("skip.diamonds set, to use diamonds don't set skip.diamonds.");
                     skipDiamondsSet = true;
                 }
             }
@@ -143,33 +158,6 @@
         }
     }
 
-    @SuppressWarnings("unchecked") 
-    private void parseConfig(String configFile, Hashtable<String, String> antProperties) {
-        TemplateProcessor templateProcessor = new TemplateProcessor();
-        File outputFile = null;
-        try {
-            outputFile = File.createTempFile("diamonds", "-config.xml");
-            outputFile.deleteOnExit();
-            log
-                    .debug("Preprocessing the diamonds configuration: "
-                            + configFile);
-            List sourceList = new ArrayList();
-            sourceList.add(new PropertiesSource("ant", antProperties));
-            templateProcessor.convertTemplate(configFile,
-                    outputFile.toString(), sourceList);
-        } catch (IOException e) {
-            throw new BuildException(
-                    "Diamonds configuration pre-parsing error: "
-                            + e.getMessage());
-        }
-        try {
-            DiamondsConfig.parseConfiguration(outputFile.toString());
-        } catch (DiamondsException e) {
-            throw new BuildException("Diamonds configuration parsing error: "
-                    + e.getMessage());
-        }
-    }
-
     private void addListeners(BuildEvent event) throws DiamondsException {
         if (DiamondsConfig.isStagesInConfig()) {
             StageDiamondsListener stageListener = new StageDiamondsListener();
@@ -181,6 +169,10 @@
             diamondsListeners.add(targetListener);
             targetListener.buildBegin(event);
         }
+        
+        AllTargetDiamondsListener allTargetListener = new AllTargetDiamondsListener();
+        diamondsListeners.add(allTargetListener);
+        allTargetListener.buildBegin(event);
     }
 
     /**
@@ -230,8 +222,9 @@
         String loggingoutputfile = project.getProperty("logging.output.file");
         if (loggingoutputfile != null) {
             File file = new File(loggingoutputfile);
-            if (file.exists())
+            if (file.exists()) {
                 file.delete();
+            }
         }
     }
 
--- a/buildframework/helium/sf/java/diamonds/tests/antunit/run-scenario.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/antunit/run-scenario.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -38,14 +38,14 @@
         <attribute name="target" />
         <attribute name="failonerror" default="true"/>
         <sequential>
-            <exec osfamily="windows" executable="cmd" dir="${file.run-scenario}/../../scenarii/@{scenario}" failonerror="@{failonerror}">
+            <exec osfamily="windows" executable="cmd" dir="${ant.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="@{failonerror}">
+            <exec osfamily="unix" executable="../bld.sh" dir="${ant.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	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/antunit/test_diamonds.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -28,25 +28,19 @@
 
     <target name="test-build">
         <runScenario scenario="build" target="unittest-diamonds" />
-        <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-address">
         <runScenario scenario="invalid-address" target="unittest-diamonds" />
-        <au:assertFileExists file="${temp.dir}/output/diamonds-start.log.xml" />
-        <au:assertFileExists file="${temp.dir}/output/diamonds-finish.xml" />
+        <au:assertLogContains text="Error occured while sending mail" />
     </target>
     
     <target name="test-build-with-invalid-templates">
         <runScenario scenario="invalid-templates" target="unittest-diamonds" />
-        <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	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-<?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="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"
-            logfile="${ant['codescanner.log.input']}" />
-
-        <!-- if no logfile provided, looks for xml file to send 
-            using <build.id_target_name.xml> file or<target_name.xml> file, 
-            if both doesn't exists does nothing. tries to pass ant properties
-            and sends it.-->
-            
-        <target name="create-bom-log" />
-        
-    <!-- Test the defer case -->
-        <target name="defer-type" template-file="tool.xml.ftl" 
-            ant-properties="true" defer="true"/>
-    </targets>
-</logger>
-</configuration>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/diamonds/tests/config/diamonds_config_default.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,119 @@
+<?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:
+
+============================================================================
+-->
+<project name="diamonds-default-config" xmlns:hlm="http://www.nokia.com/helium">
+
+    <property name="diamonds.template-dir" value="${diamonds.unitest.dir}${file.separator}data${file.separator}templates" />
+    <property name="diamonds.smtp.server" value="${email.smtp.server}" />
+    <property name="diamonds.ldap.server" value="${email.ldap.server}" />
+    <property name="diamonds.initializer.targetname" value="diamonds" />
+    <property name="diamonds.tstamp.format" value="yyyy-MM-dd'T'HH:mm:ss" />
+    <property name="diamonds.category" value="${build.family}" />
+
+    <hlm:stage id="test-echo-operation" 
+        startTarget="test-echo-operation" endTarget="test-echo-operation" />
+    <hlm:stage id="test-echo-operation1" 
+        startTarget="test-echo-operation1" endTarget="test-echo-operation1" />
+    <hlm:stage id="test-echo-operation2" 
+        startTarget="test-echo-operation2" endTarget="test-echo-operation2" />
+    <hlm:stage id="test-echo-operation3" 
+        startTarget="test-echo-operation3" endTarget="test-echo-operation3" />
+    <hlm:stage id="test-echo-operation4" 
+        startTarget="test-echo-operation4" endTarget="test-echo-operation4" />
+    <hlm:stage id="test-echo-operation5" 
+        startTarget="test-echo-operation5" endTarget="test-echo-operation5" />
+
+<!--
+    <stage name="build" start="compile-target" end="compile-target"
+        logfile="${ant['compile.log.input']}"/>
+        -->
+    <hlm:stage id="stage-sequence-1" startTarget="test-buildid-set" endTarget="test-version"
+        />
+    <hlm:stage id="stage-sequence-2" startTarget="test-buildid-set" endTarget="test-defer-type"
+        />
+
+    <hlm:stage id="invalid-template-sequence" startTarget="test-buildid-set" endTarget="test-invalid-template-file"/>
+
+    <hlm:fmppMessage id="initial.message" sourceFile="${diamonds.template-dir}/diamonds_start.xml.ftl">
+        <data expandProperties="yes">
+            ant: antProperties()
+        </data>
+    </hlm:fmppMessage>
+
+    <hlm:fmppMessage id="final.message" sourceFile="${diamonds.template-dir}/diamonds_finish.xml.ftl">
+        <data expandProperties="yes">
+            ant: antProperties()
+        </data>
+    </hlm:fmppMessage>
+
+    <hlm:fmppMessage id="diamonds.signal.message" sourceFile="${diamonds.template-dir}/diamonds_signal.xml.ftl">
+        <data expandProperties="yes">
+            ant: antProperties()
+        </data>
+    </hlm:fmppMessage>
+
+    <hlm:fmppMessage id="diamonds.status.message" sourceFile="${diamonds.template-dir}/diamonds_status.xml.ftl">
+        <data expandProperties="yes">
+            ant: antProperties()
+        </data>
+    </hlm:fmppMessage>
+
+    <hlm:fmppMessage id="stage.time.message" sourceFile="${diamonds.template-dir}/diamonds_stage.xml.ftl">
+        <data expandProperties="yes">
+            ant: antProperties()
+        </data>
+    </hlm:fmppMessage>
+
+
+    <hlm:targetMessageTrigger id="codescanner.id" target="codescanner">
+        <hlm:fmppMessage sourceFile="${diamonds.template-dir}/codescanner.xml.ftl">
+            <data expandProperties="yes">
+                ant: antProperties()
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="test-buildid-set.id" target="test-buildid-set">
+        <hlm:fmppMessage sourceFile="${diamonds.template-dir}/tool.xml.ftl">
+            <data expandProperties="yes">
+                ant: antProperties()
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+    
+    <hlm:targetMessageTrigger id="invalid-ant-properties-input.id" target="invalid-ant-properties-input">
+        <hlm:fmppMessage sourceFile="${diamonds.template-dir}${file.separator}invalid-ant-properties-input-file.ftl">
+            <data expandProperties="yes">
+                ant: antProperties()
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+
+    <hlm:targetMessageTrigger id="invalid-diamonds-server-properties.id" target="invalid-diamonds-server-properties">
+        <hlm:fmppMessage sourceFile="${diamonds.template-dir}/tool.xml.ftl">
+            <data expandProperties="yes">
+                ant: antProperties()
+            </data>
+        </hlm:fmppMessage>
+    </hlm:targetMessageTrigger>
+    
+</project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/tests/data/templates/build.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/data/templates/build.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -18,12 +18,12 @@
 Description:
 
 ============================================================================
---> 
-    <build>
-        <category>${ant["build.family"]}</category>
-        <name>${ant["id"]}</name>
-        <#if ant?keys?seq_contains("diamonds.start.time")><started>${ant["diamonds.start.time"]}</started></#if>
-        <#if ant?keys?seq_contains("diamonds.end.time")><finished>${ant["diamonds.end.time"]}</finished></#if>
+-->
+<build>
+    <category>${ant["build.family"]}</category>
+    <name>${ant["id"]}</name>
+    <#if ant?keys?seq_contains("build.start.time")><started>${ant["build.start.time"]}</started></#if>
+    <#if ant?keys?seq_contains("build.end.time")><finished></finished></#if>
         <creator>${ant["env.USERNAME"]}</creator>
         <hostname>${ant["env.COMPUTERNAME"]}</hostname>
         <product>${ant["name"]}</product>
--- a/buildframework/helium/sf/java/diamonds/tests/data/templates/diamonds_finish.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/data/templates/diamonds_finish.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -21,6 +21,6 @@
 -->
 <#include "header.ftl">
   <build>
-    <#if ant?keys?seq_contains("diamonds.end.time")><finished>${ant["diamonds.end.time"]}</finished></#if>
+    <#if ant?keys?seq_contains("build.end.time")><finished>${ant["build.end.time"]}</finished></#if>
   </build>
 <#include "footer.ftl">
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/tests/data/templates/diamonds_signal.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/data/templates/diamonds_signal.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -22,18 +22,18 @@
 <#include "header.ftl"> 
   <signals>
       <#assign diamondsignalname = ""/>
-      <#assign diamondkeys = diamondSignal?keys>
+      <#assign diamondkeys = ant?keys>
       <#list diamondkeys as diamondkey>
       <#if diamondkey?contains("diamond.signal.name")>
-      <#list diamondSignal[diamondkey]?split(".") as signalname>
-      <#assign diamondsignalname = signalname/>
+      <#list diamondkey?split(".") as index>
+      <#assign signalIndex = index/>
       </#list>
       <signal>
       <#list diamondkeys as diamondkey>
-      <#if diamondkey?contains("${diamondsignalname}")>
-          <#if diamondkey?contains("diamond.signal.name.${diamondsignalname}")><name>${diamondSignal[diamondkey]}</name></#if>
-          <#if diamondkey?contains("diamond.error.message.${diamondsignalname}")><message>${diamondSignal[diamondkey]}</message></#if>
-          <#if diamondkey?contains("diamond.time.stamp.${diamondsignalname}")><timestamp>${diamondSignal[diamondkey]}</timestamp></#if>
+      <#if diamondkey?contains("${signalIndex}")>
+          <#if ant?contains("diamond.signal.name.${signalIndex}")><name>${ant["diamond.signal.name.${signalIndex}"]}</name></#if>
+          <#if ant?contains("diamond.error.message.${signalIndex}")><message>${ant["diamond.error.message.${signalIndex}"]}</message></#if>
+          <#if ant?contains("diamond.time.stamp.${signalIndex}")><timestamp>${ant["diamond.time.stamp.${signalIndex}"]}</timestamp></#if>
       </#if>
       </#list>
       </signal>
--- a/buildframework/helium/sf/java/diamonds/tests/data/templates/diamonds_status.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/data/templates/diamonds_status.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -21,6 +21,6 @@
 -->
 <#include "header.ftl"> 
   <build>
-    <#if diamonds?keys?seq_contains("build.status")><status>${diamonds["build.status"]}</status></#if>
+    <#if ant?keys?seq_contains("build.status")><status>${ant["build.status"]}</status></#if>
   </build>
 <#include "footer.ftl"> 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/diamonds/tests/data/templates/invalid-ant-properties-input-file.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,26 @@
+<#--
+============================================================================ 
+Name        : start.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 "header.ftl">
+<#include "build.xml.ftl">
+<#include "locations.ftl"> 
+    <product>${ant["invalid-property"]}</product>
+<#include "footer.ftl">
--- a/buildframework/helium/sf/java/diamonds/tests/scenarii/build/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/scenarii/build/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -23,24 +23,26 @@
 <project name="test-diamonds" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>Helium Antlib diamonds unittests.</description>
     <property environment="env" />
-    
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    <taskdef name="xpathtest" classname="se.jtech.ant.xpath.XPathEvaluatorTask" onerror="ignore"/>    
+    <property name="diamonds.enabled" value="true" />
     <property name="diamonds.unitest.dir" location="${ant.file.test-diamonds}/../../../" />
     <import file="../../../../../../nokia/companyproperties.ant.xml" optional="true"/>
-    <import file="../../../../../../../extensions/nokia/external/helium-nokia-antlib/companyproperties.ant.xml" optional="true"/>
+    <import file="../../config/diamonds_config_default.ant.xml" />
     <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}/config/diamonds_config.xml.ftl" />
     <property name="compile.log.input" location="${diamonds.unitest.dir}/data/compile.log.xml" />
     <property name="codescanner.log.input" location="${diamonds.unitest.dir}/data/problemIndex.xml" />
     <property name="policy.log.input" location="${diamonds.unitest.dir}/data/policy.log.xml" />
     <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" />
+    <import file="${diamonds.unitest.dir}/config/diamonds_config_default.ant.xml" />
+
 
     <target name="unittest" depends="unittest-diamonds" />
     
@@ -69,29 +71,6 @@
         <echo message="target without input file and just to send the data" />
     </target>
 
-    <target name="invalid-target-input-file">
-        <echo message="target with invalid input source xml file" />
-    </target>
-
-    <target name="invalid-stage-input-file">
-        <echo message="stage with invalid input source xml file" />
-    </target>
-
-    <target name="invalid-template-file">
-        <echo message="target with invalid template-file" />
-    </target>
-
-    <target name="invalid-ant-properties-input">
-        <echo message="target with invalid ant properties input" />
-    </target>
-
-    <target name="non-existing-ant-properties">
-        <echo message="target with non-existing-ant-properties" />
-    </target>
-
-    <target name="invalid-diamonds-server-properties">
-        <echo message="target with invalid-diamonds-server-properties" />
-    </target>
 
     <target name="defer-type">
         <echo message="version target for diamonds to verify sending data to diamonds" />
@@ -109,31 +88,8 @@
         <antcall target="codescanner" />
     </target>
 
-    <target name="test-invalid-target-input-file">
-        <antcall target="invalid-target-input-file" />
-    </target>
-
-    <target name="test-invalid-stage-input-file">
-        <antcall target="invalid-target-input-file" />
-        <echo message="stage with invalid input source xml file" />
-    </target>
-
-    <target name="test-invalid-template-file">
-        <antcall target="invalid-template-file" />
-    </target>
 
-    <target name="test-invalid-ant-properties-input">
-        <antcall target="invalid-ant-properties-input" />
-    </target>
 
-    <target name="test-non-existing-ant-properties">
-        <antcall target="non-existing-ant-properties" />
-    </target>
-
-    <target name="test-invalid-diamonds-server-properties">
-        <antcall target="invalid-diamonds-server-properties" />
-        <echo message="target with invalid-diamonds-server-properties" />
-    </target>
 
     <target name="test-compile-target">
         <antcall target="compile-target" />
@@ -141,6 +97,9 @@
 
     <target name="test-version">
         <antcall target="version" />
+        <au:assertTrue>
+            <isset property="diamonds.build.id"/>
+        </au:assertTrue>
     </target>
 
     <target name="test-buildid-set">
@@ -148,6 +107,13 @@
         <au:assertTrue>
             <isset property="diamonds.build.id"/>
         </au:assertTrue>
+        <get src="http://${diamonds.host}:${diamonds.port}${diamonds.build.id}?fmt=xml"
+             dest="${temp.dir}/test-buildid-set_output.xml" 
+             usetimestamp="true" />
+        <xpathtest xmlfile="${temp.dir}/test-buildid-set_output.xml">
+            <namespace uri="" prefix=""/>
+            <xpath expression="/diamonds-build[schema='23']"/>
+        </xpathtest>
     </target>
 
     <target name="test-buildid-notset">
@@ -158,6 +124,9 @@
 
     <target name="test-echo-operation">
         <echo message="echo operation: test" />
+        <au:assertTrue>
+            <isset property="diamonds.build.id"/>
+        </au:assertTrue>
     </target>
 
     <target name="test-echo-operation1">
@@ -180,49 +149,65 @@
         <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-depend-target" depends="test-echo-operation" />
 
     <target name="test-ant-call">
         <echo message="test-ant-call" />
+        <delete file="${diamonds.output.dir}/diamonds_stage.xml" failonerror="false" />
         <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" />
+        <delete file="${diamonds.output.dir}/diamonds_stage.xml" failonerror="false" />
         <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" />
+        <delete file="${diamonds.output.dir}/diamonds_stage.xml" failonerror="false" />
         <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-verify-targets">
+        <get src="http://${diamonds.host}:${diamonds.port}${diamonds.build.id}?fmt=xml"
+             dest="${temp.dir}/test-verify-targets.xml" 
+             usetimestamp="true" />
+        <xpathtest xmlfile="${temp.dir}/test-verify-targets.xml">
+            <namespace uri="" prefix=""/>
+            <xpath expression="/diamonds-build/tools/tool[name='SymSEE']"/>
+         </xpathtest>
+     </target>
+
+    <target name="test-verify-stages">
+        <get src="http://${diamonds.host}:${diamonds.port}${diamonds.build.id}?fmt=xml"
+             dest="${temp.dir}/test-verify-stages.xml" 
+             usetimestamp="true" />
+        <xpathtest xmlfile="${temp.dir}/test-verify-stages.xml">
+            <namespace uri="" prefix=""/>
+            <xpath expression="/diamonds-build/stages/stage[name='test-echo-operation']"/>
+            <xpath expression="/diamonds-build/stages/stage[name='test-echo-operation1']"/>
+            <xpath expression="/diamonds-build/stages/stage[name='test-echo-operation2']"/>
+            <xpath expression="/diamonds-build/stages/stage[name='test-echo-operation3']"/>
+            <xpath expression="/diamonds-build/stages/stage[name='test-echo-operation4']"/>
+            <xpath expression="/diamonds-build/stages/stage[name='test-echo-operation5']"/>
+            <xpath expression="/diamonds-build/stages/stage[name='stage-sequence-1']"/>
+            <xpath expression="/diamonds-build/stages/stage[name='stage-sequence-2']"/>
+        </xpathtest>
+    </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-depend-target,
+        test-create-bom-log,test-codescanner,test-compile-target, 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 " />
+        sequence-config-test-target-1,sequence-config-test-target-2, test-verify-stages, test-verify-targets" />
 </project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-address/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-address/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -23,12 +23,12 @@
 <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" />
-    
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    <property name="diamonds.enabled" value="true" />
     <property name="diamonds.host" value="invalid.server.local" />
     <property name="diamonds.port" value="80" />
     <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-invalid-address}/../../../" />
     <property name="diamonds.output.dir" location="${temp.dir}/output" />
     <property name="diamonds.template.dir" location="${diamonds.unitest.dir}/data/templates" />
@@ -36,12 +36,12 @@
     <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}/config/diamonds_config.xml.ftl" />
     <property name="compile.log.input" location="${diamonds.unitest.dir}/data/compile.log.xml" />
     <property name="codescanner.log.input" location="${diamonds.unitest.dir}/data/problemIndex.xml" />
     <property name="policy.log.input" location="${diamonds.unitest.dir}/data/policy.log.xml" />
     <property name="invalid.target.input.file" location="${diamonds.unitest.dir}/data/invalid.target.input.log.xml" />
     <property name="symsee.version" value="9.1.0" />
+    <import file="../../config/diamonds_config_default.ant.xml" />
 
     <target name="unittest" depends="unittest-diamonds" />
     
@@ -82,9 +82,6 @@
         <echo message="target with invalid template-file" />
     </target>
 
-    <target name="invalid-ant-properties-input">
-        <echo message="target with invalid ant properties input" />
-    </target>
 
     <target name="non-existing-ant-properties">
         <echo message="target with non-existing-ant-properties" />
@@ -98,18 +95,6 @@
         <echo message="version target for diamonds to verify sending data to diamonds" />
     </target>
 
-    <target name="test-defer-type">
-        <antcall target="defer-type" />
-    </target>
-
-    <target name="test-create-bom-log">
-        <antcall target="create-bom-log" />
-    </target>
-
-    <target name="test-codescanner">
-        <antcall target="codescanner" />
-    </target>
-
     <target name="test-invalid-target-input-file">
         <antcall target="invalid-target-input-file" />
     </target>
@@ -123,22 +108,10 @@
         <antcall target="invalid-template-file" />
     </target>
 
-    <target name="test-invalid-ant-properties-input">
-        <antcall target="invalid-ant-properties-input" />
-    </target>
-
     <target name="test-non-existing-ant-properties">
         <antcall target="non-existing-ant-properties" />
     </target>
 
-    <target name="test-invalid-diamonds-server-properties">
-        <antcall target="invalid-diamonds-server-properties" />
-        <echo message="target with invalid-diamonds-server-properties" />
-    </target>
-
-    <target name="test-compile-target">
-        <antcall target="compile-target" />
-    </target>
 
     <target name="test-version">
         <antcall target="version" />
@@ -146,9 +119,9 @@
 
     <target name="test-buildid-set">
         <echo>${diamonds.build.id}</echo>
-        <au:assertTrue>
+        <au:assertFalse>
             <isset property="diamonds.build.id"/>
-        </au:assertTrue>
+        </au:assertFalse>
     </target>
 
     <target name="test-buildid-notset">
@@ -157,8 +130,18 @@
         </au:assertFalse>
     </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 " />
+    <target name="test-verify-targets">
+        <au:assertFalse>
+            <isset property="diamonds.build.id"/>
+        </au:assertFalse>
+    </target>        
+
+    <target name="test-verify-stages">
+        <au:assertFalse>
+            <isset property="diamonds.build.id"/>
+        </au:assertFalse>
+    </target>        
+
+    <target name="test-all" depends="test-buildid-notset, diamonds, test-buildid-set, test-version,
+        test-verify-stages, test-verify-targets" />
 </project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-templates-1/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-templates-1/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -23,31 +23,194 @@
 <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" />
-    
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    <property name="diamonds.enabled" value="true" />
     <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>
+    <import file="../../config/diamonds_config_default.ant.xml" />
 
     <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" />
+        <delete dir="${diamonds.output.dir}" failonerror="false"/>
+        <mkdir dir="${diamonds.output.dir}"/>
+        <antcall target="test-all" />
+    </target>
+    
+    <dirname property="project.dir" file="${ant.file.test-diamonds}" />
+    <target name="version">
+        <echo message="version target for diamonds to verify sending data to diamonds" />
     </target>
 
     <target name="diamonds" />
-    <target name="test-all" depends="diamonds" />
+
+    <target name="compile-target">
+        <echo message="verify the build stage with input source xml file" />
+    </target>
+
+    <target name="codescanner">
+        <echo message="target verification with input source xml file" />
+    </target>
+
+    <target name="create-bom-log">
+        <echo message="target without input file and just to send the data" />
+    </target>
+
+    <target name="invalid-target-input-file">
+        <echo message="target with invalid input source xml file" />
+    </target>
+
+    <target name="invalid-stage-input-file">
+        <echo message="stage with invalid input source xml file" />
+    </target>
+
+    <target name="invalid-template-file">
+        <echo message="target with invalid template-file" />
+    </target>
+
+    <target name="invalid-ant-properties-input">
+        <echo message="target with invalid ant properties input" />
+    </target>
+
+    <target name="non-existing-ant-properties">
+        <echo message="target with non-existing-ant-properties" />
+    </target>
+
+    <target name="invalid-diamonds-server-properties">
+        <echo message="target with invalid-diamonds-server-properties" />
+    </target>
+
+    <target name="defer-type">
+        <echo message="version target for diamonds to verify sending data to diamonds" />
+    </target>
+
+    <target name="test-defer-type">
+        <antcall target="defer-type" />
+    </target>
+
+    <target name="test-create-bom-log">
+        <antcall target="create-bom-log" />
+    </target>
+
+    <target name="test-codescanner">
+        <antcall target="codescanner" />
+    </target>
+
+    <target name="test-invalid-target-input-file">
+        <antcall target="invalid-target-input-file" />
+    </target>
+
+    <target name="test-invalid-stage-input-file">
+        <antcall target="invalid-target-input-file" />
+        <echo message="stage with invalid input source xml file" />
+    </target>
+
+    <target name="test-invalid-template-file">
+        <antcall target="invalid-template-file" />
+    </target>
+
+    <target name="test-invalid-ant-properties-input">
+        <antcall target="invalid-ant-properties-input" />
+    </target>
+
+    <target name="test-non-existing-ant-properties">
+        <antcall target="non-existing-ant-properties" />
+    </target>
+
+    <target name="test-invalid-diamonds-server-properties">
+        <antcall target="invalid-diamonds-server-properties" />
+        <echo message="target with invalid-diamonds-server-properties" />
+    </target>
+
+    <target name="test-compile-target">
+        <antcall target="compile-target" />
+    </target>
+
+    <target name="test-version">
+        <antcall target="version" />
+    </target>
+
+    <target name="test-buildid-set">
+        <echo>${diamonds.build.id}</echo>
+        <au:assertTrue>
+            <isset property="diamonds.build.id"/>
+        </au:assertTrue>
+    </target>
+
+    <target name="test-buildid-notset">
+        <au:assertFalse>
+            <isset property="diamonds.build.id"/>
+        </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">
+        <au:assertFileExists file="${diamonds.output.dir}/diamonds_stage.xml" />
+    </target>
+
+    <target name="test-ant-call">
+        <echo message="test-ant-call" />
+        <delete file="${diamonds.output.dir}/diamonds_stage.xml" failonerror="false" />
+        <antcall target="test-echo-operation1" />
+        <au:assertFileExists file="${diamonds.output.dir}/diamonds_stage.xml" />
+    </target>
+
+    <target name="test-ant-call-multiple">
+        <echo message="test-ant-call" />
+        <delete file="${diamonds.output.dir}/diamonds_stage.xml" failonerror="false" />
+        <antcall target="test-echo-operation2" />
+        <au:assertFileExists file="${diamonds.output.dir}/diamonds_stage.xml" />
+        <antcall target="test-echo-operation3" />
+        <au:assertFileExists file="${diamonds.output.dir}/diamonds_stage.xml" />
+    </target>
+
+    <target name="test-ant-call-multiple-parallel">
+        <echo message="test-ant-call" />
+        <delete file="${diamonds.output.dir}/diamonds_stage.xml" failonerror="false" />
+        <parallel>
+            <antcall target="test-echo-operation4" />
+            <antcall target="test-echo-operation5" />
+        </parallel>
+        <au:assertFileExists file="${diamonds.output.dir}/diamonds_stage.xml" />
+    </target>
+
+    <target name="sequence-config-test-target-1">
+        <au:assertFileExists file="${diamonds.output.dir}/diamonds_stage.xml" />
+    </target>
+
+    <target name="sequence-config-test-target-2">
+        <au:assertFileExists file="${diamonds.output.dir}/diamonds_stage.xml" />
+    </target>
+
+    <target name="test-all" depends="test-buildid-notset, diamonds, test-buildid-set, test-defer-type, test-version,test-create-bom-log" />
 </project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-templates-1/diamonds_config.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-<?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	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-templates/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -23,22 +23,23 @@
 <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" />
-    
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    <taskdef name="xpathtest" classname="se.jtech.ant.xpath.XPathEvaluatorTask" onerror="ignore"/>    
+    <property name="diamonds.enabled" value="true" />
     <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/invalid_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}/config/diamonds_config.xml.ftl" />
     <property name="compile.log.input" location="${diamonds.unitest.dir}/data/compile.log.xml" />
     <property name="codescanner.log.input" location="${diamonds.unitest.dir}/data/problemIndex.xml" />
     <property name="policy.log.input" location="${diamonds.unitest.dir}/data/policy.log.xml" />
     <property name="invalid.target.input.file" location="${diamonds.unitest.dir}/data/invalid.target.input.log.xml" />
     <property name="symsee.version" value="9.1.0" />
+    <import file="../../config/diamonds_config_default.ant.xml" />
 
     <target name="unittest" depends="unittest-diamonds" />
     
@@ -67,76 +68,28 @@
         <echo message="target without input file and just to send the data" />
     </target>
 
-    <target name="invalid-target-input-file">
-        <echo message="target with invalid input source xml file" />
-    </target>
-
-    <target name="invalid-stage-input-file">
-        <echo message="stage with invalid input source xml file" />
-    </target>
 
     <target name="invalid-template-file">
-        <echo message="target with invalid template-file" />
+        <echo message="expected message: ${diamonds.template-dir}${file.separator}invalid-target-input-file.ftl doesn't exists" />
+        <au:expectfailure expectedMessage="input file : ${diamonds.template-dir}${file.separator}invalid-target-input-file.ftl doesn't exists" >
+            <hlm:targetMessageTrigger id="invalid-target-input-file.id" target="invalid-target-input-file">
+                <hlm:fmppMessage sourceFile="${diamonds.template-dir}${file.separator}invalid-target-input-file.ftl">
+                    <data expandProperties="yes">
+                        ant: antProperties()
+                    </data>
+                </hlm:fmppMessage>
+            </hlm:targetMessageTrigger>
+        </au:expectfailure>
     </target>
 
     <target name="invalid-ant-properties-input">
         <echo message="target with invalid ant properties input" />
     </target>
 
-    <target name="non-existing-ant-properties">
-        <echo message="target with non-existing-ant-properties" />
-    </target>
-
-    <target name="invalid-diamonds-server-properties">
-        <echo message="target with invalid-diamonds-server-properties" />
-    </target>
-
-    <target name="defer-type">
-        <echo message="version target for diamonds to verify sending data to diamonds" />
-    </target>
-
-    <target name="test-defer-type">
-        <antcall target="defer-type" />
-    </target>
-
-    <target name="test-create-bom-log">
-        <antcall target="create-bom-log" />
-    </target>
-
-    <target name="test-codescanner">
-        <antcall target="codescanner" />
-    </target>
-
-    <target name="test-invalid-target-input-file">
-        <antcall target="invalid-target-input-file" />
-    </target>
-
-    <target name="test-invalid-stage-input-file">
-        <antcall target="invalid-target-input-file" />
-        <echo message="stage with invalid input source xml file" />
-    </target>
-
-    <target name="test-invalid-template-file">
-        <antcall target="invalid-template-file" />
-    </target>
-
     <target name="test-invalid-ant-properties-input">
         <antcall target="invalid-ant-properties-input" />
     </target>
 
-    <target name="test-non-existing-ant-properties">
-        <antcall target="non-existing-ant-properties" />
-    </target>
-
-    <target name="test-invalid-diamonds-server-properties">
-        <antcall target="invalid-diamonds-server-properties" />
-        <echo message="target with invalid-diamonds-server-properties" />
-    </target>
-
-    <target name="test-compile-target">
-        <antcall target="compile-target" />
-    </target>
-
     <target name="test-version">
         <antcall target="version" />
     </target>
@@ -154,8 +107,27 @@
         </au:assertFalse>
     </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 " />
+    <target name="test-invalid-template-file">
+            <antcall target="invalid-template-file" />
+    </target>
+
+    <target name="test-verify-targets">
+        <au:assertTrue>
+            <isset property="diamonds.build.id"/>
+        </au:assertTrue>
+     </target>
+
+    <target name="test-verify-stages">
+        <get src="http://${diamonds.host}:${diamonds.port}${diamonds.build.id}?fmt=xml"
+             dest="${temp.dir}/test-verify-stages.xml" 
+             usetimestamp="true" />
+        <xpathtest xmlfile="${temp.dir}/test-verify-stages.xml">
+            <namespace uri="" prefix=""/>
+            <xpath expression="/diamonds-build/stages/stage[name='invalid-template-sequence']"/>
+        </xpathtest>
+    </target>        
+
+
+    <target name="test-all" depends="test-buildid-notset, diamonds, test-buildid-set, test-invalid-ant-properties-input,
+        test-invalid-template-file, test-verify-targets, test-verify-stages" />
 </project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/tests/src/com/nokia/helium/diamonds/tests/TestXMLMerger.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/src/com/nokia/helium/diamonds/tests/TestXMLMerger.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,20 +17,27 @@
 
 package com.nokia.helium.diamonds.tests;
 
-import java.io.File;
+import static org.junit.Assert.assertTrue;
+
+
+import java.io.BufferedReader;
 import java.io.BufferedWriter;
-import java.io.FileWriter;
+import java.io.File;
 import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
 import java.io.Reader;
-import java.io.BufferedReader;
-import java.io.IOException;
+import java.io.FileInputStream;
+import org.custommonkey.xmlunit.Diff;
+import org.custommonkey.xmlunit.DifferenceListener;
+import org.custommonkey.xmlunit.IgnoreTextAndAttributeValuesDifferenceListener;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
 import com.nokia.helium.diamonds.XMLMerger;
 import com.nokia.helium.diamonds.XMLMerger.XMLMergerException;
 
-import org.junit.*;
-import static org.junit.Assert.*;
-import org.custommonkey.xmlunit.*;
-
 public class TestXMLMerger {
     
     @Before
@@ -58,18 +65,20 @@
      */
     @Test
     public void test_simpleMergeNode() throws Exception {
+        File tempFile = File.createTempFile("merge-out", ".xml");
         File merge = createTextFile("<?xml version=\"1.0\"?>\n<root/>");
         File toBeMerged = createTextFile("<?xml version=\"1.0\"?>\n<root>\n" +                 
                 "<section1/>\n" + 
                 "<section2/>\n"+ 
                 "<section3><subnode>text</subnode></section3>\n"+ 
                 "</root>");
-        XMLMerger merger = new XMLMerger(merge);
+        XMLMerger merger = new XMLMerger(new FileInputStream(merge), tempFile);
         merger.merge(toBeMerged);
         DifferenceListener differenceListener = new IgnoreTextAndAttributeValuesDifferenceListener();
-        Diff diff = new Diff(new ReaderNoSpaces(new FileReader(merge)), new ReaderNoSpaces(new FileReader(toBeMerged)));
+        Diff diff = new Diff(new ReaderNoSpaces(new FileReader(tempFile)), new ReaderNoSpaces(new FileReader(toBeMerged)));
         diff.overrideDifferenceListener(differenceListener);
         assertTrue("Test that 2 simple XML merge correctly  " + diff, diff.similar());
+        tempFile.delete();
     }
 
     /**
@@ -79,7 +88,8 @@
      */
     @Test
     public void test_mergeSameNode() throws Exception {
-        File merge = createTextFile("<?xml version=\"1.0\"?>\n<root>\n" +                 
+        File tempFile = File.createTempFile("merge-out", ".xml");
+        File merge = createTextFile("<?xml version=\"1.0\"?>\n<root>\n" +
                 "<section>\n" + 
                 "<subnode attr=\"1\">1</subnode>\n" + 
                 "</section>\n" + 
@@ -89,12 +99,13 @@
                 "<subnode attr=\"1\">1</subnode>\n" + 
                 "</section>\n" + 
                 "</root>");
-        XMLMerger merger = new XMLMerger(merge);
+        XMLMerger merger = new XMLMerger(new FileInputStream(merge), tempFile);
         merger.merge(toBeMerged);
         DifferenceListener differenceListener = new IgnoreTextAndAttributeValuesDifferenceListener();
-        Diff diff = new Diff(new ReaderNoSpaces(new FileReader(merge)), new ReaderNoSpaces(new FileReader(toBeMerged)));
+        Diff diff = new Diff(new ReaderNoSpaces(new FileReader(tempFile)), new ReaderNoSpaces(new FileReader(toBeMerged)));
         diff.overrideDifferenceListener(differenceListener);
         assertTrue("Test that identity  " + diff, diff.similar());
+        tempFile.delete();
     }
 
     /**
@@ -103,6 +114,7 @@
      */
     @Test
     public void test_mergeWithSubNodeAndAttribute() throws Exception {
+        File tempFile = File.createTempFile("merge-out", ".xml");
         File merge = createTextFile("<?xml version=\"1.0\"?>\n<root/>");
         File toBeMerged1 = createTextFile("<?xml version=\"1.0\"?>\n<root>\n" +                 
                 "<section>\n" + 
@@ -132,14 +144,15 @@
                 "<subnode attr=\"4\">1</subnode>\n" + 
                 "</section>\n" + 
                 "</root>");
-        XMLMerger merger = new XMLMerger(merge);
+        XMLMerger merger = new XMLMerger(new FileInputStream(merge), tempFile);
         merger.merge(toBeMerged1);
         merger.merge(toBeMerged2);
         merger.merge(toBeMerged3);
         merger.merge(toBeMerged4);
-        Diff diff = new Diff(new ReaderNoSpaces(new FileReader(merge)), new ReaderNoSpaces(new FileReader(expected)));
+        Diff diff = new Diff(new ReaderNoSpaces(new FileReader(tempFile)), new ReaderNoSpaces(new FileReader(expected)));
         //System.out.println(readTextFile(merge.getAbsolutePath()));
         assertTrue("test XML matches control skeleton XML " + diff, diff.similar());
+        tempFile.delete();
     }
 
     /**
@@ -147,29 +160,35 @@
      */
     @Test(expected=XMLMergerException.class)
     public void test_mergeWithNoRootNode() throws Exception{
-		File merge = createTextFile("<?xml version=\"1.0\"?>\n");
-		XMLMerger merger = new XMLMerger(merge);
-	}
+        File tempFile = File.createTempFile("merge-out", ".xml");
+        File merge = createTextFile("<?xml version=\"1.0\"?>\n");
+        XMLMerger merger = new XMLMerger(new FileInputStream(merge), tempFile);
+        tempFile.delete();
+}
     /**
      * Test the XMLMerger with xml files with different root nodes to merge.
      */
     @Test(expected=XMLMergerException.class)
     public void test_mergeWithDifferentRootNodes() throws Exception{
-		File merge = createTextFile("<?xml version=\"1.0\"?>\n<root/>");
-		File toBeMerged = createTextFile("<?xml version=\"1.0\"?>\n<root1/>\n");
-		XMLMerger merger = new XMLMerger(merge);
-		merger.merge(toBeMerged);
-	}
+        File tempFile = File.createTempFile("merge-out", ".xml");
+        File merge = createTextFile("<?xml version=\"1.0\"?>\n<root/>");
+        File toBeMerged = createTextFile("<?xml version=\"1.0\"?>\n<root1/>\n");
+        XMLMerger merger = new XMLMerger(new FileInputStream(merge), tempFile);
+        merger.merge(toBeMerged);
+        tempFile.delete();
+    }
     /**
      * Test the XMLMerger with xml files with Wrong xml format
      */
     @Test(expected=XMLMergerException.class)
     public void test_mergeWithWrongXML() throws Exception{
-        	File merge = createTextFile("<?xml version=\"1.0\"?>\n<root/>");
-        	File toBeMerged = createTextFile("<?xml version=\"1.0\"?>\n<root/><test/>\n");
-        	XMLMerger merger = new XMLMerger(merge);
-        	merger.merge(toBeMerged);
-	}
+        File tempFile = File.createTempFile("merge-out", ".xml");
+        File merge = createTextFile("<?xml version=\"1.0\"?>\n<root/>");
+        File toBeMerged = createTextFile("<?xml version=\"1.0\"?>\n<root/><test/>\n");
+        XMLMerger merger = new XMLMerger(new FileInputStream(merge), tempFile);
+        merger.merge(toBeMerged);
+        tempFile.delete();
+    }
 
     /**
      * Load file content into a string. 
@@ -188,9 +207,8 @@
         }
 
         reader.close();
-
         return sb.toString();
-    }    
+    }
     
     public class ReaderNoSpaces extends BufferedReader {
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : build.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+All rights reserved.
+This component and the accompanying materials are made available
+under the terms of the License "Eclipse Public License v1.0"
+which accompanies this distribution, and is available
+at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+Initial Contributors:
+Nokia Corporation - initial contribution.
+
+Contributors:
+
+Description:
+
+============================================================================
+-->
+<project name="helium-environment">
+    <description>Helium Antlib build file.</description>
+    
+    <property name="name" value="environment"/>
+    <import file="${builder.dir}/java/macros.ant.xml" />
+
+</project>
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/ivy.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,40 @@
+<?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-environment"
+        status="integration">
+  </info>
+  <dependencies>
+    <dependency name="helium-core" rev="latest.integration" conf="default" />
+    <!--<dependency name="helium-signaling" rev="latest.integration" conf="default" />
+    <dependency org="dom4j" name="dom4j" rev="latest.integration" conf="default" />
+    <dependency org="org.apache.commons" name="commons-httpclient" rev="latest.integration" conf="default"/>
+    <dependency org="org.apache.commons" name="commons-lang" rev="latest.integration" conf="default"/>
+    <dependency org="jaxen" name="jaxen" rev="latest.integration" conf="default"/>
+    <dependency org="org.apache.commons" name="commons-logging" rev="latest.integration" conf="default"/>
+    <dependency org="org.apache.commons" name="commons-codec" rev="latest.integration" conf="default"/>-->
+  </dependencies>
+</ivy-module>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/Environment.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,330 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+
+package com.nokia.helium.environment;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.tools.ant.Project;
+
+import com.nokia.helium.environment.ant.types.ExecutableInfo;
+
+/**
+ * Represents the environment of the computer in terms of executables, etc. Typically scans for
+ * executables that have been run during the build.
+ */
+public class Environment {
+    private static final String[] WINDOWS_EXE_EXTENSIONS = { ".exe", ".bat", ".cmd" };
+    private static final String STDERR_OUTPUT = "stderr";
+    private static final String[] DEFAULT_EXECUTABLES = { "java", "ant" };
+
+    private Project project;
+    /** List of known executables. */
+    private List<Executable> executables = new ArrayList<Executable>();
+    /** List of meta information about executables. */
+    private Map<String, ExecutableInfo> defs = new HashMap<String, ExecutableInfo>();
+
+    public Environment(Project project) {
+        this.project = project;
+    }
+
+    public void setExecutableDefs(List<ExecutableInfo> executableDefs) {
+        for (Iterator<ExecutableInfo> iterator = executableDefs.iterator(); iterator.hasNext();) {
+            ExecutableInfo execDef = (ExecutableInfo) iterator.next();
+            defs.put(execDef.getName(), execDef);
+        }
+    }
+
+    public List<Executable> getExecutables() {
+        return executables;
+    }
+
+    public void scan(List<String> execCalls) throws IOException {
+        addDefaultExecutables();
+        parseExecLog(execCalls);
+        addExecsWithInfo();
+        populateExecutables(executables);
+    }
+
+    /**
+     * Adds default executables to the list that must have been run because Ant is running.
+     */
+    private void addDefaultExecutables() {
+
+        for (int i = 0; i < DEFAULT_EXECUTABLES.length; i++) {
+            Executable exe = new Executable(DEFAULT_EXECUTABLES[i]);
+            exe.setExecuted(true);
+            executables.add(exe);
+        }
+    }
+
+    /**
+     * Parses a log of calls to executables in CSV format.
+     * 
+     * @param execLog
+     * @throws IOException
+     */
+    private void parseExecLog(List<String> execCalls) throws IOException {
+        for (Iterator<String> iterator = execCalls.iterator(); iterator.hasNext();) {
+            String execCall = (String) iterator.next();
+
+            File execFile = new File(execCall);
+            String name = execFile.getName();
+            String path = null;
+            // See if the full path is available in the exec call
+            if (execFile.getParentFile() != null) {
+                path = execFile.getCanonicalPath();
+            }
+            Executable runExec = new Executable(name);
+            runExec.setPath(path);
+            runExec.setExecuted(true);
+            if (!executables.contains(runExec)) {
+                executables.add(runExec);
+            }
+        }
+    }
+
+    /**
+     * Adds executables to the list based on the meta-information given in the configuration.
+     */
+    private void addExecsWithInfo() {
+        for (Iterator<String> iterator = defs.keySet().iterator(); iterator.hasNext();) {
+            String execName = (String) iterator.next();
+            Executable exec = new Executable(execName);
+            if (!executables.contains(exec)) {
+                executables.add(exec);
+            }
+        }
+    }
+
+    private void populateExecutables(List<Executable> executables) throws IOException {
+        for (Iterator<Executable> iterator = executables.iterator(); iterator.hasNext();) {
+            Executable exec = (Executable) iterator.next();
+            project.log("Checking executable: " + exec.toString(), Project.MSG_INFO);
+            File executableFile = findExecutableFile(exec);
+
+            if (executableFile != null) {
+                if (!findVersion(exec)) {
+                    calculateAdditionalVersioningInfo(exec);
+                }
+            }
+            else {
+                project.log("Cannot find path for executable: " + exec.toString(), Project.MSG_DEBUG);
+            }
+        }
+    }
+
+    /**
+     * Finds an executable file based on the executable definition.
+     * 
+     * @param exec An executable definition.
+     * @return The executable file.
+     * @throws IOException
+     */
+    private File findExecutableFile(final Executable exec) throws IOException {
+        File executableFile = null;
+
+        // See if the executable has a full path
+        String path = exec.getPath();
+        if (path != null) {
+            File file = new File(path);
+            executableFile = file;
+            exec.setPath(executableFile.getCanonicalPath());
+        }
+        // Or search the PATH
+        else {
+            String[] pathDirs = getPaths();
+            // Filter object to match executable filenames
+            FileFilter filter = new FileFilter() {
+                public boolean accept(File file) {
+                    if (isFileExecutable(file)) {
+                        // Find the first file in the directory that has the same start of the name
+                        String exeNameNoExt = exec.getNameNoExt();
+
+                        String name = file.getName();
+                        if (name.contains(".")) {
+                            name = name.substring(0, name.indexOf("."));
+                        }
+
+                        if (name.equals(exeNameNoExt) || name.startsWith(exeNameNoExt + ".")) {
+                            return true;
+                        }
+                    }
+                    return false;
+                }
+            };
+            for (int i = 0; i < pathDirs.length; i++) {
+                File pathDir = new File(pathDirs[i]);
+                File[] executableFiles = pathDir.listFiles(filter);
+                if (executableFiles != null && executableFiles.length > 0) {
+                    executableFile = executableFiles[0];
+                    exec.setPath(executableFile.getCanonicalPath());
+                }
+            }
+        }
+        return executableFile;
+    }
+
+    private boolean isFileExecutable(File file) {
+        if (file.canExecute()) {
+            String os = System.getProperty("os.name").toLowerCase();
+            if (os.contains("windows") || os.contains("win32")) {
+                for (int i = 0; i < WINDOWS_EXE_EXTENSIONS.length; i++) {
+                    if (file.getName().endsWith(WINDOWS_EXE_EXTENSIONS[i])) {
+                        return true;
+                    }
+                }
+            }
+            else {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private String[] getPaths() {
+        String pathEnvVar = System.getenv("Path");
+        String[] pathDirs = null;
+        if (pathEnvVar == null) {
+            pathEnvVar = System.getenv("PATH");
+        }
+        if (pathEnvVar != null) {
+            pathDirs = pathEnvVar.split(File.pathSeparator);
+        }
+        else {
+            pathDirs = new String[0];
+        }
+        return pathDirs;
+    }
+
+    private boolean findVersion(Executable exec) throws IOException {
+        // Get the executable additional data for this execution
+        ExecutableInfo def = defs.get(exec.getNameNoExt());
+        if (def != null && def.getVersionArgs() != null) {
+            String path = exec.getPath();
+            if (path == null) {
+                path = "";
+            }
+            String[] versionArgs = def.getVersionArgs().split(" ");
+            String[] commands = new String[versionArgs.length + 1];
+            commands[0] = path;
+            for (int i = 0; i < versionArgs.length; i++) {
+                commands[i + 1] = versionArgs[i].trim();
+            }
+            Process commandProcess = Runtime.getRuntime().exec(commands);
+
+            String output = def.getOutput();
+            StringBuilder text = new StringBuilder();
+            int dataRead = 0;
+            char[] chars = new char[1000];
+            if (output == null || !output.equals(STDERR_OUTPUT)) {
+                InputStream in = commandProcess.getInputStream();
+                InputStreamReader textIn = new InputStreamReader(in);
+                while (dataRead != -1) {
+                    dataRead = textIn.read(chars, 0, chars.length);
+                    if (dataRead != -1) {
+                        text.append(chars, 0, dataRead);
+                    }
+                }
+            }
+            InputStream err = commandProcess.getErrorStream();
+            InputStreamReader textErr = new InputStreamReader(err);
+            dataRead = 0;
+            while (dataRead != -1) {
+                dataRead = textErr.read(chars, 0, chars.length);
+                if (dataRead != -1) {
+                    text.append(chars, 0, dataRead);
+                }
+            }
+            String versionText = text.toString();
+            if (def.getVersionRegex() != null) {
+                Pattern versionPattern = Pattern.compile(def.getVersionRegex());
+                Matcher versionMatch = versionPattern.matcher(versionText);
+                if (versionMatch.find()) {
+                    String version = versionMatch.group(1);
+                    exec.setVersion(version);
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Calculate extra versioning info for the executable file. Used if cannot find a version value.
+     * 
+     * @param exec The executable.
+     * @throws IOException If file cannot be read.
+     */
+    private void calculateAdditionalVersioningInfo(Executable exec) throws IOException {
+        calculateHash(exec);
+        File file = new File(exec.getPath());
+        exec.setLastModified(file.lastModified());
+        exec.setLength(file.length());
+    }
+    
+    /**
+     * Calculate a hash value for the executable file.
+     * 
+     * @param exec The executable.
+     * @throws IOException If file cannot be read.
+     */
+    private void calculateHash(Executable exec) throws IOException {
+        FileInputStream in = new FileInputStream(exec.getPath());
+        byte[] bytes = new byte[1000];
+        ByteArrayOutputStream fileBytes = new ByteArrayOutputStream();
+        int bytesRead = 0;
+        bytesRead = in.read(bytes);
+        while (bytesRead != -1) {
+            fileBytes.write(bytes, 0, bytesRead);
+            bytesRead = in.read(bytes);
+        }
+        MessageDigest digest;
+        String hash = "";
+        try {
+            digest = MessageDigest.getInstance("MD5");
+            digest.update(fileBytes.toByteArray());
+            byte[] hashBytes = digest.digest();
+            StringBuilder builder = new StringBuilder();
+            for (int i = 0; i < hashBytes.length; i++) {
+                builder.append(Byte.toString(hashBytes[i]));
+            }
+            hash = new String(builder.toString());
+            exec.setHash(hash);
+
+        }
+        catch (NoSuchAlgorithmException e) {
+            // Not expected to occur
+            e.printStackTrace();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/EnvironmentXMLWriter.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+
+package com.nokia.helium.environment;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Iterator;
+import java.util.List;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentFactory;
+import org.dom4j.Element;
+import org.dom4j.io.OutputFormat;
+import org.dom4j.io.XMLWriter;
+
+
+/**
+ * Writes the definition of an environment to an output stream.
+ */
+public class EnvironmentXMLWriter {
+    private OutputStream out;
+    private Document doc;
+
+    public EnvironmentXMLWriter(OutputStream out) {
+        this.out = out;
+    }
+
+    /**
+     * Writes an environment definition in XML to output.
+     * @param environment Enviroment definition.
+     * @throws IOException If I/O error occurs.
+     */
+    public void write(Environment environment) throws IOException {
+        doc = DocumentFactory.getInstance().createDocument();
+        doc.addElement("environment");
+        List<Executable> executables = environment.getExecutables();
+        for (Iterator<Executable> iterator = executables.iterator(); iterator.hasNext();) {
+            Executable executable = (Executable) iterator.next();
+            write(executable);
+        }
+        XMLWriter writer = new XMLWriter(out, OutputFormat.createPrettyPrint());
+        writer.write(doc);
+        writer.close();
+    }
+
+    private void write(Executable executable) {
+        Element toolsNode = doc.getRootElement();
+        Element toolNode = toolsNode.addElement("tool");
+        toolNode.addElement("name").setText(executable.getName());
+        toolNode.addElement("version").setText(getItem(executable.getVersion()));
+        toolNode.addElement("path").setText(getItem(executable.getPath()));
+        if (executable.getHash() != null) {
+            toolNode.addElement("hash").setText(getItem(executable.getHash()));
+            toolNode.addElement("length").setText(Long.toString(executable.getLength()));
+            toolNode.addElement("lastModified").setText(Long.toString(executable.getLastModified()));
+        }
+        toolNode.addElement("executed").setText(Boolean.toString(executable.isExecuted()));
+    }
+    
+    private String getItem(String content) 
+    {
+        if (content == null) {
+            return "";
+        }
+        return content;
+    }
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/Executable.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+
+package com.nokia.helium.environment;
+
+import java.io.File;
+
+/**
+ * An executable on the file system.
+ */
+public class Executable {
+
+    private String name;
+    private String version = "unknown";
+    private String path;
+    private String hash;
+    private long lastModified;
+    private long length;
+    private boolean executed;
+
+    public Executable(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getNameNoExt() {
+        String nameNoExt = name;
+        if (nameNoExt.contains(".")) {
+            nameNoExt = nameNoExt.substring(0, nameNoExt.indexOf("."));
+        }
+        return nameNoExt;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public String getHash() {
+        return hash;
+    }
+
+    public void setHash(String hash) {
+        this.hash = hash;
+    }
+
+    public long getLastModified() {
+        return lastModified;
+    }
+
+    public void setLastModified(long lastModified) {
+        this.lastModified = lastModified;
+    }
+
+    public long getLength() {
+        return length;
+    }
+
+    public void setLength(long length) {
+        this.length = length;
+    }
+
+    public boolean isExecuted() {
+        return executed;
+    }
+
+    public void setExecuted(boolean executed) {
+        this.executed = executed;
+    }
+
+    public boolean equals(Object object) {
+        if (object != null && object instanceof Executable) {
+            Executable executable = (Executable) object;
+            if (executable.getPath() != null && path != null) {
+                return executable.getPath().toLowerCase().equals(path.toLowerCase());
+            }
+            return executable.getName().equals(name);
+        }
+        return false;
+    }
+
+    public int hashCode() {
+        return name.hashCode();
+    }
+
+    public String toString() {
+        if (path != null) {
+            return path + File.separator + name;
+        }
+        return name;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/ant/antlib.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,31 @@
+<?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>
+    <typedef name="envdata" classname="com.nokia.helium.environment.ant.types.EnvData"/>
+    <typedef name="executable" classname="com.nokia.helium.environment.ant.types.ExecutableInfo"/>
+    
+    <!-- Task definition -->
+    <taskdef name="environment" classname="com.nokia.helium.environment.ant.taskdefs.EnvironmentTask" />
+    
+    
+</antlib>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/ant/listener/ExecListener.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+
+package com.nokia.helium.environment.ant.listener;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.RuntimeConfigurable;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.UnknownElement;
+
+/**
+ * Checks for uses of the <exec> task and logs them to a CSV file.
+ * 
+ * The ExecListener.file property should be used to define a file to log the output to.
+ */
+public class ExecListener implements BuildListener {
+    private static List<String> execCalls = new ArrayList<String>();
+    
+    private Logger logger = Logger.getLogger(this.getClass());
+    
+    public static List<String> getExecCalls() {
+        return execCalls;
+    }
+
+    @Override
+    public void buildStarted(BuildEvent event) {
+        logger.debug("ExecListener started");
+    }
+
+    @Override
+    public void buildFinished(BuildEvent event) {
+        try {
+            String file = event.getProject().getProperty("ExecListener.file");
+            if (file != null && file.length() > 0) {
+                FileWriter out = new FileWriter(file);
+                for (Iterator<String> iterator = execCalls.iterator(); iterator.hasNext();) {
+                    String execCall = (String) iterator.next();
+                    out.write(execCall + "\n");
+                }
+                out.close();
+            }
+        }
+        catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void messageLogged(BuildEvent event) {
+    }
+
+    @Override
+    public void targetStarted(BuildEvent event) {
+    }
+
+    @Override
+    public void targetFinished(BuildEvent event) {
+    }
+
+    @Override
+    public void taskStarted(BuildEvent event) {
+    }
+
+    /**
+     * Attempt to log the name of the an exec task if one is executed.
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void taskFinished(BuildEvent event) {
+        Task task = event.getTask();
+        String taskName = task.getTaskName();
+        if (taskName != null && taskName.equals("exec")) {
+            logger.debug("Found exec task");
+            if (task instanceof UnknownElement) {
+                RuntimeConfigurable configurable = ((UnknownElement) task).getRuntimeConfigurableWrapper();
+                Hashtable<String, String> map = configurable.getAttributeMap();
+                String executable = (String) map.get("executable");
+                Project project = event.getProject();
+                executable = project.replaceProperties(executable);
+                logger.debug("ExecListener: executable is run: " + executable);
+                execCalls.add(executable);
+            }
+        }
+    }
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/ant/taskdefs/EnvironmentTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+
+package com.nokia.helium.environment.ant.taskdefs;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+
+import com.nokia.helium.environment.Environment;
+import com.nokia.helium.environment.EnvironmentXMLWriter;
+import com.nokia.helium.environment.ant.listener.ExecListener;
+import com.nokia.helium.environment.ant.types.EnvData;
+import com.nokia.helium.environment.ant.types.ExecutableInfo;
+
+/**
+ * Checks the environment and logs executable information. Can validate tools versions if needed.
+ * 
+ * @ant.task name="environment" category="Environment"
+ */
+public class EnvironmentTask extends Task {
+    private File outputFile;
+    private List<EnvData> envDataList = new ArrayList<EnvData>();
+
+    public EnvironmentTask() {
+        setTaskName("environment");
+    }
+
+    /**
+     * Set the output file path.
+     * 
+     * @param outputFile
+     */
+    public void setOutput(File outputFile) {
+        this.outputFile = outputFile;
+    }
+
+    /**
+     * Add envdata types.
+     * 
+     * @ant.required
+     */
+    public void add(EnvData envData) {
+        envDataList.add(envData);
+    }
+
+    @Override
+    public void execute() {
+        Project project = getProject();
+        project.log("Scanning environment...", Project.MSG_DEBUG);
+        OutputStream out = System.out;
+        try {
+            if (outputFile != null) {
+                out = new FileOutputStream(outputFile);
+            }
+            List<ExecutableInfo> executableDefs = new ArrayList<ExecutableInfo>();
+            for (Iterator<EnvData> iterator = envDataList.iterator(); iterator.hasNext();) {
+                EnvData envData = (EnvData) iterator.next();
+                envData.getExecutableDefs(executableDefs);
+            }
+
+            Environment environment = new Environment(project);
+            environment.setExecutableDefs(executableDefs);
+            environment.scan(ExecListener.getExecCalls());
+            EnvironmentXMLWriter writer = new EnvironmentXMLWriter(out);
+            writer.write(environment);
+        }
+
+        catch (FileNotFoundException e) {
+            e.printStackTrace();
+            throw new BuildException("Could not find output file.");
+        }
+        catch (IOException e) {
+            e.printStackTrace();
+            throw new BuildException("Error reading version.");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/ant/types/EnvData.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+
+package com.nokia.helium.environment.ant.types;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tools.ant.types.DataType;
+import org.apache.tools.ant.types.DirSet;
+
+/**
+ * Environmental data configuration for the <environment> task.
+ * 
+ * @ant.task name="envdata" category="Environment"
+ */
+public class EnvData extends DataType {
+
+    private List<ExecutableInfo> executables = new ArrayList<ExecutableInfo>();
+    private List<DirSet> dirsets = new ArrayList<DirSet>();
+
+    public void add(ExecutableInfo executable) {
+        if (isReference()) {
+            throw noChildrenAllowed();
+        }
+        executables.add(executable);
+    }
+
+    public void add(DirSet dirset) {
+        if (isReference()) {
+            throw noChildrenAllowed();
+        }
+        dirsets.add(dirset);
+    }
+
+    public void getExecutableDefs(List<ExecutableInfo> executableDefs) throws IOException {
+        if (isReference()) {
+            EnvData envDataSource = (EnvData) getCheckedRef();
+            envDataSource.getExecutableDefs(executableDefs);
+        }
+        else {
+            for (Iterator<ExecutableInfo> iterator = this.executables.iterator(); iterator.hasNext();) {
+                ExecutableInfo executableDef = (ExecutableInfo) iterator.next();
+                if (!executableDefs.contains(executableDef)) {
+                    executableDefs.add(executableDef);
+                }
+
+            }
+        }
+    }
+    
+    @SuppressWarnings("unchecked")
+    public void getDirectories(List<File> directories) throws IOException {
+        if (isReference()) {
+            EnvData envDataSource = (EnvData) getCheckedRef();
+            envDataSource.getDirectories(directories);
+        }
+        else {
+            for (Iterator<DirSet> iterator = this.dirsets.iterator(); iterator.hasNext();) {
+                DirSet dirset = (DirSet) iterator.next();
+                Iterator dirsetIterator = dirset.iterator();
+                while (dirsetIterator.hasNext()) {
+                    File file = (File) dirsetIterator.next();
+                    directories.add(file);
+                }
+            }
+        }
+    }
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/ant/types/ExecutableInfo.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+
+package com.nokia.helium.environment.ant.types;
+
+import org.apache.tools.ant.types.DataType;
+
+/**
+ * Provides information about an executable.
+ * 
+ * @ant.task name="executableinfo" category="Environment"
+ */
+public class ExecutableInfo extends DataType {
+    private String name;
+    private String dir;
+    private String versionArgs;
+    private String versionRegex;
+    private String output;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDir() {
+        return dir;
+    }
+
+    public void setDir(String dir) {
+        this.dir = dir;
+    }
+
+    public String getVersionArgs() {
+        return versionArgs;
+    }
+
+    public void setVersionArgs(String versionArgs) {
+        this.versionArgs = versionArgs;
+    }
+
+    public String getVersionRegex() {
+        return versionRegex;
+    }
+
+    public void setVersionRegex(String versionRegex) {
+        this.versionRegex = versionRegex;
+    }
+
+    public String getOutput() {
+        return output;
+    }
+
+    public void setOutput(String output) {
+        this.output = output;
+    }
+
+    public boolean equals(Object obj) {
+        if (obj == null || !(obj instanceof ExecutableInfo)) {
+            return false;
+        }
+        ExecutableInfo def = (ExecutableInfo) obj;
+        if (this.name.equals(def.getName())) {
+            if ((this.dir == null && def.getDir() == null)
+                    || (this.dir != null && def.getDir() != null && this.dir.toLowerCase().equals(def.getDir().toLowerCase()))) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    public int hashCode() {
+        return name.hashCode();
+    }
+
+    public String toString() {
+        return name + " " + versionArgs;
+    }
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/tests/antunit/listener/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,56 @@
+<?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-exec-listener-build" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description></description>
+    
+    <property environment="env"/>
+    
+    <typedef resource="com/nokia/helium/environment/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    
+    <property name="ExecListener.file" value="executables.csv" />
+
+    
+    <target name="test-exec-calls">
+        <exec executable="perl">
+            <arg value="-v"/>
+        </exec>
+        <exec executable="python">
+            <arg value="--version"/>
+        </exec>
+        <exec executable="python">
+            <arg value="--version"/>
+        </exec>
+        <hlm:environment output="tools_listener.xml">
+            <hlm:envdata>
+                <hlm:executable name="java" versionArgs="-version" versionRegex="java version &quot;(\S+)\&quot;"/>
+                <hlm:executable name="ant" versionArgs="-version" versionRegex="Apache Ant version (\S+)"/>
+                <hlm:executable name="perl" versionArgs="-v" versionRegex="This is perl, v(\S+)"/>
+                <hlm:executable name="python" versionArgs="--version" versionRegex="Python (\S+)"/>
+            </hlm:envdata>
+        </hlm:environment>
+    </target>
+    
+</project>
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/tests/antunit/test_environment.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,51 @@
+<?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-environment" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib environment unittests.</description>
+
+    <typedef resource="com/nokia/helium/environment/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    
+
+    <target name="test-environment">
+        <hlm:environment output="tools.xml">
+            <hlm:envdata>
+                <hlm:executable name="java" versionArgs="-version" versionRegex="java version &quot;(\S+)\&quot;"/>
+                <hlm:executable name="ant" versionArgs="-badarg" versionRegex="Apache Ant version (\S+)"/>
+            </hlm:envdata>
+        </hlm:environment>
+        <au:assertFileExists file="tools.xml"/>
+        <loadfile srcfile="tools.xml" property="tools.xml.text"/>
+        <au:assertMatches string="${tools.xml.text}" pattern="1\.6" multiline="true" casesensitive="false"/>
+        <au:assertMatches string="${tools.xml.text}" pattern="bin[\\/]java" multiline="true" casesensitive="false"/>
+        <au:assertMatches string="${tools.xml.text}" pattern="length&gt;\d+&lt;/length" multiline="true" casesensitive="false"/>
+        <au:assertMatches string="${tools.xml.text}" pattern="bin[\\/]ant" multiline="true" casesensitive="false"/>
+        <delete file="tools.xml"/>
+    </target>
+
+    
+</project>
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/tests/antunit/test_listener.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_signaltask.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-exec-listener" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib logger unittests.</description>
+    
+    <property environment="env" />
+
+    <dirname file="${ant.file.test-exec-listener}" property="test-exec-listener.dir"/>
+      
+    <taskdef resource="net/sf/antcontrib/antlib.xml"/>
+    
+    <target name="setUp">    
+        <tempfile property="temp.dir" suffix=".dir" />
+        <mkdir dir="${temp.dir}" />
+    </target>
+    
+    
+    <target name="tearDown">
+        <delete dir="${temp.dir}" />
+    </target>
+    
+    
+    <macrodef name="runScenario">
+        <attribute name="scenario" />
+        <attribute name="target" />
+        <sequential>
+            <trycatch property="scenario.unittest.error">
+                <try>
+                    <exec osfamily="windows" executable="cmd" dir="${test-exec-listener.dir}/listener" failonerror="true" errorproperty="scenario.unittest.error.log">
+                        <env key="ANT_ARGS" value="${env.ANT_ARGS} -listener com.nokia.helium.environment.ant.listener.ExecListener" />
+                        <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="${test-exec-listener.dir}/listener" failonerror="true" errorproperty="scenario.unittest.error.log">
+                        <env key="ANT_ARGS" value="${env.ANT_ARGS} -listener com.nokia.helium.environment.ant.listener.ExecListener" />
+                        <arg line="@{target}" />
+                        <arg value="-Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor" />
+                        <arg value="-Dtemp.dir=${temp.dir}" />
+                    </exec>
+                </try>
+            </trycatch>
+            <au:assertTrue message="${scenario.unittest.error.log}">
+                <not>
+                    <isset property="scenario.unittest.error" />
+                </not>
+            </au:assertTrue>
+        </sequential>
+    </macrodef>
+    
+    
+    <target name="test-exec-listener">
+        <runScenario scenario="logger" target="test-exec-calls" />
+        <au:assertFileExists file="listener/executables.csv"/>
+        <loadfile srcfile="listener/executables.csv" property="executables.csv.text"/>
+        <au:assertMatches string="${executables.csv.text}" pattern="perl" multiline="true"/>
+        <au:assertMatches string="${executables.csv.text}" pattern="python" multiline="true"/>
+        
+        <delete file="listener/executables.csv"/>
+        <delete file="listener/tools_listener.xml"/>
+    </target>
+
+</project>
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/tests/bld.sh	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,23 @@
+#!/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 -Dant.executor.class="com.nokia.helium.core.ant.HeliumExecutor" $*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/tests/build.bat	Fri Aug 13 14:59:05 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 -d -Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor %*
+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/environment/tests/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,33 @@
+<?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-environment" xmlns:au="antlib:org.apache.ant.antunit">
+    <description>Helium Antlib environment tests.</description>
+    <import file="${builder.dir}/java/test-macros.ant.xml"/>
+  
+    <dirname property="environment.unitest.dir" file="${ant.file.helium-antlib-environment-unittest}" />
+    <property environment="env" />
+    <import file="../../../../nokia/companyproperties.ant.xml" optional="true"/>
+    <import file="../../../../../extensions/nokia/external/helium-nokia-antlib/companyproperties.ant.xml" optional="true"/>
+    <!--<property name="metadata.output.dir" location="${diamonds.unitest.dir}/output" />
+    <property name="metadata.template.dir" location="${diamonds.unitest.dir}/../src/templates" />-->
+</project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/imaker/imaker.rst	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/imaker.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -5,7 +5,8 @@
 Configuring ROM creation
 ========================
 
-Called by ``build-roms`` target.
+Called by :hlm-t:`build-roms` target. 
+
 
 .. index::
    single: imakerconfigurationset type
@@ -17,21 +18,21 @@
 
 The imakerconfigurationset supports imakerconfiguration nested elements.
 
-'''imakerconfiguration''' element:
+**imakerconfiguration** element:
 
-.. csv-table:: Ant properties to modify
+.. csv-table:: Attributes to modify
    :header: "Attribute", "Description", "Values"
 
-   "``regionalVariation``", "Enable regional variation switching. - Deprecated (always false)", "false"
+   ":hlm-p:`regionalVariation`", "Enable regional variation switching. - Deprecated (always false)", "false"
 
 The imakerconfiguration supports three sub-types:
 
-.. csv-table:: Ant properties to modify
+.. csv-table:: Attributes to modify
    :header: "Sub-type", "Description"
 
-   "``makefileset``", "Defines the list of iMaker configuration to run image creation on."
-   "``targetset``", "List of regular expression used to match which target need to be executed."
-   "``variableset``", "List of variable to set when executing iMaker."
+   ":hlm-p:`makefileset`", "Defines the list of iMaker configuration to run image creation on."
+   ":hlm-p:`targetset`", "List of regular expression used to match which target need to be executed."
+   ":hlm-p:`variableset`", "List of variable to set when executing iMaker."
 
 
 Example of configuration:
@@ -94,7 +95,7 @@
 How to configure the target
 ---------------------------
 
-The target can be configured by defining an hlm:imakerconfigurationset element with the '''imaker.rom.config''' reference.
+The target can be configured by defining an hlm:imakerconfigurationset element with the **imaker.rom.config** reference.
 
 .. code-block:: xml
     
@@ -102,10 +103,66 @@
     ...
     </hlm:imakerconfigurationset>
 
-The other configurable element is the engine. The '''imaker.engine''' property defines the reference
+The other configurable element is the engine. The :hlm-p:`imaker.engine` property defines the reference
 to the engine configuration to use for building the roms. Helium defines two engines by default:
-* imaker.engine.default: multithreaded engine (hlm:defaultEngine type)
-* imaker.engine.ec: ECA engine - cluster base execution (hlm:emakeEngine type)
+
+ - imaker.engine.default: multithreaded engine (hlm:defaultEngine type)
+ - imaker.engine.ec: ECA engine - cluster base execution (hlm:emakeEngine type)
   
-If the property is not defined Helium will guess the best engine to used based on the build.system property.
- 
\ No newline at end of file
+If the property is not defined Helium will guess the best engine to used based on the :hlm-p:`build.system` property.
+ 
+
+
+The imakerconfiguration
+-----------------------
+
+The imakerconfiguration enables the build manager to configure his iMaker builds based on introspection. 
+The makefileset element will configure the filtering of the "imaker help-config" command. 
+Then for each of the configuration found the targetset elements will be used to filter the output from 
+the "imaker -f configuration.mk help-target-*-list" command. Finally a set of command will be generated. 
+
+Each command will then be configure using the set of variables defined by the variableset elements. 
+Only the WORKDIR variable is under the task control to ensure call safety during the parallelization. 
+The usage of the variablegroup will allow you to duplicate the common set of commands and apply 
+additional variables. Example:
+
+ 
+ .. code-block:: xml
+ 
+ 
+     <imakerconfiguration regionalVariation="true">
+         <makefileset>
+             <include name="**/product/*ui.mk"/>
+         </makefileset>
+         <targetset>
+             <include name="^core$" />
+             <include name="langpack_\d+" />
+             <include name="^custvariant_.*$" />
+             <include name="^udaerase$" />
+         </targetset>
+         <variableset>
+             <variable name="USE_FOTI" value="0"/>
+             <variable name="USE_FOTA" value="1"/>
+         </variableset>
+         <variablegroup>
+             <variable name="TYPE" value="rnd"/>
+         </variablegroup>
+         <variablegroup>
+             <variable name="TYPE" value="subcon"/>
+         </variablegroup>
+     </imakerconfiguration>
+ 
+
+
+This configuration might produce the following calls :
+
+ .. code-block:: xml
+    
+    imaker -f /epoc32/rom/config/platform/product/image_conf_product_ui.mk TYPE=rnd USE_FOTI=0 USE_FOTA=1 core
+    imaker -f /epoc32/rom/config/platform/product/image_conf_product_ui.mk TYPE=subcon USE_FOTI=0 USE_FOTA=1 core
+    imaker -f /epoc32/rom/config/platform/product/image_conf_product_ui.mk TYPE=rnd USE_FOTI=0 USE_FOTA=1 langpack_01
+    imaker -f /epoc32/rom/config/platform/product/image_conf_product_ui.mk TYPE=subcon USE_FOTI=0 USE_FOTA=1 langpack_01
+
+
+ 
+   
\ No newline at end of file
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/IMaker.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/IMaker.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,38 +1,34 @@
 /*
-* 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:  
-*
-*/
+ * 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.imaker;
 
 import java.io.File;
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.log4j.Logger;
 
 import com.nokia.helium.core.plexus.CommandBase;
 import com.nokia.helium.core.plexus.StreamRecorder;
 
-import org.apache.log4j.Logger;
-
 /**
- * This class implements a wrapper around iMaker.
- * It helps to introspect:
- *   <li> variables
- *   <li> targets
- *   <li> configurations
- *
+ * This class implements a wrapper around iMaker. It helps to introspect: <li>variables <li>targets
+ * <li>configurations
+ * 
  */
 public class IMaker extends CommandBase<IMakerException> {
     private static final String TEMP_ROMBUILD_DIR = "epoc32/rombuild/temp";
@@ -41,15 +37,17 @@
 
     /**
      * Create an iMaker wrapper class with a specific epocroot.
+     * 
      * @param epocroot
      */
     public IMaker(File epocroot) {
         this.epocroot = epocroot;
-        
+
     }
-    
+
     /**
      * Creates a temp working dir for the rom image creation.
+     * 
      * @return
      * @throws IOException
      */
@@ -61,13 +59,15 @@
             tempDir.delete();
             tempDir.mkdirs();
             return tempDir;
-        } catch (IOException e) {
+        }
+        catch (IOException e) {
             throw new IMakerException(e.getMessage(), e);
         }
     }
-    
+
     /**
      * Epocroot location.
+     * 
      * @return the epocroot location
      */
     public File getEpocroot() {
@@ -76,6 +76,7 @@
 
     /**
      * Get the iMaker version.
+     * 
      * @return the current iMaker version.
      * @throws IMakerException is thrown in case of an iMaker execution error.
      */
@@ -90,6 +91,7 @@
 
     /**
      * Get the value of a particular variable from iMaker configuration.
+     * 
      * @param name the variable name
      * @return the value or null if the variable does not exist.
      * @throws IMakerException
@@ -106,6 +108,7 @@
     /**
      * Get the value of a particular variable from iMaker configuration for a particular
      * configuration.
+     * 
      * @param name the variable name
      * @return the value or null if the variable does not exist.
      * @throws IMakerException
@@ -123,6 +126,7 @@
 
     /**
      * Get the list of available iMaker configurations.
+     * 
      * @return a list of configurations
      * @throws IMakerException
      */
@@ -134,9 +138,10 @@
         execute(args, consumer);
         return consumer.getConfigurations();
     }
-    
+
     /**
-     * Get the a list of target supported by a specific configuration.  
+     * Get the a list of target supported by a specific configuration.
+     * 
      * @param configuration the configuration to use
      * @return the list of targets.
      * @throws IMakerException
@@ -154,6 +159,7 @@
 
     /**
      * Get the target list for the configuration.
+     * 
      * @param configuration a File object representing the configuration location.
      * @return a list of targets.
      * @throws IMakerException
@@ -161,7 +167,7 @@
     public List<String> getTargets(File configuration) throws IMakerException {
         return getTargets(configuration.getAbsolutePath());
     }
-    
+
     /**
      * {@inheritDoc}
      */
@@ -182,9 +188,8 @@
      * {@inheritDoc}
      */
     @Override
-    protected void throwException(String message, Throwable t)
-            throws IMakerException {
-        throw new IMakerException(message, t);        
+    protected void throwException(String message, Throwable t) throws IMakerException {
+        throw new IMakerException(message, t);
     }
-    
+
 }
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/PrintVarSteamConsumer.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/PrintVarSteamConsumer.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,6 +18,7 @@
 
 import org.codehaus.plexus.util.cli.StreamConsumer;
 
+
 /**
  * Parsing iMaker printvar calls.
  * Output from iMaker should match:
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/engines/EmakeEngine.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/engines/EmakeEngine.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,25 +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:  
-*
-*/
+ * 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.imaker.ant.engines;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.FileNotFoundException;
 import java.io.OutputStreamWriter;
 import java.io.StringWriter;
 import java.net.MalformedURLException;
@@ -47,14 +47,16 @@
 import freemarker.template.TemplateException;
 
 /**
- *
+ * 
  * Simplest possible definition of the type, e.g:
+ * 
  * <pre>
  * &lt;emakeEngine id="imaker.ec" /&gt;
  * </pre>
  * 
  * Emake engine with some custom configuration.
- * <pre> 
+ * 
+ * <pre>
  * &lt;emakeEngine id="imaker.ec" &gt;
  *     &lt;arg value="--emake-annofile=imaker.anno.xml" /&gt;
  * &lt;/emakeEngine&gt;
@@ -65,17 +67,18 @@
 public class EmakeEngine extends DataType implements Engine {
     private Logger log = Logger.getLogger(getClass());
     private IMakerTask task;
-    private List<Arg> customArgs = new ArrayList<Arg>(); 
+    private List<Arg> customArgs = new ArrayList<Arg>();
     private File template;
-    
+
     /**
-     * Holder for emake custom args. 
+     * Holder for emake custom args.
      */
     public class Arg {
         private String value;
 
         /**
          * Get the value of the argument.
+         * 
          * @return the argument
          */
         public String getValue() {
@@ -83,8 +86,8 @@
         }
 
         /**
-         * Define the additional command line parameter you want to add to emake
-         * invocation.
+         * Define the additional command line parameter you want to add to emake invocation.
+         * 
          * @param value the additional command line parameter
          * @ant.required
          */
@@ -101,10 +104,11 @@
         try {
             // Writing the makefile.
             makefile = writeMakefile(cmdSet);
-            
+
             // Running Emake
             runEmake(makefile);
-        } finally {
+        }
+        finally {
             if (makefile != null) {
                 makefile.delete();
             }
@@ -113,24 +117,29 @@
 
     /**
      * Returns the jar file name containing this class
+     * 
      * @return a File object or null if not found.
      * @throws IMakerException
      */
     protected File getJarFile() throws IMakerException {
-        URL url = this.getClass().getClassLoader().getResource(this.getClass().getName().replace('.', '/') + ".class");
+        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) {
+            }
+            catch (MalformedURLException e) {
                 throw new IMakerException("Error determining the jar file where "
-                        + this.getClass().getName() + " is located.", e);
+                    + this.getClass().getName() + " is located.", e);
             }
         }
         return null;
     }
+
     /**
      * Run emake using defined makefile.
+     * 
      * @param makefile the makefile to build
      * @throws IMakerException
      */
@@ -139,7 +148,8 @@
         if (task.getOutput() != null) {
             try {
                 output = new FileStreamConsumer(task.getOutput());
-            } catch (FileNotFoundException e) {
+            }
+            catch (FileNotFoundException e) {
                 throw new IMakerException("Error creating the stream recorder: " + e.getMessage(), e);
             }
         }
@@ -164,20 +174,23 @@
                 emake.addErrorLineHandler(output);
             }
             emake.execute(args.toArray(new String[args.size()]));
-        } catch (IMakerException e) {
+        }
+        catch (IMakerException e) {
             throw new IMakerException("Error executing emake: " + e.getMessage(), e);
-        } finally {
+        }
+        finally {
             if (output != null) {
                 output.close();
             }
         }
     }
-    
+
     /**
-     * Create the Makefile based on the cmdSet build sequence. 
+     * Create the Makefile based on the cmdSet build sequence.
+     * 
      * @param cmdSet
      * @return
-     * @throws IMakerException 
+     * @throws IMakerException
      * @throws IOException
      */
     private File writeMakefile(List<List<Command>> cmdSet) throws IMakerException {
@@ -186,12 +199,14 @@
             Template template = null;
             if (this.template != null) {
                 if (!this.template.exists()) {
-                    throw new IMakerException("Could not find template file: " + this.template.getAbsolutePath());
+                    throw new IMakerException("Could not find template file: "
+                        + this.template.getAbsolutePath());
                 }
                 task.log("Loading template: " + this.template.getAbsolutePath());
                 cfg.setTemplateLoader(new FileTemplateLoader(this.template.getParentFile()));
                 template = cfg.getTemplate(this.template.getName());
-            } else {
+            }
+            else {
                 cfg.setTemplateLoader(new ClassTemplateLoader(this.getClass(), ""));
                 template = cfg.getTemplate("build_imaker_roms_signing.mk.ftl");
             }
@@ -204,25 +219,31 @@
             data.put("java_home", System.getProperty("java.home"));
             File jar = getJarFile();
             if (jar != null) {
-                task.log("Using " + jar + " as the utility container, make sure the file is available under an emake root.");
+                task.log("Using "
+                    + jar
+                    + " as the utility container, make sure the file is available under an emake root.");
                 data.put("java_utils_classpath", jar.getAbsolutePath());
             }
             template.process(data, out);
             log.debug(out.getBuffer().toString());
-        
+
             OutputStreamWriter output = new OutputStreamWriter(new FileOutputStream(makefile));
             output.append(out.getBuffer().toString());
             output.close();
             return makefile;
-        } catch (IOException e) {
-           throw new IMakerException("Error generating the makefile: " + e.getMessage(), e);
-        } catch (TemplateException e) {
-            throw new IMakerException("Error while rendering the makefile template: " + e.getMessage(), e);
+        }
+        catch (IOException e) {
+            throw new IMakerException("Error generating the makefile: " + e.getMessage(), e);
+        }
+        catch (TemplateException e) {
+            throw new IMakerException("Error while rendering the makefile template: "
+                + e.getMessage(), e);
         }
     }
-    
+
     /**
      * Add custom parameters for the emake invocation.
+     * 
      * @return a new Arg object.
      */
     public Arg createArg() {
@@ -230,8 +251,7 @@
         customArgs.add(arg);
         return arg;
     }
-    
-    
+
     /**
      * {@inheritDoc}
      */
@@ -239,9 +259,10 @@
     public void setTask(IMakerTask task) {
         this.task = task;
     }
-    
+
     /**
      * Defines an alternate template to use to generate the build sequence for emake.
+     * 
      * @ant.not-required
      */
     public void setTemplate(File template) {
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/engines/JavaEngine.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/engines/JavaEngine.java	Fri Aug 13 14:59:05 2010 +0300
@@ -29,8 +29,8 @@
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.DataType;
 
 import com.nokia.helium.core.plexus.StreamRecorder;
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/types/Configuration.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/types/Configuration.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,6 +16,14 @@
 */
  
 package com.nokia.helium.imaker.ant.types;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.Vector;
+import java.util.regex.Pattern;
+
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.DirectoryScanner;
 import org.apache.tools.ant.Project;
@@ -27,14 +35,6 @@
 import com.nokia.helium.imaker.ant.Command;
 import com.nokia.helium.imaker.ant.IMakerCommandSet;
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.Vector;
-import java.util.regex.Pattern;
-
 /**
  * The imakerconfiguration enables the build manager to configure his iMaker
  * builds based on introspection.
@@ -84,6 +84,8 @@
  * imaker -f /epoc32/rom/config/platform/product/image_conf_product_ui.mk TYPE=subcon USE_FOTI=0 USE_FOTA=1 langpack_01
  * </pre>
  * 
+ * Remember to update helium/sf/java/imaker/imaker.rst if you change this
+ *
  * @ant.type name="imakerconfiguration" category="imaker"
  */
 public class Configuration extends DataType implements IMakerCommandSet {
@@ -324,7 +326,6 @@
         if (makefiles.size() > 0) {
             Matcher matcher = getMakefileMatcher(imaker);
             for (String configuration : configurations) {
-                System.out.println("configuration: " + configuration);
                 if (matcher.match(configuration)) {
                     result.add(configuration);
                 }
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/types/ConfigurationSet.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/types/ConfigurationSet.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,16 +17,16 @@
  
 package com.nokia.helium.imaker.ant.types;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
 import org.apache.tools.ant.types.DataType;
 
 import com.nokia.helium.imaker.IMaker;
 import com.nokia.helium.imaker.ant.Command;
 import com.nokia.helium.imaker.ant.IMakerCommandSet;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Vector;
-
 /**
  * Set of iMaker configuration.
  *
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/types/Variable.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/types/Variable.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,8 +17,8 @@
  
 package com.nokia.helium.imaker.ant.types;
 
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.DataType;
-import org.apache.tools.ant.BuildException;
 
 /**
  * Configure a variable for iMaker.
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/types/VariableSet.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/types/VariableSet.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,12 +16,12 @@
 */
  
 package com.nokia.helium.imaker.ant.types;
-import org.apache.tools.ant.types.DataType;
-
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.Vector;
 
+import org.apache.tools.ant.types.DataType;
+
 /**
  * This type is a container for variable configuration.
  * 
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/utils/ParallelExecutor.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/utils/ParallelExecutor.java	Fri Aug 13 14:59:05 2010 +0300
@@ -20,14 +20,14 @@
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.StringTokenizer;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
-import java.util.Date;
-import java.text.SimpleDateFormat;
 
 /**
  * Simple application which will execute each line from a text file
@@ -37,6 +37,7 @@
  * The implementation must not rely on any external dependencies except JVM and owning jar.
  *
  */
+@SuppressWarnings("PMD.SystemPrintln")
 public final class ParallelExecutor {
     
     /**
--- a/buildframework/helium/sf/java/imaker/tests/src/com/nokia/helium/imaker/tests/TestHelpConfigStreamConsumer.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/tests/src/com/nokia/helium/imaker/tests/TestHelpConfigStreamConsumer.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,14 +16,14 @@
 */
 package com.nokia.helium.imaker.tests;
 
+import static org.junit.Assert.assertArrayEquals;
+
 import java.io.File;
 
-import org.junit.*;
+import org.junit.Test;
 
 import com.nokia.helium.imaker.HelpConfigStreamConsumer;
 
-import static org.junit.Assert.*;
-
 /**
  * Test the HelpTargetStreamConsumer.
  *
--- a/buildframework/helium/sf/java/imaker/tests/src/com/nokia/helium/imaker/tests/TestIMaker.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/tests/src/com/nokia/helium/imaker/tests/TestIMaker.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,7 +16,9 @@
 */
 package com.nokia.helium.imaker.tests;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
 
 import java.io.File;
 import java.util.List;
--- a/buildframework/helium/sf/java/imaker/tests/src/com/nokia/helium/imaker/tests/TestParallelExecutor.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/tests/src/com/nokia/helium/imaker/tests/TestParallelExecutor.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,7 +17,9 @@
 package com.nokia.helium.imaker.tests;
 
 import java.io.File;
+
 import org.junit.Test;
+
 import com.nokia.helium.imaker.utils.ParallelExecutor;
 
 /**
--- a/buildframework/helium/sf/java/imaker/tests/src/com/nokia/helium/imaker/tests/TestPrintVarStreamConsumer.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/tests/src/com/nokia/helium/imaker/tests/TestPrintVarStreamConsumer.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,12 +16,12 @@
 */
 package com.nokia.helium.imaker.tests;
 
-import org.junit.*;
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
 
 import com.nokia.helium.imaker.PrintVarSteamConsumer;
 
-import static org.junit.Assert.*;
-
 public class TestPrintVarStreamConsumer {
 
     @Test
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/AssertNode.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/AssertNode.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,40 +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: 
-*
-*/
- 
+ * 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.listener;
 
 //import com.nokia.ant.taskdefs.HlmAssertMessage;
 import com.nokia.helium.internaldata.ant.taskdefs.HlmAssertMessageTask;
+
 /**
  * Object to set end time for a task.
- *
+ * 
  */
 public class AssertNode extends DataNode {
 
     private String name;
-    
-    
+
     // location
     private String filename;
     private String message;
     private int line = -1;
     private String assertName;
-    
-     public AssertNode(DataNode parent, HlmAssertMessageTask task) {
+
+    public AssertNode(DataNode parent, HlmAssertMessageTask task) {
         super(parent, task);
         name = task.getTaskName();
         this.setFilename(task.getLocation().getFileName());
@@ -42,51 +42,64 @@
         message = task.getMessage();
         assertName = task.getAssertName();
     }
+
     /**
      * Return the assert message
+     * 
      * @return
      */
-     public String getMessage() {
+    public String getMessage() {
         return message;
     }
+
     /**
      * Return the assert task name.
+     * 
      * @return
      */
     public String getName() {
         return name;
-    } 
+    }
+
     /**
      * Return the assert name.
+     * 
      * @return
      */
-    public String getAssertName() 
-    {
+    public String getAssertName() {
         return assertName;
     }
+
     /**
      * Return the path to file name.
+     * 
      * @return
      */
     public String getFilename() {
         return filename;
     }
+
     /**
      * Sets the path to file name.
+     * 
      * @param filename
      */
     public void setFilename(String filename) {
         this.filename = filename;
     }
+
     /**
      * Return the line number.
+     * 
      * @return
      */
     public int getLine() {
         return line;
     }
+
     /**
      * Sets the line number.
+     * 
      * @param line
      */
     public void setLine(int line) {
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/BuildNode.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/BuildNode.java	Fri Aug 13 14:59:05 2010 +0300
@@ -33,8 +33,9 @@
     }
 
     public String getName() {
-        if (name != null)
+        if (name != null) {
             return name;
+        }
         return "build";
     } 
 
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/DataNode.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/DataNode.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,9 +16,9 @@
 */
 
 package com.nokia.helium.internaldata.ant.listener;
+import java.util.Date;
 import java.util.Iterator;
 import java.util.Vector;
-import java.util.Date;
 
 /**
  * Data node object to iterate, keep timing, name, maintain parallel tasks for the node. 
@@ -108,10 +108,11 @@
      * Make is reliable: if end time doesn't exists let's use the start time.
      */
     public Date getEndTime() {
-        if (endTime != null)
+        if (endTime != null) { 
             return endTime;
-        else
+        } else {
             return this.getStartTime();
+        }
     }
 
     public void setEndTime(Date endTime) {
@@ -144,13 +145,15 @@
      * @return
      */
     public DataNode find(Object reference) {
-        if (this.reference == reference)
-            return this;        
+        if (this.reference == reference) {
+            return this;
+        }
         for (Iterator<DataNode> i = children.iterator() ; i.hasNext() ; ) {
             DataNode node = i.next();
             DataNode result = node.find(reference);
-            if (result != null)
+            if (result != null) {
                 return result;
+            }
         }
         return null;
     }
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/EmailDataSender.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/EmailDataSender.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,19 +17,30 @@
 
 package com.nokia.helium.internaldata.ant.listener;
 
-import java.util.Properties;
-import java.util.Hashtable;
-import java.util.zip.GZIPOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import javax.mail.*;
-import javax.mail.internet.*;
-import javax.naming.*;
-import javax.naming.directory.*;
+import java.util.Hashtable;
+import java.util.Properties;
+import java.util.zip.GZIPOutputStream;
 
 import javax.activation.DataHandler;
+import javax.mail.BodyPart;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
 import javax.mail.util.ByteArrayDataSource;
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
 
 import org.apache.log4j.Logger;
 
@@ -68,8 +79,9 @@
      * Get the smtp server address.
      */
     public String getSMTPServer() {
-        if (smtpServer != null)
+        if (smtpServer != null) {
             return smtpServer;
+        }
         return SMTP_SERVER;
     }
     
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/EndLessStack.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/EndLessStack.java	Fri Aug 13 14:59:05 2010 +0300
@@ -51,8 +51,9 @@
      */
     public E pop() {
         E element = super.pop();
-        if (element != null)
+        if (element != null) {
             return element;
+        }
         return defaultElement;
     }
     
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/Listener.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/Listener.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,18 +17,20 @@
  
 package com.nokia.helium.internaldata.ant.listener;
 
-import java.util.Hashtable;
+import java.lang.management.ManagementFactory;
+import java.lang.management.MemoryMXBean;
+import java.lang.management.MemoryUsage;
 import java.util.Date;
-import com.nokia.helium.internaldata.ant.taskdefs.HlmAssertMessageTask;
+import java.util.Hashtable;
+
+import org.apache.log4j.Logger;
 import org.apache.tools.ant.BuildEvent;
 import org.apache.tools.ant.BuildListener;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.SubBuildListener;
 import org.dom4j.Document;
-import org.apache.log4j.Logger;
-import java.lang.management.ManagementFactory;
-import java.lang.management.MemoryMXBean;
-import java.lang.management.MemoryUsage;
+
+import com.nokia.helium.internaldata.ant.taskdefs.HlmAssertMessageTask;
 
 /**
  * Listener class for the Logger.
@@ -46,7 +48,10 @@
     private EndLessStack<DataNode> buildEventStack = new EndLessStack<DataNode>();
     
     // default list of properties to extract.
-    private String[] propList = {"os.name", "user.name", "build.name", "build.number", "build.id", "build.family", "build.system", "env.NUMBER_OF_PROCESSORS", "helium.version", "env.SYMSEE_VERSION", "diamonds.build.id"};
+    private String[] propList = {"os.name", "user.name", "build.name",
+                                 "build.number", "build.id", "build.family", "build.system",
+                                 "env.NUMBER_OF_PROCESSORS", "helium.version",
+                                 "env.SYMSEE_VERSION", "diamonds.build.id"};
 
     // Memory bean 
     private MemoryMXBean mbean;
@@ -62,8 +67,6 @@
     public void sendData(String smtpServer, BuildEvent event) {
         if (buildNode != null) {
             Document database = null;
-            //TreeDumper dumper = new TreeDumper(buildNode);
-            //dumper.dump();
             log.debug("Creating the XML log.");
             XMLRenderer writer = new XMLRenderer(buildNode, database, this.extractProperties(), event);
             EmailDataSender sender = new EmailDataSender();
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/TreeDumper.java	Wed Jun 16 16:51:40 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.internaldata.ant.listener;
-
-import java.util.Iterator;
-/**
- * Helper class to fix indentation of the xml.
- *
- */
-public class TreeDumper {
-    
-    private DataNode rootNode;
-    
-    public TreeDumper(DataNode root) {
-        this.rootNode = root;
-    }
-    
-    public void dump() {
-        dump(rootNode, "");
-    }
-
-    public void dump(DataNode root, String indent) {
-        System.out.println(indent + " + " + root);
-        for (Iterator<DataNode> i = root.iterator(); i.hasNext() ;) {
-            DataNode node = i.next();
-            dump(node, indent + "   ");
-        }
-    }
-
-}
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/XMLRenderer.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/XMLRenderer.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,21 +17,20 @@
 
 package com.nokia.helium.internaldata.ant.listener;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Enumeration;
+import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import java.io.ByteArrayOutputStream;
-import java.io.UnsupportedEncodingException;
-import java.io.IOException;
 
+import org.apache.tools.ant.BuildEvent;
 import org.dom4j.Document;
 import org.dom4j.DocumentHelper;
 import org.dom4j.Element;
+import org.dom4j.io.OutputFormat;
 import org.dom4j.io.XMLWriter;
-import org.dom4j.io.OutputFormat;
-
-import org.apache.tools.ant.BuildEvent;
 /**
  * This xml render object does the following - 
  * Generates target only for TargetNode type of node
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/taskdefs/HlmAssertMessageTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/taskdefs/HlmAssertMessageTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,8 +17,9 @@
  
 package com.nokia.helium.internaldata.ant.taskdefs;
 
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
+
 import com.nokia.helium.internaldata.ant.listener.Listener;
 
 
@@ -42,10 +43,12 @@
      */
     public void execute() {
         
-        if (assertName == null)
+        if (assertName == null) {
             throw new BuildException("'assertName' attribute is not defined");
-        if (message == null)
+        }
+        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) {
--- a/buildframework/helium/sf/java/internaldata/tests/src/com/nokia/helium/internaldata/tests/TestEmailDataSender.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/tests/src/com/nokia/helium/internaldata/tests/TestEmailDataSender.java	Fri Aug 13 14:59:05 2010 +0300
@@ -22,15 +22,11 @@
 import java.io.File;
 import java.io.FileReader;
 
-
 import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
 import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
 import org.junit.Test;
 
-
-
-
 import com.nokia.helium.internaldata.ant.listener.EmailDataSender;
 
 public class TestEmailDataSender {
--- a/buildframework/helium/sf/java/internaldata/tests/src/com/nokia/helium/internaldata/tests/TestListener.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/tests/src/com/nokia/helium/internaldata/tests/TestListener.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,12 +17,12 @@
 package com.nokia.helium.internaldata.tests;
 
 import static org.junit.Assert.assertFalse;
+
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileReader;
 import java.io.FileWriter;
-import java.io.IOException;
 
 import org.apache.log4j.Level;
 import org.apache.log4j.LogManager;
@@ -31,6 +31,7 @@
 import org.apache.tools.ant.Target;
 import org.apache.tools.ant.taskdefs.Ant;
 import org.junit.Test;
+
 import com.nokia.helium.internaldata.ant.listener.Listener;
 
 public class TestListener {
--- a/buildframework/helium/sf/java/jpa/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-<?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-jpa">
-    <description>Helium Antlib JPA build file.</description>
-    <target name="compile" description="Compile class files">
-        <mkdir dir="${classes.dir}/META-INF" />
-        <copy todir="${classes.dir}/META-INF">
-            <fileset dir="${basedir}/src/META-INF"/>
-        </copy>
-        <runtarget target="build-macros.compile" />
-    </target>
-
-    <import file="${builder.dir}/java/macros.ant.xml"/>
-</project>
-
-
--- a/buildframework/helium/sf/java/jpa/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-<?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-jpa"
-        status="integration" />
-        
-  <dependencies>
-    <dependency org="org.freemarker" name="freemarker" rev="2.3.13" conf="default" />
-    <dependency org="log4j" name="log4j" rev="1.2.9" conf="default" />
-    <dependency org="org.apache.commons" name="commons-io" rev="1.4" conf="default" />
-    <dependency org="net.sourceforge.fmpp" name="fmpp" rev="0.9.13" conf="default" />
-    <dependency org="eclipselink" name="eclipselink" rev="2.0.0" conf="default" />
-    <dependency org="javax.persistence" name="persistence" rev="2.0.0" conf="default" />
-    <dependency org="org.apache.derby" name="derby" rev="10.5" conf="default" />
-  </dependencies>
-</ivy-module>
--- a/buildframework/helium/sf/java/jpa/src/META-INF/persistence.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : persistence.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:
-
-============================================================================
--->
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
-                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-                xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_2_0.xsd"
-                version="2.0">
-    <persistence-unit name="metadata" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-          <properties>
-                <!-- <property name="eclipselink.logging.level" value="ALL" /> -->
-           </properties>
-            <class>com.nokia.helium.jpa.entity.metadata.LogFile</class>
-            <class>com.nokia.helium.jpa.entity.metadata.Priority</class>
-            <class>com.nokia.helium.jpa.entity.metadata.Component</class>
-            <class>com.nokia.helium.jpa.entity.metadata.Metadata</class>
-            <class>com.nokia.helium.jpa.entity.metadata.MetadataEntry</class>
-            <class>com.nokia.helium.jpa.entity.metadata.ComponentTime</class>
-            <class>com.nokia.helium.jpa.entity.metadata.WhatLogEntry</class>
-            <class>com.nokia.helium.jpa.entity.metadata.ExecutionTime</class>
-            <class>com.nokia.helium.jpa.entity.Version</class>
-    </persistence-unit>
-</persistence>
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMCommitCount.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +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.jpa;
-
-import org.apache.log4j.Logger;
-import javax.persistence.EntityManager;
-
-/**
- * This class is used to keep track of number of objects
- * remaining to be commited to the database.
- */
-public class ORMCommitCount {
-
-    private static Logger log = Logger.getLogger(ORMCommitCount.class);
-
-    private static final int PERSISTANCE_COUNT_LIMIT = 1000;
-
-    private static EntityManager entityManager;
-
-    private int count;
-
-    /** Constructor.
-     */
-    public ORMCommitCount() {
-        count = PERSISTANCE_COUNT_LIMIT;
-    }
-
-    /**
-     * Reduce the commit count value by one.
-     */
-    public void decreaseCount() {
-        count --;
-    }
-
-    /**
-     * Reset to maximum limit
-     */
-    public void reset() {
-        count = PERSISTANCE_COUNT_LIMIT;
-    }
-
-    /**
-     * Returns whether the commit is required or not.
-     * @return if commit required returns true otherwise false.
-     */
-    public boolean isCommitRequired() {
-        return count == 0;
-    }
-
-    /**
-     * Returns whether if there are any data to commit
-     * @return true if any data there to commit, otherwise false.
-     */
-    public boolean isDatatoCommit() {
-        //log.debug("isDatatoCommit: " + (count < PERSISTANCE_COUNT_LIMIT));
-        return count < PERSISTANCE_COUNT_LIMIT;
-    }
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMEntityManager.java	Wed Jun 16 16:51:40 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.jpa;
-
-import org.apache.log4j.Logger;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import java.util.Hashtable;
-import javax.persistence.Persistence;
-import org.eclipse.persistence.config.PersistenceUnitProperties;
-import java.io.File;
-import org.apache.commons.io.FileUtils;
-import com.nokia.helium.jpa.entity.Version;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.Statement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import org.apache.tools.ant.BuildException;
-import java.io.IOException;
-
-/**
- * This class handles the generic ORM entity management.
- */
-public class ORMEntityManager {
-
-    private static Logger log = Logger.getLogger(ORMEntityManager.class);
-
-    private EntityManager entityManager;
-    private EntityManagerFactory factory;
-
-    private ORMCommitCount commitCountObject = new ORMCommitCount();
-
-    private String urlPath;
-    /**  
-     * Constructor.
-     * @param urlPath path for which entity manager to be
-     * created.
-     */
-    @SuppressWarnings("unchecked")
-    public ORMEntityManager(String urlPath) throws IOException {
-        this.urlPath = urlPath;
-        String name = "metadata";
-        Hashtable persistProperties = new Hashtable();
-        persistProperties.put("javax.persistence.jdbc.driver",
-                "org.apache.derby.jdbc.EmbeddedDriver");
-        System.setProperty("derby.stream.error.file", System.getProperty("java.io.tmpdir") + File.separator + "derby.log");
-        persistProperties.put("javax.persistence.jdbc.url",
-               "jdbc:derby:" + urlPath);
-        persistProperties.put(
-                PersistenceUnitProperties.PERSISTENCE_CONTEXT_CLOSE_ON_COMMIT,
-                "false");
-        persistProperties.put(
-                PersistenceUnitProperties.PERSISTENCE_CONTEXT_REFERENCE_MODE,
-                "WEAK");
-        persistProperties.put(PersistenceUnitProperties.BATCH_WRITING,
-                "JDBC");
-        persistProperties.put("eclipselink.read-only", "true");
-        persistProperties.put(PersistenceUnitProperties.LOGGING_LEVEL, "warning");
-        File dbFile = new File(urlPath);
-        if (dbFile.exists()) {
-            log.debug("checking db integrity for :" + urlPath);
-            if (!checkDatabaseIntegrity(urlPath)) {
-                log.debug("db integrity failed cleaning up old db");
-                try {
-                    log.debug("deleting the url path" + urlPath);
-                    FileUtils.forceDelete(dbFile);
-                    log.debug("successfully removed the urlpath" + urlPath);
-                } catch (java.io.IOException iex) {
-                    log.debug("deleting the db directory failed", iex);
-                    throw new BuildException("failed deleting corrupted db", iex);
-                }
-            } else {
-                log.debug("db exists and trying to create entity manager");
-                factory =
-                    Persistence.createEntityManagerFactory(
-                        name,
-                        persistProperties);
-                entityManager = factory.createEntityManager();
-                entityManager.getTransaction().begin();
-                return;
-            }
-        }
-        log.debug("url path not exists" + urlPath + "creating it");
-        persistProperties.put("javax.persistence.jdbc.url",
-               "jdbc:derby:" + urlPath + ";create=true");
-        persistProperties.put(PersistenceUnitProperties.DDL_GENERATION,
-                "create-tables");
-        persistProperties.put(
-                PersistenceUnitProperties.DDL_GENERATION_MODE,
-                "database");
-        persistProperties.put(
-                PersistenceUnitProperties.PERSISTENCE_CONTEXT_CLOSE_ON_COMMIT,
-                "false");
-        persistProperties.put(
-                PersistenceUnitProperties.PERSISTENCE_CONTEXT_REFERENCE_MODE,
-                "WEAK");
-        persistProperties.put(PersistenceUnitProperties.BATCH_WRITING,
-                "JDBC");
-        persistProperties.put("eclipselink.read-only", "true");
-        factory = Persistence.createEntityManagerFactory(
-                name,
-                persistProperties);
-        entityManager = factory.createEntityManager();
-        entityManager.getTransaction().begin();
-        entityManager.persist(new Version());
-        entityManager.getTransaction().commit();
-        entityManager.clear();
-        entityManager.getTransaction().begin();
-    }
-
-    /**
-     * Helper function to get the entity manager.
-     * @return entity manager
-     */
-    public EntityManager getEntityManager() {
-        //log.debug("ORMEntityManager: getEntityManager: " + entityManager);
-        return entityManager;
-    }
-
-    /**
-     * Helper function to get commit count object
-     * @return commit count object used for cached persisting.
-     */
-    public ORMCommitCount getCommitCountObject() {
-        return commitCountObject;
-    }
-
-    /**
-     * If Any data to be commited, then this function
-     * commits the data to the database.
-     */
-    public void commitToDB() {
-        log.debug("commitToDB");
-        if (entityManager.getTransaction().isActive()) {
-            if (commitCountObject.isDatatoCommit()) {
-                entityManager.getTransaction().commit();
-                commitCountObject.reset();
-                entityManager.clear();
-                entityManager.getTransaction().begin();
-            }
-        }
-    }
-
-    /**
-     * Finalizes the entity manager.
-     */
-    public void finalizeEntityManager() {
-        log.debug("finalizeEntitymanager:" + entityManager);
-        try {
-            log.debug("finalizeEntitymanager: in a transaction.");
-            if (entityManager != null && entityManager.getTransaction().isActive()) {
-                log.debug("finalizeEntitymanager: committing pending transaction.");
-                entityManager.getTransaction().commit();
-            }
-        } finally {
-            log.debug("cleaning up entity manager instance" + entityManager);
-            commitCountObject.reset();
-            if (entityManager != null) {
-                log.debug("Closing the entityManager");
-                entityManager.clear();
-                entityManager.close();
-                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());
-            }        
-        }
-    }
-
-    /**
-     * Checks the database integrity.
-     * @param urlPath - database path to be connected to.
-     * @return boolean - true if db is valid false otherwise.
-     */
-    private boolean checkDatabaseIntegrity(String urlPath) {
-        boolean result = false;
-        loadDriver();
-        Connection connection = null;
-        try {
-            connection = DriverManager.getConnection("jdbc:derby:" + urlPath);
-            if (connection != null) {
-                Statement stmt = connection.createStatement();
-                ResultSet rs = stmt.executeQuery("select version from version");
-                int version = -1;
-                log.debug("result set executed");
-                if ( rs.next()) {
-                    version = rs.getInt(1);
-                }
-                log.debug("result set executed : " + version);
-                rs.close();
-                stmt.close();
-                if (version == Version.DB_VERSION) {
-                    result = true;
-                } else {
-                    DriverManager.getConnection("jdbc:derby:;shutdown= true");
-                }
-            }
-        } catch (SQLException ex) {
-            log.debug("exception while checking database integrity: ", ex);
-            log.debug("shutting down embedded db");
-            try {
-                DriverManager.getConnection("jdbc:derby:;shutdown= true");
-            } catch (java.sql.SQLException sex) {
-                log.debug("normal exception during db shutdown");
-            }
-        } finally {
-            try {
-                log.debug("closing the connection");
-                if (connection != null) {
-                    connection.close();
-                }
-            } catch (java.sql.SQLException sex) {
-                log.debug("normal exception during db shutdown");
-            }
-            connection = null;
-        }
-        //shutdown unloads the driver, driver need to be loaded again.
-        return result;
-    }
-    private void loadDriver() {
-        try
-        {
-            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
-        }
-        catch (java.lang.ClassNotFoundException e)
-        {
-            throw new BuildException("JDBC Driver could not be found");
-        }
-    }
-
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMReader.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +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.jpa;
-
-
-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.
- */
-public class ORMReader {
-
-    private static Logger log = Logger.getLogger(ORMReader.class);
-    
-    private static final int READ_CACHE_LIMIT = 30000;
-
-    private ORMEntityManager manager;
-    
-    private int startPos;
-    
-    private String dbPath;
-
-    /**Constructor:
-     * @param dbPath - path of the database to connect to.
-     */
-    public ORMReader(String path) {
-        dbPath = path;
-        ORMUtil.initializeORM(dbPath);
-        manager = ORMUtil.getEntityManager(dbPath);
-    }
-
-    /**
-     * Executes native sql query and returns List of objects
-     * of return type mentioned by type.
-     * @param queryString - sql query to be executed.
-     * @param type - return type.
-     * @return List of objects of return type.
-     */
-    public List executeNativeQuery(String queryString, String type) {
-        int maxResults = READ_CACHE_LIMIT;
-        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);
-            }
-            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;
-        }
-    }
-
-    /**
-     * Executes sql query which results in single result.
-     * @param queryString - sql query to be executed.
-     * @param type - return type.
-     * @return an Object of return type.
-     */
-    public Object  executeSingleResult(String queryString, String type) {
-        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;
-        }
-    }
-
-    /**
-     * Executes query using JPQL.
-     * @param queryString - jpa query string
-     * @return List of objects read from database.
-     */
-    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;
-        }
-    }
-    
-    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	Wed Jun 16 16:51:40 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.jpa;
-
-import org.apache.log4j.Logger;
-import java.util.HashMap;
-import org.apache.tools.ant.BuildException;
-import java.io.IOException;
-
-/**
- * Utility class to communicate to the database using JPA entity
- * manager.
- */
-public final class ORMUtil {
-
-    private static Logger log = Logger.getLogger(ORMUtil.class);
-    
-    private static final int PERSISTANCE_COUNT_LIMIT = 1000;
-
-    private static final int READ_CACHE_LIMIT = 30000;
-
-    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() {
-    }
-    
-    /**
-     * Initializes the entity manager and begins the transcations.
-     * @param urlPath - database path to be connected to.
-     */
-    public static synchronized void initializeORM(String urlPath) {
-        ORMEntityManager manager = emMap.get(urlPath);
-        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);
-        }
-    }
-
-    /**
-     * Helper Function to return the entity manager.
-     * @return entity manager created during initialization.
-     */
-    public static synchronized ORMEntityManager getEntityManager(String urlPath) {
-        log.debug("getEntityManager: urlpath: " + urlPath);
-        ORMEntityManager manager = emMap.get(urlPath);
-        if (manager != null) {
-            log.debug("getEntityManager: manager: " + manager);
-            log.debug("getEntityManager: manager.entityManager: " + manager.getEntityManager());
-            return manager;
-        } else {
-            log.debug("getEntityManager: manager: is null");
-            throw new BuildException("ORM entity manager is null");
-        }
-    }
-    
-    /**
-     * Finalize the entity manager and release all the objects.
-     */
-    public static synchronized void finalizeORM(String urlPath) {
-        ORMEntityManager manager = emMap.get(urlPath);
-        log.debug("finalizeORM: urlpath: " + urlPath);
-        if (manager != null) {
-            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/Version.java	Wed Jun 16 16:51:40 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.jpa.entity;
-
-import javax.persistence.Entity;
-
-
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Column;
-import javax.persistence.Basic;
-
-
-/**
- *  Entity Version to store the db version.
- */
-@Entity
-public class Version {
-
-    public static final transient int DB_VERSION = 3;
-
-    
-    @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE)
-    @Column(name = "VERSION_ID")
-    private int id;
-
-    //DB_VERSION to set as default if version changes
-    @Basic
-    @Column(unique = true, nullable = false)
-    private int version = DB_VERSION;
-
-    /**
-     *  Helper function to set the identifier for the log file.
-     *  @param identifier for the log file.
-     */
-    public void setId(int identifier) {
-        id = identifier;
-    }
-
-    /**
-     *  Helper function to get the identifier for the db schema version.
-     *  @return identifier for this log file.
-     */
-    public int getId() {
-        return id;
-    }
-
-    /**
-     *  Helper function to set the db schema version.
-     *  @param location of the log file.
-     */
-    public void setVersion(int ver) {
-        version = ver;
-    }
-
-    /**
-     *  Helper function to return the current db schema version.
-     *  @return path of the log file..
-     */
-    public int getVersion() {
-        return version;
-    }
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/Component.java	Wed Jun 16 16:51:40 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.jpa.entity.metadata;
-
-
-import javax.persistence.Entity;
-import javax.persistence.CascadeType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.Column;
-import javax.persistence.Basic;
-import javax.persistence.JoinColumn;
-
-
-/**
- * Entity class to store the component information.
- */
-@Entity
-public class Component {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE)
-    @Column(name = "COMPONENT_ID")
-    private int id;
-
-    @Basic
-    @Column(nullable = false, length = 500)
-    private String component;
-
-    @Basic
-    @Column(name = "LOGPATH_ID", insertable = false, updatable = false)
-    private int logPathID;
-
-    @ManyToOne(cascade = CascadeType.REMOVE)
-    @JoinColumn(name = "LOGPATH_ID", referencedColumnName = "LOGPATH_ID")
-    private LogFile logFile;
-
-    @ManyToOne
-    private Metadata metadata;
-
-    /**
-     * Helper function to set the identifier.
-     * @param identifier to set the identifier for the component.
-     */
-    public void setId(int identifier) {
-        id = identifier;
-    }
-
-    /**
-     * Helper function to set the identifier.
-     * @return the identifier of the component.
-     */
-    public int getId() {
-        return id;
-    }
-
-    /**
-     * Helper function to set component name.
-     * @param cmp string to be set to.
-     */
-    public void setComponent(String cmp) {
-        component = cmp;
-    }
-
-    /**
-     * Helper function to set log file associated
-     * with this component.
-     * @param file associated file to this component.
-     */
-    public void setLogFile(LogFile file) {
-        logFile = file;
-    }
-
-    /**
-     * Helper function to return component string.
-     * @return component name of this component.
-     */
-    public String getComponent() {
-        return component;
-    }
-
-    /**
-     * Helper function to return log file associated with this component.
-     * @return component name of this component.
-     */
-    public LogFile getLogFile() {
-        return logFile;
-    }
-
-    /**
-     * Helper function to return logpath id.
-     * @return log path id associated with this component.
-     */
-    public int getLogPathID() {
-        return logPathID;
-    }
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/ComponentTime.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +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.jpa.entity.metadata;
-
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.Column;
-import javax.persistence.Basic;
-import javax.persistence.JoinColumn;
-
-
-/**
- *  Entity component time to store the time taken for each
- *  component to build.
- */
-@Entity
-public class ComponentTime {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE)
-    @Column(name = "COMPONENTTIME_ID")
-    private int id;
-
-    @Basic
-    private double componentTime;
-
-    @Basic
-    @Column(name = "COMPONENT_ID", insertable = false, updatable = false)
-    private int componentId;
-
-
-    @ManyToOne(cascade = CascadeType.REMOVE)
-    @JoinColumn(name = "COMPONENT_ID", referencedColumnName = "COMPONENT_ID")
-    
-    private Component component;
-
-    /**
-     *  Helper function to set the associated component.
-     *  @param cmpt for which the time to be recorded.
-     */
-    public void setComponent(Component cmpt) {
-        component = cmpt;
-    }
-
-
-    /**Helper function to return the time taken for this component
-     *  to build.
-     *  @return duration to build this component.
-     */
-    public double getDuration() {
-        return componentTime;
-    }
-
-    /**
-     *  Helper function to set the duration for this component to build.
-     *  @param duration to build this component.
-     */
-
-    public void setDuration(double duration) {
-        componentTime = duration;
-    }
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/ExecutionTime.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +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.jpa.entity.metadata;
-
-import javax.persistence.Basic;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
-/**
- * Entity to store execution of some step/log.
- *
- */
-@Entity
-public class ExecutionTime {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE)
-    @Column(name = "EXECUTIONTIME_ID")
-    private int id;
-    
-    @Basic
-    private int time;
-
-    @Basic
-    @Column(name = "LOGPATH_ID", insertable = false, updatable = false)
-    private int logPathID;
-    
-    @ManyToOne(cascade = CascadeType.REMOVE)
-    @JoinColumn(name = "LOGPATH_ID", referencedColumnName = "LOGPATH_ID")
-    private LogFile logFile;
-
-    /**
-     * Set record id.
-     * @param id
-     */
-    public void setId(int id) {
-        this.id = id;
-    }
-    
-    /**
-     * Get The record id.
-     * @return
-     */
-    public int getId() {
-        return id;
-    }
-
-    /**
-     * Set the execution time in seconds.
-     * @param time
-     */
-    public void setTime(int time) {
-        this.time = time;
-    }
-
-    /**
-     * Get the execution time in seconds.
-     * @return
-     */
-    public int getTime() {
-        return time;
-    }
-
-    /**
-     * Set the logPathId.
-     * @param logPathID
-     */
-    public void setLogPathID(int logPathID) {
-        this.logPathID = logPathID;
-    }
-
-    /**
-     * Get the logPathId.
-     * @return
-     */
-    public int getLogPathID() {
-        return logPathID;
-    }
-
-    /**
-     * Set the logFile.
-     * @param logFile
-     */
-    public void setLogFile(LogFile logFile) {
-        this.logFile = logFile;
-    }
-
-    /**
-     * Get the logFile.
-     * @return
-     */
-    public LogFile getLogFile() {
-        return logFile;
-    }
-
-}
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/LogFile.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +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.jpa.entity.metadata;
-
-import javax.persistence.Entity;
-
-
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.Column;
-import javax.persistence.Basic;
-
-
-/**
- *  Entity LogFile to store the information about the log for
- *  which the data to be written to database.
- */
-@Entity
-public class LogFile {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE)
-    @Column(name = "LOGPATH_ID")
-    private int id;
-
-    @Basic
-    @Column(unique = true, nullable = false, length = 500)
-    private String path;
-
-    @ManyToOne
-    private Metadata metadata;
-
-    /**
-     *  Helper function to set the identifier for the log file.
-     *  @param identifier for the log file.
-     */
-    public void setId(int identifier) {
-        id = identifier;
-    }
-
-    /**
-     *  Helper function to get the identifier for the log file.
-     *  @return identifier for this log file.
-     */
-    public int getId() {
-        return id;
-    }
-
-    /**
-     *  Helper function to set the path of the log file.
-     *  @param location of the log file.
-     */
-    public void setPath(String location) {
-        path = location;
-    }
-
-    /**
-     *  Helper function to get the path.
-     *  @return path of the log file..
-     */
-    public String getPath() {
-        return path;
-    }
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/Metadata.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,783 +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.jpa.entity.metadata;
-
-import java.util.ArrayList;
-import javax.persistence.FlushModeType;
-import org.apache.log4j.Logger;
-import java.util.List;
-import javax.persistence.MapKeyColumn;
-import javax.persistence.Column;
-import javax.persistence.Basic;
-import javax.persistence.FetchType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.EntityManager;
-import java.util.Hashtable;
-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;
-
-/**
- * Interface Class to store all the metadata information.
- */
-
-@Entity
-public class Metadata {
-
-    private static Logger log = Logger.getLogger(Metadata.class);
-    
-    private static String[] priorityNames = {"FATAL", "ERROR", "WARNING", "INFO",
-        "REAMARK", "CRITICAL", "DEFAULT"};
-
-    private transient ORMEntityManager manager;
-
-    private transient String logPath;
-
-    @Basic
-    @Column(unique = true, nullable = false)
-    private String name;
-
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE)
-    private int id;
-
-    @OneToMany(mappedBy = "metadata",
-            fetch = FetchType.LAZY, cascade = CascadeType.ALL)
-    private Hashtable<String, LogFile> logFiles;
-
-    @OneToMany(mappedBy = "metadata",
-            fetch = FetchType.LAZY, cascade = CascadeType.ALL)
-    @MapKeyColumn(name = "PRIORITY", insertable = false, updatable = false)
-    private Hashtable<String, Priority> priorities;
-
-
-    private Hashtable<String, Component> components;
- 
-    private List<MetadataEntry> entries;
-
-    /**
-     * Default Constructor.
-     */
-    public Metadata() {
-    }
-
-    /** Constructor.
-     * @param nm - name to be looked for in the persistence.xml file
-     * for database information.
-     */
-    public Metadata(String nm) {
-        name = nm;
-    }
-
-    /** Constructor.
-     *  @param mgr - entity manager using which the data to be
-     *  written to database.
-     *  @param path - log path for which data to be written to.
-     */
-    public Metadata(ORMEntityManager mgr, String path) {
-        manager = mgr;
-        if (logPath == null) {
-            logPath = path.replace('\'', '/');
-            initializeLogPath();
-        }
-    }
-
-    /**
-     * Helper function to set the name of the JPA entity manager to
-     * be used.
-     * @param nm - name to be looked for in the persistence.xml file
-     * for database information.
-     */
-    public void setName(String nm) {
-        name = nm;
-    }
-
-    /**
-     * Helper function to get the name of the JPA entity manager to
-     * being used.
-     * @return nm - name to be looked for in the persistence.xml file
-     * for database information.
-     */
-    public String getName() {
-        return name;
-    }
-
-
-    /**
-     * Helper function to return the list of Logfiles stored
-     * in the database.
-     * @return Hash table of logpath with logfile object
-     * stored in the database.
-     */
-    public Hashtable<String, LogFile> getLogFiles() {
-        return logFiles;
-    }
-
-    /**
-     * Helper function to persist the components,
-     * in the database.
-     * @param componentsList of component name with component object.
-     * stored in the database.
-     */
-    public void setComponents(Hashtable<String, Component> componentsList) {
-        components = componentsList;
-    }
-
-    /**
-     * Helper function to persist logfile objects in the database.
-     * @param logFilesList logpath with logfile object.
-     */
-    public void setLogFiles(Hashtable<String, LogFile> logFilesList) {
-        logFiles = logFilesList;
-    }
-
-    public String getLogPath() {
-        return logPath;
-    }
-    /**
-     * Helper function to persist metadata entry lists in the db.
-     * @param entriesList List of entries to persist.
-     */
-    public void setEntries(List<MetadataEntry> entriesList) {
-        entries = entriesList;
-    }
-
-    /**
-     * Helper function to return the list of persisted entries currently
-     * in memory.
-     * @return list of metadata entries currently in memory.
-     */
-    public List<MetadataEntry> getEntries() {
-        return entries;
-    }
-
-    /**
-     * Helper function to set the logpath of the current entry.
-     * @param path logpath associated with this entry.
-     */
-    public void setLogPath(String path) {
-        logPath = path;
-    }
-
-    /**
-     * Helper function to set the priority list.
-     * @param prtList.
-     */
-    public void setPriorities(Hashtable<String, Priority> prtList) {
-        priorities = prtList;
-    }
-
-    /**
-     * Helper function to initialize the components currently in
-     * the database. This is cached in memory so that before persisting
-     * the cached info is checked for performance optmization.
-     * @param path - path associated with the component.
-     * @param logFile - logfile object associated with the component.
-     */
-    @SuppressWarnings("unchecked")
-    public void initComponents(String path, LogFile logFile) {
-        logPath = path;
-        components = new Hashtable<String, Component>();
-        if (logFile != null) {
-            //System.out.println("logfile id: " + logFile.getId());
-            List<Component> componentList =
-                (List<Component>) manager.getEntityManager().createQuery(
-                    "SELECT c FROM Component c WHERE c.logPathID = :pathId")
-            .setParameter("pathId", logFile.getId()).getResultList();
-            for (Component comp : componentList) {
-                components.put(comp.getComponent(), comp);
-            }
-        }
-    }
-
-    /**
-     * Initialize the priority table, caches in memory for
-     * performance.
-     */
-    @SuppressWarnings("unchecked")
-    public void initPriorities() {
-        priorities = new Hashtable<String, Priority>();
-        List<Priority> priorityList =
-            (List<Priority>) manager.getEntityManager().createQuery(
-                "SELECT p FROM Priority p")
-            .getResultList();
-        for (Priority priority : priorityList) {
-            //System.out.println("priority value: " + priority.getPriority());
-            priorities.put(priority.getPriority(), priority);
-        }
-    }
-
-    /**
-     * Load the required data to be cached from database.
-     * @param path - db path.
-     */
-    @SuppressWarnings("unchecked")
-    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>) query.getResultList();
-        for (LogFile file : logFilesList) {
-            log.debug("getting logfile from db: " + file.getPath());
-            logFiles.put(file.getPath(), file);
-        }
-        //manager.getEntityManager().clear();
-        logFile = logFiles.get(path);
-        if (logFile == null) {
-            populateDB(path);
-        } else {
-            initComponents(path, logFile);
-            List<MetadataEntry> entriesList = new ArrayList<MetadataEntry>();
-            setEntries(entriesList);
-        }
-        initPriorities();
-    }
-
-    /**
-     * Internal function to persist an object into the database.
-     * @param obj - object to be stored in the data.
-     */
-    private void persist(Object obj) {
-        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();
-                }
-            }
-        }
-    }
-
-    /**
-     * Internal function to populate the priorities into the cache.
-     */
-    private void populatePriorities() {
-        Hashtable<String, Priority> priorityList = new Hashtable<String, Priority>(); 
-        setPriorities(priorityList);
-        for (String priorityName : priorityNames) {
-            Priority priority = new Priority();
-            priority.setPriority(priorityName);
-            priorityList.put(priorityName, priority);
-            log.debug("populating priorities: " + priorityName);
-            persist(priority);
-        }
-    }
-
-    /**
-     * Internal function to load data from database.
-     * @param path - db path
-     */
-    private void populateDB(String path) {
-        setLogPath(path);
-        Hashtable<String, LogFile> logFileList =
-            new Hashtable<String, LogFile>();
-        //entityManager.merge(logFileList);
-        setLogFiles(logFileList);
-        log.debug("populatedb: " + path);
-        checkAndAddLogPath();
-        Hashtable<String, Component> componentsList =
-            new Hashtable<String, Component>();
-        //entityManager.merge(componentsList);
-        setComponents(componentsList);
-        List<MetadataEntry> entriesList = new ArrayList<MetadataEntry>();
-        setEntries(entriesList);
-    }
-
-    /**
-     * Internal function to cache the logpath for performance.
-     */
-    private void initializeLogPath() {
-        EntityManager entityManager = manager.getEntityManager();
-        Query query = entityManager.createQuery("select m from LogFile m");
-        query.setFlushMode(FlushModeType.COMMIT);
-        
-        name = "metadata";
-        if (query.getResultList().size() == 0) {
-            log.debug("query result: size" + query.getResultList().size());
-            populatePriorities();
-            populateDB(logPath);
-        } else {
-            log.debug("loading from db: " + logPath);
-            loadFromDB(logPath);
-        }
-        //em.clear();
-    }
-
-    /**
-     * Adds the log entry to the database.
-     * @param entry - logentry which is to be written to db.
-     */
-    public void addEntry(LogEntry entry) {
-
-        String comp = entry.getComponent();
-        Component component = null;
-        if (comp != null) {
-            component = checkAndAddComponent(comp);
-            float elapsedTime = entry.getElapsedTime();
-            String priority = entry.getPriorityText();
-            int lineNo = entry.getLineNumber();
-            String logText = entry.getText();
-            log.debug("elapsedTime: " + elapsedTime);
-            log.debug("comp: " + comp);
-            if (elapsedTime != -1) {
-                addElapsedTime(component, elapsedTime);
-            } else if (!priority.equals("default")) {
-                addMetadata(priority, component, lineNo, logText);
-            } else {
-                WhatEntry whatEntry = entry.getWhatEntry();
-                if (whatEntry != null) {
-                    List<WhatLogMember> members = whatEntry.getMembers(); 
-                    if (members != null) {
-                        for (WhatLogMember member : members) {
-                            if (member != null) {
-                                addWhatLogMember(component, member.getMember(),
-                                        member.getMemberExists());
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    
-    /**
-     * Internal function to add what log member to the database.
-     * @param component for which to record the elapsed time
-     * @param whatLogMember - an entry from whatlog output
-     * @param memberExists - is the whatlog entry exists in the file system.
-     */
-    private void addWhatLogMember(Component component,
-            String whatLogMember, boolean memberExists) {
-        //Todo: handle duplicate whatlog member entry
-        WhatLogEntry entry = new WhatLogEntry();
-        entry.setMember(whatLogMember);
-        entry.setMissing(!memberExists);
-        entry.setComponent(component);
-        persist(entry);
-    }
-
-    /**
-     * Internal function to add log path only if it is not already
-     * there in the cached entry from database.
-     * @return LogFile object related to the logpath.
-     */
-    private LogFile checkAndAddLogPath() {
-        LogFile logFile = logFiles.get(logPath);
-        log.debug("checkandaddlogpath:logpath" + logPath);
-        log.debug("checkandaddlogpath:logFile" + logFile);
-        if (logFile == null) {
-            logFile = new LogFile();
-            logFile.setPath(logPath);
-            persist(logFile);
-            logFiles.put(logPath, logFile);
-        }
-        return logFile;
-    }
-
-    /**
-     * Record the execution time in second for a particular log.
-     * @param time
-     */
-    public void addExecutionTime(int time) {
-        LogFile logFile = logFiles.get(this.getLogPath());
-        if (logFile != null) {
-            ExecutionTime et = new ExecutionTime();
-            et.setTime(time);
-            et.setLogFile(logFile);
-            persist(et);
-        }
-    }
-    
-    /**
-     * Internal function to add elapsed tim to the database.
-     * @param component for which to record the elapsed time
-     * @param elapsedTime - time to be recorded.
-     */
-    private void addElapsedTime(Component component, double elapsedTime) {
-        ComponentTime componentTime = new ComponentTime();
-        componentTime.setComponent(component);
-        componentTime.setDuration(elapsedTime);
-        persist(componentTime);
-    }
-
-    /**
-     * Internal function to add component if not exist
-     * in the cached entries from database.
-     * @param comp - component Name to be added.
-     * @return either new component / existing component from cache.
-     */
-    private Component checkAndAddComponent(String comp) {
-        //System.out.println("checkAndAddComponent: comp: "+ comp);
-        Component component = components.get(comp);
-        if (component == null) {
-            component = new Component();
-            log.debug("checkandaddcomponent: logpath" + logPath);
-            log.debug("checkandaddcomponent: logpath" + logFiles);
-            component.setLogFile(logFiles.get(logPath));
-            component.setComponent(comp);
-            persist(component);
-            components.put(comp, component);
-        }
-        return component;
-    }
-
-    /**
-     * Function provides the Priority object for the string
-     * priority.
-     * @param prty - priority string
-     * @return Priority object for the prioirty string.
-     */
-    private Priority getPriority(String prty) {
-        Priority retValue = priorities.get(prty.toUpperCase());
-        if (retValue == null) {
-            retValue = priorities.get(priorityNames[0]);
-        }
-        log.debug("priority:getPriority: " + prty);
-        return retValue;
-    }
-
-    /**
-     * Internal function to add the entry to the database.
-     * priority.
-     * @param priority - Priority of the entry
-     * @param component - component info for the entry
-     * @param lineNo - line number at which the severity is captured.
-     * @param logText - text about the severity info to be recorded.
-     */
-    private void addMetadata(String priority, Component component,
-            int lineNo, String logText) {
-        MetadataEntry entry = new MetadataEntry();
-        log.debug("logfile: " + component.getLogFile().getPath());
-        entry.setLogFile(component.getLogFile());
-        entry.setComponent(component);
-        entry.setLineNumber(lineNo);
-        entry.setPriority(getPriority(priority));
-        log.debug("error text message: " + logText);
-        entry.setText(logText);
-        persist(entry);
-    }
-
-    /**
-     * Removes the entries for a particular log.
-     * priority.
-     */
-    public final void removeEntries() {
-        LogFile file = (LogFile)executeSingleQuery("select l from LogFile l where l.path like '%" + logPath + "'");
-        if ( file != null ) {
-            log.debug("removing entries for : " + file.getPath());
-            int pathId = file.getId();
-            removeEntries("DELETE FROM MetadataEntry AS m where m.COMPONENT_ID in (select COMPONENT_ID from Component where LOGPATH_ID= " + pathId + ")");
-            removeEntries("DELETE FROM ComponentTime AS ctime where ctime.COMPONENT_ID in (select COMPONENT_ID from Component where LOGPATH_ID= " + pathId + ")");
-            removeEntries("DELETE FROM WhatLogEntry AS wentry where wentry.COMPONENT_ID in (select COMPONENT_ID from Component where LOGPATH_ID= " + pathId + ")");
-            removeEntries("DELETE FROM Component AS c where c.LOGPATH_ID = " + pathId);
-            removeEntries("DELETE FROM ExecutionTime AS e where e.LOGPATH_ID = " + pathId);
-            removeEntries("DELETE FROM LogFile AS l where l.LOGPATH_ID = " + pathId);
-            removeEntries("DELETE FROM LogFile l where l.LOGPATH_ID = " + pathId);
-        }
-    }
-
-    /**
-     * Internal function execute query which results in single record.
-     * @param queryString - query string for whcih the result to be obtained.
-     * @return object - record from the executed query.
-     */
-    private Object executeSingleQuery (String queryString) {
-        Object mutexObject = ORMUtil.getMutexObject();
-        Object obj = null;
-        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;
-    }
-
-    /**
-     * Internal function to remove the entries from db.
-     * @param queryString - query string for whcih the result to be obtained.
-     */
-    private void removeEntries(String queryString) {
-        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);
-            }
-        }
-    }
-
-    /**
-     * Helper class to store the log entry , used to write to the database
-     * 
-     * @param databasePath The path to the database
-     */
-    public static class LogEntry
-    {
-        private String text;
-
-        private PriorityEnum priority;
-
-        private String component;
-        
-        private int lineNumber;
-        
-        private String logPath;
-        
-        private float elapsedTime;
-        
-        private String priorityText;
-        
-        private WhatEntry whatEntry;
-
-    /**
-     * Constructor for the helper class 
-     */
-        public LogEntry(String text, PriorityEnum priority, String component, 
-                String logPath, int lineNumber, 
-                float time, WhatEntry entry)
-        {
-            this.text = text;
-            this.priority = priority;
-            this.component = component;
-            this.lineNumber = lineNumber;
-            this.logPath = logPath.replace('\'', '/');
-            this.elapsedTime = time;
-            whatEntry = entry;
-        }
-
-    /**
-     * Constructor for the helper class 
-     */
-        public LogEntry(String text, PriorityEnum priority, String component, 
-                String logPath, int lineNumber)
-        {
-            this(text, priority, component, logPath, lineNumber, -1, null);
-        }
-
-
-    /**
-     * Constructor for the helper class.
-     */
-        public LogEntry(String text, String priorityTxt, String component, String logPath, 
-                int lineNumber, float time, WhatEntry entry) {
-            PriorityEnum prty = null;
-            String prtyText = priorityTxt.trim().toLowerCase();
-            priorityText =  prtyText;
-            if (prtyText.equals("error")) {
-                prty = PriorityEnum.ERROR;
-            } else if (prtyText.equals("warning")) {
-                prty = PriorityEnum.WARNING;
-            } else if (prtyText.equals("fatal")) {
-                prty = PriorityEnum.FATAL;
-            } else if (prtyText.equals("info")) {
-                prty = PriorityEnum.INFO;
-            } else if (prtyText.equals("remark")) {
-                prty = PriorityEnum.REMARK;
-            } else if (prtyText.equals("default")) {
-                prty = PriorityEnum.DEFAULT;
-            } else if (prtyText.equals("critical")) {
-                prty = PriorityEnum.CRITICAL;
-            } else {
-                log.debug("Error: priority " + prtyText + " is not acceptable by metadata and set to Error");
-                prty = PriorityEnum.ERROR;
-                priorityText =  "error";
-                //throw new Exception("priority should not be null");
-            }
-
-            this.logPath = logPath.replace('\\', '/');
-            this.text = text;
-            priority = prty;
-            this.component = component;
-            this.lineNumber = lineNumber;
-            this.elapsedTime = time;
-            whatEntry = entry;
-        }
-
-        public void setElapsedTime(float time) {
-            this.elapsedTime = time;
-        }
-    /**
-     * Helper function to return to getLogPath
-     * @
-     */
-
-        public String getLogPath()
-        {
-            return logPath;
-        }
-        
-        public int getLineNumber()
-        {
-            return lineNumber;
-        }
-        
-        public String getText()
-        {
-            return text;
-        }
-
-        public void setText(String text)
-        {
-            this.text = text;
-        }
-
-        public PriorityEnum getPriority()
-        {
-            return priority;
-        }
-
-        public String getPriorityText() {
-            return priorityText;
-        }
-        
-        public float getElapsedTime() {
-            return elapsedTime;
-        }
-
-        public void setPriority(PriorityEnum priority)
-        {
-            this.priority = priority;
-        }
-
-        public String getComponent()
-        {
-            return component;
-        }
-
-        public void setComponent(String component)
-        {
-            this.component = component;
-        }
-        
-        public WhatEntry getWhatEntry() {
-            return whatEntry;
-        }
-        
-        public String toString() {
-            return "file:" + logPath + "[" + lineNumber + "], component:" + component + ", priority:" +
-                   priorityText + " \n" + text;
-        }
-    }
-
-    /** Levels of log entry types. */
-    public enum PriorityEnum
-    {
-        // The values assigned to these enums should match the 
-        // automatically assigned values created in the database table
-        FATAL(1), ERROR(2), WARNING(3), INFO(4), REMARK(5), DEFAULT(6), CRITICAL(7);
-        private final int value;
-        PriorityEnum(int value)
-        {
-            this.value = value;
-        }
-        public int getValue() {
-            return value;
-        }
-    
-        public  static PriorityEnum getPriorityEnum( int i ) {
-            final PriorityEnum[] values  = values();
-            return i >= 0 && i < values .length ? values[i] : FATAL;
-        }
-    };
-
-    /**
-     * Helper class to store the Component and output association.
-     */
-    public static class WhatEntry
-    {
-        private String component;
-        private List<WhatLogMember> members;
-
-    /**
-     * Constructor for the helper class 
-     */
-        public WhatEntry(String comp, List<WhatLogMember> mbrs)
-        {
-            component = comp;
-            members = mbrs;
-        }
-        
-        public String getComponent() {
-            return component;
-        }
-
-        public List<WhatLogMember> getMembers() {
-            return members;
-        }
-    }
-
-
-    /**
-     * Helper class to store the what log output into orm.
-     */
-    public static class WhatLogMember {
-        private String member;
-        private boolean memberExists;
-
-        public WhatLogMember(String mbr, boolean exists) {
-            member = mbr;
-            memberExists = exists;
-        }
-        
-        public String getMember() {
-            return member;
-        }
-        
-        public boolean getMemberExists() {
-            return memberExists;
-        }
-    }
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/MetadataEntry.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +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.jpa.entity.metadata;
-
-
-import javax.persistence.CascadeType;
-import javax.persistence.ManyToOne;
-import javax.persistence.Column;
-import javax.persistence.Basic;
-import javax.persistence.JoinColumn;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-
-/**
- * Entity class which stores the the mapping of all the other tables
- * along with actual error information.
- */
-@Entity
-public class MetadataEntry {
-
-    /// Maximum size of the text we store in the metadata
-    public static final int TEXT_LENGTH = 500;
-
-    @Id
-    @Column(name = "ENTRY_ID")
-    @GeneratedValue(strategy = GenerationType.SEQUENCE)
-    private int id;
-
-    @Basic
-    private int lineNumber;
-
-    @Basic
-    @Column(length = TEXT_LENGTH)
-    private String text;
-
-    @Basic
-    @Column(name = "COMPONENT_ID", insertable = false, updatable = false)
-    private int componentId;
-
-    @Basic
-    @Column(name = "PRIORITY_ID", insertable = false, updatable = false)
-    private int priorityId;
-
-    @ManyToOne(cascade = CascadeType.REMOVE, optional = false)
-    @JoinColumn(name = "COMPONENT_ID", referencedColumnName = "COMPONENT_ID")
-    private Component component;
-
-    @ManyToOne(cascade = CascadeType.REMOVE, optional = false)
-    @JoinColumn(name = "PRIORITY_ID", referencedColumnName = "PRIORITY_ID")
-    private Priority priority;
-
-    @Column(name = "LOGPATH_ID", insertable = false, updatable = false)
-    private int logPathId;
-    
-    @ManyToOne(cascade = CascadeType.REMOVE, optional = false)
-    @JoinColumn(name = "LOGPATH_ID", referencedColumnName = "LOGPATH_ID")
-    private LogFile  logFile;
-    
-    /**
-     * Helper function to get the identifier of the metadata record
-     * which is being stored in the database.
-     *  @return id - identifier for the log record.
-     */
-    public int getId() {
-        return id;
-    }
-
-    /**
-     * Helper function to set the logfile associated to the metadata entry.
-     *  @param LogFile object associated to this entry.
-     */
-    public void setLogFile(LogFile file) {
-        logFile = file;
-    }
-
-    /**
-     * Helper function to set the priority object associated to this entry.
-     *  @param priority object associated to this entry.
-     */
-    public void setPriority(Priority prty) {
-        priority = prty;
-    }
-
-    /**
-     * Helper function to set the component object associated to this entry.
-     *  @param component object associated to this entry.
-     */
-    public void setComponent(Component cmpt) {
-        component = cmpt;
-    }
-
-    /**
-     * Helper function to set the identifier for this entry.
-     *  @param id identifier to be set for this entry.
-     */
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    /**
-     * Helper function to set the log text associated to this entry.
-     *  @param txt - text representing this log entry.
-     */
-    public void setText(String txt) {
-        // Let's trunk ourselves the text we are passing to the 
-        // storage.
-        if (txt.length() > TEXT_LENGTH) {
-            txt = txt.substring(0, TEXT_LENGTH);
-        }
-        text = txt;
-    }
-
-    /**
-     * Helper function to set the line number for this entry.
-     *  @param line number associated to this entry.
-     */
-    public void setLineNumber(int number) {
-        lineNumber = number;
-    }
-
-    /**
-     * Helper function to get the text message associated to this entry.
-     *  @return text message of this entry.
-     */
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * Helper function to get line number of the error message associated
-     * with this object.
-     *  @return line number associated to this entry.
-     */
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    /**
-     * Helper function to get the log path id of this entry.
-     *  @return log path id associated to this entry.
-     */
-    public int getLogPathId() {
-        return logPathId;
-    }
-
-    /**
-     * Helper function to set the logpath id associated to this entry.
-     *  @param id logpath id of this entry.
-     */
-    public void setLogPathId(int id) {
-        logPathId = id;
-    }
-
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/MetadataUtil.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +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.jpa.entity.metadata;
-
-import java.util.HashMap;
-import com.nokia.helium.jpa.ORMEntityManager;
-import com.nokia.helium.jpa.ORMUtil;
-import org.apache.log4j.Logger;
-
-/**
- * Utility class for writing metadata information to db
- * using JPA.
- */
-public final class MetadataUtil {
-
-    private static Logger log = Logger.getLogger(MetadataUtil.class);
-    
-    private static Metadata metadata;
-    
-    private static HashMap<String, Metadata> metadataMap = new HashMap<String, Metadata>();
-    
-    private static Object mutexObject = new Object();
-    
-    /**
-     * Make sure the class cannot be instantiated
-     */
-    private MetadataUtil() {
-    }
-
-    /**
-     * Initialize the orm, calls ORMUtil initialize function to create
-     * entity manager and commit count objects.
-     * @param urlPath - url path for which the connection needs to be
-     * initialized.
-     */
-    public static void initializeORM(String urlPath) {
-        synchronized (mutexObject) {
-            ORMUtil.initializeORM(urlPath);
-        }
-    }
-
-    /**
-     * Finalize the orm, calls ORMUtil finalize function to close
-     * entity manager.
-     */
-    public static void finalizeORM(String urlPath) {
-        synchronized (mutexObject) {
-            log.debug("finalizing orm");
-            ORMUtil.finalizeORM(urlPath);
-        }
-    }
-
-    /**
-     * Finalize the orm, calls ORMUtil finalize function to close
-     * entity manager.
-     */
-    public static void finalizeMetadata(String urlPath, String logPath) {
-        synchronized (mutexObject) {
-            ORMEntityManager manager = ORMUtil.getEntityManager(urlPath);
-            manager.commitToDB();
-            log.debug("finalizing metadata: " + logPath);
-            metadataMap.remove(logPath);
-        }
-    }
-
-    /**
-     * Adding entry to the database.
-     * @param entry - Adding a log entry
-     */
-    public static void addEntry(String urlPath, Metadata.LogEntry entry) {
-        synchronized (mutexObject) {
-            metadata = getMetadata(entry.getLogPath(), urlPath);
-            metadata.addEntry(entry);
-        }
-    }
-
-    /**
-     * 
-     */
-    public static void addEntry(String urlPath, String logPath, int time) {
-        synchronized (mutexObject) {
-            metadata = getMetadata(logPath, urlPath);
-            metadata.addExecutionTime(time);
-        }
-    }
-    
-    /**
-     * Remove entry from the database for specific log file.
-     * @param urlPath - db path
-     * @param logPath - log file for which all the entries to be removed.
-     */
-    public static void removeEntries(String urlPath, String logPath) {
-        synchronized (mutexObject) {
-            metadata = getMetadata(logPath, urlPath);
-            metadata.removeEntries();
-            finalizeMetadata(urlPath, logPath);
-        }
-    }
-
-    /**
-     * Returns the metadata associated with the log path, if metadata doesn't 
-     * exists in the cache, creates it.
-     * @param urlPath - db path
-     * @param logPath - log file for which all the entries to be removed.
-     */
-    private static Metadata getMetadata(String logPath, String urlPath) {
-        ORMEntityManager manager = ORMUtil.getEntityManager(urlPath);
-        metadata = metadataMap.get(logPath);
-        if (metadata == null) {
-            log.debug("initializing metadatamap for logpath" + logPath);
-            metadata = new Metadata(manager, logPath);
-            
-            metadataMap.put(logPath, metadata);
-        }
-        return metadata;
-    }
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/Priority.java	Wed Jun 16 16:51:40 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.jpa.entity.metadata;
-
-
-import javax.persistence.Entity;
-//import org.apache.tools.ant.BuildException;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.Column;
-import javax.persistence.Basic;
-
-/**
- * Entity Class stores the priority.
- */
-@Entity
-public class Priority {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE)
-    @Column(name = "PRIORITY_ID")
-    private int id;
-
-    @Basic
-    @Column(name = "PRIORITY")
-    private String priority;
-
-    @ManyToOne
-    private Metadata metadata;
-
-    /**
-     * Default constructor.
-     */
-    public Priority() {
-
-    }
-
-    /**
-     * Helper function to set the priority string.
-     * @param prty - priority string to be stored for this
-     * priority object.
-     */
-    public void setPriority(String prty) {
-        priority = prty;
-    }
-
-    /*
-     * Helper function to get the priority of the priority object
-     * @return priority string of this priority object.
-     */
-    public String getPriority() {
-        return priority;
-    }
-
-    /*
-     * Set the identifier of this priority object in the db.
-     * @param id for this priority in the db
-     */
-    public void setId(int identifier) {
-        id = identifier;
-    }
-
-    /*
-     * Gets the identifier of the priority object.
-     * @return id of this priority object.
-     */
-    public int getId() {
-        return id;
-    }
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/WhatLogEntry.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +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.jpa.entity.metadata;
-
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.Column;
-import javax.persistence.Basic;
-import javax.persistence.JoinColumn;
-
-
-/**
- * Entity class to store the component information.
- */
-@Entity
-public class WhatLogEntry {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE)
-    @Column(name = "WHATLOG_ENTRY_ID")
-    private int id;
-
-    @Basic
-    @Column(name = "COMPONENT_ID", insertable = false, updatable = false)
-    private int componentID;
-
-    @Basic
-    @Column(name = "MEMBER", nullable = false)
-    private String member;
-
-    @Basic
-    @Column(name = "MISSING")
-    private boolean missing;
-
-    @ManyToOne(cascade = CascadeType.REMOVE)
-    @JoinColumn(name = "COMPONENT_ID", referencedColumnName = "COMPONENT_ID")
-    private Component component;
-
-    /**
-     * Helper function to set the identifier.
-     * @param identifier to set the identifier for the component.
-     */
-    public void setId(int identifier) {
-        id = identifier;
-    }
-
-    /**
-     * Helper function to set the identifier.
-     * @return the identifier of the component.
-     */
-    public int getId() {
-        return id;
-    }
-
-    /**
-     * Helper function to set component name.
-     * @param cmp string to be set to.
-     */
-    public void setComponent(Component cmp) {
-        component = cmp;
-    }
-
-    /**
-     * Helper function to set log file associated
-     * with this component.
-     * @param file associated file to this component.
-     */
-    public void setMember(String mbr) {
-        member = mbr;
-    }
-
-    /**
-     * Helper function to return component string.
-     * @return component name of this component.
-     */
-    public Component getComponent() {
-        return component;
-    }
-
-    /**
-     * Helper function to return log file associated with this component.
-     * @return component name of this component.
-     */
-    public String getMember() {
-        return member;
-    }
-
-    public void setMissing(boolean nonexistance) {
-        missing = nonexistance;
-    }
-
-    public boolean getMissing() {
-        return missing;
-    }
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/log4j.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : libs.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:
-
-============================================================================
--->
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
-
-    <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
-            <appender-ref ref="FILE"/>
-            <appender-ref ref="CONSOLE"/>
-    </appender>
-
-    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
-        <layout class="org.apache.log4j.PatternLayout">
-               <param name="ConversionPattern" 
-                            value="%d{HH:mm:ss,SSS}  %-2p - %m  %n"/>
-        </layout>
-    <filter class="org.apache.log4j.varia.LevelMatchFilter">
-      <param name="LevelToMatch" value="DEBUG" />
-      <param name="AcceptOnMatch" value="false" />
-    </filter>
-    </appender>
-
-
-    <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
-        <param name="File" value="hlm_debug.log"/>
-        <param name="MaxFileSize" value="1024KB"/>
-        <param name="append" value="true"/>
-        <layout class="org.apache.log4j.PatternLayout">
-               <param name="ConversionPattern" 
-                            value="%d{HH:mm:ss,SSS}  %-2p - %m  %n"/>
-        </layout>
-    <filter class="org.apache.log4j.varia.LevelMatchFilter">
-      <param name="LevelToMatch" value="DEBUG" />
-      <param name="AcceptOnMatch" value="true" />
-    </filter>
-
-    <filter class="org.apache.log4j.varia.DenyAllFilter"/>
-
-    </appender>
-
-  <logger name="com.nokia" additivity="false">
-      <level value="DEBUG" />
-    <appender-ref ref="ASYNC" />
-  </logger>
-
-    <root>
-        <priority value="DEBUG"/>
-        <appender-ref ref="CONSOLE"/>
-    </root>
-</log4j:configuration>
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/Antlib.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/Antlib.java	Fri Aug 13 14:59:05 2010 +0300
@@ -25,15 +25,14 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.tools.ant.TaskContainer;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.ComponentHelper;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Task;
-import org.apache.tools.ant.helper.ProjectHelper2;
+import org.apache.tools.ant.TaskContainer;
 import org.apache.tools.ant.UnknownElement;
-
-import org.apache.tools.ant.taskdefs.*;
+import org.apache.tools.ant.helper.ProjectHelper2;
+import org.apache.tools.ant.taskdefs.AntlibDefinition;
 
 /**
  * Antlib task. It does not
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/BuildStatusDef.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/BuildStatusDef.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,23 +1,22 @@
 /*
-* 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: 
-*
-*/
- 
+ * 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;
 
-
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -31,48 +30,47 @@
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Target;
+import org.apache.tools.ant.types.DataType;
 import org.dom4j.Comment;
 import org.dom4j.Document;
+import org.dom4j.DocumentException;
 import org.dom4j.Element;
 import org.dom4j.Node;
 import org.dom4j.Visitor;
 import org.dom4j.VisitorSupport;
 import org.dom4j.io.SAXReader;
-import org.dom4j.DocumentException;
 
-import com.nokia.helium.core.ant.types.HlmPostDefImpl;
-
+import com.nokia.helium.ant.data.PropertyCommentMeta;
 import com.nokia.helium.ant.data.PropertyMeta;
-
+import com.nokia.helium.core.ant.PostBuildAction;
 
 /**
  * Class to store the status of the signal of a particular target.
  */
-public class BuildStatusDef extends HlmPostDefImpl
-{
+public class BuildStatusDef extends DataType implements PostBuildAction {
+    private static final String DEPRECATED = "deprecated:";
     private HashSet<String> output = new HashSet<String>();
-        
-    
-    public void execute(Project prj, String module, String[] targetNames)
-    {
-        //Run after targets execute so dynamic target names are resolved
-        for (int i = 0; i < targetNames.length; i++)
-        {
+
+    @Override
+    public void executeOnPostBuild(Project project, String[] targetNames) {
+        // Run after targets execute so dynamic target names are resolved
+        for (int i = 0; i < targetNames.length; i++) {
             String[] array = { targetNames[i] };
             Target target = findTarget(targetNames[i], getProject(), array);
             targetCallsHeliumTarget(target, getProject());
         }
         checkTargetsProperties(getProject());
-        
-        if (!output.isEmpty())
-        {
+        checkDeprecatedProperties(getProject());
+
+        if (!output.isEmpty()) {
             log("*** Configuration report ***", Project.MSG_INFO);
-            for (String outputStr : output)
+            for (String outputStr : output) {
                 log(outputStr, Project.MSG_INFO);
+            }
         }
     }
-    
-        /**
+
+    /**
      * @param desiredTarget
      *            Target name to search
      * @param project
@@ -82,8 +80,8 @@
      * 
      */
     @SuppressWarnings("unchecked")
-    public Target findTarget(String desiredTarget, Project project, String[] targetNames)
-    {
+    public Target findTarget(String desiredTarget, Project project,
+            String[] targetNames) {
         Hashtable<String, Target> targets;
         Vector<Target> sorted;
 
@@ -94,100 +92,102 @@
         sorted = project.topoSort(targetNames[0], targets);
 
         // Find the desiredTarget Target object
-        for (Target target : sorted)
-        {
-            if (target.getName().equals(desiredTarget))
-            {
+        for (Target target : sorted) {
+            if (target.getName().equals(desiredTarget)) {
                 return target;
             }
         }
-        throw new BuildException("Could not find target matching " + desiredTarget + "\n");
+        throw new BuildException("Could not find target matching "
+                + desiredTarget + "\n");
     }
-    
-     /**
-     * If a target defined outside helium are calling a private Helium target then print warning
+
+    /**
+     * If a target defined outside helium are calling a private Helium target
+     * then print warning
      * 
      */
     @SuppressWarnings("unchecked")
-    public void targetCallsHeliumTarget(Target target, Project project)
-    {        
+    public void targetCallsHeliumTarget(Target target, Project project) {
         String location = target.getLocation().getFileName();
-        
+
         try {
-            String heliumpath = new File(project.getProperty("helium.dir")).getCanonicalPath();
+            String heliumpath = new File(project.getProperty("helium.dir"))
+                    .getCanonicalPath();
             String targetpath = new File(location).getCanonicalPath();
-            
-            if (!targetpath.contains(heliumpath))
-            {   
+
+            if (!targetpath.contains(heliumpath)) {
                 ArrayList<String> antcallTargets = new ArrayList<String>();
-                Visitor visitorTarget = new AntTargetVisitor(antcallTargets, project);
-                
+                Visitor visitorTarget = new AntTargetVisitor(antcallTargets,
+                        project);
+
                 Element element = findTargetElement(target, project);
-                if (element != null)
+                if (element != null) {
                     element.accept(visitorTarget);
-                for (String depTargetString : antcallTargets)
-                {
+                }
+                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);
+                        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();)
-                {
+
+                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);
+                        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);
+                        // 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
-            {
+            } else {
                 checkIfTargetPrivate(target, project);
             }
 
         } catch (IOException e) {
-            //We are Ignoring the errors as no need to fail the build.
-            log("IOException occured while target defined outside helium are calling a private Helium target " + e.getMessage(), Project.MSG_DEBUG);
+            // We are Ignoring the errors as no need to fail the build.
+            log(
+                    "IOException occured while target defined outside helium are calling a private Helium target "
+                            + e.getMessage(), Project.MSG_DEBUG);
             e.printStackTrace();
         }
     }
 
-    private class AntTargetVisitor extends VisitorSupport
-    {
+    private class AntTargetVisitor extends VisitorSupport {
         private List<String> targetList;
         private Project project;
 
-        public AntTargetVisitor(List<String> targetList, Project project)
-        {
+        public AntTargetVisitor(List<String> targetList, Project project) {
             this.targetList = targetList;
             this.project = project;
         }
 
-        public void visit(Element node)
-        {
+        public void visit(Element node) {
             String name = node.getName();
-            if (name.equals("antcall") || name.equals("runtarget"))
-            {
+            if (name.equals("antcall") || name.equals("runtarget")) {
                 String text = node.attributeValue("target");
                 extractTarget(text);
             }
         }
 
-        private void extractTarget(String text)
-        {
+        private void extractTarget(String text) {
             String iText = project.replaceProperties(text);
             targetList.add(iText);
         }
@@ -197,134 +197,224 @@
     /**
      * Find the xml Element for the target
      * 
-     */      
+     */
     @SuppressWarnings("unchecked")
-    public Element findTargetElement(Target target, Project project)
-    {
+    public Element findTargetElement(Target target, Project project) {
         SAXReader xmlReader = new SAXReader();
-        
+
         Document antDoc = null;
-        
+
         String location = target.getLocation().getFileName();
-        
+
         try {
             File file = new File(location);
             antDoc = xmlReader.read(file);
         } catch (DocumentException e) {
             // We are Ignoring the errors as no need to fail the build.
-            log("Not able read the XML file. " + e.getMessage(), Project.MSG_WARN);
+            log("Not able read the XML file. " + e.getMessage(),
+                    Project.MSG_WARN);
         }
-          
+
         String projectName = antDoc.valueOf("/project/@name");
-        for (Iterator<Element> iterator = antDoc.selectNodes("//target").iterator(); iterator.hasNext();)
-        {
+        for (Iterator<Element> iterator = antDoc.selectNodes("//target")
+                .iterator(); iterator.hasNext();) {
             Element element = iterator.next();
 
             String targetName = element.attributeValue("name");
-            if (targetName.equals(target.getName()) || (projectName + "." + targetName).equals(target.getName()))
+            if (targetName.equals(target.getName())
+                    || (projectName + "." + targetName)
+                            .equals(target.getName())) {
                 return element;
+            }
         }
         return null;
     }
-    
-        /**
+
+    /**
      * If target has comment that says it is private them print warning
      * 
      */
     @SuppressWarnings("unchecked")
-    public void checkIfTargetPrivate(Target target, Project project)
-    { 
+    public void checkIfTargetPrivate(Target target, Project project) {
         Element targetElement = findTargetElement(target, project);
-        if (targetElement != null)
-        {
-            List<Node> children = targetElement.selectNodes("preceding-sibling::node()");
-            if (children.size() > 0)
-            {
+        if (targetElement != null) {
+            List<Node> children = targetElement
+                    .selectNodes("preceding-sibling::node()");
+            if (children.size() > 0) {
                 // Scan past the text nodes, which are most likely whitespace
                 int index = children.size() - 1;
                 Node child = children.get(index);
-                while (index > 0 && child.getNodeType() == Node.TEXT_NODE)
-                {
+                while (index > 0 && child.getNodeType() == Node.TEXT_NODE) {
                     index--;
                     child = (Node) children.get(index);
                 }
-    
+
                 // Check if there is a comment node
                 String commentText = null;
-                if (child.getNodeType() == Node.COMMENT_NODE)
-                {
+                if (child.getNodeType() == Node.COMMENT_NODE) {
                     Comment macroComment = (Comment) child;
                     commentText = macroComment.getStringValue().trim();
-                    //log(macroName + " comment: " + commentText, Project.MSG_DEBUG);
+                    // log(macroName + " comment: " + commentText,
+                    // Project.MSG_DEBUG);
                 }
-    
-                if (commentText != null)
-                {
-                    if (commentText.contains("Private:"))
-                    {
-                        output.add("Warning: " + target.getName() + " is private and should only be called by helium");
+
+                if (commentText != null) {
+                    if (commentText.contains("Private:")) {
+                        output
+                                .add("Warning: "
+                                        + target.getName()
+                                        + " is private and should only be called by helium");
                     }
-                    if (commentText.contains("<deprecated>"))
-                    {
-                        output.add("Warning: " + target.getName() + "\n" + commentText);
+                    if (commentText.contains("<deprecated>")) {
+                        output.add("Warning: " + target.getName() + "\n"
+                                + commentText);
                     }
                 }
             }
         }
     }
-    
-    @SuppressWarnings("unchecked")
-    public void checkTargetsProperties(Project project)
-    {
+
+    /**
+     * To check, is the private properties are overridden by customers.
+     * 
+     * @param project
+     */
+    public void checkTargetsProperties(Project project) {
         try {
-            String heliumpath = new File(project.getProperty("helium.dir")).getCanonicalPath();
-            com.nokia.helium.ant.data.Database db = new com.nokia.helium.ant.data.Database(project, "private");
+            String heliumpath = new File(project.getProperty("helium.dir"))
+                    .getCanonicalPath();
+            com.nokia.helium.ant.data.Database db = new com.nokia.helium.ant.data.Database(
+                    project, "private");
             ArrayList<String> customerProps = getCustomerProperties(project);
-                            
-            for (PropertyMeta propertyMeta : db.getProperties())
-            {
-                if (propertyMeta.getLocation().contains(heliumpath) && propertyMeta.getScope().equals("private") && customerProps.contains(propertyMeta.getName()))
+
+            for (PropertyMeta propertyMeta : db.getProperties()) {
+                if (propertyMeta.getType().equals("boolean"))
+                {
+                    String value = project.getProperty(propertyMeta.getName());
+                    if (value != null && !value.equals("true") && !value.equals("false"))
+                    {
+                        output.add("Warning: " + propertyMeta.getName() + " property is boolean type and not set to true or false, value is " + value);
+                    }
+                }
+            }
+            for (PropertyCommentMeta propertyMeta : db.getCommentProperties()) {
+                if (propertyMeta.getType().equals("boolean"))
                 {
-                    output.add("Warning: " +  propertyMeta.getName() + " property has been overridden");
+                    String value = project.getProperty(propertyMeta.getName());
+                    if (value != null && !value.equals("true") && !value.equals("false"))
+                    {
+                        output.add("Warning: " + propertyMeta.getName() + " property is boolean type and not set to true or false, value is " + value);
+                    }
+                }
+            }
+            for (PropertyMeta propertyMeta : db.getProperties()) {
+                if (propertyMeta.getLocation().contains(heliumpath)
+                        && propertyMeta.getScope().equals("private")
+                        && customerProps.contains(propertyMeta.getName())) {
+                    output.add("Warning: " + propertyMeta.getName()
+                            + " property has been overridden");
+                }
+            }
+
+            for (PropertyCommentMeta propertyCommentMeta : db.getCommentProperties()) {
+                if (propertyCommentMeta.getLocation().contains(heliumpath)
+                        && propertyCommentMeta.getScope().equals("private")
+                        && customerProps
+                                .contains(propertyCommentMeta.getName())) {
+                    output.add("Warning: " + propertyCommentMeta.getName()
+                            + " property has been overridden");
                 }
             }
-        } catch (IOException e) { e.printStackTrace(); }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
     }
-    
+
+    /**
+     * To display the warnings for deprecated properties.
+     * 
+     * @param project
+     */
+    public void checkDeprecatedProperties(Project project) {
+        try {
+            String heliumpath = new File(project.getProperty("helium.dir"))
+                    .getCanonicalPath();
+            com.nokia.helium.ant.data.Database db = new com.nokia.helium.ant.data.Database(
+                    project, "private");
+            ArrayList<String> customerProps = getCustomerProperties(project);
+
+            for (PropertyMeta propertyMeta : db.getProperties()) {
+                if (propertyMeta.getLocation().contains(heliumpath)
+                        && (!propertyMeta.getDeprecated().equals(""))
+                        && customerProps.contains(propertyMeta.getName())) {
+                    output.add("Warning: "
+                            + propertyMeta.getName()
+                            + " property has been deprecated "
+                            + propertyMeta.getDeprecated()
+                            + "."
+                            + propertyMeta.getSummary().substring(
+                                    propertyMeta.getSummary().lastIndexOf(
+                                            DEPRECATED)
+                                            + DEPRECATED.length()));
+                }
+            }
+
+            for (PropertyCommentMeta propertyCommentMeta : db
+                    .getCommentProperties()) {
+                if (propertyCommentMeta.getLocation().contains(heliumpath)
+                        && (!propertyCommentMeta.getDeprecated().equals(""))
+                        && customerProps
+                                .contains(propertyCommentMeta.getName())) {
+                    output.add("Warning: "
+                            + propertyCommentMeta.getName()
+                            + " property has been deprecated "
+                            + propertyCommentMeta.getDeprecated()
+                            + "."
+                            + propertyCommentMeta.getSummary().substring(
+                                    propertyCommentMeta.getSummary()
+                                            .lastIndexOf(DEPRECATED)
+                                            + DEPRECATED.length()));
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
     @SuppressWarnings("unchecked")
-    public ArrayList<String> getCustomerProperties(Project project)
-    {
+    public ArrayList<String> getCustomerProperties(Project project) {
         ArrayList<String> props = new ArrayList<String>();
         Database db = new Database(null, null, null);
         try {
-            String heliumpath = new File(project.getProperty("helium.dir")).getCanonicalPath();
+            String heliumpath = new File(project.getProperty("helium.dir"))
+                    .getCanonicalPath();
 
-            for (Object object : db.getAntFiles(project))
-            {
-                String antFile = (String)object;
+            for (Object object : db.getAntFiles(project)) {
+                String antFile = (String) object;
                 antFile = new File(antFile).getCanonicalPath();
 
-                if (!antFile.contains(heliumpath))
-                {
+                if (!antFile.contains(heliumpath)) {
                     SAXReader xmlReader = new SAXReader();
                     Document antDoc = xmlReader.read(new File(antFile));
-                    
-                    List<Element> propertyNodes = antDoc.selectNodes("//property | //param");
-                    for (Element propertyNode : propertyNodes)
-                    {
+
+                    List<Element> propertyNodes = antDoc
+                            .selectNodes("//property | //param");
+                    for (Element propertyNode : propertyNodes) {
                         props.add(propertyNode.attributeValue("name"));
                     }
                 }
             }
         } catch (IOException e) {
             // We are Ignoring the errors as no need to fail the build.
-            log("IOException: Not able read the Customer Properties " + e.getMessage(), Project.MSG_WARN);
+            log("IOException: Not able read the Customer Properties "
+                    + e.getMessage(), Project.MSG_WARN);
         } catch (DocumentException e) {
             // We are Ignoring the errors as no need to fail the build.
-            log("DocumentException: Not able read the Customer Properties " + e.getMessage(), Project.MSG_WARN);
+            log("DocumentException: Not able read the Customer Properties "
+                    + e.getMessage(), Project.MSG_WARN);
         }
-          
+
         return props;
     }
-    
+
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/Database.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/Database.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,20 +1,20 @@
 /*
-* 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: 
-*
-*/
- 
+ * 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;
 
 import info.bliki.wiki.model.WikiModel;
@@ -58,13 +58,11 @@
 import org.dom4j.io.SAXReader;
 import org.dom4j.io.XMLWriter;
 
-
 /**
  * Reads the current ant project and a fileset and generates a xml file with a summary of targets,
  * macros and properties.
  */
-public class Database
-{
+public class Database {
     private Project project;
     private ResourceCollection rc;
     private Task task;
@@ -73,9 +71,8 @@
     private HashMap<String, List<String>> globalSignalList = new HashMap<String, List<String>>();
     private HashMap<String, String> map = new HashMap<String, String>();
     private Document signaldoc;
-    
-    public Database(Project project, ResourceCollection rc, Task task)
-    {
+
+    public Database(Project project, ResourceCollection rc, Task task) {
         this.project = project;
         this.rc = rc;
         this.task = task;
@@ -97,33 +94,29 @@
     public void log(String msg, int level) {
         if (task != null) {
             task.log(msg, level);
-        } else if (debug) {            
+        }
+        else if (debug) {
             project.log(msg, level);
         }
     }
 
-
-    public void setRefid(Reference r)
-    {
+    public void setRefid(Reference r) {
         Object object = r.getReferencedObject();
-        if (!(object instanceof ResourceCollection))
-        {
+        if (!(object instanceof ResourceCollection)) {
             throw new BuildException(r.getRefId() + " doesn\'t denote a ResourceCollection");
         }
         rc = (ResourceCollection) object;
     }
 
     public Document createDOM() throws DocumentException, IOException {
-        //log("Building Ant project database", Project.MSG_DEBUG);
+        // log("Building Ant project database", Project.MSG_DEBUG);
         Element root = DocumentHelper.createElement("antDatabase");
         Document outDoc = DocumentHelper.createDocument(root);
         ArrayList<String> antFiles = getAntFiles(getProject(), homeFilesOnly);
-        for (String antFile : antFiles)
-        {
-            readSignals(root, antFile);
+        for (String antFile : antFiles) {
+            readSignals(antFile);
         }
-        for (String antFile : antFiles)
-        {
+        for (String antFile : antFiles) {
             parseAntFile(root, antFile);
         }
 
@@ -141,53 +134,53 @@
             }
             XMLWriter out = new XMLWriter(outStream, OutputFormat.createPrettyPrint());
             out.write(outDoc);
-        } catch (DocumentException e) {
+        }
+        catch (DocumentException e) {
             throw new BuildException(e.getMessage());
-        } catch (IOException e) {
+        }
+        catch (IOException e) {
             throw new BuildException(e.getMessage());
         }
     }
 
     @SuppressWarnings("unchecked")
-    private void readSignals(Element root, String antFile) throws DocumentException, IOException
-    {
+    private void readSignals(String antFile) throws DocumentException, IOException {
         SAXReader xmlReader = new SAXReader();
         Document antDoc = xmlReader.read(new File(antFile));
 
         XPath xpath = DocumentHelper.createXPath("//hlm:signalListenerConfig");
         xpath.setNamespaceURIs(map);
         List<Element> signalNodes = xpath.selectNodes(antDoc);
-        for (Element propertyNode : signalNodes)
-        {
+        for (Element propertyNode : signalNodes) {
             signaldoc = antDoc;
             String signalid = propertyNode.attributeValue("id");
 
             String signaltarget = propertyNode.attributeValue("target");
             List<String> existinglist = globalSignalList.get(signaltarget);
             String failbuild = signalType(signalid, signaldoc);
-            if (existinglist == null)
+            if (existinglist == null) {
                 existinglist = new ArrayList<String>();
+            }
             existinglist.add(signalid + "," + failbuild);
             globalSignalList.put(signaltarget, existinglist);
         }
     }
 
     @SuppressWarnings("unchecked")
-    private String signalType(String signalid, Document antDoc)
-    {
-        XPath xpath2 = DocumentHelper.createXPath("//hlm:signalListenerConfig[@id='" + signalid + "']/signalNotifierInput/signalInput");
+    private String signalType(String signalid, Document antDoc) {
+        XPath xpath2 = DocumentHelper.createXPath("//hlm:signalListenerConfig[@id='" + signalid
+            + "']/signalNotifierInput/signalInput");
         xpath2.setNamespaceURIs(map);
         List<Element> signalNodes3 = xpath2.selectNodes(antDoc);
 
-        for (Element propertyNode3 : signalNodes3)
-        {
+        for (Element propertyNode3 : signalNodes3) {
             String signalinputid = propertyNode3.attributeValue("refid");
 
-            XPath xpath3 = DocumentHelper.createXPath("//hlm:signalInput[@id='" + signalinputid + "']");
+            XPath xpath3 = DocumentHelper.createXPath("//hlm:signalInput[@id='" + signalinputid
+                + "']");
             xpath3.setNamespaceURIs(map);
             List<Element> signalNodes4 = xpath3.selectNodes(antDoc);
-            for (Element propertyNode4 : signalNodes4)
-            {
+            for (Element propertyNode4 : signalNodes4) {
                 return propertyNode4.attributeValue("failbuild");
             }
         }
@@ -201,8 +194,7 @@
      * @throws IOException
      */
     @SuppressWarnings("unchecked")
-    private void parseAntFile(Element root, String antFile) throws DocumentException, IOException
-    {
+    private void parseAntFile(Element root, String antFile) throws DocumentException, IOException {
         log("Processing Ant file: " + antFile, Project.MSG_DEBUG);
         SAXReader xmlReader = new SAXReader();
         Document antDoc = xmlReader.read(new File(antFile));
@@ -222,8 +214,7 @@
 
         // descriptionElement.setText(description);
 
-        if (!antFile.contains("antlib.xml") && description.equals(""))
-        {
+        if (!antFile.contains("antlib.xml") && description.equals("")) {
             log("Project has no comment: " + projectName, Project.MSG_WARN);
         }
 
@@ -232,78 +223,67 @@
 
         // Project import statements
         List importNodes = antDoc.selectNodes("//import");
-        for (Iterator iterator = importNodes.iterator(); iterator.hasNext();)
-        {
+        for (Iterator iterator = importNodes.iterator(); iterator.hasNext();) {
             Element importCurrentNode = (Element) iterator.next();
-            addTextElement(projectElement, "fileDependency", importCurrentNode
-                    .attributeValue("file"));
+            addTextElement(projectElement, "fileDependency", importCurrentNode.attributeValue("file"));
         }
 
         projectElement.addElement("pythonDependency");
 
         // Project exec statements
         List<Element> execNodes = antDoc.selectNodes("//exec//arg");
-        for (Element argNode : execNodes)
-        {
+        for (Element argNode : execNodes) {
             String argValue = argNode.attributeValue("value");
 
-            if (argValue == null)
+            if (argValue == null) {
                 argValue = argNode.attributeValue("line");
+            }
 
-            if (argValue != null)
-            {
+            if (argValue != null) {
                 Pattern filePattern = Pattern.compile(".pl|.py|.bat|.xml|.txt");
                 Matcher fileMatcher = filePattern.matcher(argValue);
-                if (fileMatcher.find())
-                {
+                if (fileMatcher.find()) {
                     addTextElement(projectElement, "fileDependency", argValue);
                 }
             }
         }
 
         List<Element> targetNodes = antDoc.selectNodes("//target");
-        for (Element targetNode : targetNodes)
-        {
+        for (Element targetNode : targetNodes) {
             processTarget(targetNode, projectElement);
         }
 
         // Process macrodef and scriptdef tasks
         // TODO - maybe scriptdefs should be separate?
         List macroNodes = antDoc.selectNodes("//macrodef | //scriptdef");
-        for (Iterator iterator = macroNodes.iterator(); iterator.hasNext();)
-        {
+        for (Iterator iterator = macroNodes.iterator(); iterator.hasNext();) {
             Element macroNode = (Element) iterator.next();
             processMacro(macroNode, projectElement, antFile);
         }
 
         // Project properties
         List propertyNodes = antDoc.selectNodes("//property");
-        for (Iterator iterator = propertyNodes.iterator(); iterator.hasNext();)
-        {
+        for (Iterator iterator = propertyNodes.iterator(); iterator.hasNext();) {
             Element propertyNode = (Element) iterator.next();
             processProperty(propertyNode, projectElement);
         }
     }
 
-    public ArrayList<String> getAntFiles()
-    {
+    public ArrayList<String> getAntFiles() {
         return getAntFiles(getProject(), true);
     }
 
-    public ArrayList<String> getAntFiles(Project project)
-    {
+    public ArrayList<String> getAntFiles(Project project) {
         return getAntFiles(project, true);
     }
 
     /**
-     * Get the list of all Ant files we want to process. These can be project
-     * and antlib files.
+     * Get the list of all Ant files we want to process. These can be project and antlib files.
      * 
      * @return antFiles a list of ant files to be processed
      */
     @SuppressWarnings("unchecked")
-    public ArrayList<String> getAntFiles(Project project, boolean homeOnly)
-    {
+    public ArrayList<String> getAntFiles(Project project, boolean homeOnly) {
         ArrayList<String> antFiles = new ArrayList<String>();
 
         Map<String, Target> targets = project.getTargets();
@@ -313,61 +293,54 @@
         try {
             projectHome = new File(project.getProperty("helium.dir")).getCanonicalPath();
 
-            while (targetsIter.hasNext())
-            {
+            while (targetsIter.hasNext()) {
                 Target target = targetsIter.next();
                 String projectPath = new File(target.getLocation().getFileName()).getCanonicalPath();
 
-                if (!antFiles.contains(projectPath))
-                {
-                    if (homeOnly)
-                    {
-                        if (!projectPath.contains(projectHome))
-                        {
+                if (!antFiles.contains(projectPath)) {
+                    if (homeOnly) {
+                        if (!projectPath.contains(projectHome)) {
                             antFiles.add(projectPath);
                         }
-                    }
-                    else
+                    } else {
                         antFiles.add(projectPath);
-                }
-            }
-
-            if (rc != null)
-            {
-                Iterator extraFilesIter = rc.iterator();
-                while (extraFilesIter.hasNext())
-                {
-                    FileResource fileResource = (FileResource) extraFilesIter.next();
-                    String extrafile = fileResource.getFile().getCanonicalPath();
-
-                    if (!antFiles.contains(fileResource.toString()) && !fileResource.getFile().getName().startsWith("test_"))
-                    {
-                        if (homeOnly)
-                        {
-                            if (!extrafile.contains(projectHome))
-                            {
-                                antFiles.add(extrafile);
-                            }
-                        }
-                        else
-                            antFiles.add(extrafile);
                     }
                 }
             }
 
-        } catch (IOException e) { 
-            log(e.getMessage(), Project.MSG_ERR); 
+            if (rc != null) {
+                Iterator extraFilesIter = rc.iterator();
+                while (extraFilesIter.hasNext()) {
+                    FileResource fileResource = (FileResource) extraFilesIter.next();
+                    String extrafile = fileResource.getFile().getCanonicalPath();
+
+                    if (!antFiles.contains(fileResource.toString())
+                        && !fileResource.getFile().getName().startsWith("test_")) {
+                        if (homeOnly) {
+                            if (!extrafile.contains(projectHome)) {
+                                antFiles.add(extrafile);
+                            }
+                        }
+                        else {
+                            antFiles.add(extrafile);
+                        }
+                    }
+                }
+            }
+
+        }
+        catch (IOException e) {
+            log(e.getMessage(), Project.MSG_ERR);
             e.printStackTrace();
         }
         return antFiles;
     }
 
-    //--------------------------------- PRIVATE METHODS ------------------------------------------
+    // --------------------------------- PRIVATE METHODS ------------------------------------------
 
     @SuppressWarnings("unchecked")
     private void processMacro(Element macroNode, Element outProjectNode, String antFile)
-    throws IOException, DocumentException
-    {
+        throws IOException, DocumentException {
         String macroName = macroNode.attributeValue("name");
         log("Processing macro: " + macroName, Project.MSG_DEBUG);
 
@@ -389,29 +362,31 @@
         // TODO - Later we should find the line number from the XML input.
         addTextElement(outmacroNode, "location", antFile + ":1:");
 
-        List<Node> statements = macroNode.selectNodes("//scriptdef[@name='" + macroName + "']/attribute | //macrodef[@name='" + macroName + "']/attribute");
+        List<Node> statements = macroNode.selectNodes("//scriptdef[@name='" + macroName
+            + "']/attribute | //macrodef[@name='" + macroName + "']/attribute");
         String usage = "";
-        for (Node statement : statements)
-        {
+        for (Node statement : statements) {
             String defaultval = statement.valueOf("@default");
-            if (defaultval.equals(""))
+            if (defaultval.equals("")) {
                 defaultval = "value";
-            else
+            } else {
                 defaultval = "<i>" + defaultval + "</i>";
+            }
             usage = usage + " " + statement.valueOf("@name") + "=\"" + defaultval + "\"";
         }
 
         String macroElements = "";
-        statements = macroNode.selectNodes("//scriptdef[@name='" + macroName + "']/element | //macrodef[@name='" + macroName + "']/element");
-        for (Node statement : statements)
-        {
+        statements = macroNode.selectNodes("//scriptdef[@name='" + macroName
+            + "']/element | //macrodef[@name='" + macroName + "']/element");
+        for (Node statement : statements) {
             macroElements = "&lt;" + statement.valueOf("@name") + "/&gt;\n" + macroElements;
         }
-        if (macroElements.equals(""))
+        if (macroElements.equals("")) {
             addTextElement(outmacroNode, "usage", "&lt;hlm:" + macroName + " " + usage + "/&gt;");
-        else
-            addTextElement(outmacroNode, "usage", "&lt;hlm:" + macroName + " " + usage + "&gt;\n" + macroElements + "&lt;/hlm:" + macroName + "&gt;");
-
+        } else {
+            addTextElement(outmacroNode, "usage", "&lt;hlm:" + macroName + " " + usage + "&gt;\n"
+                + macroElements + "&lt;/hlm:" + macroName + "&gt;");
+        }
 
         // Add dependencies
         // Enumeration dependencies = antmacro.getDependencies();
@@ -423,53 +398,45 @@
         // dependencyElement.addAttribute("type","direct");
         // }
 
-        callAntTargetVisitor(macroNode, outmacroNode, outProjectNode);
+        callAntTargetVisitor(macroNode, outmacroNode);
 
         // Add documentation
         // Get comment element before the macro element to extract macro doc
         List<Node> children = macroNode.selectNodes("preceding-sibling::node()");
-        if (children.size() > 0)
-        {
+        if (children.size() > 0) {
             // Scan past the text nodes, which are most likely whitespace
             int index = children.size() - 1;
             Node child = (Node) children.get(index);
-            while (index > 0 && child.getNodeType() == Node.TEXT_NODE)
-            {
+            while (index > 0 && child.getNodeType() == Node.TEXT_NODE) {
                 index--;
                 child = (Node) children.get(index);
             }
 
             // Check if there is a comment node
             String commentText = null;
-            if (child.getNodeType() == Node.COMMENT_NODE)
-            {
+            if (child.getNodeType() == Node.COMMENT_NODE) {
                 Comment macroComment = (Comment) child;
                 commentText = macroComment.getStringValue().trim();
                 log(macroName + " comment: " + commentText, Project.MSG_DEBUG);
             }
-            else
-            {
+            else {
                 log("Macro has no comment: " + macroName, Project.MSG_WARN);
             }
 
             insertDocumentation(outmacroNode, commentText);
-
-            Node previousNode = children.get(children.size() - 1);
         }
 
         // Get names of all properties used in this macro
         ArrayList properties = new ArrayList();
         Visitor visitor = new AntPropertyVisitor(properties);
         macroNode.accept(visitor);
-        for (Iterator iterator = properties.iterator(); iterator.hasNext();)
-        {
+        for (Iterator iterator = properties.iterator(); iterator.hasNext();) {
             String property = (String) iterator.next();
             addTextElement(outmacroNode, "propertyDependency", property);
         }
     }
 
-    private void callAntTargetVisitor(Element targetNode, Element outTargetNode, Element outProjectNode)
-    {
+    private void callAntTargetVisitor(Element targetNode, Element outTargetNode) {
         // Add antcall/runtarget dependencies
         ArrayList<String> antcallTargets = new ArrayList<String>();
         ArrayList<String> logs = new ArrayList<String>();
@@ -477,34 +444,31 @@
         ArrayList<String> executables = new ArrayList<String>();
         Visitor visitorTarget = new AntTargetVisitor(antcallTargets, logs, signals, executables);
         targetNode.accept(visitorTarget);
-        for (String antcallTarget : antcallTargets)
-        {
+        for (String antcallTarget : antcallTargets) {
             Element dependencyElement = addTextElement(outTargetNode, "dependency", antcallTarget);
             dependencyElement.addAttribute("type", "exec");
         }
 
-        for (String log : logs)
-        {
+        for (String log : logs) {
             addTextElement(outTargetNode, "log", log);
         }
 
-        if (globalSignalList.get(targetNode.attributeValue("name")) != null)
+        if (globalSignalList.get(targetNode.attributeValue("name")) != null) {
             signals.addAll(globalSignalList.get(targetNode.attributeValue("name")));
+        }
 
-        for (String signal : signals)
-        {
+        for (String signal : signals) {
             addTextElement(outTargetNode, "signal", signal);
         }
 
-        for (String executable : executables)
-        {
+        for (String executable : executables) {
             addTextElement(outTargetNode, "executable", executable);
         }
     }
 
     @SuppressWarnings("unchecked")
-    private void processTarget(Element targetNode, Element outProjectNode) throws IOException, DocumentException
-    {
+    private void processTarget(Element targetNode, Element outProjectNode) throws IOException,
+        DocumentException {
         String targetName = targetNode.attributeValue("name");
         log("Processing target: " + targetName, Project.MSG_DEBUG);
 
@@ -512,35 +476,28 @@
         // Get comment element before the target element to extract target doc
         String commentText = "";
         List<Node> children = targetNode.selectNodes("preceding-sibling::node()");
-        if (children.size() > 0)
-        {
+        if (children.size() > 0) {
             // Scan past the text nodes, which are most likely whitespace
             int index = children.size() - 1;
             Node child = children.get(index);
-            while (index > 0 && child.getNodeType() == Node.TEXT_NODE)
-            {
+            while (index > 0 && child.getNodeType() == Node.TEXT_NODE) {
                 index--;
                 child = (Node) children.get(index);
             }
 
             // Check if there is a comment node
-            if (child.getNodeType() == Node.COMMENT_NODE)
-            {
+            if (child.getNodeType() == Node.COMMENT_NODE) {
                 Comment targetComment = (Comment) child;
                 commentText = targetComment.getStringValue().trim();
 
                 log(targetName + " comment: " + commentText, Project.MSG_DEBUG);
             }
-            else
-            {
+            else {
                 log("Target has no comment: " + targetName, Project.MSG_WARN);
             }
-
-            Node previousNode = children.get(children.size() - 1);
         }
 
-        if (!commentText.contains("Private:"))
-        {
+        if (!commentText.contains("Private:")) {
             Element outTargetNode = outProjectNode.addElement("target");
 
             addTextElement(outTargetNode, "name", targetNode.attributeValue("name"));
@@ -553,21 +510,21 @@
             Project project = getProject();
             Target antTarget = (Target) project.getTargets().get(targetName);
 
-            if (antTarget == null)
+            if (antTarget == null) {
                 return;
+            }
 
             addTextElement(outTargetNode, "location", antTarget.getLocation().toString());
 
             // Add dependencies
             Enumeration dependencies = antTarget.getDependencies();
-            while (dependencies.hasMoreElements())
-            {
+            while (dependencies.hasMoreElements()) {
                 String dependency = (String) dependencies.nextElement();
                 Element dependencyElement = addTextElement(outTargetNode, "dependency", dependency);
                 dependencyElement.addAttribute("type", "direct");
             }
 
-            callAntTargetVisitor(targetNode, outTargetNode, outProjectNode);
+            callAntTargetVisitor(targetNode, outTargetNode);
 
             // Process the comment text as MediaWiki syntax and convert to HTML
             insertDocumentation(outTargetNode, commentText);
@@ -576,8 +533,7 @@
             ArrayList properties = new ArrayList();
             Visitor visitor = new AntPropertyVisitor(properties);
             targetNode.accept(visitor);
-            for (Iterator iterator = properties.iterator(); iterator.hasNext();)
-            {
+            for (Iterator iterator = properties.iterator(); iterator.hasNext();) {
                 String property = (String) iterator.next();
                 addTextElement(outTargetNode, "propertyDependency", property);
             }
@@ -591,48 +547,45 @@
         }
     }
 
-    private void processProperty(Element propertyNode, Element outProjectNode) throws IOException
-    {
+    private void processProperty(Element propertyNode, Element outProjectNode) throws IOException {
         String propertyName = propertyNode.attributeValue("name");
         log("Processing Property: " + propertyName, Project.MSG_DEBUG);
 
         Element outPropertyNode = outProjectNode.addElement("property");
         addTextElement(outPropertyNode, "name", propertyNode.attributeValue("name"));
-        if (propertyNode.attributeValue("value") == null)
-        {
+        if (propertyNode.attributeValue("value") == null) {
             addTextElement(outPropertyNode, "defaultValue", propertyNode.attributeValue("location"));
         }
-        else
-        {
+        else {
             addTextElement(outPropertyNode, "defaultValue", propertyNode.attributeValue("value"));
         }
     }
 
-    private void insertDocumentation(Element outNode, String commentText) throws IOException, DocumentException
-    {
-        if (commentText != null)
-        {
+    private void insertDocumentation(Element outNode, String commentText) throws IOException,
+        DocumentException {
+        if (commentText != null) {
             WikiModel wikiModel = new WikiModel("", "");
-            if (!commentText.contains("</pre>") && (commentText.contains("**") || commentText.contains("==") || commentText.contains("- -")))
-            {
+            if (!commentText.contains("</pre>")
+                && (commentText.contains("**") || commentText.contains("==") || commentText.contains("- -"))) {
                 commentText = commentText.replace("**", "").replace("==", "").replace("- -", "").trim();
                 log("Warning: Comment code has invalid syntax: " + commentText, Project.MSG_WARN);
             }
-            if (commentText.startsWith("-"))
+            if (commentText.startsWith("-")) {
                 commentText = commentText.replace("-", "");
+            }
             commentText = commentText.trim();
 
             String commentTextCheck = commentText.replace("deprecated>", "").replace("tt>", "").replace("todo>", "");
-            if (commentTextCheck.contains(">") && !commentTextCheck.contains("</pre>"))
+            if (commentTextCheck.contains(">") && !commentTextCheck.contains("</pre>")) {
                 log("Warning: Comment code needs <pre> tags around it: " + commentText, Project.MSG_WARN);
+            }
 
             commentText = filterTextNewlines(commentText);
             commentText = wikiModel.render(commentText);
 
             // If <deprecated> tag exists in the comment, then parse the
             // deprecated message.
-            if (commentText.indexOf("&#60;deprecated&#62;") != -1)
-            {
+            if (commentText.indexOf("&#60;deprecated&#62;") != -1) {
                 int deprecatedMsgStart = commentText.indexOf("&#60;deprecated&#62;") + 20;
                 int deprecatedMsgEnd = commentText.indexOf("&#60;/deprecated&#62;");
 
@@ -643,55 +596,45 @@
                 // remove <deprecated> part from description field.
                 int commentTextLength = commentText.length();
                 String documentationMsgStart = commentText.substring(1, deprecatedMsgStart - 20);
-                String documentationMsgEnd = commentText.substring(deprecatedMsgEnd + 21,
-                        commentTextLength);
+                String documentationMsgEnd = commentText.substring(deprecatedMsgEnd + 21, commentTextLength);
                 String documentationMsg = documentationMsgStart.concat(documentationMsgEnd);
                 commentText = documentationMsg.trim();
             }
         }
-        else
-        {
+        else {
             commentText = "";
         }
         // Get the documentation element as a document
-        String documentationText = "<documentation>" + commentText +
-                                 "</documentation>";
+        String documentationText = "<documentation>" + commentText + "</documentation>";
         Document docDoc = DocumentHelper.parseText(documentationText);
         outNode.add(docDoc.getRootElement());
         log("HTML comment: " + commentText, Project.MSG_DEBUG);
     }
 
-    private Element addTextElement(Element parent, String name, String text)
-    {
+    private Element addTextElement(Element parent, String name, String text) {
         Element element = addTextElement(parent, name, text, false);
 
         return element;
     }
 
-    private Element addTextElement(Element parent, String name, String text, boolean escape)
-    {
+    private Element addTextElement(Element parent, String name, String text, boolean escape) {
         Element element = parent.addElement(name);
-        if (text != null)
-        {
-            if (escape)
-            {
+        if (text != null) {
+            if (escape) {
                 element.addCDATA(text);
             }
-            else
-            {
+            else {
                 element.setText(text);
             }
         }
         return element;
     }
 
-    private String filterTextNewlines(String text) throws IOException
-    {
+    private String filterTextNewlines(String text) throws IOException {
         BufferedReader in = new BufferedReader(new StringReader(text));
         StringBuilder out = new StringBuilder();
         String line = in.readLine();
-        while (line != null)
-        {
+        while (line != null) {
             out.append(line.trim());
             out.append("\n");
             line = in.readLine();
@@ -705,20 +648,19 @@
      * @param outProjectNode
      * @throws IOException
      */
-    private void buildTaskDefs( Element root ) throws DocumentException, IOException
-    {
+    private void buildTaskDefs(Element root) throws DocumentException, IOException {
         Element projectElement = root.addElement("project");
         projectElement.addElement("name");
         insertDocumentation(projectElement, "");
-        HashMap < String, String > tasks = getHeliumAntTasks();
+        HashMap<String, String> tasks = getHeliumAntTasks();
 
-        for ( String taskName : tasks.keySet() ) {
-            String className = tasks.get( taskName );
+        for (String taskName : tasks.keySet()) {
+            String className = tasks.get(taskName);
             log("Processing TaskDef: " + taskName, Project.MSG_DEBUG);
 
             Element outTaskDefNode = projectElement.addElement("taskdef");
-            addTextElement( outTaskDefNode, "name", taskName );
-            addTextElement( outTaskDefNode, "classname",  className );
+            addTextElement(outTaskDefNode, "name", taskName);
+            addTextElement(outTaskDefNode, "classname", className);
         }
     }
 
@@ -728,31 +670,31 @@
      * @return
      */
     @SuppressWarnings("unchecked")
-    private HashMap < String, String > getHeliumAntTasks() {
+    private HashMap<String, String> getHeliumAntTasks() {
 
         // 1. Get all the task definitions from the project
-        Hashtable <String, Class<?> > allTaskdefs = getProject().getTaskDefinitions();
+        Hashtable<String, Class<?>> allTaskdefs = getProject().getTaskDefinitions();
         // 2. Filter the list by applying criteria
-        return filterTasks( allTaskdefs );
+        return filterTasks(allTaskdefs);
     }
 
     /**
-     * Method is used to filter tasks. 
+     * Method is used to filter tasks.
      * 
      * @param allTaskdefs
      * @param criteria
      */
-    private HashMap < String, String > filterTasks( Hashtable<String, Class<?> > allTaskdefs ) {
-        HashMap <String, String> tasks = new HashMap <String, String>();
+    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() ) {
+        Enumeration<String> taskdefsenum = allTaskdefs.keys();
+        while (taskdefsenum.hasMoreElements()) {
             String key = taskdefsenum.nextElement();
             Class<?> clazz = allTaskdefs.get(key);
             String className = clazz.getName();
-            if ( key.contains("nokia.com") && className.startsWith("com.nokia") && 
-                    className.contains("ant.taskdefs") ) {
-                tasks.put( getTaskName( key ), clazz.getName() );
+            if (key.contains("nokia.com") && className.startsWith("com.nokia")
+                && className.contains("ant.taskdefs")) {
+                tasks.put(getTaskName(key), clazz.getName());
             }
         }
         return tasks;
@@ -764,63 +706,52 @@
      * @param text
      * @return
      */
-    private String getTaskName( String text ) {
+    private String getTaskName(String text) {
         int lastIndex = text.lastIndexOf(':');
-        return text.substring( lastIndex + 1 );
+        return text.substring(lastIndex + 1);
     }
 
-    //----------------------------------- PRIVATE CLASSES -----------------------------------------
+    // ----------------------------------- PRIVATE CLASSES -----------------------------------------
 
-    private class AntPropertyVisitor extends VisitorSupport
-    {
+    private class AntPropertyVisitor extends VisitorSupport {
         private List<String> propertyList;
 
-        public AntPropertyVisitor(List<String> propertyList)
-        {
+        public AntPropertyVisitor(List<String> propertyList) {
             this.propertyList = propertyList;
         }
 
-        public void visit(Attribute node)
-        {
+        public void visit(Attribute node) {
             String text = node.getStringValue();
             extractUsedProperties(text);
         }
 
-        public void visit(CDATA node)
-        {
+        public void visit(CDATA node) {
             String text = node.getText();
             extractUsedProperties(text);
         }
 
-        public void visit(Text node)
-        {
+        public void visit(Text node) {
             String text = node.getText();
             extractUsedProperties(text);
         }
 
-        public void visit(Element node)
-        {
-            if (node.getName().equals("property"))
-            {
+        public void visit(Element node) {
+            if (node.getName().equals("property")) {
                 String propertyName = node.attributeValue("name");
-                if (!propertyList.contains(propertyName))
-                {
+                if (!propertyList.contains(propertyName)) {
                     propertyList.add(propertyName);
                     log("property matches :" + propertyName, Project.MSG_DEBUG);
                 }
             }
         }
 
-        private void extractUsedProperties(String text)
-        {
+        private void extractUsedProperties(String text) {
             Pattern p1 = Pattern.compile("\\$\\{([^@$}]*)\\}");
             Matcher m1 = p1.matcher(text);
             log(text, Project.MSG_DEBUG);
-            while (m1.find())
-            {
+            while (m1.find()) {
                 String group = m1.group(1);
-                if (!propertyList.contains(group))
-                {
+                if (!propertyList.contains(group)) {
                     propertyList.add(group);
                 }
                 log("property matches: " + group, Project.MSG_DEBUG);
@@ -829,11 +760,9 @@
             Pattern p2 = Pattern.compile("\\$\\{([^\n]*\\})\\}");
             Matcher m2 = p2.matcher(text);
             log(text, Project.MSG_DEBUG);
-            while (m2.find())
-            {
+            while (m2.find()) {
                 String group = m2.group(1);
-                if (!propertyList.contains(group))
-                {
+                if (!propertyList.contains(group)) {
                     propertyList.add(group);
                 }
                 log("property matches: " + group, Project.MSG_DEBUG);
@@ -842,11 +771,9 @@
             Pattern p3 = Pattern.compile("\\$\\{(\\@\\{[^\n]*)\\}");
             Matcher m3 = p3.matcher(text);
             log(text, Project.MSG_DEBUG);
-            while (m3.find())
-            {
+            while (m3.find()) {
                 String group = m3.group(1);
-                if (!propertyList.contains(group))
-                {
+                if (!propertyList.contains(group)) {
                     propertyList.add(group);
                 }
                 log("property matches: " + group, Project.MSG_DEBUG);
@@ -854,32 +781,28 @@
         }
     }
 
-    private class AntTargetVisitor extends VisitorSupport
-    {
+    private class AntTargetVisitor extends VisitorSupport {
         private List<String> targetList;
         private List<String> logList;
         private List<String> signalList;
         private List<String> executableList;
 
-        public AntTargetVisitor(List<String> targetList, List<String> logList, List<String> signalList, List<String> executableList)
-        {
+        public AntTargetVisitor(List<String> targetList, List<String> logList,
+            List<String> signalList, List<String> executableList) {
             this.targetList = targetList;
             this.logList = logList;
             this.signalList = signalList;
             this.executableList = executableList;
         }
 
-        public void visit(Element node)
-        {
+        public void visit(Element node) {
             String name = node.getName();
-            if (name.equals("antcall") || name.equals("runtarget"))
-            {
+            if (name.equals("antcall") || name.equals("runtarget")) {
                 String text = node.attributeValue("target");
                 extractTarget(text);
             }
 
-            if (!name.equals("include") && !name.equals("exclude"))
-            {
+            if (!name.equals("include") && !name.equals("exclude")) {
                 String text = node.attributeValue("name");
                 addLog(text);
                 text = node.attributeValue("output");
@@ -894,37 +817,32 @@
                 addLog(text);
             }
 
-            if (name.equals("signal") || name.equals("execSignal"))
-            {
+            if (name.equals("signal") || name.equals("execSignal")) {
                 String signalid = getProject().replaceProperties(node.attributeValue("name"));
                 String failbuild = signalType(signalid, signaldoc);
 
-                if (signalList != null)
-                {
-                    if (failbuild != null)
+                if (signalList != null) {
+                    if (failbuild != null) {
                         signalList.add(signalid + "," + failbuild);
-                    else
+                    } else {
                         signalList.add(signalid);
+                    }
                 }
             }
 
-            if (name.equals("exec") || name.equals("preset.exec"))
-            {
+            if (name.equals("exec") || name.equals("preset.exec")) {
                 String text = node.attributeValue("executable");
                 executableList.add(text);
                 log("Executable: " + text, Project.MSG_DEBUG);
             }
         }
 
-        private void addLog(String text)
-        {
-            if (text != null && logList != null)
-            {
-                for (String log : text.split(" "))
-                {
+        private void addLog(String text) {
+            if (text != null && logList != null) {
+                for (String log : text.split(" ")) {
                     String fulllogname = getProject().replaceProperties(log);
-                    if (!logList.contains(log) && (fulllogname.endsWith(".log") || fulllogname.endsWith(".html")))
-                    {
+                    if (!logList.contains(log)
+                        && (fulllogname.endsWith(".log") || fulllogname.endsWith(".html"))) {
                         log = log.replace("--log=", "");
                         logList.add(log);
                     }
@@ -932,12 +850,10 @@
             }
         }
 
-        private void extractTarget(String text)
-        {
+        private void extractTarget(String text) {
             String iText = getProject().replaceProperties(text);
             targetList.add(iText);
         }
 
     }
 }
-
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/HeliumLogger.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/HeliumLogger.java	Fri Aug 13 14:59:05 2010 +0300
@@ -44,9 +44,11 @@
 public class HeliumLogger extends DefaultLogger {
 
     private static boolean stopLogToConsole;
+    private static final String INTERNALPROPERTY = "internal.";
 
     private Project project;
     private Logger log = Logger.getLogger(this.getClass());
+    
 
 
     /**
@@ -78,13 +80,28 @@
         /**if the target is not going to execute (due to 'if' or 'unless' conditions) 
         print a message telling the user why it is not going to execute**/
         if (!testIfCondition(ifCondition) && ifCondition != null) {
-            project.log("Skipped because property '"
-                + project.replaceProperties(ifCondition)
-                + "' not set.", Project.MSG_INFO);
+            if (ifCondition.startsWith(INTERNALPROPERTY)) {
+                String enableProperty = ifCondition.substring(INTERNALPROPERTY.length());
+                project.log("Skipped because property '"
+                        + enableProperty
+                        + "' not set to 'true'.", Project.MSG_INFO);
+            } else {
+                project.log("Skipped because property '"
+                        + project.replaceProperties(ifCondition)
+                        + "' is not set.", Project.MSG_INFO);
+            }
+            
         } else if (!testUnlessCondition(unlessCondition) && unlessCondition != null) {
-            project.log("Skipped because property '"
-                + project.replaceProperties(unlessCondition)
-                + "' set.", Project.MSG_INFO);
+            if (unlessCondition.startsWith(INTERNALPROPERTY)) {
+                String enableProperty = unlessCondition.substring(INTERNALPROPERTY.length());
+                project.log("Skipped because property '"
+                        + enableProperty
+                        + "' is set.", Project.MSG_INFO);
+            } else {
+                project.log("Skipped because property '"
+                        + project.replaceProperties(unlessCondition)
+                        + "' set.", Project.MSG_INFO);
+            }
         }
     }
 
@@ -129,17 +146,18 @@
      * See if build needs a final cleanup target to be called.
      */
     private void cleanup() {
-        String loggingoutputfile = project.getProperty("logging.output.file");
-        if (loggingoutputfile != null) {
-            File file = new File(loggingoutputfile);
-            if (file.exists()) {
-                file.delete();
+        if (project != null) {
+            String loggingoutputfile = project.getProperty("logging.output.file");
+            if (loggingoutputfile != null) {
+                File file = new File(loggingoutputfile);
+                if (file.exists()) {
+                    file.delete();
+                }
             }
-        }
-
-        if ((project.getProperty("call.cleanup") != null)
-                && (project.getProperty("call.cleanup").equals("yes"))) {
-            project.executeTarget("cleanup-all");
+            if ((project.getProperty("call.cleanup") != null)
+                    && (project.getProperty("call.cleanup").equals("yes"))) {
+                project.executeTarget("cleanup-all");
+            }
         }
     }
 
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/HelpDef.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/HelpDef.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,110 +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: 
-*
-*/
- 
+ * 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;
 
 import java.util.Iterator;
 
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.Project;
-import com.nokia.helium.core.ant.types.*;
-
 import org.apache.tools.ant.BuildListener;
 import org.apache.tools.ant.BuildLogger;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.DataType;
+
+import com.nokia.helium.core.ant.PostBuildAction;
 
 /**
  * 
  */
-public class HelpDef extends HlmPostDefImpl
-{
+public class HelpDef extends DataType implements PostBuildAction {
 
     /**
      * 
-     * @param project
-     *            Object of the project
-     * @param targetNames
-     *            Array of target names to execute
+     * @param project Object of the project
+     * @param targetNames Array of target names to execute
      * 
      */
-    public void execute(Project project, String module, String[] targetNames)
-    {
+    public void executeOnPostBuild(Project project, String[] targetNames) {
         String firstTarget;
-
         // take target
-        if (targetNames != null && targetNames.length > 0)
-        {
+        if (targetNames != null && targetNames.length > 0) {
             firstTarget = targetNames[0];
         }
-        else
         // no target, so set the default one
-        {
+        else {
             firstTarget = "help";
         }
 
         // If 'help' target is called, just run that and set other
         // target names as a property
-        if (firstTarget.equals("help"))
-        {
+        if (firstTarget.equals("help")) {
             displayHelp(project, targetNames, firstTarget);
         }
-        
-        project.addBuildListener(new UnsubstListener());
     }
 
-    class UnsubstListener implements BuildListener {
-        public void buildFinished(BuildEvent event) {
-            Project project = event.getProject();
-            String drivenotdef = project.getProperty("build.drive.notdefined");
-            if (System.getProperty("os.name").toLowerCase().startsWith("win") && drivenotdef != null && drivenotdef.equals("true"))
-            {
-                String drive = project.getProperty("build.drive");
-                try {
-                    if (drive != null) {
-                        Runtime.getRuntime().exec("subst /d " + drive);
-                    }
-                } catch (java.io.IOException e) {
-                    e = null; // ignoring the error
-                }
-            }
+    @SuppressWarnings("unchecked")
+    private void displayHelp(Project project, String[] targetNames, String firstTarget) {
+        if (targetNames.length > 1) {
+            project.setProperty("help.item", targetNames[1]);
         }
-        
-        public void buildStarted(BuildEvent event) { }
-        public void targetStarted(BuildEvent event) { }
-        public void targetFinished(BuildEvent event) { }
-        public void taskStarted(BuildEvent event) { }
-        public void taskFinished(BuildEvent event) { }
-        public void messageLogged(BuildEvent event) { }
-    }
 
-    private void displayHelp(Project project, String[] targetNames, String firstTarget)
-    {
-        if (targetNames.length > 1)
-        {
-            project.setProperty("help.target", targetNames[1]);
-        }
-        
         // Set Emacs mode to true for all listeners, so that help text does
         // not have [echo] at the start of each line
         Iterator iter = project.getBuildListeners().iterator();
-        while (iter.hasNext())
-        {
+        while (iter.hasNext()) {
             BuildListener listener = (BuildListener) iter.next();
-            if (listener instanceof BuildLogger)
-            {
+            if (listener instanceof BuildLogger) {
                 BuildLogger logger = (BuildLogger) listener;
                 logger.setEmacsMode(true);
             }
@@ -113,5 +75,4 @@
         // Run the 'help' target
         project.executeTarget(firstTarget);
     }
-
 }
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/ModelPropertiesParser.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/ModelPropertiesParser.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,20 +1,20 @@
 /*
-* 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: 
-*
-*/
- 
+ * 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;
 
 import info.bliki.wiki.model.WikiModel;
@@ -27,99 +27,98 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.log4j.Logger;
 import org.dom4j.Document;
 import org.dom4j.DocumentException;
 import org.dom4j.Element;
 import org.dom4j.io.OutputFormat;
 import org.dom4j.io.SAXReader;
 import org.dom4j.io.XMLWriter;
-import org.apache.log4j.Logger;
-
 
 /**
  * Renders model property and group description to Wiki Model Syntax
+ * 
  * @author Helium Team
  */
-public class ModelPropertiesParser
-{
+public class ModelPropertiesParser {
     private File inputPath;
     private File outputPath;
     private Document doc;
     private Logger log = Logger.getLogger(ModelPropertiesParser.class);
-    
-    public ModelPropertiesParser(File inputPath, File outputPath)
-    {
+
+    public ModelPropertiesParser(File inputPath, File outputPath) {
         this.inputPath = inputPath;
         this.outputPath = outputPath;
     }
 
     /**
      * Reads model xml file, changes description format.
+     * 
      * @throws DocumentException
      * @throws IOException
      */
-    public void parsePropertiesDescription() throws IOException, DocumentException
-    {
+    public void parsePropertiesDescription() throws IOException, DocumentException {
         SAXReader xmlReader = new SAXReader();
         doc = xmlReader.read(inputPath);
         List importNodes = doc.selectNodes("//description");
-        for (Iterator iterator = importNodes.iterator(); iterator.hasNext();)
-        {
+        for (Iterator iterator = importNodes.iterator(); iterator.hasNext();) {
             Element importCurrentNode = (Element) iterator.next();
             importCurrentNode.setText(renderWikiModel(importCurrentNode.getText()));
             writeXMLFile();
         }
     }
-    
-     /**
+
+    /**
      * Writes Document object as xml file
      */
-    private void writeXMLFile()
-    {
+    private void writeXMLFile() {
         try {
             if (outputPath != null) {
-            XMLWriter out = new XMLWriter(new FileOutputStream(outputPath), OutputFormat.createPrettyPrint());
-            out.write(doc);
-          }
-        } catch (FileNotFoundException  e) {
-            //We are Ignoring the errors as no need to fail the build.
+                XMLWriter out = new XMLWriter(new FileOutputStream(outputPath), OutputFormat.createPrettyPrint());
+                out.write(doc);
+            }
+        }
+        catch (FileNotFoundException e) {
+            // We are Ignoring the errors as no need to fail the build.
             log.debug("Not able to write into XML Document " + e.getMessage());
-        } catch (UnsupportedEncodingException e) {
-            //We are Ignoring the errors as no need to fail the build.
+        }
+        catch (UnsupportedEncodingException e) {
+            // We are Ignoring the errors as no need to fail the build.
             log.debug("Not able to write into XML Document " + e.getMessage());
-        } catch (IOException e) {
-            //We are Ignoring the errors as no need to fail the build.
+        }
+        catch (IOException e) {
+            // We are Ignoring the errors as no need to fail the build.
             log.debug("Not able to write into XML Document " + e.getMessage());
         }
     }
-    
-     /**
+
+    /**
      * Render the description as Wiki model
+     * 
      * @param String descriptionText
      * @return String
      */
-    private String renderWikiModel(String descriptionText) throws IOException, DocumentException
-    {
-        if (descriptionText != null)
-        {
+    private String renderWikiModel(String descriptionText) throws IOException, DocumentException {
+        if (descriptionText != null) {
             WikiModel wikiModel = new WikiModel("", "");
-            //If description contains unwanted symbols like "**", "==" and "- -", remove those from description.
-            if (descriptionText.contains("**") || descriptionText.contains("==") || descriptionText.contains("- -"))
-            {
+            // If description contains unwanted symbols like "**", "==" and "- -", remove those from
+            // description.
+            if (descriptionText.contains("**") || descriptionText.contains("==")
+                || descriptionText.contains("- -")) {
                 descriptionText = descriptionText.replace("**", "").replace("==", "").replace("- -", "").trim();
             }
-            //If description starts with "-", remove it. As wiki have special meaning for this symbol
-            if (descriptionText.startsWith("-"))
+            // If description starts with "-", remove it. As wiki have special meaning for this
+            // symbol
+            if (descriptionText.startsWith("-")) {
                 descriptionText = descriptionText.replace("-", "");
+            }
             descriptionText = descriptionText.trim();
-            //Render description with wiki model syntax
+            // Render description with wiki model syntax
             descriptionText = wikiModel.render(descriptionText);
         }
-        else
-        {
+        else {
             descriptionText = "";
         }
-      return descriptionText;
-     }
+        return descriptionText;
+    }
 }
-
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/TypedefURIFix.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/TypedefURIFix.java	Fri Aug 13 14:59:05 2010 +0300
@@ -24,19 +24,25 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.MalformedURLException;
 import java.net.URL;
-import java.net.MalformedURLException;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
-import java.util.HashMap;
-import java.util.Enumeration;
-import java.util.Locale;
 import java.util.NoSuchElementException;
 import java.util.Properties;
 
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.taskdefs.*;
+import org.apache.tools.ant.AntTypeDefinition;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.ComponentHelper;
+import org.apache.tools.ant.Location;
+import org.apache.tools.ant.MagicNames;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectHelper;
+import org.apache.tools.ant.taskdefs.Definer;
+import org.apache.tools.ant.types.EnumeratedAttribute;
 import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.types.EnumeratedAttribute;
 
 /**
  * Base class for Taskdef and Typedef - handles all
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/XmlLogger.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/XmlLogger.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,20 +1,20 @@
 /*
-* 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: 
-*
-*/
- 
+ * 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;
 
 import java.io.FileOutputStream;
@@ -23,63 +23,58 @@
 import java.io.OutputStreamWriter;
 import java.io.PrintStream;
 import java.io.Writer;
+import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.Stack;
-import java.util.Enumeration;
+
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildLogger;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Target;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.UnknownElement;
 import org.apache.tools.ant.util.DOMElementWriter;
+import org.apache.tools.ant.util.DateUtils;
 import org.apache.tools.ant.util.StringUtils;
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.util.DateUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Text;
 
 /**
- * Generates a file in the current directory with
- * an XML description of what happened during a build.
- * The default filename is "log.xml", but this can be overridden
- * with the property <code>XmlLogger.file</code>.
- *
- * This implementation assumes in its sanity checking that only one
- * thread runs a particular target/task at a time. This is enforced
- * by the way that parallel builds and antcalls are done - and
- * indeed all but the simplest of tasks could run into problems
- * if executed in parallel.
- *
- * @see Project#addBuildListener(BuildListener)
+ * Generates a file in the current directory with an XML description of what happened during a
+ * build. The default filename is "log.xml", but this can be overridden with the property
+ * <code>XmlLogger.file</code>.
+ * 
+ * This implementation assumes in its sanity checking that only one thread runs a particular
+ * target/task at a time. This is enforced by the way that parallel builds and antcalls are done -
+ * and indeed all but the simplest of tasks could run into problems if executed in parallel.
  */
 public class XmlLogger implements BuildLogger {
 
     /** 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 element name for a message. */
     private static final String MESSAGE_TAG = "message";
-    /** 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 message priority. */
     private static final String PRIORITY_ATTR = "priority";
-    /** XML attribute name for a file location. */
-    private static final String LOCATION_ATTR = "location";
     /** XML attribute name for an error description. */
     private static final String ERROR_ATTR = "error";
     /** XML element name for a stack trace. */
     private static final String STACKTRACE_TAG = "stacktrace";
-    
+
     /** DocumentBuilder to use when creating the document to start with. */
     private static DocumentBuilder builder = getDocumentBuilder();
-    
+
     private int msgOutputLevel = Project.MSG_ERR;
     private PrintStream outStream;
-    
+
     /** The complete log document for this build. */
     private Document doc = builder.newDocument();
     /** Mapping for when tasks started (Task to TimedElement). */
@@ -87,31 +82,25 @@
     /** Mapping for when targets started (Task to TimedElement). */
     private Hashtable targets = new Hashtable();
     /**
-     * Mapping of threads to stacks of elements
-     * (Thread to Stack of TimedElement).
+     * Mapping of threads to stacks of elements (Thread to Stack of TimedElement).
      */
     private Hashtable<Thread, Stack> threadStacks = new Hashtable<Thread, Stack>();
     /**
      * When the build started.
      */
     private TimedElement buildElement;
-    
+
     /**
-     *  Constructs a new BuildListener that logs build events to an XML file.
-     */
-    public XmlLogger() {
-    }
-    
-    /**
-     * Returns a default DocumentBuilder instance or throws an
-     * ExceptionInInitializerError if it can't be created.
-     *
+     * Returns a default DocumentBuilder instance or throws an ExceptionInInitializerError if it
+     * can't be created.
+     * 
      * @return a default DocumentBuilder instance.
      */
     private static DocumentBuilder getDocumentBuilder() {
         try {
             return DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        } catch (ParserConfigurationException exc) {
+        }
+        catch (ParserConfigurationException exc) {
             throw new ExceptionInInitializerError(exc.getMessage());
         }
     }
@@ -119,21 +108,21 @@
     /** Utility class representing the time an element started. */
     private static class TimedElement {
         /**
-         * Start time in milliseconds
-         * (as returned by <code>System.currentTimeMillis()</code>).
+         * 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");
         }
     }
 
     /**
-     * Fired when the build starts, this builds the top-level element for the
-     * document and remembers the time of the start of the build.
-     *
+     * Fired when the build starts, this builds the top-level element for the document and remembers
+     * the time of the start of the build.
+     * 
      * @param event Ignored.
      */
     public void buildStarted(BuildEvent event) {
@@ -143,20 +132,17 @@
     }
 
     /**
-     * Fired when the build finishes, this adds the time taken and any
-     * error stacktrace to the build element and writes the document to disk.
-     *
-     * @param event An event with any relevant extra information.
-     *              Will not be <code>null</code>.
+     * Fired when the build finishes, this adds the time taken and any error stacktrace to the build
+     * element and writes the document to disk.
+     * 
+     * @param event An event with any relevant extra information. Will not be <code>null</code>.
      */
     public void buildFinished(BuildEvent event) {
         long totalTime = System.currentTimeMillis() - buildElement.startTime;
-        buildElement.element.setAttribute(TIME_ATTR,
-                DateUtils.formatElapsedTime(totalTime));
+        buildElement.element.setAttribute(TIME_ATTR, DateUtils.formatElapsedTime(totalTime));
 
         if (event.getException() != null) {
-            buildElement.element.setAttribute(ERROR_ATTR,
-                    event.getException().toString());
+            buildElement.element.setAttribute(ERROR_ATTR, event.getException().toString());
             // print the stacktrace in the build file it is always useful...
             // better have too much info than not enough.
             Throwable exception = event.getException();
@@ -170,8 +156,7 @@
         if (outFilename == null) {
             outFilename = "log.xml";
         }
-        String xslUri
-                = event.getProject().getProperty("ant.XmlLogger.stylesheet.uri");
+        String xslUri = event.getProject().getProperty("ant.XmlLogger.stylesheet.uri");
         if (xslUri == null) {
             xslUri = "log.xsl";
         }
@@ -186,18 +171,20 @@
             out = new OutputStreamWriter(stream, "UTF8");
             out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
             if (xslUri.length() > 0) {
-                out.write("<?xml-stylesheet type=\"text/xsl\" href=\""
-                        + xslUri + "\"?>\n\n");
+                out.write("<?xml-stylesheet type=\"text/xsl\" href=\"" + xslUri + "\"?>\n\n");
             }
             (new DOMElementWriter()).write(buildElement.element, out, 0, "\t");
             out.flush();
-        } catch (IOException exc) {
+        }
+        catch (IOException exc) {
             throw new BuildException("Unable to write log file" + exc.getMessage());
-        } finally {
+        }
+        finally {
             if (out != null) {
                 try {
                     out.close();
-                } catch (IOException e) {
+                }
+                catch (IOException e) {
                     // We are Ignoring the errors as no need to fail the build.
                     event.getProject().log("Not able to close the file handler " + e.getMessage(), Project.MSG_WARN);
                     e = null; // ignore
@@ -208,70 +195,47 @@
     }
 
     /**
-     * Returns the stack of timed elements for the current thread.
-     * @return the stack of timed elements for the current thread
-     */
-    private Stack getStack() {
-        Stack threadStack = threadStacks.get(Thread.currentThread());
-        if (threadStack == null) {
-            threadStack = new Stack();
-            threadStacks.put(Thread.currentThread(), threadStack);
-        }
-        /* For debugging purposes uncomment:
-        org.w3c.dom.Comment s = doc.createComment("stack=" + threadStack);
-        buildElement.element.appendChild(s);
-         */
-        return threadStack;
-    }
-
-    /**
-     * Fired when a target starts building, this pushes a timed element
-     * for the target onto the stack of elements for the current thread,
-     * remembering the current time and the name of the target.
-     *
-     * @param event An event with any relevant extra information.
-     *              Will not be <code>null</code>.
+     * Fired when a target starts building, this pushes a timed element for the target onto the
+     * stack of elements for the current thread, remembering the current time and the name of the
+     * target.
+     * 
+     * @param event An event with any relevant extra information. Will not be <code>null</code>.
      */
     public void targetStarted(BuildEvent event) {
     }
 
     /**
-     * Fired when a target finishes building, this adds the time taken
-     * and any error stacktrace to the appropriate target element in the log.
-     *
-     * @param event An event with any relevant extra information.
-     *              Will not be <code>null</code>.
+     * Fired when a target finishes building, this adds the time taken and any error stacktrace to
+     * the appropriate target element in the log.
+     * 
+     * @param event An event with any relevant extra information. Will not be <code>null</code>.
      */
     public void targetFinished(BuildEvent event) {
     }
 
     /**
-     * Fired when a task starts building, this pushes a timed element
-     * for the task onto the stack of elements for the current thread,
-     * remembering the current time and the name of the task.
-     *
-     * @param event An event with any relevant extra information.
-     *              Will not be <code>null</code>.
+     * Fired when a task starts building, this pushes a timed element for the task onto the stack of
+     * elements for the current thread, remembering the current time and the name of the task.
+     * 
+     * @param event An event with any relevant extra information. Will not be <code>null</code>.
      */
     public void taskStarted(BuildEvent event) {
     }
 
     /**
-     * Fired when a task finishes building, this adds the time taken
-     * and any error stacktrace to the appropriate task element in the log.
-     *
-     * @param event An event with any relevant extra information.
-     *              Will not be <code>null</code>.
+     * Fired when a task finishes building, this adds the time taken and any error stacktrace to the
+     * appropriate task element in the log.
+     * 
+     * @param event An event with any relevant extra information. Will not be <code>null</code>.
      */
     public void taskFinished(BuildEvent event) {
     }
 
-
     /**
      * 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
+     * 
+     * Where the task is not found directly, search for unknown elements which may be hiding the
+     * real task
      */
     private TimedElement getTaskElement(Task task) {
         TimedElement element = (TimedElement) tasks.get(task);
@@ -292,12 +256,10 @@
     }
 
     /**
-     * Fired when a message is logged, this adds a message element to the
-     * most appropriate parent element (task, target or build) and records
-     * the priority and text of the message.
-     *
-     * @param event An event with any relevant extra information.
-     *              Will not be <code>null</code>.
+     * Fired when a message is logged, this adds a message element to the most appropriate parent
+     * element (task, target or build) and records the priority and text of the message.
+     * 
+     * @param event An event with any relevant extra information. Will not be <code>null</code>.
      */
     public void messageLogged(BuildEvent event) {
         int priority = event.getPriority();
@@ -346,20 +308,15 @@
         }
 
         /*
-        if (parentElement == null) {
-            Stack threadStack
-                    = (Stack) threadStacks.get(Thread.currentThread());
-            if (threadStack != null) {
-                if (!threadStack.empty()) {
-                    parentElement = (TimedElement) threadStack.peek();
-                }
-            }
-        }
-        */
+         * if (parentElement == null) { Stack threadStack = (Stack)
+         * threadStacks.get(Thread.currentThread()); if (threadStack != null) { if
+         * (!threadStack.empty()) { parentElement = (TimedElement) threadStack.peek(); } } }
+         */
 
         if (parentElement != null) {
             parentElement.element.appendChild(messageElement);
-        } else {
+        }
+        else {
             buildElement.element.appendChild(messageElement);
         }
     }
@@ -368,9 +325,8 @@
 
     /**
      * Set the logging level when using this as a Logger
-     *
-     * @param level the logging level -
-     *        see {@link org.apache.tools.ant.Project#MSG_ERR Project}
+     * 
+     * @param level the logging level - see {@link org.apache.tools.ant.Project#MSG_ERR Project}
      *        class for level definitions
      */
     public void setMessageOutputLevel(int level) {
@@ -378,9 +334,8 @@
     }
 
     /**
-     * Set the output stream to which logging output is sent when operating
-     * as a logger.
-     *
+     * Set the output stream to which logging output is sent when operating as a logger.
+     * 
      * @param output the output PrintStream.
      */
     public void setOutputPrintStream(PrintStream output) {
@@ -389,18 +344,16 @@
 
     /**
      * Ignore emacs mode, as it has no meaning in XML format
-     *
-     * @param emacsMode true if logger should produce emacs compatible
-     *        output
+     * 
+     * @param emacsMode true if logger should produce emacs compatible output
      */
     public void setEmacsMode(boolean emacsMode) {
     }
 
     /**
-     * Ignore error print stream. All output will be written to
-     * either the XML log file or the PrintStream provided to
-     * setOutputPrintStream
-     *
+     * Ignore error print stream. All output will be written to either the XML log file or the
+     * PrintStream provided to setOutputPrintStream
+     * 
      * @param err the stream we are going to ignore.
      */
     public void setErrorPrintStream(PrintStream err) {
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/conditions/AtsCondition.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/conditions/AtsCondition.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,30 +1,29 @@
 /*
-* 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: 
-*
-*/
- 
+ * 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.conditions;
 
-import org.apache.log4j.Logger;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Iterator;
+
+import org.apache.tools.ant.Project;
 import org.apache.tools.ant.ProjectComponent;
 import org.apache.tools.ant.taskdefs.condition.Condition;
-
-import java.util.Iterator;
-import java.net.MalformedURLException;
-import java.net.URL;
-
 import org.dom4j.Document;
 import org.dom4j.DocumentException;
 import org.dom4j.Element;
@@ -32,80 +31,78 @@
 
 /**
  * Condition to read check from diamonds and tell if ats has failed
+ * 
  * @ant.type name="hasAtsPassed"
  */
-public class AtsCondition extends ProjectComponent implements Condition
-{
-    private Logger log = Logger.getLogger(AtsCondition.class);
+public class AtsCondition extends ProjectComponent implements Condition {
     private int sleeptimesecs = 60;
-    
-    public void setSleeptime(int seconds)
-    {
+
+    public void setSleeptime(int seconds) {
         sleeptimesecs = seconds;
     }
-    
+
     /** Read from diamonds and signal if ats failed */
-    public boolean eval()
-    {
+    public boolean eval() {
         String bid = getProject().getProperty("diamonds.build.id");
-        if (bid == null)
-            log.info("Diamonds not enabled");
-        else
-        {
+        if (bid == null) {
+            log("Diamonds not enabled");
+        }
+        else {
             boolean testsfound = false;
-            log.info("Looking for tests in diamonds");
+            log("Looking for tests in diamonds");
             SAXReader xmlReader = new SAXReader();
-            
-            while (!testsfound)
-            {
+
+            while (!testsfound) {
                 Document antDoc = null;
-                
+
                 try {
-                    URL url = new URL("http://" + getProject().getProperty("diamonds.host") + bid + "?fmt=xml");
+                    URL url = new URL("http://" + getProject().getProperty("diamonds.host") + bid
+                        + "?fmt=xml");
                     antDoc = xmlReader.read(url);
-                } catch (MalformedURLException  e) {
+                }
+                catch (MalformedURLException e) {
                     // We are Ignoring the errors as no need to fail the build.
-                    log.error("Not able to read the Diamonds URL http://" + getProject().getProperty("diamonds.host") + bid + "?fmt=xml: " + e.getMessage());
-                } catch (DocumentException e) {
-                    log.error("Not able to read the Diamonds URL http://" + getProject().getProperty("diamonds.host") + bid + "?fmt=xml: " + e.getMessage());
+                    log("Not able to read the Diamonds URL http://"
+                        + getProject().getProperty("diamonds.host") + bid + "?fmt=xml: "
+                        + e.getMessage(), Project.MSG_ERR);
                 }
-                  
-                for (Iterator iterator = antDoc.selectNodes("//test/failed").iterator(); iterator.hasNext();)
-                {
+                catch (DocumentException e) {
+                    log("Not able to read the Diamonds URL http://"
+                        + getProject().getProperty("diamonds.host") + bid + "?fmt=xml: "
+                        + e.getMessage(), Project.MSG_ERR);
+                }
+
+                for (Iterator iterator = antDoc.selectNodes("//test/failed").iterator(); iterator.hasNext();) {
                     testsfound = true;
                     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();)
-                        {
+                    if (!failed.equals("0")) {
+                        log("ATS tests failed", Project.MSG_ERR);
+
+                        for (Iterator iterator2 = antDoc.selectNodes("//actual_result").iterator(); iterator2.hasNext();) {
                             Element resultElement = (Element) iterator2.next();
-                            log.error(resultElement.getText());
+                            log(resultElement.getText(), Project.MSG_ERR);
                         }
                         return false;
                     }
                 }
-                
+
                 int noofdrops = Integer.parseInt(getProject().getProperty("drop.file.counter"));
-                if (noofdrops > 0)
-                {
+                if (noofdrops > 0) {
                     int testsrun = antDoc.selectNodes("//test").size();
-                    if (testsrun < noofdrops)
-                    {
-                        log.info(testsrun + " test completed, " + noofdrops + " total");
+                    if (testsrun < noofdrops) {
+                        log(testsrun + " test completed, " + noofdrops + " total");
                         testsfound = false;
                     }
                 }
-                if (!testsfound)
-                {
-                    log.info("Tests not found sleeping for " + sleeptimesecs + " seconds");
+                if (!testsfound) {
+                    log("Tests not found sleeping for " + sleeptimesecs + " seconds");
                     try {
-                    Thread.sleep(sleeptimesecs * 1000);
-                    } catch (InterruptedException e) {
+                        Thread.sleep(sleeptimesecs * 1000);
+                    }
+                    catch (InterruptedException e) {
                         // This will not affect the build process so ignoring.
-                        log.debug("Interrupted while reading ATS build status " + e.getMessage());
+                        log("Interrupted while reading ATS build status " + e.getMessage(), Project.MSG_DEBUG);
                     }
                 }
             }
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/listener/CoverageRecorderEntry.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/listener/CoverageRecorderEntry.java	Fri Aug 13 14:59:05 2010 +0300
@@ -20,27 +20,37 @@
 
 package com.nokia.ant.listener;
 
-import java.io.*;
-import org.apache.tools.ant.util.DOMElementWriter;
-import org.apache.tools.ant.util.DateUtils;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintStream;
+import java.io.Writer;
+import java.util.Hashtable;
+import java.util.Stack;
+
 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;
 
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildLogger;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.SubBuildListener;
+import org.apache.tools.ant.Target;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.UnknownElement;
+import org.apache.tools.ant.util.DOMElementWriter;
+import org.apache.tools.ant.util.DateUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
 /**
- * This is a class that represents a XML recorder. This is the listener to the
- * build process.
- *
+ * 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. */
@@ -53,21 +63,21 @@
     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.  */
+
+    /** The name of the file associated with this recorder entry. */
     private String filename;
-    /** The state of the recorder (recorder on or off).  */
+    /** The state of the recorder (recorder on or off). */
     private boolean record = true;
-    /** The current verbosity level to record at.  */
+    /** The current verbosity level to record at. */
     private int loglevel = Project.MSG_INFO;
-    /** The output PrintStream to record to.  */
+    /** The output PrintStream to record to. */
     private PrintStream outStream;
-    /** The start time of the last know target.  */
+    /** The start time of the last know target. */
     private long targetStartTime;
     /** project instance the recorder is associated with */
     private Project project;
@@ -79,17 +89,13 @@
     /** 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).
+     * 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).
@@ -99,37 +105,39 @@
         this.recordTaskName = recordTaskName;
         startBuild();
     }
-    
+
     /**
-     * Returns a default DocumentBuilder instance or throws an
-     * ExceptionInInitializerError if it can't be created.
-     *
+     * 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) {
+        }
+        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>).
+         * 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() {
@@ -138,15 +146,12 @@
             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);
+        /*
+         * 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.
@@ -157,7 +162,7 @@
 
     /**
      * Turns off or on this recorder.
-     *
+     * 
      * @param state true for on, false for off, null for no change.
      */
     public void setRecordState(Boolean state) {
@@ -171,7 +176,7 @@
      */
     /** {@inheritDoc}. */
     public void buildStarted(BuildEvent event) {
-        
+
     }
 
     /**
@@ -183,12 +188,11 @@
     }
 
     /**
-     * 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.
-     *
+     * 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) {
@@ -199,9 +203,9 @@
 
     /**
      * Empty implementation to satisfy the BuildListener interface.
-     *
+     * 
      * @param event the buildStarted event
-     *
+     * 
      * @since Ant 1.6.2
      */
     public void subBuildStarted(BuildEvent event) {
@@ -229,28 +233,27 @@
         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));
+            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 (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 {
+            }
+            else {
                 parentElement.element.appendChild(targetElement.element);
             }
         }
@@ -272,8 +275,7 @@
             name = "";
         }
         taskElement.element.setAttribute(NAME_ATTR, name);
-        taskElement.element.setAttribute(LOCATION_ATTR,
-                event.getTask().getLocation().toString());
+        taskElement.element.setAttribute(LOCATION_ATTR, event.getTask().getLocation().toString());
         tasks.put(task, taskElement);
         getStack().push(taskElement);
     }
@@ -283,14 +285,13 @@
      */
     /** {@inheritDoc}. */
     public void taskFinished(BuildEvent event) {
-        
-//        if (event.getTask().getTaskName() != recordTaskName) {
+
+        // 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));
+            taskElement.element.setAttribute(TIME_ATTR, DateUtils.formatElapsedTime(totalTime));
             Target target = task.getOwningTarget();
             TimedElement targetElement = null;
             if (target != null) {
@@ -298,30 +299,31 @@
             }
             if (targetElement == null) {
                 buildElement.element.appendChild(taskElement.element);
-            } else {
+            }
+            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);
-//                    }
+                // 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);
-//            }
+            // } 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
+     * 
+     * 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);
@@ -338,13 +340,13 @@
         }
         return null;
     }
-    
+
     /**
      * @see org.apache.tools.ant.BuildListener#messageLogged(BuildEvent)
      */
     /** {@inheritDoc}. */
     public void messageLogged(BuildEvent event) {
-        
+
     }
 
     /**
@@ -365,7 +367,6 @@
         outStream = output;
     }
 
-
     /**
      * @see BuildLogger#setErrorPrintStream(PrintStream)
      */
@@ -376,9 +377,9 @@
 
     /**
      * Set the project associated with this recorder entry.
-     *
+     * 
      * @param project the project instance
-     *
+     * 
      * @since 1.6.2
      */
     public void setProject(Project project) {
@@ -387,7 +388,7 @@
             project.addBuildListener(this);
         }
     }
-    
+
     /**
      * @since 1.6.2
      */
@@ -398,10 +399,10 @@
         }
         project = null;
     }
-    
+
     /**
-     * Closes the file associated with this recorder.
-     * Used by Recorder.
+     * Closes the file associated with this recorder. Used by Recorder.
+     * 
      * @since 1.6.3
      */
     void closeFile() {
@@ -418,30 +419,32 @@
             out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
             (new DOMElementWriter()).write(buildElement.element, out, 0, "\t");
             out.flush();
-        } catch (IOException exc) {
+        }
+        catch (IOException exc) {
             throw new BuildException("Unable to write log file " + exc.getMessage(), exc);
-        } finally {
+        }
+        finally {
             if (out != null) {
                 try {
                     out.close();
-                } catch (IOException e) {
+                }
+                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));
+        buildElement.element.setAttribute(TIME_ATTR, DateUtils.formatElapsedTime(totalTime));
     }
 
     @Override
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/AntConfigurationTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/AntConfigurationTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -20,14 +20,17 @@
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Iterator;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.types.FileSet;
 import org.apache.tools.ant.types.ResourceCollection;
 import org.apache.tools.ant.types.resources.FileResource;
 
-import org.apache.commons.configuration.*;
-
 /**
  * Can load ant configuration file both in .xml and .txt format.
  * In .txt file configuration could be defined like -
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/AntDependencyTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/AntDependencyTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,94 +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: 
-*
-*/
- 
+ * 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.io.*;
-import java.util.*;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.io.Writer;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.jar.Attributes;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
+import java.util.zip.ZipEntry;
 
+import org.apache.tools.ant.DirectoryScanner;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.DirectoryScanner;
-
-import java.util.jar.*;
-import java.util.zip.ZipEntry;
-import java.net.*;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
 import org.dom4j.io.SAXReader;
-import org.dom4j.Document;
-import org.dom4j.Element;
-import org.dom4j.DocumentException;
 
 /**
  * Outputs a directed graph of Ant library dependencies, reads information from dependency jars
  */
-public class AntDependencyTask extends Task
-{
+public class AntDependencyTask extends Task {
     private ArrayList<FileSet> antFileSetList = new ArrayList<FileSet>();
     private String outputFile;
-    
-    public AntDependencyTask()
-    {
+
+    public AntDependencyTask() {
         setTaskName("AntDependencyTask");
     }
-    
+
     /**
      * Add a set of files to copy.
+     * 
      * @param set a set of files to AntDependencyTask.
      * @ant.required
      */
     public void addFileset(FileSet set) {
         antFileSetList.add(set);
     }
-    
+
     /**
      * Location of graph file to output to
+     * 
      * @ant.required
      */
-    public void setOutputFile(String path)
-    {
+    public void setOutputFile(String path) {
         outputFile = path;
     }
-    
-    public String classToJar(Class aclass)
-    {
+
+    public String classToJar(Class aclass) {
         String name = aclass.getName().replace(".", "/") + ".class";
-      
-        for (Iterator iterator = antFileSetList.iterator(); iterator.hasNext();)
-        {
+
+        for (Iterator iterator = antFileSetList.iterator(); iterator.hasNext();) {
             FileSet fs = (FileSet) iterator.next();
             DirectoryScanner ds = fs.getDirectoryScanner(getProject());
             String[] srcFiles = ds.getIncludedFiles();
             String basedir = ds.getBasedir().getPath();
-            //log(basedir);
-            
-            for (int i = 0; i < srcFiles.length; i++)
-            {
+            // log(basedir);
+
+            for (int i = 0; i < srcFiles.length; i++) {
                 String fileName = basedir + File.separator + srcFiles[i];
-                //log(fileName);
+                // log(fileName);
                 try {
                     JarFile jar = new JarFile(fileName);
-                    
-                    //for (Enumeration e = jar.entries(); e.hasMoreElements() ;) {log(e.nextElement().toString()); }
-                    
-                    if (jar.getJarEntry(name) != null)
+
+                    // for (Enumeration e = jar.entries(); e.hasMoreElements() ;)
+                    // {log(e.nextElement().toString()); }
+
+                    if (jar.getJarEntry(name) != null) {
                         return fileName;
+                    }
                 }
-                catch (IOException e) { 
+                catch (IOException e) {
                     // We are Ignoring the errors as no need to fail the build.
                     log(e.getMessage(), Project.MSG_DEBUG);
                 }
@@ -97,150 +114,143 @@
         log(name + " not found", Project.MSG_DEBUG);
         return null;
     }
-    
-    public String getJarAttr(JarFile jar, String nameOfAttr)
-    {
+
+    public String getJarAttr(JarFile jar, String nameOfAttr) {
         try {
             String attr = jar.getManifest().getMainAttributes().getValue(nameOfAttr);
-            if (attr != null)
+            if (attr != null) {
                 return attr;
-        
+            }
+
             Manifest manifest = jar.getManifest();
             Map map = manifest.getEntries();
-        
-            for (Iterator it = map.keySet().iterator(); it.hasNext(); ) {
-                String entryName = (String)it.next();
-                Attributes attrs = (Attributes)map.get(entryName);
-        
-                for (Iterator it2 = attrs.keySet().iterator(); it2.hasNext(); )
-                {
-                    Attributes.Name attrName = (Attributes.Name)it2.next();
-                        if (attrName.toString() == nameOfAttr)
-                            return attrs.getValue(attrName).replace("\"", "");
+
+            for (Iterator it = map.keySet().iterator(); it.hasNext();) {
+                String entryName = (String) it.next();
+                Attributes attrs = (Attributes) map.get(entryName);
+
+                for (Iterator it2 = attrs.keySet().iterator(); it2.hasNext();) {
+                    Attributes.Name attrName = (Attributes.Name) it2.next();
+                    if (attrName.toString() == nameOfAttr) {
+                        return attrs.getValue(attrName).replace("\"", "");
+                    }
                 }
             }
-        } catch (IOException e) {
+        }
+        catch (IOException e) {
             // We are Ignoring the errors as no need to fail the build.
             log("Not able to get the JAR file attribute information. " + e.getMessage(), Project.MSG_DEBUG);
         }
         return null;
     }
-    
-    public HashSet<String> getJarInfo()
-    {
+
+    public HashSet<String> getJarInfo() {
         HashSet<String> classlist = new HashSet<String>();
-        
-        for (Iterator iterator = antFileSetList.iterator(); iterator.hasNext();)
-        {
+
+        for (Iterator iterator = antFileSetList.iterator(); iterator.hasNext();) {
             FileSet fs = (FileSet) iterator.next();
             DirectoryScanner ds = fs.getDirectoryScanner(getProject());
             String[] srcFiles = ds.getIncludedFiles();
             String basedir = ds.getBasedir().getPath();
-            //log(basedir);
-            
-            for (int i = 0; i < srcFiles.length; i++)
-            {
+            // log(basedir);
+
+            for (int i = 0; i < srcFiles.length; i++) {
                 String fileName = basedir + File.separator + srcFiles[i];
-                //log(fileName);
+                // log(fileName);
                 try {
                     JarFile jar = new JarFile(fileName);
-                    
+
                     String vendor = getJarAttr(jar, "Implementation-Vendor");
                     String version = getJarAttr(jar, "Implementation-Version");
-                    if (version == null)
+                    if (version == null) {
                         version = getJarAttr(jar, "Specification-Version");
+                    }
                     String name = convertJarName(fileName);
-                    
-                    //findLicense(srcFiles[i], jar);
-                    
+
+                    // findLicense(srcFiles[i], jar);
+
                     String nameandversion = name;
-                    
-                    if (version != null)
-                    {
+
+                    if (version != null) {
                         version = version.replace("$", "");
-                        if (!digitInString(name))
+                        if (!digitInString(name)) {
                             nameandversion = name + " " + version;
+                        }
                     }
-                    if (vendor == null)
+                    if (vendor == null) {
                         vendor = "";
-                    classlist.add(name + " [style=filled,shape=record,label=\"" + nameandversion + "|" + vendor + "\"];");
+                    }
+                    classlist.add(name + " [style=filled,shape=record,label=\"" + nameandversion
+                        + "|" + vendor + "\"];");
                 }
-                catch (IOException e) { 
+                catch (IOException e) {
                     // We are Ignoring the errors as no need to fail the build.
-                    e.printStackTrace(); 
+                    e.printStackTrace();
                 }
             }
         }
 
         return classlist;
     }
-    
-    public void findLicense(String name, JarFile jar)
-    {
+
+    public void findLicense(String name, JarFile jar) {
         try {
             ZipEntry entry = jar.getEntry("META-INF/LICENSE");
-            if (entry == null)
+            if (entry == null) {
                 entry = jar.getEntry("META-INF/LICENSE.txt");
-            if (entry != null)
-            {
-              /**/
+            }
+            if (entry != null) {
+                /**/
                 log("File in " + name + " in jar file ", Project.MSG_DEBUG);
                 byte[] data = new byte[1024];
                 jar.getInputStream(entry).read(data);
-                for (String line : new String(data).split("\n"))
-                {
-                    if (line.contains("License") || line.contains("LICENSE ") || line.contains("Copyright"))
-                    {
+                for (String line : new String(data).split("\n")) {
+                    if (line.contains("License") || line.contains("LICENSE ")
+                        || line.contains("Copyright")) {
                         log("Replace License information with * " + line.replace("*", "").trim(), Project.MSG_INFO);
                         break;
                     }
                 }
             }
-            else
-            {   
-                //http://mirrors.ibiblio.org/pub/mirrors/maven2/
+            else {
+                // http://mirrors.ibiblio.org/pub/mirrors/maven2/
                 String mavenUrl = "http://repo2.maven.org/maven2/";
                 Enumeration jarfiles = jar.entries();
                 boolean found = false;
                 while (!found && jarfiles.hasMoreElements()) {
                     ZipEntry file = (ZipEntry) jarfiles.nextElement();
-                    if (file.isDirectory())
-                    {   
+                    if (file.isDirectory()) {
                         String filename = file.getName();
                         String[] split = file.getName().split("/");
                         String end = split[split.length - 1];
                         String specialfilename = filename + end;
-                        
+
                         URL url = new URL(mavenUrl + filename + end + "/maven-metadata.xml");
-                        if (!end.equals("apache"))
-                        {
+                        if (!end.equals("apache")) {
                             HttpURLConnection connection = (HttpURLConnection) url.openConnection();
-                            if (connection.getResponseCode() != HttpURLConnection.HTTP_OK)
-                            {
+                            if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
                                 filename = filename.replace(end, name.replace(".jar", ""));
                                 end = name.replace(".jar", "");
                                 specialfilename = filename;
                                 url = new URL(mavenUrl + filename + "maven-metadata.xml");
                                 connection = (HttpURLConnection) url.openConnection();
                             }
-                            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK)
-                            {   
-                                
+                            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
+
                                 SAXReader xmlReader = new SAXReader();
                                 Document antDoc = xmlReader.read(url.openStream());
                                 List versions = antDoc.selectNodes("//versioning/versions/version");
-                                //if (version.equals(""))
-                                //{
-                                //    version = antDoc.valueOf("/metadata/version");
-                                //}
+                                // if (version.equals(""))
+                                // {
+                                // version = antDoc.valueOf("/metadata/version");
+                                // }
                                 Collections.reverse(versions);
-                                for (Object tmpversion : versions)
-                                {
-                                    String version = ((Element)tmpversion).getText();
-                                    URL url2 = new URL(mavenUrl + specialfilename + "/" + version + "/" + end + "-" + version + ".pom");
+                                for (Object tmpversion : versions) {
+                                    String version = ((Element) tmpversion).getText();
+                                    URL url2 = new URL(mavenUrl + specialfilename + "/" + version
+                                        + "/" + end + "-" + version + ".pom");
                                     HttpURLConnection connection2 = (HttpURLConnection) url2.openConnection();
-                                    if (connection2.getResponseCode() == HttpURLConnection.HTTP_OK)
-                                    {
+                                    if (connection2.getResponseCode() == HttpURLConnection.HTTP_OK) {
                                         BufferedReader din = new BufferedReader(new InputStreamReader(url2.openStream()));
                                         StringBuffer sb = new StringBuffer();
                                         String line = null;
@@ -252,31 +262,33 @@
                                         //
                                         Document antDoc2 = xmlReader.read(new ByteArrayInputStream(new String(sb).getBytes()));
                                         String license = antDoc2.valueOf("/project/licenses/license/name");
-                                        if (!license.equals(""))
-                                        {
+                                        if (!license.equals("")) {
                                             found = true;
                                             break;
                                         }
-                                            
+
                                     }
                                 }
                             }
                         }
-                    }   
-                    
+                    }
+
                 }
-                if (!found)
+                if (!found) {
                     log(name + " not found in " + jar, Project.MSG_INFO);
+                }
             }
-        } catch (IOException e) {
+        }
+        catch (IOException e) {
             // We are Ignoring the errors as no need to fail the build.
-            e.printStackTrace(); 
-        } catch (DocumentException e) {
+            e.printStackTrace();
+        }
+        catch (DocumentException e) {
             // We are Ignoring the errors as no need to fail the build.
-            e.printStackTrace(); 
+            e.printStackTrace();
         }
     }
-    
+
     public boolean digitInString(String s) {
         int j = s.length() - 1;
         while (j >= 0 && Character.isDigit(s.charAt(j))) {
@@ -285,65 +297,69 @@
         return false;
     }
 
-    
-    public String convertJarName(String jar)
-    {
+    public String convertJarName(String jar) {
         return new File(jar).getName().replace(".jar", "").replace("-", "_").replace(".", "_");
     }
-    
-    public final void execute()
-    {
+
+    public final void execute() {
         try {
             Project project = getProject();
-            
+
             Hashtable taskdefs = project.getTaskDefinitions();
-            
+
             HashSet<String> classlist = new HashSet<String>();
-            
+
             Enumeration taskdefsenum = taskdefs.keys();
             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"))
-                {
+                if (!key.contains("nokia") && !value.toString().contains("org.apache.tools.ant")) {
                     String name = value.getPackage().getName();
                     String vendor = value.getPackage().getImplementationVendor();
-                    
+
                     name = classToJar(value);
-                    
-                    if (name != null)
-                    {
+
+                    if (name != null) {
                         name = convertJarName(name);
-                      
+
                         classlist.add("helium_ant -> \"" + name + "\";");
-                        
-                        if (vendor == null)
+
+                        if (vendor == null) {
                             vendor = "";
-                        
-                        classlist.add(name + " [style=filled,shape=record,label=\"" + name + "|" + vendor + "\"];");
+                        }
+
+                        classlist.add(name + " [style=filled,shape=record,label=\"" + name + "|"
+                            + vendor + "\"];");
                     }
                 }
             }
-            
+
             classlist.add("helium_ant -> nokia_ant;");
-            
+
             classlist.addAll(getJarInfo());
-        
+
             Writer output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), "UTF8"));
-            
-            for (String value : classlist)
+
+            for (String value : classlist) {
                 output.write(value + "\n");
-            
+            }
+
             output.close();
-        } catch (FileNotFoundException e) {
+        }
+        catch (FileNotFoundException e) {
             // We are Ignoring the errors as no need to fail the build.
-            log("FileNotFoundException occured while getting the ANT task dependency information. " + e.getMessage(), Project.MSG_DEBUG);
-        } catch (UnsupportedEncodingException e) {
+            log("FileNotFoundException occured while getting the ANT task dependency information. "
+                + e.getMessage(), Project.MSG_DEBUG);
+        }
+        catch (UnsupportedEncodingException e) {
             // We are Ignoring the errors as no need to fail the build.
-            log("UnsupportedEncodingException occured while getting the ANT task dependency information. " + e.getMessage(), Project.MSG_DEBUG);
-        } catch (IOException e) {
+            log("UnsupportedEncodingException occured while getting the ANT task dependency information. "
+                + e.getMessage(), Project.MSG_DEBUG);
+        }
+        catch (IOException e) {
             // We are Ignoring the errors as no need to fail the build.
-            log("IOException occured while getting the ANT task dependency information. " + e.getMessage(), Project.MSG_DEBUG);
+            log("IOException occured while getting the ANT task dependency information. "
+                + e.getMessage(), Project.MSG_DEBUG);
         }
     }
 
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CopyParallelTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CopyParallelTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,125 +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: 
-*
-*/
- 
+ * 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.taskdefs.Copy;
 import java.io.File;
 import java.io.IOException;
 import java.util.Enumeration;
+import java.util.Vector;
 
-import java.util.Vector;
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.taskdefs.Copy;
 import org.apache.tools.ant.types.FilterSet;
 import org.apache.tools.ant.types.FilterSetCollection;
 
 /**
- * Copies a file(s) or directory(s) to a new file(s)
- * or directory(s) using parallel threads. Number of parallel
- * threads can be defined by threadCount. Files are only 
- * copied if the source file is newer
- * than the destination file, or when the destination file does not
- * exist.  It is possible to explicitly overwrite existing files.</p>
- *
- *
+ * Copies a file(s) or directory(s) to a new file(s) or directory(s) using parallel threads. Number
+ * of parallel threads can be defined by threadCount. Files are only copied if the source file is
+ * newer than the destination file, or when the destination file does not exist. It is possible to
+ * explicitly overwrite existing files.</p>
+ * 
+ * 
  * @ant.task category="Filesystem"
  * @since Helium 0.21
- *
- */ 
-public class CopyParallelTask extends Copy
-{
+ * 
+ */
+public class CopyParallelTask extends Copy {
 
     static final String LINE_SEPARATOR = System.getProperty("line.separator");
     private int copyThreadCount;
     private int maxThreadCount;
+
     /**
      * CopyParallelTask task constructor.
      */
-    public CopyParallelTask()
-    {
+    public CopyParallelTask() {
         setTaskName("copy-parallel");
     }
 
     /**
      * Perform the copy operation in parallel.
+     * 
      * @exception BuildException if an error occurs.
      */
-    public final void execute()
-    {
-        super.execute(); 
-        //wait until all copy threads are dead
-        while (copyThreadCount > 0)
-        {
+    public final void execute() {
+        super.execute();
+        // wait until all copy threads are dead
+        while (copyThreadCount > 0) {
             try {
                 Thread.sleep(500);
-            } catch (InterruptedException e) {
+            }
+            catch (InterruptedException e) {
                 if (failonerror) {
-                    throw new BuildException("Copy parallel task has been interrupted " + e.getMessage());
+                    throw new BuildException("Copy parallel task has been interrupted "
+                        + e.getMessage());
                 }
                 log("Copy parallel task has been interrupted " + e.getMessage(), Project.MSG_ERR);
             }
         }
-       
+
     }
 
     /**
      * Set maximum number of thread.
+     * 
      * @param threadCount maximum number of threads
      */
-    public final void setThreadCount(final int threadCount) 
-    {
-        // Limit max. threads to 8 otherwise we experience freezing when using the fastcopy task on 8 processor build machines
-        if (threadCount > 8) 
-        {
-            this.maxThreadCount = 8;   
-        } else {
+    public final void setThreadCount(final int threadCount) {
+        // Limit max. threads to 8 otherwise we experience freezing when using the fastcopy task on
+        // 8 processor build machines
+        if (threadCount > 8) {
+            this.maxThreadCount = 8;
+        }
+        else {
             this.maxThreadCount = threadCount;
         }
     }
 
-     /**
-     * Actually does the file (and possibly empty directory) copies.
-     * This is a good method for subclasses to override.
+    /**
+     * Actually does the file (and possibly empty directory) copies. This is a good method for
+     * subclasses to override.
      */
-    protected final void doFileOperations() 
-    {
-        Vector filterChains = getFilterChains();
+    protected final void doFileOperations() {
         Vector filterSets = getFilterSets();
-        String inputEncoding = getEncoding();
-        String outputEncoding = getOutputEncoding();
-        long granularity = 0;   
-        
+
         // set default thread count to 1 if it is not set
-        if ( maxThreadCount < 1 )
-            maxThreadCount = 1;   
-        
-      
-        if (fileCopyMap.size() > 0) 
-        {
-            log("Copying " + fileCopyMap.size()
-                + " file" + (fileCopyMap.size() == 1 ? "" : "s")
-                + " to " + destDir.getAbsolutePath() + " using " +  maxThreadCount 
+        if (maxThreadCount < 1) {
+            maxThreadCount = 1;
+        }
+
+        if (fileCopyMap.size() > 0) {
+            log("Copying " + fileCopyMap.size() + " file" + (fileCopyMap.size() == 1 ? "" : "s")
+                + " to " + destDir.getAbsolutePath() + " using " + maxThreadCount
                 + " threads in parallel.");
 
             Enumeration fileEnum = fileCopyMap.keys();
-            while (fileEnum.hasMoreElements())
-            {
+            while (fileEnum.hasMoreElements()) {
                 String fromFile = (String) fileEnum.nextElement();
                 String[] toFiles = (String[]) fileCopyMap.get(fromFile);
 
@@ -133,20 +123,15 @@
                     log("Copying " + fromFile + " to " + toFile, verbosity);
 
                     FilterSetCollection executionFilters = new FilterSetCollection();
-                    if ( filtering ) 
-                    {
+                    if (filtering) {
                         executionFilters.addFilterSet(getProject().getGlobalFilterSet());
                     }
-                    for (Enumeration filterEnum = filterSets.elements();
-                        filterEnum.hasMoreElements();) {
-                        executionFilters
-                            .addFilterSet((FilterSet) filterEnum.nextElement());
-                    }                       
-                    
-                    while (true)
-                    {
-                        if ( copyThreadCount < maxThreadCount)
-                        {
+                    for (Enumeration filterEnum = filterSets.elements(); filterEnum.hasMoreElements();) {
+                        executionFilters.addFilterSet((FilterSet) filterEnum.nextElement());
+                    }
+
+                    while (true) {
+                        if (copyThreadCount < maxThreadCount) {
                             CopyThread copyThread = new CopyThread(fromFile, toFile, executionFilters);
                             copyThread.start();
                             copyThreadCount++;
@@ -165,74 +150,35 @@
                     File file = new File(dirs[i]);
                     if (!file.exists()) {
                         if (!file.mkdirs()) {
-                            log("Unable to create directory "
-                                + file.getAbsolutePath(), Project.MSG_ERR);
-                        } else {
+                            log("Unable to create directory " + file.getAbsolutePath(), Project.MSG_ERR);
+                        }
+                        else {
                             createCount++;
                         }
                     }
                 }
             }
             if (createCount > 0) {
-                log("Copied " + dirCopyMap.size()
-                    + " empty director"
-                    + (dirCopyMap.size() == 1 ? "y" : "ies")
-                    + " to " + createCount
-                    + " empty director"
-                    + (createCount == 1 ? "y" : "ies") + " under "
+                log("Copied " + dirCopyMap.size() + " empty director"
+                    + (dirCopyMap.size() == 1 ? "y" : "ies") + " to " + createCount
+                    + " empty director" + (createCount == 1 ? "y" : "ies") + " under "
                     + destDir.getAbsolutePath());
             }
         }
     }
 
     /**
-     * Returns a reason for failure based on
-     * the exception thrown.
-     * If the exception is not IOException output the class name,
-     * output the message
-     * if the exception is MalformedInput add a little note.
+     * private class to start a new thread to copy a single file or or directory.
      */
-    private String getDueTo(Exception ex) {
-        boolean baseIOException = ex.getClass() == IOException.class;
-        StringBuffer message = new StringBuffer();
-        if (!baseIOException || ex.getMessage() == null) {
-            message.append(ex.getClass().getName());
-        }
-        if (ex.getMessage() != null) {
-            if (!baseIOException) {
-                message.append(" ");
-            }
-            message.append(ex.getMessage());
-        }
-        if (ex.getClass().getName().indexOf("MalformedInput") != -1) {
-            message.append(LINE_SEPARATOR);
-            message.append(
-                "This is normally due to the input file containing invalid");
-            message.append(LINE_SEPARATOR);
-            message.append("bytes for the character encoding used : ");
-            message.append(
-                getEncoding() == null
-                 ? fileUtils.getDefaultEncoding() : getEncoding());
-            message.append(LINE_SEPARATOR);
-        }
-        return message.toString();
-    }
-
-    /**
-     * private class to start a new thread to copy a single file or 
-     * or directory. 
-     */ 
-    private class CopyThread extends Thread 
-    {   
+    private class CopyThread extends Thread {
         private String fromFile;
         private String toFile;
         private FilterSetCollection executionFilters;
         private Vector filterChains;
         private String inputEncoding;
         private String outputEncoding;
-        
-        public CopyThread(String fromFile, String toFile, FilterSetCollection executionFilters)
-        {
+
+        public CopyThread(String fromFile, String toFile, FilterSetCollection executionFilters) {
             this.fromFile = fromFile;
             this.toFile = toFile;
             this.executionFilters = executionFilters;
@@ -241,14 +187,11 @@
             this.outputEncoding = getOutputEncoding();
         }
 
-        public void run() 
-        {
+        public void run() {
             try {
-                fileUtils.copyFile(fromFile, toFile, executionFilters,
-                                 filterChains, forceOverwrite,
-                                 preserveLastModified, inputEncoding,
-                                 outputEncoding, getProject());
-            } catch (IOException e) {
+                fileUtils.copyFile(fromFile, toFile, executionFilters, filterChains, forceOverwrite, preserveLastModified, inputEncoding, outputEncoding, getProject());
+            }
+            catch (IOException e) {
                 log("Problem found in parallel copy " + e.toString(), Project.MSG_ERR);
             }
             copyThreadCount--;
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CoverageRecorderTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CoverageRecorderTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -21,6 +21,7 @@
 package com.nokia.ant.taskdefs;
 
 import java.util.Hashtable;
+
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.Recorder;
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/HlmExecTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/HlmExecTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,10 +17,12 @@
 
 package com.nokia.ant.taskdefs;
 
-import org.apache.tools.ant.taskdefs.ExecTask;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadPoolExecutor;
+
 import org.apache.tools.ant.BuildException;
-
-import java.util.concurrent.*;
+import org.apache.tools.ant.taskdefs.ExecTask;
 
 /**
  * Exec task using shared thread pool
@@ -39,8 +41,7 @@
     public void execute()
     {
         String property = getProject().getProperty("number.of.threads");
-        if (property != null)
-        {
+        if (property != null) {
             ((ThreadPoolExecutor)threadPool).setCorePoolSize(Integer.parseInt(property));
             ((ThreadPoolExecutor)threadPool).setMaximumPoolSize(Integer.parseInt(property));
         }
@@ -48,18 +49,20 @@
         threadPool.submit(taskRunnable);
         try {
             synchronized (semaphore) {
-                while (!taskRunnable.isFinished())
+                while (!taskRunnable.isFinished()) {
                     semaphore.wait();
+                }
             }
         } catch (InterruptedException e) { e.printStackTrace(); }
           
         Throwable exception = taskRunnable.getException();
         if (exception != null)
         {
-            if (exception instanceof BuildException)
+            if (exception instanceof BuildException) {
                 throw (BuildException)exception;
-            else
+            } else {
                 exception.printStackTrace();
+            }
         }
     }
     
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ModelPropertiesTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ModelPropertiesTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -19,9 +19,10 @@
 
 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.Project;
 import org.dom4j.DocumentException;
 
 import com.nokia.ant.ModelPropertiesParser;
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/StopLogToConsoleTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/StopLogToConsoleTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -19,9 +19,13 @@
 package com.nokia.ant.taskdefs;
 
 import org.apache.tools.ant.Task;
+
 import com.nokia.ant.HeliumLogger;
 
 /**
+ * This task is deprecated, please consider using the 
+ * hlm:taskRecorder task from the logging framework.
+ * 
  * This task will control the outputing of the Helium logger.
  * 
  * Example of usage, to stop logging to console:
@@ -35,7 +39,10 @@
  * </pre> 
  * 
  * @ant.task name="logtoconsole" category="Logging"
+ * @deprecated This task is deprecated, please consider using the 
+ * hlm:taskRecorder task from the logging framework.
  */ 
+@Deprecated
 public class StopLogToConsoleTask extends Task 
 {   
     private boolean stopLogToConsole;
@@ -62,11 +69,13 @@
         super.execute();
         if (HeliumLogger.getStopLogToConsole() != stopLogToConsole)
         {
-            if (stopLogToConsole)
-                log("Logging to console suspended.");             
+            if (stopLogToConsole) {
+                log("Logging to console suspended.");
+            }
             HeliumLogger.setStopLogToConsole(stopLogToConsole);   
-            if (!stopLogToConsole)
-                log("Logging to console resumed."); 
+            if (!stopLogToConsole) {
+                log("Logging to console resumed.");
+            }
         }       
     }   
 }
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/util/Helper.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/util/Helper.java	Fri Aug 13 14:59:05 2010 +0300
@@ -29,8 +29,9 @@
     public static String getProperty(Project project, String val) throws Exception
     {
         String prop = project.getProperty(val);
-        if (prop == null)
+        if (prop == null) {
             throw new Exception(val + " not defined");
+        }
         return prop;
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/util/ToolsProcess.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/util/ToolsProcess.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,18 +17,15 @@
 
 package com.nokia.ant.util;
 
-import java.util.Hashtable;
+import org.apache.log4j.Logger;
 
 import com.nokia.tools.Tool;
 import com.nokia.tools.ToolsProcessException;
-import org.apache.log4j.Logger;
 /**
  * Utility class to read property value, if property is not defined it will raise an exception.
  *
  */
 public final class ToolsProcess {
-    private static Hashtable tools = new Hashtable();
-
     private static Logger log;
     
     private ToolsProcess() { }
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ivy/ToolResolver.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,396 +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.ivy;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-
-import org.apache.ivy.core.IvyPatternHelper;
-import org.apache.ivy.core.module.descriptor.Artifact;
-import org.apache.ivy.core.module.descriptor.DefaultArtifact;
-import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
-import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
-import org.apache.ivy.core.module.id.ModuleRevisionId;
-import org.apache.ivy.core.resolve.ResolveData;
-import org.apache.ivy.core.settings.IvyPattern;
-import org.apache.ivy.plugins.latest.LatestStrategy;
-import org.apache.ivy.plugins.repository.BasicResource;
-import org.apache.ivy.plugins.repository.Resource;
-import org.apache.ivy.plugins.resolver.BasicResolver;
-import org.apache.ivy.plugins.resolver.util.MDResolvedResource;
-import org.apache.ivy.plugins.resolver.util.ResolvedResource;
-import org.apache.ivy.plugins.resolver.util.ResourceMDParser;
-import org.apache.ivy.plugins.version.VersionMatcher;
-import org.apache.ivy.util.Message;
-
-
-/**
- * Ivy plugin to read tool versions
- */
-public class ToolResolver extends BasicResolver
-{
-
-    private static final Map<String, String> IVY_ARTIFACT_ATTRIBUTES = new HashMap<String, String>();
-    static {
-        IVY_ARTIFACT_ATTRIBUTES.put(IvyPatternHelper.ARTIFACT_KEY, "ivy");
-        IVY_ARTIFACT_ATTRIBUTES.put(IvyPatternHelper.TYPE_KEY, "ivy");
-        IVY_ARTIFACT_ATTRIBUTES.put(IvyPatternHelper.EXT_KEY, "xml");
-    }
-    
-    private List<String> ivyPatterns = new ArrayList<String>(); // List (String pattern)
-    private List<String> artifactPatterns = new ArrayList<String>();  // List (String pattern)
-    private boolean m2compatible;
-
-    
-    public ResolvedResource findIvyFileRef(DependencyDescriptor dd, ResolveData data) {
-        ModuleRevisionId mrid = dd.getDependencyRevisionId();
-        if (isM2compatible()) {
-            mrid = convertM2IdForResourceSearch(mrid);
-        }
-        return findResourceUsingPatterns(mrid, ivyPatterns, DefaultArtifact.newIvyArtifact(mrid, data.getDate()), getRMDParser(dd, data), data.getDate());
-    }
-
-    protected ResolvedResource findArtifactRef(Artifact artifact, Date date) {
-        ModuleRevisionId mrid = artifact.getModuleRevisionId();
-        if (isM2compatible()) {
-            mrid = convertM2IdForResourceSearch(mrid);
-        }
-        return findResourceUsingPatterns(mrid, artifactPatterns, artifact, getDefaultRMDParser(artifact.getModuleRevisionId().getModuleId()), date);
-    }
-
-    @SuppressWarnings("unchecked")
-    protected ResolvedResource findResourceUsingPatterns(ModuleRevisionId moduleRevision, List patternList, Artifact artifact, ResourceMDParser rmdparser, Date date) {
-        ResolvedResource rres = null;
-        
-        List<ResolvedResource> resolvedResources = new ArrayList<ResolvedResource>();
-        boolean dynamic = getSettings().getVersionMatcher().isDynamic(moduleRevision);
-        boolean stop = false;
-        for (Iterator iter = patternList.iterator(); iter.hasNext() && !stop;) {
-            String pattern = (String)iter.next();
-            rres = findResourceUsingPattern(moduleRevision, pattern, artifact, rmdparser, date);
-            if (rres != null) {
-                resolvedResources.add(rres);
-                stop = !dynamic; // stop iterating if we are not searching a dynamic revision
-            }
-        }
-        
-        if (resolvedResources.size() > 1) {
-            ResolvedResource[] rress = (ResolvedResource[]) resolvedResources.toArray(new ResolvedResource[resolvedResources.size()]);
-            rres = findResource(rress, getName(), getLatestStrategy(), getSettings().getVersionMatcher(), rmdparser, moduleRevision, date);
-        }
-        
-        return rres;
-    }
-    
-    @SuppressWarnings("unchecked")
-    public ResolvedResource findResource(
-            ResolvedResource[] rress, 
-            String name,
-            LatestStrategy strategy, 
-            VersionMatcher versionMatcher, 
-            ResourceMDParser rmdparser,
-            ModuleRevisionId mrid, 
-            Date date) {
-        ResolvedResource found = null;
-        List sorted = strategy.sort(rress);
-        List rejected = new ArrayList();
-        for (ListIterator iter = sorted.listIterator(sorted.size()); iter.hasPrevious();) {
-            ResolvedResource rres = (ResolvedResource) iter.previous();
-            if (date != null && rres.getLastModified() > date.getTime()) {
-                Message.verbose("\t" + name + ": too young: " + rres);
-                rejected.add(rres.getRevision() + " (" + rres.getLastModified() + ")");
-                continue;
-            }
-            ModuleRevisionId foundMrid = ModuleRevisionId.newInstance(mrid, rres.getRevision());
-            if (!versionMatcher.accept(mrid, foundMrid)) {
-                Message.debug("\t" + name + ": rejected by version matcher: " + rres);
-                rejected.add(rres.getRevision());
-                continue;
-            }
-            if (versionMatcher.needModuleDescriptor(mrid, foundMrid)) {
-                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)");
-                    continue;
-                } else if (!versionMatcher.accept(mrid, md)) {
-                    Message.debug("\t" + name + ": md rejected by version matcher: " + rres);
-                    rejected.add(rres.getRevision() + " (MD)");
-                    continue;
-                } else {
-                    found = resolvedResource;
-                }
-            } else {
-                found = rres;
-            }
-            
-            if (found != null) {
-                if (!found.getResource().exists()) {
-                    Message.debug("\t" + name + ": resource not reachable for " + mrid + ": res=" + found.getResource());
-                    logAttempt(found.getResource().toString());
-                    continue; 
-                }
-                break;
-            }
-        }
-        if (found == null && !rejected.isEmpty()) {
-            logAttempt(rejected.toString());
-        }
-        
-        return found;
-    }
-
-    @SuppressWarnings("unchecked")
-    protected Collection findNames(Map tokenValues, String token) {
-        Collection names = new HashSet();
-        names.addAll(findIvyNames(tokenValues, token));
-        if (isAllownomd()) {
-            names.addAll(findArtifactNames(tokenValues, token));
-        }
-        return names;
-    }
-
-    protected Collection<String> findIvyNames(Map<String, String> tokenValues, String token) {
-        Collection<String> names = new HashSet<String>();
-        tokenValues = new HashMap<String, String>(tokenValues);
-        tokenValues.put(IvyPatternHelper.ARTIFACT_KEY, "ivy");
-        tokenValues.put(IvyPatternHelper.TYPE_KEY, "ivy");
-        tokenValues.put(IvyPatternHelper.EXT_KEY, "xml");
-        findTokenValues(names, getIvyPatterns(), tokenValues, token);
-        getSettings().filterIgnore(names);
-        return names;
-    }
-    
-    protected Collection<String> findArtifactNames(Map<String, String> tokenValues, String token) {
-        Collection<String> names = new HashSet<String>();
-        tokenValues = new HashMap<String, String>(tokenValues);
-        tokenValues.put(IvyPatternHelper.ARTIFACT_KEY, tokenValues.get(IvyPatternHelper.MODULE_KEY));
-        tokenValues.put(IvyPatternHelper.TYPE_KEY, "jar");
-        tokenValues.put(IvyPatternHelper.EXT_KEY, "jar");
-        findTokenValues(names, getArtifactPatterns(), tokenValues, token);
-        getSettings().filterIgnore(names);
-        return names;
-    }
-
-    // should be overridden by subclasses wanting to have listing features
-    protected void findTokenValues(Collection<String> names, List<String> patterns, Map<String, String> tokenValues, String token) {
-    }
-    /**
-     * example of pattern : ~/Workspace/[module]/[module].ivy.xml
-     * @param pattern
-     */
-    public void addIvyPattern(String pattern) {
-        ivyPatterns.add(pattern);
-    }
-
-    public void addArtifactPattern(String pattern) {
-        artifactPatterns.add(pattern);
-    }
-    
-    public List<String> getIvyPatterns() {
-        return Collections.unmodifiableList(ivyPatterns);
-    }
-
-    public List<String> getArtifactPatterns() {
-        return Collections.unmodifiableList(artifactPatterns);
-    }
-    protected void setIvyPatterns(List<String> ivyPatterns) {
-        this.ivyPatterns = ivyPatterns;
-    }
-    protected void setArtifactPatterns(List<String> artifactPatterns) {
-        this.artifactPatterns = artifactPatterns;
-    }
-
-    /*
-     * Methods respecting ivy conf method specifications
-     */
-    public void addConfiguredIvy(IvyPattern p) {
-        ivyPatterns.add(p.getPattern());
-    }
-
-    public void addConfiguredArtifact(IvyPattern p) {
-        artifactPatterns.add(p.getPattern());
-    }
-    
-    public void dumpSettings() {
-        super.dumpSettings();
-        Message.debug("\t\tm2compatible: " + isM2compatible());
-        Message.debug("\t\tivy patterns:");
-        for (ListIterator iter = getIvyPatterns().listIterator(); iter.hasNext();) {
-            String pattern = (String)iter.next();
-            Message.debug("\t\t\t" + pattern);
-        }
-        Message.debug("\t\tartifact patterns:");
-        for (ListIterator iter = getArtifactPatterns().listIterator(); iter.hasNext();) {
-            String pattern = (String)iter.next();
-            Message.debug("\t\t\t" + pattern);
-        }
-    }
-
-    public boolean isM2compatible() {
-        return m2compatible;
-    }
-
-    public void setM2compatible(boolean m2compatible) {
-        this.m2compatible = m2compatible;
-    }
-
-    protected ModuleRevisionId convertM2IdForResourceSearch(ModuleRevisionId mrid) {
-        if (mrid.getOrganisation().indexOf('.') == -1) {
-            return mrid;
-        }
-        return ModuleRevisionId.newInstance(mrid.getOrganisation().replace('.', '/'), mrid.getName(), mrid.getBranch(), mrid.getRevision(), mrid.getExtraAttributes());
-    }
-
-        
-
-    public void publish(Artifact artifact, File src, boolean overwrite) throws IOException
-    {
-        Message.verbose("ToolResolver.publish() start");
-    }
-    
-    private static File findExecutableOnPath(String executableName) {
-        String systemPath = System.getenv("PATH");
-        String[] pathDirs = systemPath.split(File.pathSeparator);
-        String[] extensions = {""};
-        
-        // Using PATHEXT to get the supported extenstions 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()) {
-                Message.verbose("Testing: " + file.getAbsolutePath());
-                if (file.isFile()) {
-                    return file;
-                }
-            }
-            for (String pathDir : pathDirs) {
-                file = new File(pathDir, checkName);
-                Message.verbose("Testing: " + file.getAbsolutePath());
-                if (file.isFile()) {
-                    return file;
-                }
-            }
-        }
-        return null;
-    }
-    
-    protected ResolvedResource findResourceUsingPattern(ModuleRevisionId mrid, String pattern,
-            Artifact artifact, ResourceMDParser rmdparser, Date date)
-    {
-        Message.verbose("ToolResolver.findResourceUsingPattern() start");
-        
-        Message.verbose(artifact.getName());
-        Message.verbose(mrid.getRevision());
-        Message.verbose(artifact.getAttribute("versionArgs"));
-
-        String toolVersion = mrid.getRevision();
-        ResolvedResource resolvedResource = null;
-        try
-        {
-            File executable = findExecutableOnPath(artifact.getName());
-            if (executable == null) {
-                return null;
-            }
-            Message.verbose("executable: " + executable.getAbsolutePath());
-            String versionText = getToolVersion(executable, artifact.getAttribute("versionArgs"));
-            Message.verbose(versionText);
-            
-            if (versionText.contains(toolVersion) || versionText.matches(artifact.getAttribute("versionExp")))
-            {
-                BasicResource resource = new BasicResource(executable.getAbsolutePath(), true, 0, 0, true);
-                resolvedResource = new ResolvedResource(resource, toolVersion);
-            }
-        }
-        catch (IOException e)
-        {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        return resolvedResource;
-    }
-
-    @Override
-    protected long get(Resource resource, File dest) throws IOException
-    {
-        Message.verbose("ToolResolver.get() start");
-        return 0;
-    }
-    
-    private String getToolVersion(File executable, String versionArgs) throws IOException
-    {
-        Runtime runtime = Runtime.getRuntime();
-        Message.verbose("'" + executable.getAbsolutePath() + " " + versionArgs + "'");
-        //Process toolProcess = runtime.exec(toolName+ "." + toolType + " " + versionArgs);
-        Process toolProcess = runtime.exec(executable.getAbsolutePath() + " " + versionArgs);
-        InputStream in = toolProcess.getInputStream();
-        InputStream err = toolProcess.getErrorStream();
-        String outText = toString(in).trim();
-        String errText = toString(err).trim();
-        Message.verbose("err: " + errText);
-        return outText + errText;
-    }
-    
-    private String toString(InputStream inputStream) throws IOException
-    {
-        byte[] buffer = new byte[4096];
-        OutputStream outputStream = new ByteArrayOutputStream();
-         
-        while (true) {
-            int read = inputStream.read(buffer);
-         
-            if (read == -1) {
-                break;
-            }
-         
-            outputStream.write(buffer, 0, read);
-        }
-         
-        outputStream.close();
-        inputStream.close();
-         
-        return outputStream.toString();
-    }
-
-    @Override
-    protected Resource getResource(String arg0) throws IOException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-}
-
-
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/tools/Tool.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/tools/Tool.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,8 +17,9 @@
  
 package com.nokia.tools;
 
+import org.apache.tools.ant.Project;
+
 import com.nokia.helium.core.ant.types.VariableSet;
-import org.apache.tools.ant.Project;
 /**
  * Common interface for the command line tool wrapper
  */
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/tools/cone/CONETool.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/tools/cone/CONETool.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,19 +1,19 @@
 /*
-* 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: 
-*
-*/
+ * 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.tools.cone;
 
@@ -27,50 +27,55 @@
 import com.nokia.tools.Tool;
 import com.nokia.tools.ToolsProcessException;
 
-
 /**
  * To generate the cenrep files using ConE tool.
- * 
- *
  */
 public class CONETool implements Tool {
-    
+
     private Map<String, String> varMapping = new HashMap<String, String>();
 
-    public void execute(VariableSet varSet, Project prj)
-            throws ToolsProcessException {
-        // TODO Auto-generated method stub
+    public void execute(VariableSet varSet, Project prj) throws ToolsProcessException {
+    }
 
-    }
-    
-    
     /**
      * Run the cone command with arguments from hashmap.
+     * 
      * @param prj
      * @throws ToolsProcessException
      */
     public void execute(Project prj) throws ToolsProcessException {
-        
+        String command = null;
+        String osType = System.getProperty("os.name");
         org.apache.tools.ant.taskdefs.ExecTask task = new org.apache.tools.ant.taskdefs.ExecTask();
         task.setTaskName("ConE");
         task.setDir(new java.io.File(varMapping.get("path")));
         task.setExecutable("cmd.exe");
+        command = "cmd.exe";
         task.setOutput(new File(varMapping.get("output")));
         task.createArg().setValue("/c");
         task.setAppend(true);
         task.createArg().setValue("cone.cmd");
-        task.createArg().setValue("generate");
-        for (Map.Entry<String, String> varEntry : varMapping.entrySet() ) {
-            if ( !varEntry.getKey().equals("path") && !varEntry.getKey().equals("output")) {
+        task.createArg().setValue(varMapping.get("command"));
+        command += " /c cone.cmd " + varMapping.get("command");
+        for (Map.Entry<String, String> varEntry : varMapping.entrySet()) {
+            if (!varEntry.getKey().equals("path") && !varEntry.getKey().equals("output")) {
                 task.createArg().setValue(varEntry.getKey());
+                command += " " + varEntry.getKey();
                 task.createArg().setValue(varEntry.getValue());
+                command += " " + varEntry.getValue();
             }
         }
+        if (!osType.toLowerCase().startsWith("win")) {
+            task.log("ConE tool runs only on windows platforms.");
+            return;
+        }
+        task.log("Running ConE command \"" + command + "\"");
         task.execute();
     }
-    
+
     /**
      * To Store the variable and it value into hashmap to read them later.
+     * 
      * @param name
      * @param value
      */
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/tools/configuration/CONFIGURATIONTool.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/tools/configuration/CONFIGURATIONTool.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,26 +1,28 @@
 /*
-* 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: 
-*
-*/
+ * 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.tools.configuration;
 
+import org.apache.tools.ant.Project;
+
 import com.nokia.helium.core.ant.MappedVariable;
 import com.nokia.helium.core.ant.types.VariableSet;
-import com.nokia.tools.*;
-import org.apache.tools.ant.Project;
+import com.nokia.tools.Tool;
+import com.nokia.tools.ToolsProcessException;
 
 /**
  * Command Line wrapper for configuration tools
@@ -28,14 +30,12 @@
 public class CONFIGURATIONTool implements Tool {
 
     /**
-     * Sets the command line variables to be used to execute and validates for
-     * the required parameters
+     * Sets the command line variables to be used to execute and validates for the required
+     * parameters
      * 
-     * @param varSet
-     *            variable(name / value list)
+     * @param varSet variable(name / value list)
      */
-    public void execute(VariableSet varSet, Project prj)
-            throws ToolsProcessException {
+    public void execute(VariableSet varSet, Project prj) throws ToolsProcessException {
         String path = null;
         String masterConf = null;
         String confml = null;
@@ -50,17 +50,23 @@
             value = variable.getValue();
             if (varName.equals("path")) {
                 path = value;
-            } else if (varName.equals("master_conf")) {
+            }
+            else if (varName.equals("master_conf")) {
                 masterConf = value;
-            } else if (varName.equals("confml")) {
+            }
+            else if (varName.equals("confml")) {
                 confml = value;
-            } else if (varName.equals("impl")) {
+            }
+            else if (varName.equals("impl")) {
                 impl = value;
-            } else if (varName.equals("iby")) {
+            }
+            else if (varName.equals("iby")) {
                 iby = value;
-            } else if (varName.equals("keepgoing")) {
+            }
+            else if (varName.equals("keepgoing")) {
                 keepGoing = value;
-            } else if (varName.equals("report")) {
+            }
+            else if (varName.equals("report")) {
                 report = value;
             }
         }
@@ -73,7 +79,8 @@
         task.setExecutable(path + java.io.File.separator + "cli_build.cmd");
         if (keepGoing.equals("false")) {
             task.setFailonerror(true);
-        } else {
+        }
+        else {
             task.createArg().setValue("-ignore_errors");
         }
         task.createArg().setValue("-master_conf");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/legacy/tests/antunit/run-scenario.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_signaltask.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="run-scenario" xmlns:ac="antlib:net.sf.antcontrib" xmlns:au="antlib:org.apache.ant.antunit">
+    <description>Helium Antlib feature enabler macro.</description>
+
+    <target name="setUp">    
+        <tempfile property="temp.dir" suffix=".dir" />
+        <mkdir dir="${temp.dir}" />
+    </target>
+    
+    <target name="tearDown">
+        <delete dir="${temp.dir}" />
+    </target>
+    
+    <macrodef name="runScenario">
+        <attribute name="scenario" />
+        <attribute name="target" />
+        <attribute name="cmdline" default=""/>
+        <sequential>
+            <ac:trycatch property="scenario.unittest.error">
+                <try>
+                    <exec osfamily="windows" executable="cmd" dir="${ant.file.run-scenario}/../../scenarii/@{scenario}" failonerror="true" errorproperty="scenario.unittest.error.log">
+                        <env key="ANT_ARGS" value="${env.ANT_ARGS} -logger com.nokia.ant.HeliumLogger" />
+                        <arg line="/c ..\build.bat @{target}" />
+                        <arg value="-Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor" />
+                        <arg value="-Dtemp.dir=${temp.dir}" />
+                        <arg value="-Dhelium.dir=${ant.file.run-scenario}/../../scenarii/property" />
+                    </exec>
+                    <exec osfamily="unix" executable="../bld.sh" dir="${ant.file.run-scenario}/../../scenarii/@{scenario}" failonerror="true" errorproperty="scenario.unittest.error.log">
+                        <env key="ANT_ARGS" value="${env.ANT_ARGS} -logger com.nokia.ant.HeliumLogger" />
+                        <arg value="-Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor" />
+                        <arg line="@{target}" />
+                        <arg value="-Dtemp.dir=${temp.dir}" />
+                        <arg line="@{cmdline}" />
+                        <arg value="-Dhelium.dir=${ant.file.run-scenario}/../../scenarii/property" />
+                    </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>
+
+</project>
--- a/buildframework/helium/sf/java/legacy/tests/antunit/test_common.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/tests/antunit/test_common.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -55,19 +55,6 @@
         </hlm:exec>
         <au:assertPropertyEquals name="testexec" value="hi"/>
     </target>
-    
-    <target name="test-ivy-tools">
-        <property name="data.dir" location="../data" />
-        <ivy:configure file="../data/ivy/tools_ivy_settings.xml" override="true" />
-        <ivy:resolve file="../data/ivy/ivy.xml" conf="core" haltonfailure="true" />
-    </target>
 
-    <target name="test-ivy-tools-invalid">
-        <property name="data.dir" location="../data" />
-        <ivy:configure file="../data/ivy/tools_ivy_settings.xml" override="true" />
-        <au:expectfailure message="impossible to resolve dependencies:">
-            <ivy:resolve file="../data/ivy/ivy.xml" conf="core-invalid" haltonfailure="true" />
-        </au:expectfailure>
-    </target>
 </project>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/legacy/tests/antunit/test_feature_enabled_flags.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_feature_enabled_flags.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_feature_enabled_flags" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>
+    Testing targets.
+    </description>
+    
+    <property environment="env"/>
+    <import file="run-scenario.ant.xml"/>
+    
+    <target name="test-target-disabled">
+        <runScenario scenario="test" target="run-target-disabled" />
+        <au:assertLogContains text="Skipped because property 'feature.enabled' not set to 'true'"/>
+        <au:assertLogContains text="Warning: enable.feature property has been deprecated since 11.0. Start using feature.enabled property"/>
+        <au:assertLogContains text="Warning: internal.abc.enabled property has been overridden"/>
+        <au:assertLogContains text="Warning: internal.bla.enabled property has been deprecated since 6.0. Start using internal.abc.enabled property"/>
+        <au:assertLogContains text="Warning: feature.enabled property has been overridden"/>
+    </target>
+    
+    <target name="test-target-enabled">
+        <runScenario scenario="test" target="run-target-enabled" />
+        <au:assertLogContains text="[echo] Running run-target-enabled"/>
+    </target>
+    
+    <target name="test-target-enabled-with-old-flag">
+        <runScenario scenario="test" target="run-with-old-flag-enabled" />
+        <au:assertLogContains text="[echo] Running run-with-old-flag-enabled"/>
+    </target>
+    
+    <target name="test-target-enabled-with-new-flag">
+        <runScenario scenario="test" target="run-with-new-flag-enabled" />
+        <au:assertLogContains text="[echo] Running run-with-new-flag-enabled"/>
+    </target>
+    
+    <target name="test-target-enabled-with-both">
+        <runScenario scenario="test" target="run-with-both-enabled" />
+        <au:assertLogContains text="[echo] Running run-with-both-enabled"/>
+    </target>
+    
+    <target name="test-target-unless-enabled">
+        <runScenario scenario="test" target="run-with-unless-enabled" />
+        <au:assertLogContains text="Skipped because property 'skip.ats.sending' set"/>        
+    </target>  
+    
+    <target name="test-target-unless-internal-enabled">
+        <runScenario scenario="test" target="run-with-unless-internal-enabled" />
+        <au:assertLogContains text="Skipped because property 'old.enabled' is set"/>        
+    </target>  
+    
+    
+
+</project>
+
--- a/buildframework/helium/sf/java/legacy/tests/data/ivy/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-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="1.0">
-
-    <info organisation="S60_SAM"
-          module="helium"
-          revision="latest"
-          status="integration"
-          publication="">
-    </info>
-
-    <configurations>
-        <conf name="core" description="Core configuration."/>
-        <conf name="core-invalid" description="Invalid core configuration."/>
-    </configurations>
-    
-    <publications/>
-    
-    <dependencies defaultconfmapping="core->default">
-        <dependency org="SYSTEM" name="ant" rev="1.7" conf="core"/>
-        <dependency org="SYSTEM" name="ant" rev="1.6.2" conf="core-invalid"/>
-    </dependencies>
-    
-</ivy-module>
-
-
--- a/buildframework/helium/sf/java/legacy/tests/data/ivy/modules/ant-1.6.2.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : ant-1.7.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="SYSTEM"
-          module="ant"
-          revision="1.6.2"/>
-    <description>Apache Ant. Used for the core build process.</description>
-    <publications/>
-</ivy-module>
-
--- a/buildframework/helium/sf/java/legacy/tests/data/ivy/modules/ant-1.7.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : ant-1.7.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="SYSTEM"
-          module="ant"
-          revision="1.7"/>
-    <description>Apache Ant. Used for the core build process.</description>
-    <publications/>
-</ivy-module>
-
--- a/buildframework/helium/sf/java/legacy/tests/data/ivy/tools_ivy_settings.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : tools_ivy_settings.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 settings file for environment tools and dependency libraries. -->
-<ivysettings>
-    
-    <typedef name="tool" classname="com.nokia.ivy.ToolResolver"/>
-    <caches useOrigin="true"/>
-    <settings validate="false" defaultResolver="tool-resolver"/>
-    
-    <property name="ivy.checksums" value="" override="true"/>
-    
-    <resolvers>
-        <dual name="tool-resolver">
-            <filesystem name="ivy-tool-resolver">
-                <ivy pattern="${data.dir}/ivy/modules/[module]-[revision].ivy.xml" />
-            </filesystem>
-            
-            <tool name="artifact-tool-resolver" validate="false">
-                <artifact pattern="[name]"/>
-            </tool>
-        </dual>
-    </resolvers>
-
-
-    
-    <modules>
-        <module organisation="SYSTEM" name=".*" resolver="tool-resolver" />
-    </modules>
-    
-</ivysettings>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/legacy/tests/scenarii/bld.sh	Fri Aug 13 14:59:05 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/legacy/tests/scenarii/build.bat	Fri Aug 13 14:59:05 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/legacy/tests/scenarii/property/feature.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : feature.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-properties" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib logger unittests.</description>
+    
+    <!-- Set to true to enable feature
+    @type boolean
+    @editable required
+    @scope private
+    -->
+    <property name="feature.enabled" value="true"/>
+    
+    <!-- Set to true to enable feature - deprecated: Start using feature.enabled property
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0 
+    -->
+    <property name="enable.feature" value="true"/>
+    
+    <!--* @property internal.abc.enabled 
+    Set to true to true to run targets.
+    @type boolean
+    @editable required
+    @scope private
+    -->
+    
+    <!--* @property internal.bla.enabled 
+    Set to true to true to run targets - deprecated: Start using internal.abc.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 6.0 
+    -->
+    
+    <target name="temp">
+        <echo>Inside the temp target</echo>
+    </target>
+        
+    
+
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/legacy/tests/scenarii/test/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,85 @@
+<?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="test-enable-flags" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib logger unittests.</description>
+    
+    <import file="../property/feature.ant.xml"/>
+    <property name="feature.enabled" value="true"/>
+    <property name="enable.feature" value="true"/>
+    <property name="internal.abc.enabled" value="true"/>
+    <property name="internal.bla.enabled" value="false"/>
+    <property name="skip.ats.sending" value="t"/>
+    
+    
+    <condition property="internal.old.enabled">
+        <or>
+            <istrue value="${xyz.enabled}"/>
+            <isset property="enable.feature"/>
+        </or>
+    </condition>
+    
+    <condition property="internal.new.enabled">
+        <or>
+            <istrue value="${feature.enabled}"/>
+            <isset property="abc.feature"/>
+        </or>
+    </condition>
+    
+    <condition property="internal.both.enabled">
+        <or>
+            <istrue value="${feature.enabled}"/>
+            <isset property="enable.feature"/>
+        </or>
+    </condition>
+    
+    <target name="run-target-disabled" if="internal.feature.enabled">
+        <echo>Running run-target-disabled</echo>
+    </target>
+    
+    <target name="run-target-enabled" if="feature.enabled">
+        <echo>Running run-target-enabled</echo>
+    </target>
+    
+    <target name="run-with-old-flag-enabled" if="internal.old.enabled">
+        <echo>Running run-with-old-flag-enabled</echo>
+    </target>
+    
+    <target name="run-with-new-flag-enabled" if="internal.new.enabled">
+        <echo>Running run-with-new-flag-enabled</echo>
+    </target>
+    
+    <target name="run-with-both-enabled" if="internal.both.enabled">
+        <echo>Running run-with-both-enabled</echo>
+    </target>
+    
+    <target name="run-with-unless-enabled" unless="skip.ats.sending">
+        <echo>Running run-with-unless-enabled</echo>
+    </target>
+    
+    <target name="run-with-unless-internal-enabled" unless="internal.old.enabled">
+        <echo>Running run-with-unless-internal-enabled</echo>
+    </target>
+    
+    
+
+</project>
--- a/buildframework/helium/sf/java/legacy/tests/src/com/nokia/ant/HeliumLoggerTest.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/tests/src/com/nokia/ant/HeliumLoggerTest.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,7 +17,7 @@
 
 package com.nokia.ant;
 
-import junit.framework.*;
+import junit.framework.TestCase;
 
 /**
  * Test class for Helium Logger.
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/antlib.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -25,10 +25,10 @@
     <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"/>
+    <taskdef name="taskRecorder" classname="com.nokia.helium.logger.ant.taskdefs.TaskRecorder"/>
     
     <!-- Type definition -->
     <typedef name="stagerecord" classname="com.nokia.helium.logger.ant.types.StageLogging"/>
-    <typedef name="stage" classname="com.nokia.helium.logger.ant.types.Stage"/>
     <typedef name="stagesummary" classname="com.nokia.helium.logger.ant.types.StageSummary"/>
     <typedef name="recordfilterset" classname="com.nokia.helium.logger.ant.types.RecordFilterSet"/>
     
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/AntLoggingHandler.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/AntLoggingHandler.java	Fri Aug 13 14:59:05 2010 +0300
@@ -20,22 +20,22 @@
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
-import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.Hashtable;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Vector;
+import java.util.Map.Entry;
 
+import org.apache.log4j.Logger;
 import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Target;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.types.LogLevel;
-import org.apache.tools.ant.BuildException;
-import org.apache.log4j.Logger;
 
+import com.nokia.helium.core.ant.types.Stage;
 import com.nokia.helium.logger.ant.types.StageLogging;
-import com.nokia.helium.logger.ant.types.Stage;
 
 /**
  * Ant logging class for each Stage.
@@ -70,7 +70,7 @@
         stageRecordMap = new HashMap<String, StageLogging>();
         depStartTargetMap = new HashMap<String, Vector<Target>>();
         stageStartTargetMap = new HashMap<String, Target>();
-        initStagesInformation(project);
+        initialize(project);
     }
 
     /**
@@ -87,13 +87,12 @@
      */
     public void handleTargetFinished(BuildEvent event) {
         // log.debug("Finished target [" + event.getTarget().getName() + "]");
-        if (isEndTarget(event.getTarget().getName())
-                && getIsStageRecordingHappening() && (getLoggingStarted())) {
-            log.debug("Stopping stage logging for  [" + currentStageName
-                    + "] for target [" + event.getTarget().getName() + "]");
+        if (isEndTarget(event.getTarget().getName()) && getIsStageRecordingHappening()
+            && (getLoggingStarted())) {
+            log.debug("Stopping stage logging for  [" + currentStageName + "] for target ["
+                + event.getTarget().getName() + "]");
             stopLog(currentStageName, "default");
-            if (!isDefaultStageStarted)
-            {
+            if (!isDefaultStageStarted) {
                 startLog("default");
                 isDefaultStageStarted = true;
             }
@@ -116,11 +115,10 @@
         if (currentStageName == null && !getIsStageRecordingHappening() && getLoggingStarted()) {
             String stageName = isStageValid(event.getTarget(), event.getProject());
             if (stageName != null) {
-                log.debug("Started stage logging for  [" + stageName
-                        + "] for target [" + event.getTarget().getName() + "]");
+                log.debug("Started stage logging for  [" + stageName + "] for target ["
+                    + event.getTarget().getName() + "]");
 
-                if (isDefaultStageStarted)
-                {
+                if (isDefaultStageStarted) {
                     stopLog("default", stageName);
                     isDefaultStageStarted = false;
                 }
@@ -143,13 +141,12 @@
     public void handleBuildFinished(BuildEvent event) {
 
         /*
-         * If any stage logging is happening stop logging into stage log file
-         * and switch to main/default ant log file.
+         * If any stage logging is happening stop logging into stage log file and switch to
+         * main/default ant log file.
          */
         if (getLoggingStarted() && getIsStageRecordingHappening()) {
             stopLog(currentStageName, "default");
-            if (!isDefaultStageStarted)
-            {
+            if (!isDefaultStageStarted) {
                 startLog("default");
                 isDefaultStageStarted = true;
             }
@@ -157,8 +154,7 @@
         }
 
         /*
-         * If default stage logging happening stop logging into default ant log
-         * file.
+         * If default stage logging happening stop logging into default ant log file.
          */
         if (isDefaultStageStarted && getLoggingStarted()) {
             stopLog("default", null, event);
@@ -187,8 +183,7 @@
     /**
      * Sets the level to which this recorder entry should log to.
      * 
-     * @param level
-     *            the level to set.
+     * @param level the level to set.
      * @see VerbosityLevelChoices
      */
     public void setLoglevel(VerbosityLevelChoices level) {
@@ -196,8 +191,8 @@
     }
 
     /**
-     * A list of possible values for the <code>setLoglevel()</code> method.
-     * Possible values include: error, warn, info, verbose, debug.
+     * A list of possible values for the <code>setLoglevel()</code> method. Possible values include:
+     * error, warn, info, verbose, debug.
      */
     public static class VerbosityLevelChoices extends LogLevel {
     }
@@ -218,8 +213,7 @@
      * @return
      */
     private String getDateTime() {
-        DateFormat dateFormat = new SimpleDateFormat(
-                "EE yyyy/MM/dd HH:mm:ss:SS aaa");
+        DateFormat dateFormat = new SimpleDateFormat("EE yyyy/MM/dd HH:mm:ss:SS aaa");
         Date date = new Date();
         return dateFormat.format(date);
     }
@@ -241,30 +235,28 @@
      * @param message
      * @param task
      */
-    public void doLoggingAction(String stageName, boolean action,
-            String message, Task task, Target target) {
+    public void doLoggingAction(String stageName, boolean action, String message, Task task,
+        Target target) {
         String time = getDateTime();
         File fileName;
         if (stageName.equalsIgnoreCase("default")) {
-            if (stageRecordMap.get("default") == null)
+            if (stageRecordMap.get("default") == null) {
                 throw new BuildException("stageRecordMap.get('default') is null");
+            }
             fileName = stageRecordMap.get("default").getDefaultOutput();
         } else {
             fileName = stageRecordMap.get(stageName).getOutput();
         }
 
         if (fileName.exists()) {
-            for (Map.Entry<File, RecorderEntry> entry : recorderEntries
-                    .entrySet()) {
-                if (fileName.equals(entry.getKey())
-                        && (getRecorderEntry(fileName) != null)
-                        && (fileCreatedMap.get(fileName))) {
+            for (Map.Entry<File, RecorderEntry> entry : recorderEntries.entrySet()) {
+                if (fileName.equals(entry.getKey()) && (getRecorderEntry(fileName) != null)
+                    && (fileCreatedMap.get(fileName))) {
                     RecorderEntry recorderEntry = getRecorderEntry(fileName);
-                    recorderEntry.addLogMessage(message + " logging into "
-                            + fileName + " from " + task.getTaskName()
-                            + " task at " + time);
-                    log.debug(message + " logging into " + fileName + " from "
-                            + task.getTaskName() + " task at " + time);
+                    recorderEntry.addLogMessage(message + " logging into " + fileName + " from "
+                        + task.getTaskName() + " task at " + time);
+                    log.debug(message + " logging into " + fileName + " from " + task.getTaskName()
+                        + " task at " + time);
                     recorderEntry.setRecordState(action);
                     break;
                 }
@@ -273,15 +265,13 @@
     }
 
     /**
-     * Called by LogReplace task to find and replace any property values which
-     * are not updated.
+     * Called by LogReplace task to find and replace any property values which are not updated.
      * 
      * @param regExp
      */
     public void addRegExp(String regExp) {
         if (!regExp.equals("")) {
-            for (Map.Entry<File, RecorderEntry> entry : recorderEntries
-                    .entrySet()) {
+            for (Map.Entry<File, RecorderEntry> entry : recorderEntries.entrySet()) {
                 RecorderEntry recorderEntry = entry.getValue();
                 recorderEntry.addRegexp(regExp);
             }
@@ -289,57 +279,57 @@
     }
 
     /**
-     * To initialize stages information.
+     * Initializing stage logging data.
+     * Gathering all stagerecord.
      * 
-     * @param proj
-     */
-
-    @SuppressWarnings("unchecked")
-    private void initStagesInformation(Project proj) {
-        log.debug("initStagesInformation: project: " + proj.getName());
-        Hashtable<String, Object> references = proj.getReferences();
-        Enumeration<String> keyEnum = references.keys();
-        validateDefaultStage(references);
-        while (keyEnum.hasMoreElements()) {
-            String key = keyEnum.nextElement();
-            if (references.get(key) instanceof Stage) {
-                Stage tempStage = (Stage) references.get(key);
-                validateStageInformation(key, tempStage);
-                log.debug("Found  stage [" + key + "] for recording");
-                stagesMapping.put(key, (Stage) references.get(key));
-                getStageRecordInformation(proj, key);
-                initDependentTargetMap(proj, key, tempStage.getStartTarget(),
-                        tempStage.getEndTarget());
-            }
-        }
-    }
-
-    /**
-     * To initialize stage record information.
-     * 
-     * @param proj
-     * @param stageKey
+     * @param project
      */
     @SuppressWarnings("unchecked")
-    private void getStageRecordInformation(Project proj, String stageKey) {
-        Hashtable<String, Object> references = proj.getReferences();
-        matchStageName(references, stageKey);
-        Enumeration<String> keyEnum = references.keys();
-        while (keyEnum.hasMoreElements()) {
-            String key = keyEnum.nextElement();
-            if (references.get(key) instanceof StageLogging) {
-                StageLogging tempStageLogging = (StageLogging) references
-                        .get(key);
-                if ((tempStageLogging.getStageRefID() != null)
-                        && (tempStageLogging.getStageRefID().equals(stageKey))) {
-                    validateStageLogging(key, tempStageLogging);
-                    stageRecordMap.put(stageKey, tempStageLogging);
-                    return;
+    private void initialize(Project project) {
+        Map<String, Object> references = (Hashtable<String, Object>)project.getReferences();
+        //matchStageName(references, stageKey);
+        for (Entry<String, Object> entry : references.entrySet()) {
+            if (entry.getValue() instanceof StageLogging) {
+                StageLogging tempStageLogging = (StageLogging)entry.getValue();
+                // Is the stagerecord having a defaultoutput attribute,
+                // if yes, it is the default recorder.
+                if (tempStageLogging.getDefaultOutput() != null) {
+                    stageRecordMap.put("default", tempStageLogging);                    
+                    registerRecorderEntry(tempStageLogging.getDefaultOutput(), tempStageLogging, StatusAndLogListener.getStatusAndLogListener().getProject());
+                } else if (tempStageLogging.getStageRefID() != null) {
+                    if (references.containsKey(tempStageLogging.getStageRefID())) {
+                        if (references.get(tempStageLogging.getStageRefID()) instanceof Stage) {
+                            // Check the stage
+                            Stage stage = (Stage)references.get(tempStageLogging.getStageRefID());
+                            validateStageInformation(tempStageLogging.getStageRefID(), stage);
+                            log.debug("Found  stage [" + tempStageLogging.getStageRefID() + "] for recording");
+                            stagesMapping.put(tempStageLogging.getStageRefID(), stage);
+                            //  check the stage logging.
+                            validateStageLogging(entry.getKey(), tempStageLogging);
+                            stageRecordMap.put(tempStageLogging.getStageRefID(), tempStageLogging);
+                        } else {
+                            throw new BuildException("Invalid stagerecord stageRefId attribute value, " + 
+                                    "the '" + tempStageLogging.getStageRefID() + "' id doesn't refer to a stage type at " + 
+                                    tempStageLogging.getLocation().toString());
+                            
+                        }
+                    } else {
+                        throw new BuildException("Invalid stagerecord stageRefId attribute value, " + 
+                                "the '" + tempStageLogging.getStageRefID() + "' id doesn't exist at " + 
+                                tempStageLogging.getLocation().toString());
+                    }
+                } else {
+                    throw new BuildException("Invalid stagerecord configuration, " + 
+                            "the stageRefId attribute is not defined at " +
+                            tempStageLogging.getLocation().toString());
                 }
             }
         }
+        if (!stageRecordMap.containsKey("default")) {
+            throw new BuildException("There must be one default stagerecord datatype.");
+        }
     }
-
+    
     /**
      * To start logging for respective stage.
      * 
@@ -355,12 +345,12 @@
             fileName = stageRecordMap.get("default").getDefaultOutput();
             stageLogging = stageRecordMap.get("default");
             message = "Starting logging into " + fileName + " at " + time;
-        } else {
+        }
+        else {
             fileName = stageRecordMap.get(stageName).getOutput();
             stageLogging = stageRecordMap.get(stageName);
             this.isStageRecordingHappening = true;
-            message = "Starting logging for " + stageName + " into " + fileName
-                    + " at " + time;
+            message = "Starting logging for " + stageName + " into " + fileName + " at " + time;
         }
         if (getRecorderEntry(fileName) != null) {
             RecorderEntry recorderEntry = getRecorderEntry(fileName);
@@ -379,7 +369,8 @@
      * @param stageLogging
      * @return
      */
-    private boolean isFilePresent(RecorderEntry recorderEntry, File fileName, StageLogging stageLogging) {
+    private boolean isFilePresent(RecorderEntry recorderEntry, File fileName,
+        StageLogging stageLogging) {
         log.debug("isFilePresent? " + fileName);
         if (!fileCreatedMap.get(fileName)) {
             if (!fileName.getParentFile().exists()) {
@@ -388,13 +379,15 @@
             }
             if (fileName.exists()) {
                 long timestamp = System.currentTimeMillis();
-                getProject().log("Backing up of " + fileName + " into " + fileName + "." + timestamp);
+                getProject().log("Backing up of " + fileName + " into " + fileName + "."
+                    + timestamp);
                 fileName.renameTo(new File(fileName.getAbsoluteFile() + "." + timestamp));
             }
             recorderEntry.openFile(stageLogging.getAppend());
             fileCreatedMap.put(fileName, true);
             return true;
-        } else {
+        }
+        else {
             return true;
         }
 
@@ -417,8 +410,7 @@
      * @param startStageName
      * @param event
      */
-    private void stopLog(String stopStageName, String startStageName,
-            BuildEvent event) {
+    private void stopLog(String stopStageName, String startStageName, BuildEvent event) {
         File fileName;
         String message;
         String time = getDateTime();
@@ -426,17 +418,19 @@
         if (stopStageName.equals("default")) {
             fileName = stageRecordMap.get("default").getDefaultOutput();
             message = "Stopping logging into " + fileName + " at " + time;
-            if (startStageName != null)
+            if (startStageName != null) {
                 message = message + "\nStarting logging into "
-                        + stageRecordMap.get(startStageName).getOutput();
-        } else {
+                    + stageRecordMap.get(startStageName).getOutput();
+            }
+        }
+        else {
             fileName = stageRecordMap.get(stopStageName).getOutput();
             this.isStageRecordingHappening = false;
-            message = "Stopping logging for " + stopStageName + " into "
-                    + fileName + " at " + time;
-            if (startStageName != null)
+            message = "Stopping logging for " + stopStageName + " into " + fileName + " at " + time;
+            if (startStageName != null) {
                 message = message + "\nResuming logging into "
-                        + stageRecordMap.get("default").getDefaultOutput();
+                    + stageRecordMap.get("default").getDefaultOutput();
+            }
         }
         if (getRecorderEntry(fileName) != null) {
             RecorderEntry recorderEntry = getRecorderEntry(fileName);
@@ -456,8 +450,7 @@
      * @param stageLogging
      * @param proj
      */
-    private void registerRecorderEntry(File fileName,
-            StageLogging stageLogging, Project proj) {
+    private void registerRecorderEntry(File fileName, StageLogging stageLogging, Project proj) {
         log.debug("Registering recorderentry for log file [" + fileName + "]");
         RecorderEntry recorderEntry = getRecorder(fileName);
         antLogLevel.setValue(stageLogging.getLogLevel());
@@ -465,8 +458,9 @@
         recorderEntry.setMessageOutputLevel(loglevel);
         recorderEntry.setEmacsMode(false);
         recorderEntry.setRecordState(false);
-        if (fileCreatedMap.get(fileName) == null)
+        if (fileCreatedMap.get(fileName) == null) {
             fileCreatedMap.put(fileName, false);
+        }
     }
 
     /**
@@ -477,29 +471,29 @@
      * @return
      */
     private String isStageValid(Target target, Project proj) {
-        //if (!proj.getName().equals(StatusAndLogListener.getStatusAndLogListener().getProject().getName()) && (StatusAndLogListener.getStatusAndLogListener().getProject().getName() != null)) {
-            initSubProjectDependentTarget(proj);
-        //}
+        // if
+        // (!proj.getName().equals(StatusAndLogListener.getStatusAndLogListener().getProject().getName())
+        // && (StatusAndLogListener.getStatusAndLogListener().getProject().getName() != null)) {
+        initSubProjectDependentTarget(proj);
+        // }
         for (Map.Entry<String, Stage> entry : stagesMapping.entrySet()) {
             Stage stage = entry.getValue();
             if (stage.getStartTarget().equals(target.getName())
-                    && validateStageTargets(proj, stage.getStartTarget(), stage
-                            .getEndTarget())) {
-                log.debug("Found stage [" + entry.getKey() + "] for target ["
-                        + target.getName() + "]");
+                && validateStageTargets(proj, stage.getStartTarget(), stage.getEndTarget())) {
+                log.debug("Found stage [" + entry.getKey() + "] for target [" + target.getName()
+                    + "]");
                 return entry.getKey();
             }
             if (stageStartTargetMap.get(entry.getKey()) != null) {
-                if (stageStartTargetMap.get(entry.getKey()).getName().equals(
-                        target.getName())) {
-                    log.debug("Found stage [" + entry.getKey()
-                            + "] for dependent target [" + target.getName()
-                            + "]");
+                if (stageStartTargetMap.get(entry.getKey()).getName().equals(target.getName())) {
+                    log.debug("Found stage [" + entry.getKey() + "] for dependent target ["
+                        + target.getName() + "]");
                     return entry.getKey();
                 }
-            } else if (isDependentTarget(target, entry.getKey())) {
-                log.debug("Found stage [" + entry.getKey()
-                        + "] for dependent target [" + target.getName() + "]");
+            }
+            else if (isDependentTarget(target, entry.getKey())) {
+                log.debug("Found stage [" + entry.getKey() + "] for dependent target ["
+                    + target.getName() + "]");
                 return entry.getKey();
             }
         }
@@ -515,15 +509,13 @@
 
     private boolean isEndTarget(String targetName) {
         if (stagesMapping.get(currentStageName) != null) {
-            return stagesMapping.get(currentStageName).getEndTarget().equals(
-                    targetName);
+            return stagesMapping.get(currentStageName).getEndTarget().equals(targetName);
         }
         return false;
     }
 
     /**
-     * To validate is the endtarget and starttarget are present in the current
-     * project.
+     * To validate is the endtarget and starttarget are present in the current project.
      * 
      * @param proj
      * @param startTarget
@@ -532,12 +524,10 @@
      */
 
     @SuppressWarnings("unchecked")
-    private boolean validateStageTargets(Project proj, String startTarget,
-            String endTarget) {
+    private boolean validateStageTargets(Project proj, String startTarget, String endTarget) {
 
         Hashtable<String, String> antTargets = proj.getTargets();
-        return antTargets.containsKey(startTarget)
-                && antTargets.containsKey(endTarget);
+        return antTargets.containsKey(startTarget) && antTargets.containsKey(endTarget);
     }
 
     /**
@@ -580,8 +570,8 @@
      * @param endTarget
      */
     @SuppressWarnings("unchecked")
-    private void initDependentTargetMap(Project proj, String stageKey,
-            String startTarget, String endTarget) {
+    private void initDependentTargetMap(Project proj, String stageKey, String startTarget,
+        String endTarget) {
         Vector<Target> arrayList = null;
         if (validateStageTargets(proj, startTarget, endTarget)) {
             arrayList = proj.topoSort(startTarget, proj.getTargets(), false);
@@ -605,8 +595,7 @@
 
         for (Map.Entry<String, Stage> entry : stagesMapping.entrySet()) {
             if (depStartTargetMap.get(entry.getKey()) == null) {
-                initDependentTargetMap(proj, entry.getKey(), entry.getValue()
-                        .getStartTarget(), entry.getValue().getEndTarget());
+                initDependentTargetMap(proj, entry.getKey(), entry.getValue().getStartTarget(), entry.getValue().getEndTarget());
             }
         }
     }
@@ -621,12 +610,11 @@
 
         if (stage.getStartTarget() == null) {
             throw new BuildException("'starttarget' for stage '" + stageKey
-                    + "' should not be null.");
+                + "' should not be null.");
         }
 
         if (stage.getEndTarget() == null) {
-            throw new BuildException("'endtarget' for stage '" + stageKey
-                    + "' should not be null.");
+            throw new BuildException("'endtarget' for stage '" + stageKey + "' should not be null.");
         }
     }
 
@@ -636,67 +624,13 @@
      * @param stagerefid
      * @param stageLogging
      */
-    private void validateStageLogging(String stagerefid,
-            StageLogging stageLogging) {
+    private void validateStageLogging(String stagerefid, StageLogging stageLogging) {
 
         if (stageLogging.getOutput() == null) {
-            throw new BuildException("'output' attribute for stagelogging '"
-                    + stagerefid + "' should not be null.");
+            throw new BuildException("'output' attribute for stagelogging '" + stagerefid
+                + "' should not be null.");
         }
-        registerRecorderEntry(stageLogging.getOutput(), stageLogging,
-                StatusAndLogListener.getStatusAndLogListener().getProject());
-    }
-
-    /**
-     * To validate default stage.
-     * 
-     * @param stageRecord
-     */
-    private void validateDefaultStage(Hashtable<String, Object> stageRecord) {
-
-        Enumeration<String> keyEnum = stageRecord.keys();
-        while (keyEnum.hasMoreElements()) {
-            String key = keyEnum.nextElement();
-            if (stageRecord.get(key) instanceof StageLogging) {
-                StageLogging tempStageLogging = (StageLogging) stageRecord
-                        .get(key);
-                if ((tempStageLogging.getStageRefID() == null)
-                        && (tempStageLogging.getDefaultOutput() != null)) {
-                    stageRecordMap.put("default", tempStageLogging);
-                    registerRecorderEntry(tempStageLogging.getDefaultOutput(),
-                            tempStageLogging, StatusAndLogListener
-                                    .getStatusAndLogListener().getProject());
-                    return;
-                }
-            }
-        }
-        throw new BuildException("There should be one default stagerecord datatype.");
-    }
-
-    /**
-     * To validate respective stagelogging for stage datatype.
-     * 
-     * @param stageRecord
-     * @param stageKey
-     */
-    private void matchStageName(Hashtable<String, Object> stageRecord,
-            String stageKey) {
-
-        Enumeration<String> keyEnum = stageRecord.keys();
-        while (keyEnum.hasMoreElements()) {
-            String key = keyEnum.nextElement();
-            if (stageRecord.get(key) instanceof StageLogging) {
-                StageLogging tempStageLogging = (StageLogging) stageRecord
-                        .get(key);
-                if ((tempStageLogging.getStageRefID() != null)
-                        && (tempStageLogging.getStageRefID().equals(stageKey))) {
-                    return;
-                }
-            }
-        }
-        throw new BuildException(
-                "there is no stagelogging datatype matching for stage '"
-                        + stageKey + "'");
+        registerRecorderEntry(stageLogging.getOutput(), stageLogging, StatusAndLogListener.getStatusAndLogListener().getProject());
     }
 
     /**
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/RecorderEntry.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/RecorderEntry.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,70 +1,62 @@
 /*
-* 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:  
-*
-*/
+ * 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.listener;
 
-import java.io.PrintStream;
-
-import org.apache.log4j.Logger;
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.DefaultLogger;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.StringUtils;
-import org.apache.tools.ant.BuildException;
-
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.PrintStream;
 import java.util.Vector;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.log4j.Logger;
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DefaultLogger;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.util.StringUtils;
+
 /**
- * This is a class that represents a recorder. This is the listener to the
- * build process.
- *
+ * This is a class that represents a recorder. This is the listener to the build process.
+ * 
  * @since Ant 1.4
  */
-public class RecorderEntry implements BuildEventHandler, TargetEventHandler, TaskEventHandler, MessageEventHandler {
+public class RecorderEntry implements BuildEventHandler, TargetEventHandler, TaskEventHandler,
+    MessageEventHandler {
 
-    //////////////////////////////////////////////////////////////////////
-    // ATTRIBUTES
-
-    /** The name of the file associated with this recorder entry.  */
+    /** The name of the file associated with this recorder entry. */
     private File filename;
-    /** The state of the recorder (recorder on or off).  */
+    /** The state of the recorder (recorder on or off). */
     private boolean record = true;
-    /** The current verbosity level to record at.  */
+    /** The current verbosity level to record at. */
     private int loglevel = Project.MSG_INFO;
-    /** The output PrintStream to record to.  */
+    /** The output PrintStream to record to. */
     private PrintStream out;
-    /** The start time of the last know target.  */
+    /** The start time of the last know target. */
     private long targetStartTime;
-    /** Strip task banners if true.  */
+    /** Strip task banners if true. */
     private boolean emacsMode;
-    
+
     private Pattern pattern;
-    
+
     private Vector<String> logRegExps = new Vector<String>();
     private Logger log = Logger.getLogger(getClass());
 
-    
-    //////////////////////////////////////////////////////////////////////
-    // CONSTRUCTORS / INITIALIZERS
-
     /**
      * @param name The name of this recorder (used as the filename).
      */
@@ -73,9 +65,6 @@
         filename = name;
     }
 
-    //////////////////////////////////////////////////////////////////////
-    // ACCESSOR METHODS
-
     /**
      * @return the name of the file the output is sent to.
      */
@@ -85,34 +74,36 @@
 
     /**
      * Turns off or on this recorder.
-     *
+     * 
      * @param state true for on, false for off, null for no change.
      */
     public void setRecordState(boolean state) {
-         flush();
-         record = state;
+        flush();
+        record = state;
     }
 
     /**
      * Get the current state of the recorder
+     * 
      * @param state
      */
     public boolean getRecordState() {
         return record;
     }
-    
+
     /**
      * To set the regexp to filter the logging.
+     * 
      * @param regexp
      */
     public void addRegexp(String regexp) {
         logRegExps.add(regexp);
     }
-    
+
     /**
      * To clear all regexp set.
      */
-    public void resetRegExp() { 
+    public void resetRegExp() {
         logRegExps.clear();
     }
 
@@ -136,9 +127,9 @@
 
             if (error == null) {
                 out.println(StringUtils.LINE_SEP + "BUILD SUCCESSFUL");
-            } else {
-                out.println(StringUtils.LINE_SEP + "BUILD FAILED"
-                            + StringUtils.LINE_SEP);
+            }
+            else {
+                out.println(StringUtils.LINE_SEP + "BUILD FAILED" + StringUtils.LINE_SEP);
                 error.printStackTrace(out);
             }
         }
@@ -146,12 +137,11 @@
     }
 
     /**
-     * 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.
-     *
+     * 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 handleSubBuildFinished(BuildEvent event) {
@@ -161,9 +151,9 @@
 
     /**
      * Empty implementation to satisfy the BuildListener interface.
-     *
+     * 
      * @param event the buildStarted event
-     *
+     * 
      * @since Ant 1.6.2
      */
     public void handleSubBuildStarted(BuildEvent event) {
@@ -175,8 +165,7 @@
      */
     public void handleTargetStarted(BuildEvent event) {
         log(">> TARGET STARTED -- " + event.getTarget(), Project.MSG_DEBUG);
-        log(StringUtils.LINE_SEP + event.getTarget().getName() + ":",
-            Project.MSG_INFO);
+        log(StringUtils.LINE_SEP + event.getTarget().getName() + ":", Project.MSG_INFO);
         targetStartTime = System.currentTimeMillis();
     }
 
@@ -235,10 +224,10 @@
         buf.append(messgeToUpdate);
         log(buf.toString(), event.getPriority());
     }
-    
-    
+
     /**
      * To replace regExp matching with ****.
+     * 
      * @param message
      * @return
      */
@@ -253,10 +242,9 @@
         return message;
     }
 
-
     /**
      * The thing that actually sends the information to the output.
-     *
+     * 
      * @param mesg The message to log.
      * @param level The verbosity level of the message.
      */
@@ -291,7 +279,6 @@
         out = output;
     }
 
-
     /**
      * @see BuildLogger#setEmacsMode(boolean)
      */
@@ -300,7 +287,6 @@
         this.emacsMode = emacsMode;
     }
 
-
     /**
      * @see BuildLogger#setErrorPrintStream(PrintStream)
      */
@@ -309,26 +295,21 @@
         setOutputPrintStream(err);
     }
 
-
     private static String formatTime(long millis) {
         // CheckStyle:MagicNumber OFF
         long seconds = millis / 1000;
         long minutes = seconds / 60;
 
-
         if (minutes > 0) {
-            return Long.toString(minutes) + " minute"
-                 + (minutes == 1 ? " " : "s ")
-                 + Long.toString(seconds % 60) + " second"
-                 + (seconds % 60 == 1 ? "" : "s");
-        } else {
-            return Long.toString(seconds) + " second"
-                 + (seconds % 60 == 1 ? "" : "s");
+            return Long.toString(minutes) + " minute" + (minutes == 1 ? " " : "s ")
+                + Long.toString(seconds % 60) + " second" + (seconds % 60 == 1 ? "" : "s");
+        }
+        else {
+            return Long.toString(seconds) + " second" + (seconds % 60 == 1 ? "" : "s");
         }
         // CheckStyle:MagicNumber ON
     }
-    
-    
+
     /**
      * Registering ourselves to the StatusAndLogListener.
      */
@@ -337,10 +318,10 @@
         if (listener != null) {
             this.log.debug("register");
             synchronized (listener) {
-                listener.register((BuildEventHandler)this);
-                listener.register((TargetEventHandler)this);
-                listener.register((TaskEventHandler)this);
-                listener.register((MessageEventHandler)this);
+                listener.register((BuildEventHandler) this);
+                listener.register((TargetEventHandler) this);
+                listener.register((TaskEventHandler) this);
+                listener.register((MessageEventHandler) this);
             }
         }
     }
@@ -353,14 +334,13 @@
         if (listener != null) {
             this.log.debug("unregister");
             synchronized (listener) {
-                listener.remove((MessageEventHandler)this);
-                listener.remove((TaskEventHandler)this);
-                listener.remove((TargetEventHandler)this);
-                listener.remove((BuildEventHandler)this);
+                listener.remove((MessageEventHandler) this);
+                listener.remove((TaskEventHandler) this);
+                listener.remove((TargetEventHandler) this);
+                listener.remove((BuildEventHandler) this);
             }
         }
     }
-    
 
     /**
      * @since 1.6.2
@@ -370,63 +350,63 @@
     }
 
     /**
-     * Closes the file associated with this recorder.
-     * Used by Recorder.
+     * Closes the file associated with this recorder. Used by Recorder.
+     * 
      * @since 1.6.3
      */
     public void closeFile() {
-        this.log.debug("closeFile.");                
+        this.log.debug("closeFile.");
         if (out != null) {
             out.close();
             out = null;
             unregister();
         }
     }
-    
+
     /**
-     * Initially opens the file associated with this recorder.
-     * Used by Recorder.
-     * @param append Indicates if output must be appended to the logfile or that
-     * the logfile should be overwritten.
+     * Initially opens the file associated with this recorder. Used by Recorder.
+     * 
+     * @param append Indicates if output must be appended to the logfile or that the logfile should
+     *        be overwritten.
      * @throws BuildException
      * @since 1.6.3
      */
     public void openFile(boolean append) {
         openFileImpl(append);
     }
-    
+
     /**
-     * Re-opens the file associated with this recorder.
-     * Used by Recorder.
+     * Re-opens the file associated with this recorder. Used by Recorder.
+     * 
      * @throws BuildException
      * @since 1.6.3
      */
     public void reopenFile() {
         openFileImpl(true);
     }
-    
+
     private void openFileImpl(boolean append) {
         if (out == null) {
             this.log.debug("openFileImpl: " + filename);
             try {
                 out = new PrintStream(new FileOutputStream(filename, append));
                 register();
-            } catch (IOException ioe) {
-                throw new BuildException("Problems opening file using a "
-                                         + "recorder entry: " + ioe.getMessage(), ioe);
+            }
+            catch (IOException ioe) {
+                throw new BuildException("Problems opening file using a " + "recorder entry: "
+                    + ioe.getMessage(), ioe);
             }
         }
     }
-    
+
     /**
      * To add user message into log file.
+     * 
      * @param message
      */
     public void addLogMessage(String message) {
         out.println(StringUtils.LINE_SEP + message);
-        
+
     }
-    
-    
-    
+
 }
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/StageSummaryHandler.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/StageSummaryHandler.java	Fri Aug 13 14:59:05 2010 +0300
@@ -36,7 +36,7 @@
 import org.apache.tools.ant.Target;
 import org.apache.tools.ant.util.DateUtils;
 
-import com.nokia.helium.logger.ant.types.Stage;
+import com.nokia.helium.core.ant.types.Stage;
 import com.nokia.helium.logger.ant.types.StageSummary;
 
 import freemarker.cache.FileTemplateLoader;
@@ -83,8 +83,9 @@
      * {@inheritDoc}
      */
     public void handleBuildFinished(BuildEvent event) {
-        if (summarize && currentStage != null)
+        if (summarize && currentStage != null) {
             endCurrentStage();
+        }
         if (summarize && !completedStages.isEmpty()) {
             generateSummary(event.getProject());
             log.debug("Stage Summary generation completed");
@@ -116,8 +117,9 @@
         log.debug("Handling target - " + event.getTarget().getName());
         if (summarize && doRunTarget(event)) {
             StageWrapper stage = searchNewStage(event);
-            if (stage != null)
+            if (stage != null) {
                 startNewStage(stage);
+            }
         }
     }
 
@@ -125,8 +127,9 @@
      * {@inheritDoc}
      */
     public void handleTargetFinished(BuildEvent event) {
-        if (summarize && isCurrentStageToEnd(event))
+        if (summarize && isCurrentStageToEnd(event)) {
             endCurrentStage();
+        }
     }
 
     /**
@@ -143,9 +146,10 @@
             if (event.getException() != null) {
                 currentStage.setError(getReason(event.getException()));
                 end = true;
-            } else
+            } else {
                 end = currentStage.stage.isEndTarget(event.getTarget()
                         .getName());
+            }
         }
         return end;
     }
@@ -167,7 +171,7 @@
             if (object instanceof StageSummary) {
                 count++;
                 if (count > 1) {
-                    raiseException("Multiple entries of 'hlm:stagesummary' found in "
+                    throw new BuildException("Multiple entries of 'hlm:stagesummary' found in "
                             + "stages_config.ant.xml.");
                 }
                 stageSummary = (StageSummary) object;
@@ -177,16 +181,6 @@
     }
 
     /**
-     * Raise a {@link BuildException} with the specified error message.
-     * 
-     * @param message
-     *            is the error message to display.
-     */
-    private void raiseException(String message) {
-        throw new BuildException(message);
-    }
-
-    /**
      * Start the given stage as a new build stage.
      * 
      * @param newStage
@@ -195,8 +189,9 @@
     private void startNewStage(StageWrapper newStage) {
         endCurrentStage();
         Long currTime = getCurrentTime();
-        if (!completedStages.containsKey(newStage.stageName))
+        if (!completedStages.containsKey(newStage.stageName)) {
             newStage.setStageStartTime(getTimestamp(currTime));
+        }
         newStage.setStartTime(currTime);
         this.currentStage = newStage;
         log.debug("New stage [" + newStage.stageName + "] started at "
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/StatusAndLogListener.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/StatusAndLogListener.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,19 +1,19 @@
 /*
-* 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:  
-*
-*/
+ * 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.listener;
 
 import java.util.Vector;
@@ -21,18 +21,18 @@
 import org.apache.log4j.Logger;
 import org.apache.tools.ant.BuildEvent;
 import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.Project;
 import org.apache.tools.ant.SubBuildListener;
-import org.apache.tools.ant.Project;
 
 /**
- * <code>StatusAndLogListener</code> implements {@link BuildListener} and
- * listens to build events in particularly for activities such as ant logging
- * and displaying build stage summary at the end of build process.
+ * <code>StatusAndLogListener</code> implements {@link BuildListener} and listens to build events in
+ * particularly for activities such as ant logging and displaying build stage summary at the end of
+ * build process.
  * 
  */
 public class StatusAndLogListener implements BuildListener, SubBuildListener {
     private static StatusAndLogListener self;
-    
+
     private Vector<BuildEventHandler> buildHandlers = new Vector<BuildEventHandler>();
     private Vector<TargetEventHandler> targetHandlers = new Vector<TargetEventHandler>();
     private Vector<TaskEventHandler> taskHandlers = new Vector<TaskEventHandler>();
@@ -49,12 +49,10 @@
     }
 
     /**
-     * Signals that the last target has finished. This event will still be fired
-     * if an error occurred during the build.
+     * Signals that the last target has finished. This event will still be fired if an error
+     * occurred during the build.
      * 
-     * @param event
-     *            An event with any relevant extra information. Must not be
-     *            <code>null</code>.
+     * @param event An event with any relevant extra information. Must not be <code>null</code>.
      * 
      * @see BuildEvent#getException()
      */
@@ -63,29 +61,24 @@
         for (BuildEventHandler handler : buildHandlers) {
             handler.handleBuildStarted(event);
         }
-        
+
     }
+
     /**
-     * Signals that a build has started. This event is fired before any targets
-     * have started.
+     * Signals that a build has started. This event is fired before any targets have started.
      * 
-     * @param event
-     *            An event with any relevant extra information. Must not be
-     *            <code>null</code>.
+     * @param event An event with any relevant extra information. Must not be <code>null</code>.
      */
     public synchronized void buildFinished(BuildEvent event) {
-        for ( BuildEventHandler handler : buildHandlers ) {
-            handler.handleBuildFinished( event );
+        for (BuildEventHandler handler : buildHandlers) {
+            handler.handleBuildFinished(event);
         }
     }
-    
 
     /**
      * Signals that a target is starting.
      * 
-     * @param event
-     *            An event with any relevant extra information. Must not be
-     *            <code>null</code>.
+     * @param event An event with any relevant extra information. Must not be <code>null</code>.
      * 
      * @see BuildEvent#getTarget()
      */
@@ -96,12 +89,10 @@
     }
 
     /**
-     * Signals that a target has finished. This event will still be fired if an
-     * error occurred during the build.
+     * Signals that a target has finished. This event will still be fired if an error occurred
+     * during the build.
      * 
-     * @param event
-     *            An event with any relevant extra information. Must not be
-     *            <code>null</code>.
+     * @param event An event with any relevant extra information. Must not be <code>null</code>.
      * 
      * @see BuildEvent#getException()
      */
@@ -114,9 +105,7 @@
     /**
      * Signals that a task is starting.
      * 
-     * @param event
-     *            An event with any relevant extra information. Must not be
-     *            <code>null</code>.
+     * @param event An event with any relevant extra information. Must not be <code>null</code>.
      * 
      * @see BuildEvent#getTask()
      */
@@ -127,12 +116,10 @@
     }
 
     /**
-     * Signals that a task has finished. This event will still be fired if an
-     * error occurred during the build.
+     * Signals that a task has finished. This event will still be fired if an error occurred during
+     * the build.
      * 
-     * @param event
-     *            An event with any relevant extra information. Must not be
-     *            <code>null</code>.
+     * @param event An event with any relevant extra information. Must not be <code>null</code>.
      * 
      * @see BuildEvent#getException()
      */
@@ -141,9 +128,10 @@
             handler.handleTaskFinished(event);
         }
     }
-    
+
     /**
-     * Signals that a subbuild has started. This event is fired before any targets have started. 
+     * Signals that a subbuild has started. This event is fired before any targets have started.
+     * 
      * @param event
      */
     public synchronized void subBuildStarted(BuildEvent event) {
@@ -151,26 +139,24 @@
             handler.handleSubBuildStarted(event);
         }
     }
-    
+
     /**
-     * Signals that the last target has finished. This event will still be fired if an error occurred during the build. 
+     * Signals that the last target has finished. This event will still be fired if an error
+     * occurred during the build.
+     * 
      * @param event
      */
-    
+
     public synchronized void subBuildFinished(BuildEvent event) {
         for (SubBuildEventHandler handler : subBuildHandlers) {
             handler.handleSubBuildStarted(event);
         }
     }
-    
-    
 
     /**
      * Signals a message logging event.
      * 
-     * @param event
-     *            An event with any relevant extra information. Must not be
-     *            <code>null</code>.
+     * @param event An event with any relevant extra information. Must not be <code>null</code>.
      * 
      * @see BuildEvent#getMessage()
      * @see BuildEvent#getException()
@@ -185,180 +171,169 @@
     /**
      * Register the given handler.
      * 
-     * @param handler
-     *            is the handler to register
+     * @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 );
+        tmpBuildHandlers.add(handler);
         buildHandlers = tmpBuildHandlers;
         Vector<TargetEventHandler> tmpTargetHandlers = new Vector<TargetEventHandler>(targetHandlers);
-        tmpTargetHandlers.add( handler );
-        targetHandlers  = tmpTargetHandlers;
+        tmpTargetHandlers.add(handler);
+        targetHandlers = tmpTargetHandlers;
     }
-    
+
     /**
      * Register the given handler.
      * 
-     * @param handler
-     *            is the handler to register
+     * @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 );
+        tmpBuildHandlers.remove(handler);
         buildHandlers = tmpBuildHandlers;
         Vector<TargetEventHandler> tmpTargetHandlers = new Vector<TargetEventHandler>(targetHandlers);
-        tmpTargetHandlers.remove( handler );
-        targetHandlers  = tmpTargetHandlers;
+        tmpTargetHandlers.remove(handler);
+        targetHandlers = tmpTargetHandlers;
+    }
+
+    /**
+     * Register the given handler.
+     * 
+     * @param handler is the handler to register
+     */
+    public synchronized void register(BuildEventHandler handler) {
+        Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers);
+        tmp.add(handler);
+        buildHandlers = tmp;
+    }
+
+    /**
+     * Remove the given handler.
+     * 
+     * @param handler is the handler to register
+     */
+    public synchronized void remove(BuildEventHandler handler) {
+        Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers);
+        tmp.remove(handler);
+        buildHandlers = tmp;
     }
 
     /**
      * Register the given handler.
      * 
-     * @param handler
-     *            is the handler to register
+     * @param handler is the handler to register
      */
-    public synchronized void register( BuildEventHandler handler ) {
-        Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers);
-        tmp.add( handler );
-        buildHandlers = tmp;
+    public synchronized void register(TargetEventHandler handler) {
+        Vector<TargetEventHandler> tmp = new Vector<TargetEventHandler>(targetHandlers);
+        tmp.add(handler);
+        targetHandlers = tmp;
     }
-    
+
     /**
      * Remove the given handler.
      * 
-     * @param handler
-     *            is the handler to register
+     * @param handler is the handler to register
      */
-    public synchronized void remove( BuildEventHandler handler ) {
-        Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers);
-        tmp.remove( handler );
-        buildHandlers = tmp;
-    }
-    
-    /**
-     * Register the given handler.
-     * 
-     * @param handler
-     *            is the handler to register
-     */
-    public synchronized void register( TargetEventHandler handler ) {
+    public synchronized void remove(TargetEventHandler handler) {
         Vector<TargetEventHandler> tmp = new Vector<TargetEventHandler>(targetHandlers);
-        tmp.add( handler );
-        targetHandlers  = tmp;
+        tmp.remove(handler);
+        targetHandlers = tmp;
     }
-    
-    /**
-     * Remove the given handler.
-     * 
-     * @param handler
-     *            is the handler to register
-     */
-    public synchronized void remove( TargetEventHandler handler ) {
-        Vector<TargetEventHandler> tmp = new Vector<TargetEventHandler>(targetHandlers);
-        tmp.remove( handler );
-        targetHandlers  = tmp;
-    }
-    
-    
+
     /**
      * Register the given SubBuildEventHandler.
      * 
-     * @param handler
-     *            is the handler to register
+     * @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;
+        tmp.add(handler);
+        subBuildHandlers = tmp;
     }
 
     /**
      * Remove the given SubBuildEventHandler.
      * 
-     * @param handler
-     *            is the handler to register
+     * @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;
+        tmp.remove(handler);
+        subBuildHandlers = tmp;
     }
 
     /**
      * Register the given MessageEventHandler.
      * 
-     * @param handler
-     *            is the handler to register
+     * @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;
+        tmp.add(handler);
+        messageHandlers = tmp;
     }
-    
+
     /**
      * Remove the given MessageEventHandler.
      * 
-     * @param handler
-     *            is the handler to register
+     * @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;
+        tmp.remove(handler);
+        messageHandlers = tmp;
     }
 
     /**
      * Register the given TaskEventHandler.
      * 
-     * @param handler
-     *            is the handler to register
+     * @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;
+        tmp.add(handler);
+        taskHandlers = tmp;
     }
-    
+
     /**
      * Remove the given TaskEventHandler.
      * 
-     * @param handler
-     *            is the handler to register
+     * @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;
+        tmp.remove(handler);
+        taskHandlers = tmp;
     }
 
-
     /**
      * Return root project.
+     * 
      * @return
      */
     public Project getProject() {
-      return project;
+        return project;
     }
-    
+
     /**
      * Get the main StatusAndLogListener.
+     * 
      * @return
      */
     public static StatusAndLogListener getStatusAndLogListener() {
         return self;
     }
-    
+
     /**
      * Check and return required type handler.
+     * 
      * @param handlerType
      * @return
      */
     public synchronized Handler getHandler(Class<?> handlerType) {
         for (BuildEventHandler handler : buildHandlers) {
             if (handlerType.isInstance(handler)) {
-                return (Handler)handler;
+                return (Handler) handler;
             }
         }
         return null;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/TaskRecorder.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,278 @@
+/*
+* 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.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DefaultLogger;
+import org.apache.tools.ant.MagicNames;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectHelper;
+import org.apache.tools.ant.RuntimeConfigurable;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.TaskContainer;
+import org.apache.tools.ant.UnknownElement;
+import org.apache.tools.ant.taskdefs.Recorder.VerbosityLevelChoices;
+
+/**
+ * The taskRecorder task allows you to record the output of the execution
+ * of a set of task into a log file. The output is not redirected to any 
+ * other recorders, so nothing will appear on the console.  
+ * 
+ * Example of usage:
+ * <pre>
+ * &lt;hlm:taskRecorder output=&quot;output.log&quot; logLevel=&quot;verbose&quot; &gt;
+ *     &lt;echo&gt;This output will be recorded under output.log&lt;/echo&gt;
+ *     &lt;property name=&quot;new.property&quot; value=&quot;value&quot; /&gt;
+ * &lt;/hlm:taskRecorder&gt;
+ * </pre>
+ * 
+ * In the previous example the output of echo task is redirected to the output log.
+ * 
+ * @ant.task name="taskRecorder" category="Logging"
+ */
+public class TaskRecorder extends Task implements TaskContainer {
+    private List<Task> tasks = new ArrayList<Task>(); 
+    private File output;
+    private int logLevel = Project.MSG_INFO;
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void addTask(Task task) {
+        tasks.add(task);
+    }
+        
+    /**
+     * {@inheritDoc}
+     */
+    public void execute() {
+        if (output == null) {
+            throw new BuildException("The output attribute has not been defined.");            
+        }
+        
+        // creating a project delegator, which will propagate the properties into
+        // the parent project
+        ProjectDelegator subProject = new ProjectDelegator(getProject());
+        getProject().initSubProject(subProject);
+        // set user-defined properties
+        getProject().copyUserProperties(subProject);
+        subProject.initProperties();
+        ProjectHelper.configureProject(subProject, new File(getProject().getProperty(MagicNames.ANT_FILE)));
+
+        // The delegator enables the property propagation.
+        subProject.setUseDelegate(true);
+        // Let's replicate all our childs into a sequential task which is 
+        // going to use the delegate project.
+        UnknownElement subTask = new UnknownElement("sequential");
+        subTask.setTaskName("sequential");
+        subTask.setNamespace("");
+        subTask.setQName("sequential");
+        subTask.setProject(subProject);
+        new RuntimeConfigurable(subTask, "sequential");
+        for (Task task : this.tasks) {
+            if (task instanceof UnknownElement) {
+                UnknownElement ue = ((UnknownElement)task).copy(subProject);            
+                ue.setProject(subProject);
+                subTask.addChild(ue);
+                subTask.getWrapper().addChild(ue.getWrapper());
+            } else {
+                log("Task " + task.getTaskName() + " is not a UnknownElement. Element will be ignored.", Project.MSG_WARN);
+            }
+        }
+        
+        PrintStream out = null;
+        DefaultLogger logger = null;
+        try {
+            // Creating the a logger to record the execution
+            out = new PrintStream(new FileOutputStream(output));
+            logger = new DefaultLogger();
+            logger.setMessageOutputLevel(this.logLevel);
+            logger.setOutputPrintStream(out);
+            logger.setErrorPrintStream(out);
+            subProject.addBuildListener(logger);
+            log("Recording output to " + output.getAbsolutePath());
+            subTask.perform();
+        } catch (IOException ex) {
+            log("Can't set output to " + output + ": " + ex.getMessage(), Project.MSG_ERR);
+            throw new BuildException("Can't set output to " + output + ": " + ex.getMessage());
+        } finally {
+            if (logger != null) {
+                subProject.removeBuildListener(logger);
+            }
+            if (out != null) {
+                out.close();
+            }
+            subProject = null;
+        }
+    }
+
+    /**
+     * Defines the output log.
+     * @param output
+     * @ant.required
+     */
+    public void setOutput(File output) {
+        this.output = output;
+    }
+
+    /**
+     * Defines the logging level (e.g error, warning, info, verbose, debug).
+     * @param logLevel
+     * @ant.not-required Default is info.
+     */
+    public void setLogLevel(VerbosityLevelChoices logLevel) {
+        this.logLevel = logLevel.getLevel();
+    }
+    
+    
+    /**
+     * Project used to delegate property manipulation
+     * calls to a delegate project. 
+     *
+     */
+    class ProjectDelegator extends Project {
+        private Project delegate;
+        private boolean useDelegate;
+
+        public ProjectDelegator(Project delegate) {
+            this.delegate = delegate;
+        }
+        
+        /**
+         * @return the useDelegate
+         */
+        public boolean isUseDelegate() {
+            return useDelegate;
+        }
+
+        /**
+         * @param useDelegate the useDelegate to set
+         */
+        public void setUseDelegate(boolean useDelegate) {
+            this.useDelegate = useDelegate;
+        }
+
+        /**
+         * @return
+         * @see org.apache.tools.ant.Project#getProperties()
+         */
+        public Hashtable getProperties() {
+            if (useDelegate) {
+                return delegate.getProperties();
+            } else {
+                return super.getProperties();
+            }
+        }
+        /**
+         * @param propertyName
+         * @return
+         * @see org.apache.tools.ant.Project#getProperty(java.lang.String)
+         */
+        public String getProperty(String propertyName) {
+            if (useDelegate) {
+                return delegate.getProperty(propertyName);
+            } else {
+                return super.getProperty(propertyName);
+            }
+        }
+
+        /**
+         * @return
+         * @see org.apache.tools.ant.Project#getUserProperties()
+         */
+        public Hashtable getUserProperties() {
+            if (useDelegate) {
+                return delegate.getUserProperties();
+            } else {
+                return super.getUserProperties();
+            }
+        }
+        /**
+         * @param propertyName
+         * @return
+         * @see org.apache.tools.ant.Project#getUserProperty(java.lang.String)
+         */
+        public String getUserProperty(String propertyName) {
+            if (useDelegate) {
+                return delegate.getUserProperty(propertyName);
+            } else {
+                return super.getUserProperty(propertyName);
+            }
+        }
+        /**
+         * @param value
+         * @return
+         * @throws BuildException
+         * @see org.apache.tools.ant.Project#replaceProperties(java.lang.String)
+         */
+        public String replaceProperties(String value) {
+            if (useDelegate) {
+                return delegate.replaceProperties(value);
+            } else {
+                return super.replaceProperties(value);
+            }
+        }
+
+        /**
+         * @param name
+         * @param value
+         * @see org.apache.tools.ant.Project#setNewProperty(java.lang.String, java.lang.String)
+         */
+        public void setNewProperty(String name, String value) {
+            if (useDelegate) {
+                delegate.setNewProperty(name, value);
+            } else {
+                super.setNewProperty(name, value);
+            }
+        }
+
+        /**
+         * @param name
+         * @param value
+         * @see org.apache.tools.ant.Project#setProperty(java.lang.String, java.lang.String)
+         */
+        public void setProperty(String name, String value) {
+            if (useDelegate) {
+                delegate.setProperty(name, value);
+            } else {
+                super.setProperty(name, value);
+            }
+        }
+
+        /**
+         * @param name
+         * @param value
+         * @see org.apache.tools.ant.Project#setUserProperty(java.lang.String, java.lang.String)
+         */
+        public void setUserProperty(String name, String value) {
+            if (useDelegate) {
+                delegate.setUserProperty(name, value);
+            } else {
+                super.setUserProperty(name, value);
+            }
+        }
+    }
+}
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/TriggerLoggerTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/TriggerLoggerTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,12 +16,12 @@
 */
 package com.nokia.helium.logger.ant.taskdefs;
 
+import org.apache.log4j.Logger;
 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.
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/types/Stage.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +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.types;
-
-import org.apache.tools.ant.types.DataType;
-
-
-/**
- * A <code>Stage</code> is a Data type which stores Stage information.
- * 
- * <p>
- * A Stage is defined by setting three attributes name, start and end targets, both should be a
- * valid target name in the project.
- * 
- * <p>
- * Usage:
- * 
- * <pre>
- *      &lt;hlm:stage id="preparation" starttarget="stagetest" endtarget="stagetest"/&gt;              
- * </pre>
- *  
- * @ant.task name="stage" category="Logging"
- * 
- */
-public class Stage extends DataType {
-
-    private String startTarget;
-    private String endTarget;
-
-    public Stage() {
-        
-    }
-    /**
-     * Get the starting point of this {@link Stage}.
-     * 
-     * @return the starting point of this {@link Stage}.
-     */
-    public String getStartTarget() {
-        return this.startTarget;
-    }
-
-    /**
-     * Set the starting target.
-     * 
-     * @param start
-     *            is the starting point to set.
-     * @ant.required
-     */
-    public void setStartTarget(String startTarget) {
-        this.startTarget = startTarget;
-    }
-
-    /**
-     * Get the end point of this {@link Stage}.
-     * 
-     * @return the end point of this {@link Stage}.
-     * 
-     */
-    public String getEndTarget() {
-        return this.endTarget;
-    }
-
-    /**
-     * Set the end target.
-     * 
-     * @param end
-     *            is the end point to set.
-     * @ant.required
-     */
-    public void setEndTarget(String endTarget) {
-        this.endTarget = endTarget;
-    }
-    
-    /**
-     * Check is the start target set to current target. 
-     * @param target
-     * @return
-     */
-    public boolean isStartTarget( String target ) {
-        return this.startTarget.equals( target );
-    }
-    
-    /** Check is the end target set to current target.
-     * 
-     * @param target
-     * @return
-     */
-    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	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/types/StageLogging.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,8 +18,8 @@
 
 import java.io.File;
 
+import org.apache.log4j.Logger;
 import org.apache.tools.ant.types.DataType;
-import org.apache.log4j.Logger;
 
 /**
  * A 'StageRecord' is a Data type which stores attributes for stage recording/logging.
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/types/StageSummary.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/types/StageSummary.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,8 +17,9 @@
 package com.nokia.helium.logger.ant.types;
 
 import java.io.File;
+
+import org.apache.log4j.Logger;
 import org.apache.tools.ant.Project;
-import org.apache.log4j.Logger;
 import org.apache.tools.ant.types.DataType;
 
 import com.nokia.helium.logger.ant.listener.StageSummaryHandler;
--- a/buildframework/helium/sf/java/logging/tests/antunit/run-scenario.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/tests/antunit/run-scenario.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -23,12 +23,14 @@
 <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">    
+    <target name="setUp">
         <tempfile property="temp.dir" suffix=".dir" />
         <mkdir dir="${temp.dir}" />
+        <echo>--------------------------------------------</echo>
     </target>
     
     <target name="tearDown">
+        <echo>--------------------------------------------</echo>
         <delete dir="${temp.dir}" />
     </target>
     
@@ -36,28 +38,18 @@
         <attribute name="scenario" />
         <attribute name="target" />
         <sequential>
-            <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>
+            <exec osfamily="windows" executable="cmd" dir="${ant.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="${ant.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>
         </sequential>
     </macrodef>
 
--- a/buildframework/helium/sf/java/logging/tests/antunit/test_stageslogging.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/tests/antunit/test_stageslogging.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -24,7 +24,7 @@
     <description>Helium Antlib Signal unittests.</description>
     <import file="run-scenario.ant.xml" />
     <property environment="env"/>
- 
+     
     <target name="test-scenario-valid-build">
         <runScenario scenario="valid_build" target="build" />
     </target>
@@ -164,4 +164,35 @@
         </au:assertTrue>
     </target>
 
+    <target name="test-missing-default-config">
+        <au:expectfailure>
+            <runScenario scenario="missing_default_config" target="build" />
+        </au:expectfailure>
+        <au:assertLogContains text="BUILD FAILED" />
+        <au:assertLogContains text="There must be one default stagerecord datatype." />
+    </target>
+    
+    <target name="test-missing-stage-refid">
+        <au:expectfailure>
+            <runScenario scenario="missing_stage_refid" target="build" />
+        </au:expectfailure>
+        <au:assertLogContains text="BUILD FAILED" />
+        <au:assertLogContains text="Invalid stagerecord configuration, the stageRefId attribute is not defined at" />
+    </target>
+
+    <target name="test-invalid-stagerefid-reference">
+        <au:expectfailure>
+            <runScenario scenario="invalid_stage_refid" target="build" />
+        </au:expectfailure>
+        <au:assertLogContains text="BUILD FAILED" />
+        <au:assertLogContains text="Invalid stagerecord stageRefId attribute value, the 'stage1-invalid' id doesn't exist at" />
+    </target>
+
+    <target name="test-invalid-stagerefid-object">
+        <au:expectfailure>
+            <runScenario scenario="inavlid_stage_refid_object" target="build" />
+        </au:expectfailure>
+        <au:assertLogContains text="BUILD FAILED" />
+        <au:assertLogContains text="Invalid stagerecord stageRefId attribute value, the 'stage1-invalid-object' id doesn't refer to a stage type at" />
+    </target>
 </project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/logging/tests/antunit/test_taskrecorder.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_taskrecorder.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-recorder" xmlns:ac="antlib:net.sf.antcontrib" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib logger unittests.</description>
+    <property environment="env" />
+
+	<taskdef resource="com/nokia/helium/logger/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+
+    <target name="setUp">    
+        <delete dir="${test.temp.dir}" failonerror="false"/>
+        <mkdir dir="${test.temp.dir}" />
+    </target>
+    
+    <target name="tearDown">
+        <delete dir="${test.temp.dir}" />
+    </target>
+	
+    <target name="test-missing-output-message">
+        <au:expectfailure expectedMessage="The output attribute has not been defined.">
+            <hlm:taskRecorder logLevel="info">
+                <echo>This message should not be logged on the screen.</echo>
+            </hlm:taskRecorder>
+        </au:expectfailure> 
+    </target>
+
+	<target name="test-failing-log-creation">
+        <au:expectfailure expectedMessage="Can't set output to">
+            <hlm:taskRecorder output="${test.temp.dir}/inexisting/output.log" logLevel="info">
+                <echo>This message should not be logged on the screen.</echo>
+            </hlm:taskRecorder>
+        </au:expectfailure> 
+        <au:assertFileDoesntExist file="${test.temp.dir}/inexisting/output.log" />
+    </target>
+    	
+    <target name="test-simple-task-recording">
+        <hlm:taskRecorder output="${test.temp.dir}/output.log" logLevel="info">
+        	<echo>This message should not be logged on the screen.</echo>
+        </hlm:taskRecorder>
+    	<au:assertLogDoesntContain text="This message should not be logged on the screen." />
+    	<au:assertFileExists file="${test.temp.dir}/output.log" />
+        <loadfile property="output.log" srcfile="${test.temp.dir}/output.log" />
+        <echo>${output.log}</echo>
+    	<au:assertTrue>
+    	    <contains string="${output.log}" substring="This message should not be logged on the screen." />
+    	</au:assertTrue>
+    </target>
+    
+    <target name="test-task-recording-under-sequential">
+    	<hlm:taskRecorder output="${test.temp.dir}/output.log" logLevel="info">
+    	    <sequential>
+    	        <echo>This message should not be logged on the screen.</echo>
+    	    </sequential>
+    	</hlm:taskRecorder>
+        <au:assertLogDoesntContain text="This message should not be logged on the screen." />
+        <au:assertFileExists file="${test.temp.dir}/output.log" />
+        <loadfile property="output.log" srcfile="${test.temp.dir}/output.log" />
+        <echo>${output.log}</echo>
+        <au:assertTrue>
+            <contains string="${output.log}" substring="This message should not be logged on the screen." />
+        </au:assertTrue>
+    </target>
+	
+	<target name="called-by-runtarget">
+        <echo>This message should not be logged on the screen.</echo>
+	</target>
+	
+    <target name="test-simple-task-runtarget">
+        <hlm:taskRecorder output="${test.temp.dir}/output.log" logLevel="info">
+        	<ac:runtarget target="called-by-runtarget" />
+        </hlm:taskRecorder>
+        <au:assertLogDoesntContain text="This message should not be logged on the screen." />
+        <au:assertFileExists file="${test.temp.dir}/output.log" />
+        <loadfile property="output.log" srcfile="${test.temp.dir}/output.log" />
+        <echo>${output.log}</echo>
+        <au:assertTrue>
+            <contains string="${output.log}" substring="This message should not be logged on the screen." />
+        </au:assertTrue>
+    </target>
+	
+    <target name="test-recorder-propagate-properties">
+        <hlm:taskRecorder output="${test.temp.dir}/output.log" logLevel="info">
+            <echo>Setting task.recorder.is.wicked property.</echo>
+            <property name="task.recorder.is.wicked" value="that's true!!!" />
+        </hlm:taskRecorder>
+        <au:assertFileExists file="${test.temp.dir}/output.log" />
+        <loadfile property="output.log" srcfile="${test.temp.dir}/output.log" />
+        <echo>${output.log}</echo>
+        <au:assertTrue message="property is not propagated">
+            <isset property="task.recorder.is.wicked" />
+        </au:assertTrue>
+        <au:assertTrue message="property value is incorrect">
+            <equals arg1="${task.recorder.is.wicked}" arg2="that's true!!!"/>
+        </au:assertTrue>
+    </target>
+	
+	<macrodef name="echoMacro">
+		<sequential>
+            <echo>This message should not be logged on the screen.</echo>
+		</sequential>
+	</macrodef>
+
+    <target name="test-simple-task-macro">
+        <hlm:taskRecorder output="${test.temp.dir}/output.log" logLevel="info">
+            <echoMacro />
+        </hlm:taskRecorder>
+        <au:assertLogDoesntContain text="This message should not be logged on the screen." />
+        <au:assertFileExists file="${test.temp.dir}/output.log" />
+        <loadfile property="output.log" srcfile="${test.temp.dir}/output.log" />
+        <echo>${output.log}</echo>
+        <au:assertTrue>
+            <contains string="${output.log}" substring="This message should not be logged on the screen." />
+        </au:assertTrue>
+    </target>
+
+    <macrodef name="recordMacro">
+        <sequential>
+            <hlm:taskRecorder output="${test.temp.dir}/output.log" logLevel="info">
+                <echo>This message should not be logged on the screen.</echo>
+            </hlm:taskRecorder>
+        </sequential>
+    </macrodef>
+
+    <target name="test-record-from-a-macro">
+    	<recordMacro />
+        <au:assertLogDoesntContain text="This message should not be logged on the screen." />
+        <au:assertFileExists file="${test.temp.dir}/output.log" />
+        <loadfile property="output.log" srcfile="${test.temp.dir}/output.log" />
+        <echo>${output.log}</echo>
+        <au:assertTrue>
+            <contains string="${output.log}" substring="This message should not be logged on the screen." />
+        </au:assertTrue>
+    </target>
+
+    <target name="test-simple-task-failure">
+        <au:expectfailure expectedMessage="failing inside taskRecorder" >
+            <hlm:taskRecorder output="${test.temp.dir}/output.log" logLevel="info">
+                <echo>This message should not be logged on the screen.</echo>
+                <fail message="failing inside taskRecorder" />
+            </hlm:taskRecorder>
+        </au:expectfailure>
+        <au:assertLogDoesntContain text="This message should not be logged on the screen." />
+        <au:assertFileExists file="${test.temp.dir}/output.log" />
+        <loadfile property="output.log" srcfile="${test.temp.dir}/output.log" />
+        <echo>${output.log}</echo>
+        <au:assertTrue>
+            <contains string="${output.log}" substring="This message should not be logged on the screen." />
+        </au:assertTrue>
+    </target>
+    
+</project>
--- a/buildframework/helium/sf/java/logging/tests/build.bat	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/tests/build.bat	Fri Aug 13 14:59:05 2010 +0300
@@ -21,5 +21,11 @@
 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%)
-ant %*
+call ant %*
+if "%ERRORLEVEL%" neq "0" (goto error)
 endlocal
+goto :eof
+
+:error
+endlocal
+if "%OS%"=="Windows_NT" color 00
--- a/buildframework/helium/sf/java/logging/tests/scenarii/build_failure/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/tests/scenarii/build_failure/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -27,6 +27,7 @@
     <property name="step2" value="1" />
         
     <taskdef resource="com/nokia/helium/logger/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
     
     <hlm:stage id="stage1" starttarget="stage1" endtarget="stage1" />
     <hlm:stage id="stage2" starttarget="stage2" endtarget="stage2" />
--- a/buildframework/helium/sf/java/logging/tests/scenarii/build_status/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/tests/scenarii/build_status/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -27,6 +27,7 @@
     <property name="step2" value="1" />
         
     <taskdef resource="com/nokia/helium/logger/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
     
     <hlm:stage id="stage1" starttarget="stage1" endtarget="stage1" />
     <hlm:stage id="stage2" starttarget="stage2" endtarget="stage3" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/logging/tests/scenarii/inavlid_stage_refid_object/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,71 @@
+<?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-antlib-unittestvalid-build" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib Logging unittests.</description>
+    <property environment="env"/>
+    <property name="step1" value="1" />
+    <property name="step2" value="1" />
+        
+    <taskdef resource="com/nokia/helium/logger/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    
+    <hlm:stage id="stage1" starttarget="stage1" endtarget="stage1" />
+    <hlm:stage id="stage2" starttarget="stage2" endtarget="stage2" />
+
+    <fileset id="stage1-invalid-object" dir="." />
+    
+    <hlm:stagerecord id="record.default" defaultoutput="${temp.dir}/main.ant.log" loglevel="info" />
+    <!-- voluntarly invalid the stagerefid attribute -->
+    <hlm:stagerecord id="record.stage1" stagerefid="stage1-invalid-object"  output="${temp.dir}/stage1.ant.log" loglevel="info" />
+    <hlm:stagerecord id="record.stage2" stagerefid="stage2" output="${temp.dir}/stage2.ant.log" loglevel="info" />
+
+    <target name="start-ant-log">
+        <hlm:triggerlogger/> 
+    </target>
+
+    <target name="build" depends="start-ant-log">
+        <echo>Main log start step1</echo>
+        <antcall target="stage1" />
+        <echo>Main log start step2</echo>
+        <antcall target="stage2" />
+        <echo>Main log start step3</echo>
+        <antcall target="stage1">
+            <param name="step1" value="2" />
+        </antcall>
+        <fail message="Testing build failure" />
+        <echo>Main log start step4</echo>
+        <antcall target="stage2">
+            <param name="step2" value="2" />
+        </antcall>
+        <echo>Main log start step5</echo>
+    </target>
+
+    <target name="stage1">
+        <echo>In stage1 (${step1})</echo>
+    </target>
+
+    <target name="stage2">
+        <echo>In stage2 (${step2})</echo>
+    </target>
+    
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/logging/tests/scenarii/invalid_stage_refid/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,69 @@
+<?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-antlib-unittestvalid-build" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib Logging unittests.</description>
+    <property environment="env"/>
+    <property name="step1" value="1" />
+    <property name="step2" value="1" />
+        
+    <taskdef resource="com/nokia/helium/logger/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    
+    <hlm:stage id="stage1" starttarget="stage1" endtarget="stage1" />
+    <hlm:stage id="stage2" starttarget="stage2" endtarget="stage2" />
+
+    <hlm:stagerecord id="record.default" defaultoutput="${temp.dir}/main.ant.log" loglevel="info" />
+    <!-- voluntarly invalid the stagerefid attribute -->
+    <hlm:stagerecord id="record.stage1" stagerefid="stage1-invalid"  output="${temp.dir}/stage1.ant.log" loglevel="info" />
+    <hlm:stagerecord id="record.stage2" stagerefid="stage2" output="${temp.dir}/stage2.ant.log" loglevel="info" />
+
+    <target name="start-ant-log">
+        <hlm:triggerlogger/> 
+    </target>
+
+    <target name="build" depends="start-ant-log">
+        <echo>Main log start step1</echo>
+        <antcall target="stage1" />
+        <echo>Main log start step2</echo>
+        <antcall target="stage2" />
+        <echo>Main log start step3</echo>
+        <antcall target="stage1">
+            <param name="step1" value="2" />
+        </antcall>
+        <fail message="Testing build failure" />
+        <echo>Main log start step4</echo>
+        <antcall target="stage2">
+            <param name="step2" value="2" />
+        </antcall>
+        <echo>Main log start step5</echo>
+    </target>
+
+    <target name="stage1">
+        <echo>In stage1 (${step1})</echo>
+    </target>
+
+    <target name="stage2">
+        <echo>In stage2 (${step2})</echo>
+    </target>
+    
+</project>
--- a/buildframework/helium/sf/java/logging/tests/scenarii/logger/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/tests/scenarii/logger/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,6 +22,7 @@
 -->
 <project name="test-recorder" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>Helium Antlib logger unittests.</description>
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
     <import file="../../stages_config.ant.xml" />
 
     <target name="test-recorder">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/logging/tests/scenarii/missing_default_config/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,69 @@
+<?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-antlib-unittestvalid-build" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib Logging unittests.</description>
+    <property environment="env"/>
+    <property name="step1" value="1" />
+    <property name="step2" value="1" />
+        
+    <taskdef resource="com/nokia/helium/logger/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    
+    <hlm:stage id="stage1" starttarget="stage1" endtarget="stage1" />
+    <hlm:stage id="stage2" starttarget="stage2" endtarget="stage2" />
+
+    <!-- voluntarly missing the default stagerecord-->
+    <!-- hlm:stagerecord id="record.default" defaultoutput="${temp.dir}/main.ant.log" loglevel="info" / -->
+    <hlm:stagerecord id="record.stage1"  stagerefid="stage1" output="${temp.dir}/stage1.ant.log" loglevel="info" />
+    <hlm:stagerecord id="record.stage2"  stagerefid="stage2" output="${temp.dir}/stage2.ant.log" loglevel="info" />
+
+    <target name="start-ant-log">
+        <hlm:triggerlogger/> 
+    </target>
+
+    <target name="build" depends="start-ant-log">
+        <echo>Main log start step1</echo>
+        <antcall target="stage1" />
+        <echo>Main log start step2</echo>
+        <antcall target="stage2" />
+        <echo>Main log start step3</echo>
+        <antcall target="stage1">
+            <param name="step1" value="2" />
+        </antcall>
+        <fail message="Testing build failure" />
+        <echo>Main log start step4</echo>
+        <antcall target="stage2">
+            <param name="step2" value="2" />
+        </antcall>
+        <echo>Main log start step5</echo>
+    </target>
+
+    <target name="stage1">
+        <echo>In stage1 (${step1})</echo>
+    </target>
+
+    <target name="stage2">
+        <echo>In stage2 (${step2})</echo>
+    </target>
+    
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/logging/tests/scenarii/missing_stage_refid/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,69 @@
+<?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-antlib-unittestvalid-build" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib Logging unittests.</description>
+    <property environment="env"/>
+    <property name="step1" value="1" />
+    <property name="step2" value="1" />
+        
+    <taskdef resource="com/nokia/helium/logger/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    
+    <hlm:stage id="stage1" starttarget="stage1" endtarget="stage1" />
+    <hlm:stage id="stage2" starttarget="stage2" endtarget="stage2" />
+
+    <hlm:stagerecord id="record.default" defaultoutput="${temp.dir}/main.ant.log" loglevel="info" />
+    <!-- voluntarly missing the stagerefid attribute stagerefid="stage1" -->
+    <hlm:stagerecord id="record.stage1"  output="${temp.dir}/stage1.ant.log" loglevel="info" />
+    <hlm:stagerecord id="record.stage2"  stagerefid="stage2" output="${temp.dir}/stage2.ant.log" loglevel="info" />
+
+    <target name="start-ant-log">
+        <hlm:triggerlogger/> 
+    </target>
+
+    <target name="build" depends="start-ant-log">
+        <echo>Main log start step1</echo>
+        <antcall target="stage1" />
+        <echo>Main log start step2</echo>
+        <antcall target="stage2" />
+        <echo>Main log start step3</echo>
+        <antcall target="stage1">
+            <param name="step1" value="2" />
+        </antcall>
+        <fail message="Testing build failure" />
+        <echo>Main log start step4</echo>
+        <antcall target="stage2">
+            <param name="step2" value="2" />
+        </antcall>
+        <echo>Main log start step5</echo>
+    </target>
+
+    <target name="stage1">
+        <echo>In stage1 (${step1})</echo>
+    </target>
+
+    <target name="stage2">
+        <echo>In stage2 (${step2})</echo>
+    </target>
+    
+</project>
--- a/buildframework/helium/sf/java/logging/tests/scenarii/override_scenario/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/tests/scenarii/override_scenario/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -27,6 +27,7 @@
     <property name="step2" value="1" />
         
     <taskdef resource="com/nokia/helium/logger/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
     
     <hlm:stage id="stage1" starttarget="stage1" endtarget="stage1" />
     <hlm:stage id="stage2" starttarget="stage2" endtarget="stage2" />
--- a/buildframework/helium/sf/java/logging/tests/scenarii/valid_build/stages_config.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/tests/scenarii/valid_build/stages_config.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -26,6 +26,7 @@
     </description>
     
     <taskdef resource="com/nokia/helium/logger/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
     
     <dirname property="logging.test.project.dir" file="${ant.file.stages-config}" />
     
--- a/buildframework/helium/sf/java/logging/tests/stages_config.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/tests/stages_config.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -26,6 +26,7 @@
     </description>
     
     <taskdef resource="com/nokia/helium/logger/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
     
     <dirname property="logging.test.project.dir" file="${ant.file.stages-config}" />
     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/doc/metadata.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,243 @@
+.. index::
+  module: Configuring Metadata
+
+====================
+Configuring Metadata
+====================
+
+.. contents::
+
+This document describes the purpose of metadata and how is being used in helium and
+how it can be used by the customer.
+
+Overview
+========
+
+Metadata is process to find the errors, warnings from the output log differnt section of the build
+and store it to the database, which could be used during each stage of the build to process efficiently
+and send details to diamonds, used for signaling, and generating summary file.
+
+
+Metadata Details
+================
+
+1. Metadatarecord : Which is used to store the errors, warnings information to the database
+
+    1.1. It takes the metadatainput (the type of log parsing to be used), currently supported parsing are
+       
+       a. sbsmetadatainput - sbs log processing (based on xml processing)
+       
+       b. textmetadatainput - general text log processing (based on text processing)
+       
+       c. policylogmetadatainput - policy log output processing (based on xml processing)
+       
+       d. antlogmetadatainput - ant log output processing (based on text processing)
+       
+       e. abldlogmetadatainput - abld log output processing (based on text processing)
+       
+       Please see ant doc for more details on metadatarecord.
+
+   1.2 It takes the fileset containing list of log files
+   
+   1.3 It takes the metadata filter, list of regular expression for searching strings.
+   
+Metadata Filters
+================
+
+This document describes the usage of metadata filter to change the severity level during different stages of the build.
+
+Overview
+--------
+
+Metadata filters are set of regular expressions used to match the text of the build output and process the errors, categorize it,
+and used to generate the output for diamonds, summary file, email output. Predefined set of ids are defined for each stage of the
+build. For example for raptor compilation filter is defined as below,
+
+The default definition of filterset.sbs is
+
+.. code-block:: xml
+
+    <hlm:metadatafilterset id="filterset.sbs">
+        <metadatafilterset refid="filterset.common" />
+    </hlm:metadatafilterset>
+
+
+which is using the common definition which is,
+
+.. code-block:: xml
+
+    <hlm:metadatafilterset id="filterset.common">
+        <metadatafilterset filterfile="${helium.dir}/config/metadata_regex.csv" />
+    </hlm:metadatafilterset>
+
+
+The complete list of predefined ids for various stages of the build are defined in this file,
+
+helium/config/metadata_filter_config_default.xml
+
+Each ID can be overridden to provide additional regular expression to control the results of the build for different stages.
+
+Two ways to add the regular expressions
+---------------------------------------
+
+ - Adding more than one regular expression
+
+Define your own csv file and override it in your configuration as below (add this after importing helium.ant.xml file),
+
+.. code-block:: xml
+
+    <hlm:metadatafilterset id="filterset.sbs">
+        <metadatafilterset filterfile="${s60.config}/config/metadata_regex.csv" />
+    </hlm:metadatafilterset>
+
+ - Adding just one regular expression
+
+This can be done as below,
+
+.. code-block:: xml
+
+    <hlm:metadatafilterset id="filterset.sbs">
+      <metadatafilter severity="error" regex=".*Error\s*:\s+.*" description="sbs compilation error" />
+      <metadatafilterset filterfile="${helium.dir}/config/metadata_regex.csv" />
+    </hlm:metadatafilterset>
+
+Note
+----
+
+1. The order of metadatafilter / metadatafilterset is important, so the first one takes precedence than the second one.
+
+2. Order is also preserved in the csv file, the expressions which are defined first get precedence than the later one.
+
+3. All the regular expressions are JAVA patterns.
+         
+
+Usage in Helium
+===============
+
+Different build stages were processed and identified the type of output and added the metadatarecord
+task for each build stage and captured the output in the database. And after storing it, using fmpp 
+template the error information from database are processed to send to diamonds, raised signal accordingly.
+
+Usage
+=====
+
+Examples:
+    SBS comilation output in db:
+
+.. code-block:: xml
+    
+    <hlm:metadatarecord database="${metadata.dbfile}">
+        <hlm:sbsmetadatainput cleanLogFile="${sbs.clean.log.file}">
+            <fileset casesensitive="false" file="${sbs.log.file}"/>
+            <metadatafilterset refid="filterset.sbs" />
+        </hlm:sbsmetadatainput>
+    </hlm:metadatarecord>
+
+This example is to process sbs output. The metadatainput is sbsmetadatainput to process the sbs log file, takes the sbs.log.file
+uses the regular expression defined by filterset.sbs
+
+.. code-block:: xml
+
+    <hlm:metadatarecord database="${metadata.dbfile}">
+        <hlm:abldmetadatainput>
+            <fileset casesensitive="false" file="${build.log.dir}/${build.id}${cmaker.log.label}.export.cmaker.log" />
+            <metadatafilterset refid="filterset.compile" />
+        </hlm:abldmetadatainput>
+    </hlm:metadatarecord>
+
+This example process the cmaker output as abld output log. It takes abldmetadatainput as metadatainput
+and the logfile as ${build.log.dir}/${build.id}${cmaker.log.label}.export.cmaker.log and the regular
+expression is used from the reference filterset.compile.
+
+Similarly any of the log output file can be easily processed in a similar way.
+
+Database schema
+===============
+
+The following diagram describes the current database schema (for SQL based queries).
+
+.. image:: metadata_schema.png
+    :align: center
+
+
+It is also possible to use the JPQL language which allows the usage of the Java ORM mapping class. This means that database will be represented
+by their Java model class, table fields by the class attributes. This diagrams describes the JPQL diagram:
+
+.. image:: metadata_jpql_schema.png
+    :align: center
+
+
+Example of queries:
+
+SQL::
+   
+   select * from metadataentry as e, severity as s where e.severity_id = s.severity_id and s.severity = 'error'
+
+JPQL::
+   
+   select e from MetadataEntry e JOIN e.severity s WHERE s.severity = 'error'
+   
+
+Using the Metadata framework with FMPP
+======================================
+
+The Metadata framework gives an efficient opportunity to record huge amount or data in a fast and reliable way (timewise and memory consumption-wise).
+Thanks to the ORMFMPPLoader database loader it is really simple to access those data and render then in any other format: HTML for easy to read build summary,
+XML to communicated with other tools, text file...
+
+Loading a database
+------------------
+
+A database can be load and assigned to a template variable using the pp.loadData functionnality from the FMPP task. The 'com.nokia.helium.metadata.ORMFMPPLoader'
+accept one argument which is the path to the database.
+
+Example::
+   
+   <#assign database = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "C:/path/to/database_db") >
+    
+
+Then the database variable can be used to access the database the following different ways:
+
+ - jpasingle: Query with single result e.g: select count(s) from Severity s
+ - jpa: allow iteration on the JPA object results: select s from Severity s
+ - native:<type>: Native SQL format query, type is use to determine the object to use in the model
+ 
+Accessing data using a JPA single query
+---------------------------------------
+
+The 'jpasingle' is the best way to access results from single values like count of entities. The jpasingle queries must be written in JPQL, 
+please check the valid database schema in the previous section (case matter!).
+
+Example of a template that will return the number of log files recorded in the database::
+   
+   <#assign database = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "C:/path/to/database_db") >
+   Number of logfiles: ${database['jpasingle']['select l from LogFile l'][0]}
+ 
+Accessing data using a JPA query
+--------------------------------
+ 
+The JPA query allows you to perform query and directly use JPA entity object directly inside the template. The jpa queries must be written in JPQL, 
+please check the valid database schema in the previous section (case matter!).
+
+In the following example the query loop through the available log files::
+    
+   <#assign database = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "C:/path/to/database_db") >
+   <#list database['jpasingle']['select l from LogFile l'] as l>
+   ${l.id}: ${l.path}
+   </#list>
+   
+
+Accessing data using a native query
+-----------------------------------
+
+The native query enables you to perform SQL queries through the JDBC interface of the database. If native is used then make sure you use
+the SQL schema.
+
+In the following example the query loop through the available log files path::
+   
+   <#assign database = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "C:/path/to/database_db") >
+   <#list table_info['native:java.lang.String']['SELECT l.PATH FROM LOGFILE as l'] as l>
+   ${l}
+   </#list>
+   
+   
\ No newline at end of file
Binary file buildframework/helium/sf/java/metadata/doc/metadata_jpql_schema.png has changed
Binary file buildframework/helium/sf/java/metadata/doc/metadata_schema.png has changed
--- a/buildframework/helium/sf/java/metadata/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/ivy.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -29,8 +29,10 @@
   </info>
   <dependencies>
     <dependency name="helium-core" rev="latest.integration" conf="default" />
-    <dependency name="helium-jpa" rev="latest.integration" conf="default" />
-    <dependency org="org.sqlite" name="sqlitejdbc" rev="latest.integration" conf="default" />
+    <dependency org="log4j" name="log4j" rev="1.2.9" conf="default" />
+    <dependency org="eclipselink" name="eclipselink" rev="2.0.0" conf="default" />
+    <dependency org="javax.persistence" name="persistence" rev="2.0.0" conf="default" />
+    <dependency org="org.apache.derby" name="derby" rev="10.5" conf="default" />
     <dependency org="bsh" name="bsh" rev="latest.integration" conf="default" />
   </dependencies>
 </ivy-module>
--- a/buildframework/helium/sf/java/metadata/metadata.rst	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-.. index::
-  module: Configuring Metadata
-
-====================
-Configuring Metadata
-====================
-
-.. contents::
-
-This document describes the purpose of metadata and how is being used in helium and
-how it can be used by the customer.
-
-Overview
-========
-
-Metadata is process to find the errors, warnings from the output log differnt section of the build
-and store it to the database, which could be used during each stage of the build to process efficiently
-and send details to diamonds, used for signaling, and generating summary file.
-
-
-Metadata Details
-================
-
-1. Metadatarecord : Which is used to store the errors, warnings information to the database
-
-    1.1. It takes the metadatainput (the type of log parsing to be used), currently supported parsing are
-       
-       a. sbsmetadatainput - sbs log processing (based on xml processing)
-       
-       b. textmetadatainput - general text log processing (based on text processing)
-       
-       c. policylogmetadatainput - policy log output processing (based on xml processing)
-       
-       d. antlogmetadatainput - ant log output processing (based on text processing)
-       
-       e. abldlogmetadatainput - abld log output processing (based on text processing)
-       
-       Please see ant doc for more details on metadatarecord.
-
-   1.2 It takes the fileset containing list of log files
-   
-   1.3 It takes the metadata filter, list of regular expression for searching strings.
-   
-Metadata Filters
-================
-
-This document describes the usage of metadata filter to change the severity level during different stages of the build.
-
-Overview
---------
-
-Metadata filters are set of regular expressions used to match the text of the build output and process the errors, categorize it,
-and used to generate the output for diamonds, summary file, email output. Predefined set of ids are defined for each stage of the
-build. For example for raptor compilation filter is defined as below,
-
-The default definition of filterset.sbs is
-
-.. code-block:: xml
-
-    <hlm:metadatafilterset id="filterset.sbs">
-        <metadatafilterset refid="filterset.common" />
-    </hlm:metadatafilterset>
-
-
-which is using the common definition which is,
-
-.. code-block:: xml
-
-    <hlm:metadatafilterset id="filterset.common">
-        <metadatafilterset filterfile="${helium.dir}/config/metadata_regex.csv" />
-    </hlm:metadatafilterset>
-
-
-The complete list of predefined ids for various stages of the build are defined in this file,
-
-helium/config/metadata_filter_config_default.xml
-
-Each ID can be overridden to provide additional regular expression to control the results of the build for different stages.
-
-Two ways to add the regular expressions
----------------------------------------
-
- - Adding more than one regular expression
-
-Define your own csv file and override it in your configuration as below (add this after importing helium.ant.xml file),
-
-.. code-block:: xml
-
-    <hlm:metadatafilterset id="filterset.sbs">
-        <metadatafilterset filterfile="${s60.config}/config/metadata_regex.csv" />
-    </hlm:metadatafilterset>
-
- - Adding just one regular expression
-
-This can be done as below,
-
-.. code-block:: xml
-
-    <hlm:metadatafilterset id="filterset.sbs">
-      <metadatafilter priority="error" regex=".*Error\s*:\s+.*" description="sbs compilation error" />
-      <metadatafilterset filterfile="${helium.dir}/config/metadata_regex.csv" />
-    </hlm:metadatafilterset>
-
-Note
-----
-
-1. The order of metadatafilter / metadatafilterset is important, so the first one takes precedence than the second one.
-
-2. Order is also preserved in the csv file, the expressions which are defined first get precedence than the later one.
-
-3. All the regular expressions are JAVA patterns.
-         
-
-Usage in Helium
-===============
-
-Different build stages were processed and identified the type of output and added the metadatarecord
-task for each build stage and captured the output in the database. And after storing it, using fmpp 
-template the error information from database are processed to send to diamonds, raised signal accordingly.
-
-Usage
-=====
-
-Examples:
-    SBS comilation output in db:
-
-.. code-block:: xml
-    
-    <hlm:metadatarecord database="${metadata.dbfile}">
-        <hlm:sbsmetadatainput cleanLogFile="${sbs.clean.log.file}">
-            <fileset casesensitive="false" file="${sbs.log.file}"/>
-            <metadatafilterset refid="filterset.sbs" />
-        </hlm:sbsmetadatainput>
-    </hlm:metadatarecord>
-
-This example is to process sbs output. The metadatainput is sbsmetadatainput to process the sbs log file, takes the sbs.log.file
-uses the regular expression defined by filterset.sbs
-
-.. code-block:: xml
-
-    <hlm:metadatarecord database="${metadata.dbfile}">
-        <hlm:abldmetadatainput>
-            <fileset casesensitive="false" file="${build.log.dir}/${build.id}${cmaker.log.label}.export.cmaker.log" />
-            <metadatafilterset refid="filterset.compile" />
-        </hlm:abldmetadatainput>
-    </hlm:metadatarecord>
-
-This example process the cmaker output as abld output log. It takes abldmetadatainput as metadatainput
-and the logfile as ${build.log.dir}/${build.id}${cmaker.log.label}.export.cmaker.log and the regular
-expression is used from the reference filterset.compile.
-
-Similarly any of the log output file can be easily processed in a similar way.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/META-INF/persistence.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : persistence.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:
+
+============================================================================
+-->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_2_0.xsd"
+                version="2.0">
+    <persistence-unit name="metadata" transaction-type="RESOURCE_LOCAL">
+        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+          <properties>
+                <!-- <property name="eclipselink.logging.level" value="ALL" /> -->
+           </properties>
+            <class>com.nokia.helium.metadata.model.metadata.LogFile</class>
+            <class>com.nokia.helium.metadata.model.metadata.Severity</class>
+            <class>com.nokia.helium.metadata.model.metadata.Component</class>
+            <class>com.nokia.helium.metadata.model.metadata.MetadataEntry</class>
+            <class>com.nokia.helium.metadata.model.metadata.ComponentTime</class>
+            <class>com.nokia.helium.metadata.model.metadata.WhatLogEntry</class>
+            <class>com.nokia.helium.metadata.model.metadata.ExecutionTime</class>
+            <class>com.nokia.helium.metadata.model.metadata.SysdefPackage</class>
+            <class>com.nokia.helium.metadata.model.metadata.SysdefCollection</class>
+            <class>com.nokia.helium.metadata.model.metadata.SysdefComponent</class>
+            <class>com.nokia.helium.metadata.model.metadata.SysdefUnit</class>
+            <class>com.nokia.helium.metadata.model.Version</class>
+    </persistence-unit>
+</persistence>
\ 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/AutoCommitEntityManager.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,82 @@
+/*
+ * 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;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+
+/**
+ * This class implements a simplified EntityManager
+ * designed for batch committing.
+ * Serial persists are committed and cleared each time
+ * the limit is reached.  
+ *
+ */
+public class AutoCommitEntityManager {
+    private EntityManager entityManager;
+    private int count;
+    private int maxCount = 750;
+    
+    /**
+     * Creating a new AutoCommitEntityManager. The entityManagerFactory will be 
+     * used to get a new EntityManager.
+     * @param entityManagerFactory the entity manager to use to create a EntityManager.
+     */
+    public AutoCommitEntityManager(EntityManagerFactory entityManagerFactory) {
+        this.entityManager = entityManagerFactory.createEntityManager();
+        entityManager.getTransaction().begin();
+    }
+    
+    /**
+     * Persisting an object into the database.
+     * @param o the object to persist
+     */
+    public synchronized void persist(Object o) {
+        entityManager.persist(o);
+        count++;
+        if (count >= maxCount) {
+            entityManager.getTransaction().commit();
+            entityManager.clear();
+            count = 0;
+            entityManager.getTransaction().begin();
+        }
+    }
+    
+    /**
+     * Closing the current entity manager. Committing any 
+     * pending operation.
+     */
+    public synchronized void close() {
+        if (entityManager.getTransaction().isActive()) {
+            entityManager.getTransaction().commit();
+            entityManager.clear();
+        }
+        entityManager.close();
+        entityManager = null;
+    }
+
+    /**
+     * Internal EntityManager used to
+     * @param <T>
+     * @return the merged entity.
+     */
+    public <T> T merge(T entity) {
+        return entityManager.merge(entity);
+    }
+    
+}
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/CustomMetaDataProvider.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +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;
-
-import com.nokia.helium.metadata.db.ORMMetadataDB;
-
-/**
- * This interface is meant for a MetadataInput
- * to provides custom information other than
- * LogEntry to the database.
- */
-public interface CustomMetaDataProvider {
-
-    /**
-     * This method is the entry point which allows
-     * to push additional metadata via the ORMMetadataDB
-     * instance. 
-     */
-    void provide(ORMMetadataDB db, String logPath);
-    
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/DAO.java	Fri Aug 13 14:59:05 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.metadata;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Interface to implement the Data Access Object pattern. 
+ *
+ * @param <T> the type of the object to persist.
+ */
+public interface DAO<T> {
+    
+    /**
+     * Find a particular T object based on it's id. 
+     * @param id the id to look for.
+     * @return the retrieved object, or null if not found.
+     */
+    T findById(Serializable id);
+    
+    /**
+     * Finding all rows from the database.
+     * @return the list of T objects.
+     */
+    List<T> findAll();
+    
+    /**
+     * Persisting the data object from the database. 
+     * @param data the object to persist
+     */
+    void persist(T data);
+
+    /**
+     * Removing the data object from the database.
+     * @param data the row to be removed
+     */
+    void remove(T data);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/DerbyFactoryManagerCreator.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,197 @@
+/*
+ * 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;
+
+import java.io.File;
+import java.io.OutputStream;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Hashtable;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import org.apache.commons.io.FileUtils;
+import org.eclipse.persistence.config.PersistenceUnitProperties;
+
+import com.nokia.helium.metadata.ant.types.SeverityEnum;
+import com.nokia.helium.metadata.model.Version;
+import com.nokia.helium.metadata.model.metadata.Severity;
+
+/**
+ * Class implementing a EntityManagerFactoryCreator for the derby database.
+ * This will be used to create new EntityManagerFactory for each database. It also
+ * handles the driver management, and basic factory settings. 
+ *
+ */
+public class DerbyFactoryManagerCreator implements EntityManagerFactoryCreator {
+
+    public static final OutputStream DEV_NULL = new OutputStream() {         
+        public void write(int b) { }     
+    };
+
+    public synchronized EntityManagerFactory create(File database) throws MetadataException {
+        EntityManagerFactory factory;
+        String name = "metadata";
+        Hashtable<String, String> persistProperties = new Hashtable<String, String>();
+        persistProperties.put("javax.persistence.jdbc.driver", "org.apache.derby.jdbc.EmbeddedDriver");
+        // This swallow all the output log from derby.
+        System.setProperty("derby.stream.error.field", "com.nokia.helium.metadata.DerbyFactoryManagerCreator.DEV_NULL");
+        persistProperties.put("javax.persistence.jdbc.url",
+               "jdbc:derby:" + database.getAbsolutePath());
+        persistProperties.put(
+                PersistenceUnitProperties.PERSISTENCE_CONTEXT_CLOSE_ON_COMMIT,
+                "false");
+        persistProperties.put(
+                PersistenceUnitProperties.PERSISTENCE_CONTEXT_REFERENCE_MODE,
+                "WEAK");
+        persistProperties.put(PersistenceUnitProperties.BATCH_WRITING,
+                "JDBC");
+        persistProperties.put("eclipselink.read-only", "true");
+        persistProperties.put(PersistenceUnitProperties.LOGGING_LEVEL, "warning");
+        if (database.exists()) {
+            if (!checkDatabaseIntegrity(database)) {
+                try {
+                    FileUtils.forceDelete(database);
+                } catch (java.io.IOException iex) {
+                    throw new MetadataException("Failed deleting corrupted db: " + iex, iex);
+                }
+            } else {
+                return
+                    Persistence.createEntityManagerFactory(
+                        name,
+                        persistProperties);
+            }
+        }
+        persistProperties.put("javax.persistence.jdbc.url",
+               "jdbc:derby:" + database + ";create=true");
+        persistProperties.put(PersistenceUnitProperties.DDL_GENERATION,
+                "create-tables");
+        persistProperties.put(
+                PersistenceUnitProperties.DDL_GENERATION_MODE,
+                "database");
+        persistProperties.put(
+                PersistenceUnitProperties.PERSISTENCE_CONTEXT_CLOSE_ON_COMMIT,
+                "false");
+        persistProperties.put(
+                PersistenceUnitProperties.PERSISTENCE_CONTEXT_REFERENCE_MODE,
+                "WEAK");
+        persistProperties.put(PersistenceUnitProperties.BATCH_WRITING,
+                "JDBC");
+        persistProperties.put("eclipselink.read-only", "true");
+        factory = Persistence.createEntityManagerFactory(
+                name,
+                persistProperties);
+        EntityManager entityManager = factory.createEntityManager();
+        // Pushing default data into the current schema
+        try {
+            entityManager.getTransaction().begin();
+            // Version of the schema is pushed.
+            entityManager.persist(new Version());
+            // Default set of severity is pushed.
+            for (SeverityEnum.Severity severity : SeverityEnum.Severity.values()) {
+                Severity pData = new Severity();
+                pData.setSeverity(severity.toString());
+                entityManager.persist(pData);
+            }
+            entityManager.getTransaction().commit();
+        } finally {
+            if (entityManager.getTransaction().isActive()) {
+                entityManager.getTransaction().rollback();
+                entityManager.clear();
+            }
+            entityManager.close();
+        }
+        return factory;
+    }
+    
+    /**
+     * Checks the database integrity.
+     * @param urlPath - database path to be connected to.
+     * @return boolean - true if db is valid false otherwise.
+     */
+    private static boolean checkDatabaseIntegrity(File database) throws MetadataException {
+        boolean result = false;
+        Connection connection = null;
+        try {
+            connection = DriverManager.getConnection("jdbc:derby:" + database);
+            if (connection != null) {
+                Statement stmt = connection.createStatement();
+                ResultSet rs = stmt.executeQuery("select version from version");
+                int version = -1;
+                if ( rs.next()) {
+                    version = rs.getInt(1);
+                }
+                rs.close();
+                stmt.close();
+                connection.close();
+                connection = null;
+                result = version == Version.DB_VERSION; 
+            }
+        } catch (SQLException ex) {
+            try {
+                DriverManager.getConnection("jdbc:derby:;shutdown=true");
+            } catch (java.sql.SQLException sex) {
+                // normal exception during database shutdown
+                connection = null;
+            }
+            return false;
+        } finally {
+            try {            
+                if (connection != null) {
+                    connection.close();
+                }
+            } catch (java.sql.SQLException sex) {
+                // normal exception during database shutdown
+                connection = null;
+            }
+            connection = null;
+            if (!result) {
+                try {
+                    DriverManager.getConnection("jdbc:derby:;shutdown=true");
+                } catch (java.sql.SQLException sex) {
+                    // normal exception during database shutdown
+                    connection = null;
+                }
+            }
+        }
+        //shutdown unloads the driver, driver need to be loaded again.
+        return result;
+    }
+    
+    public synchronized void unload(File database) {
+        try {
+            DriverManager.getConnection("jdbc:derby:" + database + ";shutdown=true");
+        } catch (SQLException e) {
+            // normal exception during database shutdown
+            e = null;
+        }        
+    }
+    
+    public synchronized void initialize() throws MetadataException {
+        try {
+            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
+        } catch (java.lang.ClassNotFoundException e) {
+            throw new MetadataException("JDBC Driver could not be found", e);
+        }
+    }
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/EntityManagerFactoryCreator.java	Fri Aug 13 14:59:05 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.metadata;
+
+import java.io.File;
+
+import javax.persistence.EntityManagerFactory;
+
+/**
+ * This interface describe the methods used to creates
+ * EntityManagerFactory for a particular database type (e.g.: Derby).
+ *
+ */
+public interface EntityManagerFactoryCreator {
+
+    /**
+     * This method will be called once in the lifecycle of the EntityManagerFactoryCreator
+     * object.
+     * This method is a kind of entry point to load a driver for example.
+     * @throws MetadataException this exception is thrown in case of error.
+     */
+    void initialize() throws MetadataException ;
+
+    /**
+     * Create a new EntityManagerFactory for a particular database.
+     * @param database the database to create the EntityManagerFactory for.
+     * @return a new EntityManagerFactory.
+     * @throws MetadataException this exception is raised in case of error. (e.g database could not be created.)
+     */
+    EntityManagerFactory create(File database) throws MetadataException;
+    
+    /**
+     * This method is called to unload a database, this is called usually when
+     * all created EntityManagerFactory are freed.
+     * @param database the database to unload.
+     * @throws MetadataException
+     */
+    void unload(File database) throws MetadataException ;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/FactoryManager.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,219 @@
+/*
+ * 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;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.Cache;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnitUtil;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.metamodel.Metamodel;
+
+/**
+ * This singleton class is the main entry point to the Metadata framework.
+ * Developer must use it to get access to the EntityManagerFactory from the
+ * JPA framework. 
+ *
+ */
+public final class FactoryManager {
+    private static FactoryManager self = new FactoryManager();
+    private List<EntityManagerFactoryWrapper> wrappers = new ArrayList<EntityManagerFactoryWrapper>();
+    private EntityManagerFactoryCreator factoryManagerCreator = new DerbyFactoryManagerCreator();
+    
+    /**
+     * This class must not be instantiated from outside.
+     */
+    private FactoryManager() {
+    }
+    
+    /**
+     * Get the FactoryManager instance.
+     * @return the FactoryManager instance.
+     */
+    public static FactoryManager getFactoryManager() {
+        return self;
+    }
+    
+    /**
+     * Get the EntityManagerFactory for the database. 
+     * @param database the File object representing the database.
+     * @return an EntityManagerFactory instance.
+     * @throws MetadataException is thrown in case of error.
+     */
+    public synchronized EntityManagerFactory getEntityManagerFactory(File database) throws MetadataException {
+        EntityManagerFactoryWrapper wrapper = null;
+        for (EntityManagerFactoryWrapper wrp : wrappers) {
+            // Found what we wanted so leaving the loop.
+            if (wrp.getDatabase().equals(database)) {
+                wrapper = wrp;
+                break;
+            }
+        }
+        if (wrapper != null) {
+            wrapper.reference();
+            return wrapper;
+        } else {
+            // creating a new one.
+            wrapper = 
+                new EntityManagerFactoryWrapper(factoryManagerCreator.create(database), this, database);
+            wrappers.add(wrapper);
+            return wrapper;
+        }
+    }
+    
+    /**
+     * Removing the wrapper object from the available database, so no one can 
+     * use it anymore. This method is intended to be used by the EntityManagerFactoryWrapper.
+     * @param wrapper
+     */
+    private synchronized void remove(EntityManagerFactoryWrapper wrapper) {
+        wrappers.remove(wrapper);
+    }
+
+    /**
+     * Unload the database when not used anymore.
+     * This method is intended to be used by the EntityManagerFactoryWrapper.
+     * @param database the database to unload.
+     */
+    private void unload(File database) {
+        try {
+            factoryManagerCreator.unload(database);
+        } catch (MetadataException e) {
+            // do nothing in the meantime
+            database = null;
+        }        
+    }
+    
+    /**
+     * Internal Factory wrapper object which implements a custom 
+     * factory lifecycle management. 
+     *
+     */
+    class EntityManagerFactoryWrapper implements EntityManagerFactory {
+        private EntityManagerFactory factory;
+        private FactoryManager factoryManager;
+        private int counter = 1;
+        private File database;
+        
+        /**
+         * Default constructor.
+         * @param factory the factory to delegate to calls to.
+         * @param factoryManager the factory manager used for the lifecycle management.
+         * @param database the database this object is connected to.
+         */
+        public EntityManagerFactoryWrapper(EntityManagerFactory factory,
+                FactoryManager factoryManager, File database) {
+            this.factory = factory;
+            this.factoryManager = factoryManager;
+            this.database = database;
+        }
+
+        /**
+         * Method used by the factoryManager to reference the usage of the 
+         * EntityFactoryManager.
+         */
+        public synchronized void reference() {
+            counter++;
+        }
+
+        /**
+         * {@inheritDoc}
+         * This method overrides the default close implementation, and will
+         * only close the EntityManagerFactory, if all application have stopped
+         * using the EntityManagerFactory.
+         * It interacts with the factoryManager.
+         */
+        public synchronized void close() {
+            counter--;
+            if (counter == 0) {
+                factoryManager.remove(this);
+                factory.close();
+                factoryManager.unload(database);
+            }
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public EntityManager createEntityManager() {
+            return factory.createEntityManager();
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @SuppressWarnings("unchecked")
+        public EntityManager createEntityManager(Map properties) {
+            return factory.createEntityManager(properties);
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public Cache getCache() {
+            return factory.getCache();
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public CriteriaBuilder getCriteriaBuilder() {
+            return factory.getCriteriaBuilder();
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public Metamodel getMetamodel() {
+            return factory.getMetamodel();
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public PersistenceUnitUtil getPersistenceUnitUtil() {
+            return factory.getPersistenceUnitUtil();
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public Map<String, Object> getProperties() {
+            return factory.getProperties();
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public boolean isOpen() {
+            return factory.isOpen();
+        }
+        
+        /**
+         * {@inheritDoc}
+         */
+        public File getDatabase() {
+            return database;
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/JpaDAO.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,100 @@
+/*
+ * 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;
+
+import java.io.Serializable;
+import java.lang.reflect.ParameterizedType;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ * Abstract class which implement the DAO pattern for the JPA
+ * API. 
+ *
+ * @param <T> implementing the DAO for T.
+ */
+public abstract class JpaDAO<T> implements DAO<T> {
+    
+    private Class<T> entityBeanType;
+   
+    @PersistenceContext
+    private EntityManager entityManager;
+
+    /**
+     * Default constructor. Does some basic internal configuration.
+     */
+    @SuppressWarnings("unchecked")
+    public JpaDAO() {
+        this.entityBeanType = (Class<T>) ((ParameterizedType) getClass()
+                .getGenericSuperclass()).getActualTypeArguments()[0];
+    }
+    
+    /**
+     * @param entityManager the entityManager to set
+     */
+    public void setEntityManager(EntityManager entityManager) {
+        this.entityManager = entityManager;
+    }
+
+    /**
+     * @return the entityManager
+     */
+    protected EntityManager getEntityManager() {
+        return entityManager;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public T findById(Serializable id) {
+        return entityManager.find(getEntityBeanType(), id);
+    }
+   
+    /**
+     * {@inheritDoc}
+     */
+    public List<T> findAll() {
+        return entityManager.createQuery("from " +
+                getEntityBeanType().getName(), getEntityBeanType()).getResultList();
+    }
+   
+    /**
+     * Get the class this object is implementing the DAO for.  
+     * @return the class this object is implementing the DAO for.
+     */
+    protected Class<T> getEntityBeanType() {
+        return entityBeanType;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void persist(T data) {
+        entityManager.persist(data);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void remove(T data) {
+        entityManager.remove(data);
+    }
+   
+}
+   
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/MetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/MetaDataInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -11,29 +11,29 @@
  *
  * Contributors:
  *
- * Description:
+ * Description:  
  *
  */
-
 package com.nokia.helium.metadata;
 
-import java.util.Iterator;
-import com.nokia.helium.jpa.entity.metadata.Metadata;
+import javax.persistence.EntityManagerFactory;
 
-
+import org.apache.tools.ant.Task;
 
 /**
- * Interface to add any plugins to write the database. Two ways to get
- * the data, either the entire data could written by calling getEntries() method
- * or using Iterator for large amount of entries to be written to the database. 
+ * Interface used by the MetadataRecordTask to extract information and
+ * get them injected into the databased. 
+ *
  */
 public interface MetaDataInput {
-    
+
     /**
-     * 
-     *  @param fileSet fileset to be added
-     * 
+     * This methods is run for each MetadataInput nested into the MetadataRecordTask
+     * to extract data from log file for example. The factory is the entry point to
+     * the database.
+     * @param task an ant task running the plugging, mainly used to implement logging.
+     * @param factory the factory representing the access to the database.
+     * @throws MetadataException
      */
-    Iterator<Metadata.LogEntry> iterator();
-    
-}
\ No newline at end of file
+    void extract(Task task, EntityManagerFactory factory) throws MetadataException;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/MetadataException.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,44 @@
+/*
+ * 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;
+
+/**
+ * Defines any kind of errors happening inside the
+ * Metadata framework. 
+ *
+ */
+public class MetadataException extends Exception {
+
+    private static final long serialVersionUID = 1590168613632533680L;
+
+    /**
+     * Create an exception with an error message
+     * @param message the error message
+     */
+    public MetadataException(String message) {
+        super(message);
+    }
+
+    /**
+     * Create an exception with an error message and a cause
+     * @param message the error message
+     * @param cause the root cause
+     */
+    public MetadataException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ORMFMPPLoader.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ORMFMPPLoader.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,277 +18,31 @@
 
 import java.io.File;
 import java.util.List;
-import java.util.Map;
-import java.util.ArrayList;
+
+import com.nokia.helium.metadata.fmpp.ORMQueryModeModel;
+
 import fmpp.Engine;
-import fmpp.ProgressListener;
 import fmpp.tdd.DataLoader;
-import freemarker.template.TemplateCollectionModel;
-import freemarker.template.TemplateModel;
-import freemarker.template.TemplateHashModel;
-import freemarker.template.TemplateSequenceModel;
-import freemarker.template.SimpleScalar;
-import freemarker.template.SimpleNumber;
-import freemarker.template.TemplateModelIterator;
-import com.nokia.helium.jpa.ORMReader;
-import org.apache.log4j.Logger;
-import freemarker.ext.beans.BeanModel;
-import freemarker.ext.beans.BeansWrapper;
-
 
 
 /**
- * Utility class to access the data from the database and used by FMPP
- * templates.
+ * Utility class to access the data from the database and used by FMPP templates.
  */
 public class ORMFMPPLoader implements DataLoader {
     //private ResultSet rs;
-    private static final int READ_LIMIT = 20000;
-
-    private static Logger log = Logger.getLogger(ORMFMPPLoader.class);
-
-    private ORMReader reader;
-
 
     /**
+     * Return a object abstracting the access to a database.
      * @see fmpp.tdd.DataLoader#load(fmpp.Engine, java.util.List)
      */
+    @SuppressWarnings("unchecked")
     public Object load(Engine engine, List args) throws Exception {
         //log.debug("args.size:" + args.size());
-        java.util.ListIterator iter = args.listIterator();
-        int argsSize = args.size();
-        if (argsSize < 1) {
-            throw new Exception("Input DB path should be provided to load into FMPP.");
-        }        
-        ORMQueryModeModel model = new ORMQueryModeModel((String) (args.get(0)));
+        if (args.size() < 1) {
+            throw new MetadataException("The database path should be provided to load into FMPP.");
+        }
+        ORMQueryModeModel model = new ORMQueryModeModel(new File((String)args.get(0)));
         engine.setAttribute(this.getClass().toString(), model);
         return model;
     }
-
-    /**
-     * QueryModel (which supports hash, sequence, containers)
-     * arg[0] - dbpath
-     *  
-     */
-    private class ORMQueryModeModel implements TemplateHashModel, ProgressListener {
-
-        private String dbPath;
-        public ORMQueryModeModel(String path) {
-            File actualPath = new File(path);
-            String fileName = actualPath.getName();
-            dbPath = new File(actualPath.getParent(), fileName.toLowerCase()).getPath();
-        }
-        
-        /*
-         * Gets the template model for the corresponding query
-         * @param query for which the model is returned.
-         * @return returns the template model for the query 
-         */
-        public QueryTemplateModel get(String mode) {
-            String retType = null;
-            String actualMode = mode;
-            //log.debug("mode: " + mode);
-            if (mode.startsWith("native")) {
-                String [] splitString = mode.split(":");
-                if (splitString.length == 2 ) {
-                    actualMode = splitString[0]; 
-                    retType = splitString[1];
-                    //log.debug("actualMode " + actualMode);
-                    //log.debug("retType " + retType);
-                }
-            }
-            
-            return new QueryTemplateModel(dbPath, actualMode, retType);
-        }
-        
-        public boolean isEmpty() {
-            return false;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        @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);
-            //}  
-         }
-    }
-
-    /*
-     * Internal class to handle the sql query and returns the data in either
-     * hash or sequence or containers.
-     */
-    private class QueryTemplateModel implements TemplateHashModel {
-
-        private String dbPath;
-        
-        private String queryMode;
-        
-        private String returnType;
-        
-        private TemplateModel resultObject;
-        
-        public QueryTemplateModel(String path, String mode, String retType) {
-            dbPath = path;
-            queryMode = mode;
-            returnType = retType;
-        }
-
-        public TemplateModel get(String query) {
-            //log.debug("QueryTemplateModel: query" + query);
-            if (queryMode.equals("jpasingle")) {
-                //log.debug("query executing with single result mode");
-                resultObject = getModel(dbPath, query, returnType);
-                
-            } else {
-                //log.debug("query executing with multiple result mode");
-                resultObject = new ORMQueryModel(dbPath, query, queryMode, returnType); 
-            }
-            return resultObject;
-        }
-        
-        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() {
-            //log.debug("query hash isempty:");
-            return false;
-        }
-    }
-    
-    private class ORMSequenceModel implements TemplateSequenceModel {
-        private List ormList = new ArrayList();
-
-        @SuppressWarnings("unchecked")
-        public ORMSequenceModel(Object obj) {
-            ormList.add(obj);
-        }
-        public int size() {
-            return ormList.size();
-        }
-
-        public TemplateModel get(int index) {
-            //log.debug("ORMSequenceModel.get: index: " + index);
-            if (index < ormList.size()) {
-                Object obj = ormList.get(index);
-                if (obj instanceof String) {
-                    return new SimpleScalar((String)obj);
-                } else if (obj instanceof Number) {
-                    return new SimpleNumber((Number)obj);
-                } else if (obj == null) {
-                    return null;
-                } else {
-                    return new ORMObjectModel(obj);
-                }
-            }
-            return null;
-        }
-    }
-    
-    private class ORMQueryModel implements TemplateCollectionModel 
-         {
-        
-        private ORMReader ormReader;
-        private String queryType;
-        private String query;
-        private String returnType;
-
-        public ORMQueryModel(String dbPath, String queryString, String type, String retType) {
-            ormReader = new ORMReader(dbPath);
-            queryType = type;
-            query = queryString;
-            returnType = retType;
-            //log.debug("ORMQueryModel: query" + query);
-        }
-        
-        /*
-         * Provides data via collection interface.
-         * @return the iterator model from which the data is accessed.
-         */
-        public TemplateModelIterator iterator() {
-            //log.debug("iterator constructor called");
-            return new ORMTemplateModelIterator(ormReader, query, queryType, returnType);
-        }
-        
-    }
-
-    /*
-     * Internal Iterator class which provides data as collection. 
-     */
-    private class ORMTemplateModelIterator implements TemplateModelIterator {
-        
-        private String query;
-        private List<Map<String, Object>> rowList;
-        private int currentOffsetIndex;
-        private boolean finished;
-        private String returnType;
-        private boolean nativeQuery;
-        private ORMReader ormReader;
-        
-        public ORMTemplateModelIterator(ORMReader reader, String queryString, String type, String retType) {
-            ormReader = reader;
-            query = queryString;
-            returnType = retType;
-            if (type.startsWith("native")) {
-                nativeQuery = true;
-            }
-            //log.debug("ORMTemplateModelIterator: query" + query);
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        @SuppressWarnings("unchecked")
-        public TemplateModel next() {
-            //log.debug("ORMTemplateModelIterator: next");
-            Object toRet = null;
-                if (rowList != null) {
-                    toRet = rowList.remove(0);
-                }
-                if (nativeQuery && returnType.equals("java.lang.String")) {
-                    return new SimpleScalar((java.lang.String)toRet);
-                }
-                return new ORMObjectModel(toRet);
-        }
-        
-        /**
-         * {@inheritDoc}
-         */
-        @SuppressWarnings("unchecked")
-        public boolean hasNext() {
-            if (rowList == null  || rowList.size() == 0) {
-                if (!finished) {
-                    if (nativeQuery) {
-                        if (returnType.equals("java.lang.String")) {
-                            rowList = ormReader.executeNativeQuery(query, null);
-                        } else {
-                            rowList = ormReader.executeNativeQuery(query, returnType);
-                        }
-                    } else {
-                        rowList = ormReader.executeQuery(query);
-                    }
-                    if (rowList == null || rowList.size() == 0) {
-                        finished = true;
-                        ormReader.close();
-                    }
-                }
-            }
-            return !finished;
-        }
-    }
-    
-    private class ORMObjectModel extends BeanModel {
-        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	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/antlib.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -28,8 +28,9 @@
     <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="sbsmetadatainput" classname="com.nokia.helium.metadata.ant.types.sbs.SBSLogMetaDataInput"/>
     <typedef name="imakermetadatainput" classname="com.nokia.helium.metadata.ant.types.IMakerLogMetaDataInput"/>
+    <typedef name="sysdefmetadatainput" classname="com.nokia.helium.metadata.ant.types.SysdefMetaDataInput"/>
     <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"/>
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/conditions/MetaDataLogCondition.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/conditions/MetaDataLogCondition.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,12 +18,25 @@
 package com.nokia.helium.metadata.ant.conditions;
 
 import java.io.File;
-import com.nokia.helium.jpa.ORMReader;
-import com.nokia.helium.jpa.entity.metadata.Metadata;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Query;
+
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.condition.Condition;
 import org.apache.tools.ant.types.DataType;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.ResourceCollection;
+
+import com.nokia.helium.metadata.FactoryManager;
+import com.nokia.helium.metadata.MetadataException;
+import com.nokia.helium.metadata.ant.types.SeverityEnum;
 
 /**
  * This class implements a Ant Condition which report true if it finds any
@@ -33,7 +46,7 @@
  * <pre>
  * &lt;target name=&quot;fail-on-build-error&quot;&gt;
  *   &lt;fail message=&quot;The build contains errors&quot;&gt;
- *     &lt;hlm:metadataHasSeverity log=&quot;my.log&quot; db=&quot;my.db&quot; severity=&quot;error&quot;/&gt;
+ *     &lt;hlm:metadataHasSeverity log=&quot;my.log&quot; database=&quot;my.db&quot; severity=&quot;error&quot;/&gt;
  *   &lt;/fail&gt;
  * &lt;/target&gt;
  * </pre>
@@ -45,31 +58,82 @@
 public class MetaDataLogCondition extends DataType implements Condition {
 
     // The severity to count
-    private String severity;
-    private String logFile;
-    private File fileName;
-    private boolean countMissing = true;
+    private SeverityEnum severity;
+    private File log;
+    private File database;
+    private List<ResourceCollection> resourceCollections = new ArrayList<ResourceCollection>();
     
     /**
-     * Sets which severity will be counted.
+     * Defines which severity will be counted.
      * 
      * @param severity
      * @ant.required
      */
-    public void setSeverity(String severity) {
+    public void setSeverity(SeverityEnum severity) {
         this.severity = severity;
     }
 
-    public void setDb(File file) {
-        fileName = file;
+    /**
+     * Defines the database to use.
+     * @param database
+     */
+    @Deprecated
+    public void setDb(File database) {
+        log("The usage of the 'db' attribute is deprecated, please use the database attribute instead.", Project.MSG_WARN);
+        setDatabase(database);
+    }
+
+    /**
+     * Defines the database to use.
+     * @param database
+     */
+    public void setDatabase(File database) {
+        this.database = database;
     }
     
-    public void setLog(String log) {
-        logFile = log;
+    /**
+     * The log file to look severity for in the metadata. 
+     * @param log the actual real log file.
+     */
+    public void setLog(File log) {
+        this.log = log;
     }
 
+    /**
+     * Defines if missing file shall be counted (Deprecated attribute is ignored).
+     * @param countMissing
+     */
+    @Deprecated
     public void setCountMissing(boolean countMissing) {
-        this.countMissing = countMissing;
+        log("The usage of the 'countMissing' attribute is deprecated.", Project.MSG_WARN);
+        //this.countMissing = countMissing;
+    }
+    
+    /**
+     * 
+     * @param resourceCollection
+     */
+    public void add(ResourceCollection resourceCollection) {
+        resourceCollections.add(resourceCollection);
+    }
+    
+    /**
+     * Get the severity for a specific log file.
+     * @param file
+     * @return
+     * @throws MetadataException
+     */
+    public int getSeverity(EntityManager em, File file) throws MetadataException {
+        // log file under the DB is always represented with / and not \.
+        String queryString = "select Count(m.id) from MetadataEntry m JOIN  m.logFile as l " +
+                        "JOIN m.severity as p where l.path='" +
+                        file.getAbsolutePath().replace('\\', '/') +
+                        "' and p.severity='" + severity.getSeverity() + "'";
+        log("Query: " + queryString, Project.MSG_DEBUG);
+        Query query = em.createQuery(queryString);
+        Number number = (Number)query.getSingleResult();
+        log("Result: " + number, Project.MSG_DEBUG);
+        return number.intValue();        
     }
     
     /**
@@ -77,45 +141,52 @@
      * 
      * @return the number of a particular severity.
      */
-    public int getSeverity() {
-        if (fileName == null || !fileName.exists() || logFile == null) {
-            //this.log("Error: Log file does not exist " + fileName);
-            return -1;
+    @SuppressWarnings("unchecked")
+    public int getSeverity() throws MetadataException {
+        if (log == null && resourceCollections.isEmpty()) {
+            throw new BuildException("'log' attribute not defined.");
         }
-        if (severity == null)
-            throw new BuildException("'severity' attribute is not defined");
+        if (database == null) {
+            throw new BuildException("'database' attribute not defined.");
+        }
+        if (log != null && !log.exists()) {
+            log("Could not find " + log + ".", Project.MSG_WARN);
+        }
+        if (severity == null) {
+            throw new BuildException("'severity' attribute is not defined.");
+        }
 
-        log("Looking for severity '" + severity + "' under '" + fileName.getAbsolutePath() + "'", Project.MSG_DEBUG);
-        
-        Metadata.PriorityEnum prty = null;
-        if (severity.equalsIgnoreCase("ERROR")) {
-            prty = Metadata.PriorityEnum.ERROR;
-        } else if (severity.equalsIgnoreCase("WARNING")) {
-            prty = Metadata.PriorityEnum.WARNING;
-        } else if (severity.equalsIgnoreCase("FATAL")) {
-            prty = Metadata.PriorityEnum.FATAL;
-        } else if (severity.equalsIgnoreCase("INFO")) {
-            prty = Metadata.PriorityEnum.INFO;
-        } else if (severity.equalsIgnoreCase("REMARK")) {
-            prty = Metadata.PriorityEnum.REMARK;
+        EntityManagerFactory factory = null;
+        EntityManager em = null;
+        int result = 0;
+        try {
+            factory = FactoryManager.getFactoryManager().getEntityManagerFactory(database);
+            em = factory.createEntityManager();
+            Date before = new Date();
+            if (!resourceCollections.isEmpty()) {
+                for (ResourceCollection rc : resourceCollections) {
+                    Iterator<Resource> ri = rc.iterator();
+                    while (ri.hasNext()) {
+                        Resource resource = ri.next();
+                        log("Looking for severity '" + severity.getValue() + "' under '" + resource + "'");
+                        result += getSeverity(em, new File(resource.toString()));
+                    }
+                }
+            } else {
+                log("Looking for severity '" + severity.getValue() + "' under '" + log.getAbsolutePath() + "'");
+                result = getSeverity(em, log);
+            }
+            Date after = new Date();
+            log("Elapsed time: " + (after.getTime() - before.getTime()) + " ms");
+        } finally {
+            if (em != null) {
+                em.close();
+            }
+            if (factory != null) {
+                factory.close();
+            }
         }
-        else
-            throw new BuildException("'severity' attribute is not valid");
-        
-        // 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() + "'";
-        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) reader.executeSingleResult(queryMissing, null);
-            retValue = number.intValue() + numberMissing.intValue();
-        }
-        reader.close();
-        return retValue;
+        return result;
     }
 
     /**
@@ -125,10 +196,14 @@
      * @return if true if message with the defined severity have been found.
      */
     public boolean eval() {
-        int severity = getSeverity();
-        if (severity < 0) {
-            return false;
+        try {
+            int severity = getSeverity();
+            if (severity < 0) {
+                return false;
+            }
+            return severity > 0;
+        } catch (MetadataException ex) {
+            throw new BuildException(ex.getMessage(), ex);
         }
-        return severity > 0;
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/conditions/MetaDataRegexTestCondition.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/conditions/MetaDataRegexTestCondition.java	Fri Aug 13 14:59:05 2010 +0300
@@ -24,16 +24,16 @@
 import java.util.regex.Pattern;
 
 import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.ProjectComponent;
 import org.apache.tools.ant.taskdefs.condition.Condition;
-
+import org.apache.tools.ant.types.DataType;
 
 import com.nokia.helium.metadata.ant.types.MetaDataFilter;
 import com.nokia.helium.metadata.ant.types.MetaDataFilterSet;
+import com.nokia.helium.metadata.ant.types.SeverityEnum;
 
 /**
  * This class implements a Ant Condition which report true if it finds the given 
- * input string is matched against the given filter of given priority
+ * input string is matched against the given filter of given severity
  * 
  * Example:
  * <pre> 
@@ -46,13 +46,13 @@
  *   &lt;/target&gt;
  * </pre>
  * 
- * The condition will eval as true if the string is matched with any of the pattern in the given priority
+ * The condition will eval as true if the string is matched with any of the pattern in the given severity
  * 
  * @ant.type name="metadataRegexTest" category="Metadata"
  */
-public class MetaDataRegexTestCondition extends ProjectComponent implements Condition {
+public class MetaDataRegexTestCondition extends DataType implements Condition {
 
-    private String severity;
+    private SeverityEnum severity;
     private String string;  
     
     private List<MetaDataFilterSet> filterSets = new ArrayList<MetaDataFilterSet>();
@@ -63,7 +63,7 @@
      * @param severity
      * @ant.required
      */
-    public void setSeverity(String severity) {
+    public void setSeverity(SeverityEnum severity) {
         this.severity = severity;
     }
     /**
@@ -90,19 +90,21 @@
     
     /**
      * This method iterates through the regular expression patterns and match the input string against them.
-     * @return true if the string is matched with any of the pattern in the given priority, false otherwise.
+     * @return true if the string is matched with any of the pattern in the given severity, false otherwise.
      */
     public boolean eval() {
-        if (this.severity == null || (this.severity != null && this.severity.trim().isEmpty()))
+        if (this.severity == null) {
             throw new BuildException("'severity' attribute is not defined");
-        if (this.string == null || (this.string != null && this.string.isEmpty()))
+        }
+        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 severity.getSeverity().equals(filter.getSeverity());
                 }
             }
         }
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataDeleteTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataDeleteTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,15 +17,25 @@
 
 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.io.File;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Vector;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.log4j.Logger;
-import com.nokia.helium.metadata.db.*;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.ResourceCollection;
+
+import com.nokia.helium.metadata.FactoryManager;
+import com.nokia.helium.metadata.MetadataException;
+import com.nokia.helium.metadata.model.metadata.LogFile;
+import com.nokia.helium.metadata.model.metadata.LogFileDAO;
 
 /**
  * This task provide a way to delete the data from db for a log file set.
@@ -41,90 +51,95 @@
  */
 public class MetaDataDeleteTask extends Task {
 
-    private static Logger log = Logger.getLogger(MetaDataDeleteTask.class);
-
-    private String database;
+    private File database;
     
     private boolean failOnError = true;
 
-    private Vector<FileSet> fileSetList = new Vector<FileSet>();
+    private List<ResourceCollection> resourceCollections = new Vector<ResourceCollection>();
 
     /**
      * 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;
-        }
+    public void setDatabase(File database) {
+        this.database = database;
     }
 
     /**
-     * Updates the list of filelist from the input fileset.
-     *  @param fileSetList input fileset list
-     *  @return the matched files including the base dir. 
+     * Defines if the task should fail on error.
+     * @param failNotify
+     * @ant.not-required Default is true.
      */
-    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;
+    public void setFailOnError(boolean failOnError) {
+        this.failOnError = failOnError;
     }
 
     /**
-     * Adds the fileset (list of input log files to be processed).
-     *  @param fileSet fileset to be added
+     * Adds any ResourceCollection types from Ant (list of input log files to be processed).
+     *  @param resourceCollection the ResourceCollection to be added
      * 
      */
-    public void add(FileSet fileSet) {
-        fileSetList.add(fileSet);
+    public void add(ResourceCollection resourceCollection) {
+        resourceCollections.add(resourceCollection);
     }   
 
     /**
      * Helper function to get the database
      * 
      */
-    public String getDatabase() {
+    protected File getDatabase() {
         return database;
     }
 
-    
+    /**
+     * {@inheritDoc}
+     */
+    @SuppressWarnings("unchecked")
     @Override
     public void execute() {
-        /*
-        MetaDataDb metadataDb = null;
+        if (database == null) {
+            throw new BuildException("'database' attribute is not defined.");
+        }
+        EntityManagerFactory factory = null;
+        EntityManager entityManager = 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) {
+            factory = FactoryManager.getFactoryManager().getEntityManagerFactory(database);
+            entityManager = factory.createEntityManager();
+            Date before = new Date();
+            log("Time before recording to db: " + before);
+            for (ResourceCollection resourceCollection : resourceCollections) {
+                Iterator<Resource> ri = (Iterator<Resource>)resourceCollection.iterator();
+                while (ri.hasNext()) {
+                    File file = new File(ri.next().toString());
+                    LogFileDAO logFileDAO = new LogFileDAO();
+                    logFileDAO.setEntityManager(entityManager);
+                    LogFile logFile = logFileDAO.findByLogName(file);
+                    if (logFile != null) {
+                        log("Removing log from database: " + file.getAbsolutePath());
+                        entityManager.getTransaction().begin();
+                        logFileDAO.remove(logFile);
+                        entityManager.getTransaction().commit();
+                    }
+                }
+            }
+            Date after = new Date();
+            log("Time after recording to db: " + after);
+            log("Elapsed time: " + (after.getTime() - before.getTime()) + " ms");
+        } catch (MetadataException ex) {
+            log(ex.getMessage(), Project.MSG_ERR);
             if (failOnError) {
-                throw ex1;
-            }
-        } catch (Exception ex) {
-            if (failOnError) {
-                throw new BuildException("Failed during writing data to db");
+                throw new BuildException(ex.getMessage(), ex);
             }
         } finally {
-            log.debug("finalizing DB: " + database);
-            if (metadataDb != null) {
-                metadataDb.finalizeDB();
+            if (entityManager != null) {
+                entityManager.close();                
+                entityManager = null;
+            }
+            if (factory != null) {
+                factory.close();
+                factory = null;
             }
         }
-        */
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataLogCountTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataLogCountTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,40 +18,66 @@
 package com.nokia.helium.metadata.ant.taskdefs;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.ResourceCollection;
+
+import com.nokia.helium.metadata.MetadataException;
 import com.nokia.helium.metadata.ant.conditions.MetaDataLogCondition;
+import com.nokia.helium.metadata.ant.types.SeverityEnum;
 
 /**
  * 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;
+ *     &lt;hlm:metadataCountSeverity severity=&quot;error&quot; 
+ *                                   log=&quot;${compile.log.dir}/${build.id}_fixslashes_raptor.log&quot; 
+ *                                   database=&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 File database;
+    private File log;
+    private SeverityEnum severity;
     private String property;
-    private boolean countMissing = true;
+    private List<ResourceCollection> resourceCollections = new ArrayList<ResourceCollection>();
+
+    public void add(ResourceCollection resourceCollection) {
+        resourceCollections.add(resourceCollection);
+    }
 
     /**
-     * File to be parsed.
+     * Location of the database.
      * 
      * @param filename
      * @ant.required
      */
-    public void setDb(File filename) {
-        fileName = filename;
+    @Deprecated
+    public void setDb(File database) {
+        log("The usage of the db attribute is deprecated, please use the database attribute instead.", Project.MSG_WARN);
+        this.database = database;
+    }
+
+    /**
+     * Location of the database.
+     * 
+     * @param filename
+     * @ant.required
+     */
+    public void setDatabase(File database) {
+        this.database = database;
     }
     
-    public void setLog(String log) {
-        logFile = log;
+    public void setLog(File log) {
+        this.log = log;
     }
     
     /**
@@ -60,7 +86,7 @@
      * @param severity
      * @ant.required
      */
-    public void setSeverity(String severity) {
+    public void setSeverity(SeverityEnum severity) {
         this.severity = severity;
     }
 
@@ -79,8 +105,9 @@
      *                     for error severity
      * @ant.not-required Default is true
      */
+    @Deprecated
     public void setCountMissing(boolean countMissing) {
-        this.countMissing = countMissing;
+        // not active anymore
     }
     
     /**
@@ -88,14 +115,21 @@
      * @throws BuildException
      */
     public void execute() {
-        if (property == null)
+        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());
+        }
+        try {
+            MetaDataLogCondition cond = new MetaDataLogCondition();
+            cond.setProject(getProject());
+            cond.setDatabase(database);
+            cond.setLog(log);
+            cond.setSeverity(severity);
+            for (ResourceCollection rc : resourceCollections) {
+                cond.add(rc);
+            }
+            getProject().setNewProperty(property, "" + cond.getSeverity());
+        } catch (MetadataException ex) {
+            throw new BuildException(ex.getMessage(), ex);
+        }
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataRecordTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataRecordTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,16 +17,19 @@
 
 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 java.io.File;
+import java.util.Date;
+import java.util.Vector;
+
+import javax.persistence.EntityManagerFactory;
+
 import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
 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;
+
+import com.nokia.helium.metadata.FactoryManager;
+import com.nokia.helium.metadata.MetaDataInput;
+import com.nokia.helium.metadata.MetadataException;
 
 /**
  * This task provide a way to record the data in the Database.
@@ -55,33 +58,35 @@
  */
 public class MetaDataRecordTask extends Task {
 
-    private static Logger log = Logger.getLogger(MetaDataRecordTask.class);
-
-    private String database;
+    private File database;
     
     private boolean failOnError = true;
     
-    private Vector<MetaDataInput> metadataList = new Vector<MetaDataInput>();
+    private Vector<MetaDataInput> metaDataInputs = new Vector<MetaDataInput>();
 
     /**
      * Helper function to set the database parameter
      * 
      * @ant.required
      */
-    public void setDatabase(String dbFile) {
-        database = dbFile;
+    public void setDatabase(File database) {
+        this.database = database;
     }
 
-    public void setFailOnError(String failNotify) {
-        if (failNotify.equals("false")) {
-            failOnError = false;
-        }
+    /**
+     * Defines if the task should fail on error.
+     * @param failOnError
+     * @ant.not-required Default is true.
+     */
+    public void setFailOnError(boolean failOnError) {
+        this.failOnError = failOnError;
     }
+    
     /**
      * Helper function to get the database
      * 
      */
-    public String getDatabase() {
+    public File getDatabase() {
         return database;
     }
 
@@ -90,11 +95,11 @@
      *  @return build metadata object
      * 
      */
-    public Vector<MetaDataInput> getMetaDataList() throws Exception {
-        if (metadataList.isEmpty()) {
-            throw new Exception("metadata list is empty");
+    public Vector<MetaDataInput> getMetaDataList() throws MetadataException {
+        if (metaDataInputs.isEmpty()) {
+            throw new MetadataException("metadata list is empty");
         }
-        return metadataList;
+        return metaDataInputs;
     }
 
     /**
@@ -102,76 +107,39 @@
      *  @param build metadata list to add
      * 
      */
-    public void add(MetaDataInput interf) {
-        metadataList.add(interf);
+    public void add(MetaDataInput metaDataInput) {
+        metaDataInputs.add(metaDataInput);
     }
 
-    
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public void execute() {
-        ORMMetadataDB ormDB = null;
+        if (database == null) {
+            throw new BuildException("'database' attribute is not defined.");
+        }
+        EntityManagerFactory factory = 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");
+            factory = FactoryManager.getFactoryManager().getEntityManagerFactory(database);
             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);
+            for (MetaDataInput metadataInput : metaDataInputs) {
+                metadataInput.extract(this, factory);
             }
             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);
+        } catch (MetadataException ex) {
+            log(ex.getMessage(), Project.MSG_ERR);
             if (failOnError) {
-                throw ex1;
+                throw new BuildException(ex.getMessage(), ex);
             }
         } finally {
-            if (ormDB != null) {
-                ormDB.finalizeDB();
+            if (factory != null) {
+                factory.close();
             }
-        }
-    }
-    
-    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);
+            factory = null;
         }
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/AbldLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/AbldLogMetaDataInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,148 +17,143 @@
 
 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.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Map;
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import java.util.regex.Matcher;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import com.nokia.helium.metadata.AutoCommitEntityManager;
+import com.nokia.helium.metadata.MetadataException;
+import com.nokia.helium.metadata.model.metadata.LogFile;
+import com.nokia.helium.metadata.model.metadata.MetadataEntry;
+import com.nokia.helium.metadata.model.metadata.Severity;
+import com.nokia.helium.metadata.model.metadata.SeverityDAO;
 
 /**
- * This Type is to specify and use the abld logparser type to parse and store the data.
- *
+ * 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 id=&quot;abld.metadata.filter&quot;&gt;
+ *    &lt;metadatafilterset filterfile=&quot;common.csv&quot; /&gt;
  * &lt;/hlm:metadatafilterset&gt;
  * 
  * &lt;hlm:abldmetadatainput&gt;
- *    &lt;fileset dir="${project.dir}/../data/"&gt;
- *        &lt;include name="*_compile*.log"/&gt;
+ *    &lt;fileset dir=&quot;${project.dir}/../data/&quot;&gt;
+ *        &lt;include name=&quot;*_compile*.log&quot;/&gt;
  *    &lt;/fileset&gt;
- *    &lt;metadatafilterset refid="abld.metadata.filter" /&gt;
+ *    &lt;metadatafilterset refid=&quot;abld.metadata.filter&quot; /&gt;
  * &lt;/hlm:antmetadatainput&gt;
  * </pre>
  * 
  * @ant.task name="abldmetadatainput" category="Metadata"
  */
-public class AbldLogMetaDataInput extends TextLogMetaDataInput {
+public class AbldLogMetaDataInput extends AbstractComponentBaseMetadataInput {
 
-    private Logger log = Logger.getLogger(AbldLogMetaDataInput.class);
-    
-    private Pattern abldFinishedPattern = Pattern.compile("^===\\s+.+\\s+finished.*");
-    private Pattern abldStartedPattern = Pattern.compile("^===\\s+(.+)\\s+started.*");
-    private Pattern abldComponentPattern = Pattern.compile("^===\\s+(.+?)\\s+==\\s+(.+)");
-    
-
-    private String currentComponent;
-    
-    private boolean entryCreated;
+    public static final String DEFAULT_COMPONENT = "General";
+    private Pattern abldFinishedPattern = Pattern
+            .compile("^===\\s+.+\\s+finished.*");
+    private Pattern abldStartedPattern = Pattern
+            .compile("^===\\s+(.+)\\s+started.*");
+    private Pattern abldComponentPattern = Pattern
+            .compile("^===\\s+(.+?)\\s+==\\s+(.+)");
 
-    private boolean recordText;
+    private String currentComponent = DEFAULT_COMPONENT;
+    private EntityManager entityManager;
     
-    public AbldLogMetaDataInput() {
-    }
-
     /**
-     * Function to check from the input stream if is there any entries available.
-     * @return true if there are any entry available otherwise false.
+     * {@inheritDoc}
      */
-    public boolean isEntryCreated(File currentFile) {
-        String exceptions = "";
-        int lineNumber = getLineNumber(); 
-        BufferedReader currentReader = getCurrentReader();
-        log.debug("Getting next set of log entries for Abld Input");
+    @Override
+    public void extract(EntityManagerFactory factory, File file)
+        throws MetadataException {
+        entityManager = factory.createEntityManager();
+        AutoCommitEntityManager autoCommitEM = new AutoCommitEntityManager(factory);
         try {
-            if (currentReader == null) {
-                lineNumber = 0;
-                setLineNumber(lineNumber);
-                log.debug("Current abld log file name:" + currentFile);
-                log.debug("Processing file: " + currentFile);
-                currentReader = new BufferedReader(new FileReader(currentFile));
-                setCurrentReader(currentReader);
-            }
+            // Creating the filename
+            LogFile logFile = getLogFile(entityManager, file);
+
+            // Always defines the default component
+            this.getDefaultComponent(logFile);
+
+            // Loading the available priorities
+            SeverityDAO severityDao = new SeverityDAO();
+            severityDao.setEntityManager(entityManager);
+            Map<String, Severity> priorities = severityDao.getSeverities();
+
+            
+            // Parsing the log file
+            BufferedReader reader = new BufferedReader(new FileReader(file));
             String logText = null;
-            while ((logText = currentReader.readLine()) != null) {
-                lineNumber ++;
-                setLineNumber(lineNumber);
-                logText = logText.replaceFirst("'^\\s*\\[.+?\\]\\s*", "");
-                if (logText.startsWith("++ Finished at")) {
-                    if (currentComponent != null && !entryCreated) {
-                        addEntry("DEFAULT", currentComponent, currentFile.toString(), 
-                                0, "" );
-                        entryCreated = true;
-                        recordText = false;
-                        return true;
-                    }
-                    entryCreated = false;
-                } else if (logText.startsWith("=== ")) {
-                    Matcher finishMatch = abldFinishedPattern.matcher(logText);
-                    if (finishMatch.matches()) {
-                        if (currentComponent != null && !entryCreated) {
-                            addEntry("DEFAULT", currentComponent, currentFile.toString(), 
-                                    0, "" );
-                            entryCreated = true;
-                            recordText = false;
-                            return true;
-                        }
-                        entryCreated = false;
+            int lineNumber = 0;
+            while ((logText = reader.readLine()) != null) {
+                lineNumber++;
+                String line = logText.replaceFirst("^[ ]*\\[.+?\\][ ]*", "");
+
+                if (line.startsWith("=== ")) {
+                    Matcher matcher = abldComponentPattern.matcher(line);
+                    if (matcher.matches()) {
+                        currentComponent = matcher.group(2);
+                        getComponent(currentComponent, logFile); // declare the component...
                     } else {
-                        Matcher componentMatch = abldComponentPattern.matcher(logText);
-                        if (componentMatch.matches()) {
-                            currentComponent = componentMatch.group(2);
-                            recordText = true;
-                        }
-
-                        Matcher startMatch = abldStartedPattern.matcher(logText);
-                        if (startMatch.matches()) {
-                            currentComponent = startMatch.group(1);
-                            recordText = true;
+                        matcher = abldStartedPattern.matcher(line);
+                        if (matcher.matches()) {
+                            currentComponent = DEFAULT_COMPONENT;
+                        } else {
+                            matcher = abldFinishedPattern.matcher(line);
+                            if (matcher.matches()) {
+                                currentComponent = DEFAULT_COMPONENT;
+                            }
                         }
                     }
                 } else {
-                    if (recordText) {
-                        String severity = getSeverity(logText);
-                        if (severity != null) {
-                            entryCreated = true; 
-                            addEntry(severity, currentComponent, currentFile.toString(), 
-                                    lineNumber, logText );
-                            return true;
-                        }
+                    SeverityEnum.Severity severity = getSeverity(line);
+                    if (severity != SeverityEnum.Severity.NONE) {
+                        MetadataEntry entry = new MetadataEntry();
+                        entry.setLogFile(autoCommitEM.merge(logFile));
+                        entry.setLineNumber(lineNumber);
+                        entry.setSeverity(autoCommitEM.merge(priorities.get(severity.toString())));
+                        entry.setText(line);
+                        entry.setComponent(autoCommitEM.merge(getComponent(currentComponent, logFile)));
+                        autoCommitEM.persist(entry);
                     }
                 }
             }
-            currentReader.close();
-            currentReader = null;
-            setCurrentReader(currentReader);
+            reader.close();
         } 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;
+            throw new MetadataException(ex.getMessage(), ex);
         } catch (IOException ex) {
-            log.debug("IOException in AbldLogMetadata", ex);
-            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);
+            throw new MetadataException(ex.getMessage(), ex);
+        } finally {
+            if (autoCommitEM != null) {
+                autoCommitEM.close();
+            }
+            if (entityManager != null) {
+                if (entityManager.getTransaction().isActive()) {
+                    entityManager.getTransaction().rollback();
+                }
+                entityManager.close();
+                entityManager = null;
             }
-            currentReader = null;
-            setCurrentReader(null);
-            exceptions = exceptions + ex.getMessage() + "\n";
-            return false;
         }
-        if (!exceptions.equals("")) {
-            throw new BuildException(exceptions);
-        }
-        return false;
+        clear();
+    }
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return entityManager;
     }
+    
+    @Override
+    protected String getDefaultComponentName() {
+        return DEFAULT_COMPONENT;
+    }
+
 }
\ 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/types/AbstractComponentBaseMetadataInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,104 @@
+/*
+ * 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.util.Hashtable;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+
+import com.nokia.helium.metadata.model.metadata.Component;
+import com.nokia.helium.metadata.model.metadata.LogFile;
+
+/**
+ * LogMetaDataInput which implements some abstract component handling. 
+ *
+ */
+public abstract class AbstractComponentBaseMetadataInput extends LogMetaDataInput {
+    protected static final String DEFAULT_COMPONENT = "Default";
+    private Map<String, Component> components = new Hashtable<String, Component>();
+    private Component defaultComponent;
+    
+    /**
+     * Provides an entity manager to manipulate the data.
+     * @return
+     */
+    protected abstract EntityManager getEntityManager();
+    
+    /**
+     * Defines the name of the default component.
+     * @return a String with the name of the default component.
+     */
+    protected String getDefaultComponentName() {
+        return DEFAULT_COMPONENT;
+    }
+    
+    /**
+     * Get the default component instance from the database.
+     * Or create it if needed.
+     * @param logFile logFile to associate the component to.
+     * @return the Component instance. 
+     */
+    protected Component getDefaultComponent(LogFile logFile) {
+        if (defaultComponent == null) {
+            defaultComponent = getComponent(getDefaultComponentName(), logFile);
+        }
+        return defaultComponent;
+    }
+
+    /**
+     * Get the database instance for the name component.
+     * @param name the name of the component
+     * @param logFile logFile to associate the component to.
+     * @return the Component instance.
+     */
+    protected Component getComponent(String name, LogFile logFile) {
+        if (!components.containsKey(name)) {
+            Component component = createComponent(name, logFile);
+            components.put(name, component);
+            return component;
+        }
+        return components.get(name);
+    }
+    
+    /**
+     * Creates a new component. This method is called by the 
+     * getComponent method if the component entity is not found
+     * in the cache.
+     * @param name the name of the component
+     * @param logFile logFile to associate the component to.
+     * @return the Component instance.
+     */
+    protected Component createComponent(String name, LogFile logFile) {
+        Component component = new Component();
+        component.setComponent(name);
+        component.setLogFile(logFile);
+        getEntityManager().getTransaction().begin();
+        getEntityManager().persist(component);
+        getEntityManager().getTransaction().commit();
+        return component;
+    }
+
+    /**
+     * Clear the components cache.
+     */
+    protected void clear() {
+        components = new Hashtable<String, Component>();
+        defaultComponent = null;
+    }
+}
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/AntLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/AntLogMetaDataInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,12 +17,26 @@
 
 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.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Map;
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import java.util.regex.Matcher;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import com.nokia.helium.metadata.AutoCommitEntityManager;
+import com.nokia.helium.metadata.MetadataException;
+import com.nokia.helium.metadata.model.metadata.Component;
+import com.nokia.helium.metadata.model.metadata.LogFile;
+import com.nokia.helium.metadata.model.metadata.MetadataEntry;
+import com.nokia.helium.metadata.model.metadata.Severity;
+import com.nokia.helium.metadata.model.metadata.SeverityDAO;
 
 /**
  * This Type is to specify and use the ant logparser type to parse and store the data.
@@ -42,100 +56,78 @@
  * 
  * @ant.task name="antmetadatainput" category="Metadata"
  */
-public class AntLogMetaDataInput extends TextLogMetaDataInput {
+public class AntLogMetaDataInput extends AbstractComponentBaseMetadataInput {
 
-    private Logger log = Logger.getLogger(AntLogMetaDataInput.class);
-    
+    public static final String DEFAULT_COMPONENT = "Ant";
     private Pattern antTargetPattern = Pattern.compile("^([^\\s=\\[\\]]+):$");
-    
-    private String currentComponent;
-    
-    private boolean entryCreated;
+    private EntityManager entityManager;
     
     /**
-     * Constructor
+     * {@inheritDoc}
      */
-    public AntLogMetaDataInput() {
+    @Override
+    public void extract(EntityManagerFactory factory, File file)
+        throws MetadataException {
+        Component currentComponent = null;
+        entityManager = factory.createEntityManager();
+        AutoCommitEntityManager autoCommitEM = new AutoCommitEntityManager(factory);
+        try {
+            // Loading the available priorities
+            SeverityDAO severityDao = new SeverityDAO();
+            severityDao.setEntityManager(entityManager);
+            Map<String, Severity> priorities = severityDao.getSeverities();
+
+            // Creating the filename
+            LogFile logFile = getLogFile(entityManager, file);
+
+            // Parsing the log file
+            BufferedReader reader = new BufferedReader(new FileReader(file));
+            String logText = null;
+            int lineNumber = 0;
+            while ((logText = reader.readLine()) != null) {
+                lineNumber++;
+                String line = logText.replaceFirst("^[ ]*\\[.+?\\][ ]*", "");
+                
+                Matcher matcher = antTargetPattern.matcher(line);
+                if (matcher.matches()) {
+                    currentComponent = getComponent(matcher.group(1), logFile);
+                } else {
+                    if (currentComponent == null) {
+                        currentComponent = getDefaultComponent(logFile);
+                    }
+                    SeverityEnum.Severity severity = getSeverity(line);
+                    if (severity != SeverityEnum.Severity.NONE) {
+                        MetadataEntry entry = new MetadataEntry();
+                        entry.setLogFile(logFile);
+                        entry.setLineNumber(lineNumber);
+                        entry.setSeverity(autoCommitEM.merge(priorities.get(severity.toString())));
+                        entry.setText(line);
+                        entry.setComponent(autoCommitEM.merge(currentComponent));
+                        autoCommitEM.persist(entry);
+                    }
+                }
+            }
+            reader.close();
+        } catch (FileNotFoundException ex) {
+            throw new MetadataException(ex.getMessage(), ex);
+        } catch (IOException ex) {
+            throw new MetadataException(ex.getMessage(), ex);
+        } finally {
+            if (autoCommitEM != null) {
+                autoCommitEM.close();
+            }
+            if (entityManager != null) {
+                entityManager.close();
+            }
+            clear();
+        }
     }
 
     /**
-     * Function to check from the input stream if is there any entries available.
-     * @return true if there are any entry available otherwise false.
+     * {@inheritDoc}
      */
-    public boolean isEntryCreated(File currentFile) {
-        String exceptions = "";
-        int lineNumber = getLineNumber(); 
-        BufferedReader currentReader = getCurrentReader();
-        try {
-            if (currentReader == null) {
-                setLineNumber(0);
-                log.debug("Current Text log file name:" + currentFile);
-                log.debug("Processing file: " + currentFile);
-                currentReader = new BufferedReader(new FileReader(currentFile));
-                setCurrentReader(currentReader);
-            }
-            String logText = "";
-            while ((logText = currentReader.readLine()) != null) {
-                Matcher match = antTargetPattern.matcher(logText); 
-                if (match.matches()) {
-                    if (currentComponent != null && !entryCreated) {
-                        addEntry("DEFAULT", currentComponent, currentFile.toString(), 
-                                0, "" );
-                        entryCreated = true;
-                        return true;
-                    }
-                    entryCreated = false;
-                    currentComponent = match.group(1);
-                }
-                logText = logText.replaceFirst("^[ ]*\\[.+?\\][ ]*", "");
-                String severity = getSeverity(logText);
-                if (severity != null) {
-                    entryCreated = true;
-                    // If there is no current component which means
-                    // it is a redirected output, using file name as comp name
-                    if (currentComponent == null ) {
-                        currentComponent = currentFile.getName();
-                    }
-                    addEntry(severity, currentComponent, currentFile.toString(), 
-                            lineNumber, logText );
-                    logText = "";
-                    return true;
-                }
-            }
-            currentReader.close();
-            currentReader = null;
-            setCurrentReader(currentReader);
-            if (isAdditionalEntry()) {
-                return true;
-            }
-        } catch (FileNotFoundException ex) {
-            log.debug("FileNotFoundException in AntLogMetadata", 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;
-            }
-        } catch (IOException ex) {
-            log.debug("IOException in AntLogMetadata", 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;
-            }
-        }
-        if (!exceptions.equals("")) {
-            throw new BuildException(exceptions);
-        }
-        return false;
+    @Override
+    protected EntityManager getEntityManager() {
+        return entityManager;
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/IMakerLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/IMakerLogMetaDataInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,13 +17,29 @@
 
 package com.nokia.helium.metadata.ant.types;
 
-import java.io.*;
-import org.apache.tools.ant.BuildException;
-import java.util.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
-import org.apache.log4j.Logger;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.apache.tools.ant.Project;
+
+import com.nokia.helium.metadata.MetadataException;
+import com.nokia.helium.metadata.model.metadata.Component;
+import com.nokia.helium.metadata.model.metadata.LogFile;
+import com.nokia.helium.metadata.model.metadata.MetadataEntry;
+import com.nokia.helium.metadata.model.metadata.Severity;
+import com.nokia.helium.metadata.model.metadata.SeverityDAO;
+
 
 /**
  * This Type is to specify and use the abld logparser type to parse and store
@@ -44,172 +60,87 @@
  * 
  * @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 class IMakerLogMetaDataInput extends AbstractComponentBaseMetadataInput {
+    public static final String DEFAULT_COMPONENT_NAME = "General";
+    private Pattern iMakerFpsxPattern = Pattern.compile("/([^/]*?\\.fpsx)");
+    private EntityManager entityManager;
 
-        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;
-        }
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void extract(EntityManagerFactory factory, File file)
+        throws MetadataException {
+        entityManager = factory.createEntityManager();
+        List<MetadataEntry> entries = new ArrayList<MetadataEntry>();
+        String currentComponent = null;
+        try {
+            // Creating the filename
+            LogFile logFile = getLogFile(entityManager, file);
 
-        public int getLineNumber() {
-            return lineNumber;
-        }
-
-        public String getFileName() {
-            return fileName;
-        }
-
-        public String getSeverity() {
-            return severity;
+            // Loading the available priorities
+            SeverityDAO severityDao = new SeverityDAO();
+            severityDao.setEntityManager(entityManager);
+            Map<String, Severity> priorities = severityDao.getSeverities();
+            
+            // Parsing the log file
+            BufferedReader reader = new BufferedReader(new FileReader(file));
+            String line = null;
+            int lineNumber = 0;
+            while ((line = reader.readLine()) != null) {
+                lineNumber++;
+                Matcher matcher = iMakerFpsxPattern.matcher(line);
+                if (matcher.find()) {
+                    currentComponent = matcher.group(1);
+                    log("Matched component: " + currentComponent, Project.MSG_DEBUG);
+                }
+                if (line.startsWith("++ Started at")) {
+                    currentComponent = null;
+                } else if (line.startsWith("++ Finished at")) {
+                    if (currentComponent == null) {
+                        currentComponent = DEFAULT_COMPONENT_NAME;
+                    }
+                    Component component = getComponent(currentComponent, logFile);
+                    entityManager.getTransaction().begin();
+                    for (MetadataEntry entry : entries) {
+                        entry.setComponent(component);
+                        entityManager.persist(entry);
+                    }
+                    entityManager.getTransaction().commit();
+                    entityManager.clear();
+                    entries.clear();
+                } else {
+                    SeverityEnum.Severity severity = getSeverity(line);
+                    if (severity != SeverityEnum.Severity.NONE) {
+                        MetadataEntry entry = new MetadataEntry();
+                        entry.setLogFile(logFile);
+                        entry.setLineNumber(lineNumber);
+                        entry.setSeverity(priorities.get(severity.toString()));
+                        entry.setText(line);
+                        entries.add(entry);
+                    }
+                }
+            }
+            reader.close();
+        } catch (FileNotFoundException ex) {
+            throw new MetadataException(ex.getMessage(), ex);
+        } catch (IOException ex) {
+            throw new MetadataException(ex.getMessage(), ex);
+        } finally {
+            if (entityManager != null) {
+                entityManager.close();
+            }
+            clear();
         }
-
-    }
-
-    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.
+     * {@inheritDoc}
      */
-    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);
-                        }
-                    }
+    @Override
+    protected EntityManager getEntityManager() {
+        return entityManager;
+    }
 
-                    // 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	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/LogMetaDataInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,54 +17,43 @@
 
 package com.nokia.helium.metadata.ant.types;
 
-import com.nokia.helium.metadata.MetaDataInput;
-
-import org.apache.tools.ant.BuildException;
-import com.nokia.helium.jpa.entity.metadata.Metadata;
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
-import java.util.Vector;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Hashtable;
 import java.util.regex.Pattern;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.log4j.Logger;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
 import org.apache.tools.ant.types.DataType;
-import java.io.IOException;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.ResourceCollection;
+
+import com.nokia.helium.metadata.MetaDataInput;
+import com.nokia.helium.metadata.MetadataException;
+import com.nokia.helium.metadata.model.metadata.LogFile;
+import com.nokia.helium.metadata.model.metadata.LogFileDAO;
 
 /**
  * Abstract base class to provide common functionality for the log parsing.
  */
-public abstract class LogMetaDataInput extends DataType implements
-    MetaDataInput {
-
-    private static Logger log = Logger.getLogger(LogMetaDataInput.class);
-    
-    private Vector<FileSet> fileSetList = new Vector<FileSet>();
-
-    private int currentFileIndex;
+public abstract class LogMetaDataInput extends DataType implements MetaDataInput {
     
-    private boolean entryAddedForLog;
-
-    private List<File> fileList;
-    private Vector<MetaDataFilterSet> metadataFilterSets = new Vector<MetaDataFilterSet>();
-    private Vector<MetaDataFilter> completeFilterList;
-
-    private Iterator<Metadata.LogEntry> metadataInputIterator = new MetaDataInputIterator();
-
-    private List<Metadata.LogEntry> logEntries = new ArrayList<Metadata.LogEntry>();
-    
+    private List<ResourceCollection> resourceCollections = new ArrayList<ResourceCollection>();
+    private Task task;
+    private List<MetaDataFilterSet> metadataFilterSets = new ArrayList<MetaDataFilterSet>();
+    private List<MetaDataFilter> completeFilterList;
     
     /**
      * 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);
+    public void add(ResourceCollection resourceCollection) {
+        resourceCollections.add(resourceCollection);
     }   
     
     /**
@@ -89,104 +78,14 @@
      * Helper function to return all the filters associated with this metadata input
      * @return all the filters merged based on the order of definition.
      */
-    private Vector<MetaDataFilter> getCompleteFilters() {
-        Vector<MetaDataFilter> allFilter = new Vector<MetaDataFilter>();
-        for (MetaDataFilterSet filterSet : metadataFilterSets) {
-            allFilter.addAll(filterSet.getAllFilters());
-        }
-        return allFilter;
-    }
-
-    /**
-     * Updates the list of filelist from the input fileset.
-     *  @param fileSetList input fileset list
-     *  @return the matched files including the base dir. 
-     */
-    private List<File> getFileListFromFileSet() {
-        fileList = new ArrayList<File>();
-        for (FileSet fs : fileSetList) {
-            DirectoryScanner ds = fs.getDirectoryScanner(getProject());
-            String[] includedFiles = ds.getIncludedFiles();
-            for ( String file : includedFiles ) {
-                fileList.add(new File(ds.getBasedir(), file));
-                log.debug("includedfiles: " + file);
+    private synchronized List<MetaDataFilter> getMetaDataFilters() {
+        if (completeFilterList == null) {
+            completeFilterList = new ArrayList<MetaDataFilter>();
+            for (MetaDataFilterSet filterSet : metadataFilterSets) {
+                completeFilterList.addAll(filterSet.getAllFilters());
             }
         }
-        log.debug("fileList.size" + fileList.size());
-        return fileList;
-    }
-
-    /**
-     * Internal function to get the entry
-     * @return the top most entry in the list.
-     */
-    private Metadata.LogEntry getEntry() throws IOException {
-        if (logEntries != null && logEntries.size() > 0) {
-            return logEntries.remove(0);
-        } else {
-            throw new IOException("No entries found");
-        }
-    }
-
-    /**
-     * Helper function to return the file list of the metadata input
-     * @return file list of this metadata input.
-     */
-    protected List<File> getFileList() {
-        return fileList;
-    }
-
-    protected File getCurrentFile() {
-        List<File> fileList = getFileList();
-        return fileList.get(currentFileIndex); 
-    }
-
-    /**
-     * Function to check from the input stream if is there any entries available. Implemented by the sub classes.
-     * @return true if there are any entry available otherwise false.
-     */
-    
-    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;
-            }
-            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;
-    }
-
-    /**
-     * Function to check from the input stream if is there any entries available.
-     * @param file for which the contents needs to be parsed for errors
-     * @return true if there are any entry available otherwise false.
-     */
-    abstract boolean isEntryCreated(File currentFile);
-
-    /**
-     * Function to check if is there any additional entry. This is being used for example during streaming
-     * recorded and at the end of streaming use the recorded data to add any additional entry. Used by
-     * @return true if there are any additional entries which are to be recorded in the database.
-     */
-    protected boolean isAdditionalEntry() {
-        return false;
+        return completeFilterList;
     }
 
     /**
@@ -194,177 +93,107 @@
      * @param log text for which the severity needs to be identified.
      * @return the severity of the input text
      */
-    protected String getSeverity(String logText) {
-        if (completeFilterList == null) {
-            completeFilterList = getCompleteFilters();
-        }
-        for ( MetaDataFilter filter : completeFilterList) {
+    protected SeverityEnum.Severity getSeverity(String logText) {
+        for (MetaDataFilter filter : getMetaDataFilters()) {
             Pattern pattern = filter.getPattern();
             if ((pattern.matcher(logText)).matches()) {
-                return filter.getPriority();
+                return filter.getSeverity();
             }
         }
-        return null;
-    }
-
-
-    /**
-     * Helper function to store the entry which will be added to the database
-     * @param priority for the entry
-     * @param component of the entry
-     * @param logpath of the entry
-     * @param lineNo of the entry
-     * @param log text message of the entry
-     */
-    protected void addEntry(String priority, String component, String logPath, int lineNo, 
-            String logText) {
-        addEntry(priority, component, logPath, lineNo, logText, -1, null);
-    }
-    
-
-    /**
-     * Helper function to store the entry which will be added to the database
-     * @param priority for the entry
-     * @param component of the entry
-     * @param logpath of the entry
-     * @param lineNo of the entry
-     * @param log text message of the entry
-     * @param elapsedTime of the component
-     */
-    protected void addEntry(String priority, String component, String logPath, int lineNo, 
-            String logText, float elapsedTime, Metadata.WhatEntry whatEntry) {
-        //log.debug("adding entry to the list");
-        File logPathFile = new File(logPath.trim());
-        String baseDir = logPathFile.getParent();
-        //Note: Always the query should be in "/" format only, compatible for both linux / windows
-        String uniqueLogPath = baseDir + "/" +  logPathFile.getName();
-        Metadata.LogEntry entry = new Metadata.LogEntry(
-                logText, priority, 
-                component, uniqueLogPath, lineNo, elapsedTime, whatEntry);
-        logEntries.add(entry);
-    }
-    
-    /**
-     * Looks for the text which matches the filter regular expression and adds the entries to the database.
-     * @param logTextInfo text message to be searched with filter regular expressions
-     * @param priority for the entry
-     * @param currentComponent of the logtextInfo
-     * @param logpath fo;e fpr wjocj tje text info has to be looked for with filter expression
-     * @param lineNumber of the text message
-     */
-    protected boolean findAndAddEntries(String logTextInfo, String currentComponent, 
-            String logPath, int lineNumber) {
-        return findAndAddEntries(logTextInfo, currentComponent, logPath, lineNumber, null);
+        return SeverityEnum.Severity.NONE;
     }
 
     /**
-     * Looks for the text which matches the filter regular expression and adds the entries to the database.
-     * @param logTextInfo text message to be searched with filter regular expressions
-     * @param priority for the entry
-     * @param currentComponent of the logtextInfo
-     * @param logpath fo;e fpr wjocj tje text info has to be looked for with filter expression
-     * @param lineNumber of the text message
-     * @param stat object to capture statistics about the parsing.
+     * Logging through the Ant task
      */
-    protected boolean findAndAddEntries(String logTextInfo, String currentComponent, 
-            String logPath, int lineNumber, Statistics stat) {
-        boolean entryAdded = false; 
-        String[] logText = logTextInfo.split("\n");
-        String severity = null;
-        for (int i = 0; i < logText.length; i++) {
-            severity = getSeverity(logText[i]);
-            if (severity != null) {
-                addEntry(severity, currentComponent, logPath, 
-                        i + lineNumber, logText[i]);
-                if (stat != null) {
-                    stat.incrementSeverity(severity);
-                }
-                entryAdded = true;
-            }
-        }
-        return entryAdded;
+    public void log(String message) {
+        log(message, Project.MSG_INFO);    
     }
     
     /**
-     * Log text are processed based on iterator. When ever the entry is found the entry is returned
-     * and the function is called again for further entries.
-     * @return the iterator object for the metadata input.
+     * Logging through the Ant task
      */
-    public Iterator<Metadata.LogEntry> iterator() {
-        return metadataInputIterator;
+    public void log(String message, int level) {
+        if (task != null) {
+            task.log(message, level);
+        } else {
+            getProject().log(message, level);
+        }
     }
-
     /**
-     * Class to process the files as stream and add the entries todb
+     * Get the LogFile instance for the file log.
+     * @param entityManager the entityManager to do the query.
+     * @param file the log file locations
+     * @return the LogFile entry for the file log. 
      */
-    public class MetaDataInputIterator implements Iterator<Metadata.LogEntry> {
-        public boolean hasNext() {
-            if (fileList == null) {
-                fileList = getFileListFromFileSet();
-                if (fileList.isEmpty()) {
-                    throw new BuildException(" No input found.");
+    protected LogFile getLogFile(EntityManager entityManager, File file) {
+        // Creating the filename
+        LogFileDAO lfdao = new LogFileDAO();
+        lfdao.setEntityManager(entityManager);
+        LogFile logFile = lfdao.findByLogName(file);
+        if (logFile == null) {
+            log("Creating a logfile entry.", Project.MSG_DEBUG);
+            logFile = new LogFile();
+            logFile.setPath(file.getAbsolutePath());
+            entityManager.getTransaction().begin();
+            entityManager.persist(logFile);
+            entityManager.getTransaction().commit();
+        }
+        return logFile;
+    }
+    
+    /**
+     * {@inheritDoc}
+     * Implements default behavior, for each log file the reference inside
+     * the database will first be removed, and then data will be collected. 
+     */
+    @SuppressWarnings("unchecked")
+    public void extract(Task task, EntityManagerFactory factory)
+        throws MetadataException {
+        this.task = task;
+        try {
+            for (ResourceCollection resourceCollection : resourceCollections) {
+                Iterator<Resource> ri = (Iterator<Resource>)resourceCollection.iterator();
+                while (ri.hasNext()) {
+                    File file = new File(ri.next().toString());
+                    remove(factory, file);
+                    log("Extracting data from " + file);
+                    extract(factory, file);
                 }
             }
-            if (logEntries.size() > 0) {
-                return true;
-            }
-            boolean retValue = false;
-            retValue = isEntryAvailable();
-            return retValue;
-        }
-
-        /**
-         * Helper function to remove  entries if any
-         */
-        public void remove() {
-        }
-        
-
-        /**
-         * Gets the next entry, which has been identified
-         * @return log entry to be added to the database.
-         */
-        public Metadata.LogEntry next() {
-            Metadata.LogEntry entry = null;
-            try {
-                entry = getEntry();
-            } catch (IOException ex) {
-                log.debug("Exception while getting entry: No entry available", ex);
-            }
-            return entry;
+        } finally {
+            this.task = null;
         }
     }
     
     /**
-     * This class capture statistics about the number of severity counted when 
-     * parsing, the log.
+     * Removing a file log data from the database (if any).
+     * @param factory
+     * @param file
+     * @throws MetadataException
      */
-    public class Statistics {
-        private Map<String, Integer> statistics = new Hashtable<String, Integer>();
-        
-        /**
-         * Increment the severity counter by 1.
-         */
-        public void incrementSeverity(String severity) {
-            severity = severity.toLowerCase();
-            if (statistics.get(severity) == null) {
-                statistics.put(severity, new Integer(1));
-            } else {
-                statistics.put(severity, new Integer(statistics.get(severity).intValue() + 1));
+    public void remove(EntityManagerFactory factory, File file) throws MetadataException {
+        EntityManager entityManager = factory.createEntityManager();
+        try {
+            LogFileDAO logFileDAO = new LogFileDAO();
+            logFileDAO.setEntityManager(entityManager);
+            LogFile logFile = logFileDAO.findByLogName(file);
+            if (logFile != null) {
+                log("Removing log from database: " + file.getAbsolutePath());
+                entityManager.getTransaction().begin();
+                logFileDAO.remove(logFile);
+                entityManager.getTransaction().commit();
             }
-        }
-        
-        /**
-         * Get the severity counter.
-         * @return the number of message with the mentioned severity.
-         */
-        public int getSeveriry(String severity) {
-            severity = severity.toLowerCase();
-            if (statistics.get(severity) == null) {
-                return 0;
-            } else {
-                return statistics.get(severity).intValue();
-            }
+        } finally {
+            entityManager.close();
         }
     }
+    
+    /**
+     * Extracting the data from 
+     * @param factory
+     * @param file
+     * @throws MetadataException
+     */
+    public abstract void extract(EntityManagerFactory factory, File file) throws MetadataException;
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/MetaDataFilter.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/MetaDataFilter.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,58 +18,71 @@
  
 package com.nokia.helium.metadata.ant.types;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.DataType;
-import org.apache.log4j.Logger;
-import java.util.regex.Pattern;
 
 
 /**
  * This class provides filter input to the metadata task.
  * <pre>
- * &lt;metadatafilter priority=&quot;error&quot; regex=&quot;&quot; description=&quot;&quot; /&gt;
+ * &lt;metadatafilter severity=&quot;error&quot; regex=&quot;&quot; description=&quot;&quot; /&gt;
  * </pre>
  * @ant.task name="metadatafilter" category="Metadata"
  */
-public class MetaDataFilter extends DataType
-{
+public class MetaDataFilter extends DataType implements MetaDataFilterCollection {
 
-    private Logger log = Logger.getLogger(MetaDataFilter.class);
-
-    private String priority;
+    private SeverityEnum.Severity severity;
     private String regex;
     private String description;
     private Pattern pattern;
     
 
     /**
-     * Helper function called by ant to set the priority type
-     * @param priority type of priority for this input.
+     * Defines what is the severity level for this pattern
+     * @param severity type of severity for this input.
      */
-    public void setPriority(String prty) throws Exception {
-        if (prty == null || prty.trim().length() == 0) {
-            throw new Exception(" Invalid Priority");
-        }
-        priority = prty;
+    @Deprecated
+    public void setPriority(SeverityEnum severity) {
+        setSeverity(severity);
     }
 
     /**
-     * Helper function to return the priority type
-     * @return priority type
+     * Defines what is the severity level for this pattern
+     * @param severity type of severity for this input.
      */
-    public String getPriority() {
-        return priority;
+    public void setSeverity(SeverityEnum severity) {
+        this.severity = severity.getSeverity();
+    }
+
+    /**
+     * Helper function to return the severity type
+     * @return severity type
+     * @ant.required
+     */
+    public SeverityEnum.Severity getSeverity() {
+        return severity;
     }
 
     /**
      * Helper function called by ant to set the regex
      * @param regx regular expression of the filter
+     * @ant.required
      */
-    public void setRegex(String regx) throws Exception {
-        if (regx == null || regx.trim().length() == 0) {
-            throw new Exception(" Invalid Regular expression");
+    public void setRegex(String regex) {
+        if (regex == null || regex.trim().length() == 0) {
+            throw new BuildException("Invalid Regular expression: the regex attribute cannot be an empty string.");
         }
-        regex = regx;
-        createPattern(regx);
+        this.regex = regex;
+        try {
+            pattern = Pattern.compile(this.regex);
+        } catch (PatternSyntaxException ex) {
+            throw new BuildException("Invalid regular expression: " + ex.getMessage(), ex);
+        }
     }
 
     /**
@@ -83,6 +96,7 @@
     /**
      * Helper function called by ant to set the description type
      * @param desc description associated with filter.
+     * @ant.required
      */
     public void setDescription(String desc) {
         description = desc;
@@ -97,20 +111,25 @@
     }
     
     /**
-     * Internal function to create the pattern
-     * @regex for which the pattern is created.
-     */
-    private void createPattern(String regex) {
-        pattern = Pattern.compile(regex);
-    }
-    
-    /**
      * Helper function to return the pattern
      * @return the pattern of this filter.
      */
     public Pattern getPattern() {
         return pattern;
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Collection<MetaDataFilter> getAllFilters() {
+        Collection<MetaDataFilter> result = new ArrayList<MetaDataFilter>();
+        if (this.isReference()) {
+            result.add((MetaDataFilter)this.getRefid().getReferencedObject());  
+        } else {
+            result.add(this);
+        }
+        return result;
+    }
 }
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/MetaDataFilterCollection.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,33 @@
+/*
+* 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.util.Collection;
+
+/**
+ * This interface describe what a Metadata filter
+ * Collection must implements as interface.
+ *
+ */
+public interface MetaDataFilterCollection {
+    
+    /**
+     * Get the nested filters.
+     * @return a Collection of metadatafilters objects.
+     */
+    Collection<MetaDataFilter> getAllFilters();
+}
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/MetaDataFilterSet.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/MetaDataFilterSet.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,14 +18,19 @@
  
 package com.nokia.helium.metadata.ant.types;
 
-import java.io.*;
-import java.util.*;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.types.DataType;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.util.Collection;
+import java.util.Vector;
+
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
-import org.apache.log4j.Logger;
+import org.apache.tools.ant.types.DataType;
+
 import fmpp.models.CsvSequence;
+import fmpp.util.StringUtil.ParseException;
+import freemarker.template.TemplateModelException;
 import freemarker.template.TemplateSequenceModel;
 
 
@@ -37,8 +42,8 @@
  * 
  * Example 2:
  * &lt;metadatafilterset id=&quot;common&quot;/&gt;
- *   &lt;metadatafilter priority=&quot;error&quot; regex=&quot;^make(?:\[\d+\])?:\s+.*\s+not\s+remade&quot; description=&quot;make error&quot; />
- *   &lt;metadatafilter priority=&quot;error&quot;regex=&quot;&quot; description=&quot;&quot; /&gt; 
+ *   &lt;metadatafilter severity=&quot;error&quot; regex=&quot;^make(?:\[\d+\])?:\s+.*\s+not\s+remade&quot; description=&quot;make error&quot; />
+ *   &lt;metadatafilter severity=&quot;error&quot;regex=&quot;&quot; description=&quot;&quot; /&gt; 
  * &lt;metadatafilterset/&gt;
  *
  * Example 3:
@@ -46,30 +51,24 @@
  * </pre>
  * @ant.task name="metadatafilterset" category="Metadata"
  */
-public class MetaDataFilterSet extends DataType
-{
-    private Vector<MetaDataFilter> filters = new Vector<MetaDataFilter>();
+public class MetaDataFilterSet extends DataType implements MetaDataFilterCollection {
+    private Vector<MetaDataFilterCollection> filterCollections = new Vector<MetaDataFilterCollection>();
+    private File filterFile;
+    private boolean initialized;
     
-    private Vector<MetaDataFilterSet> filterSets = new Vector<MetaDataFilterSet>();
-    
-    private String filterFile;
-    
-    private Logger log = Logger.getLogger(MetaDataFilterSet.class);
-
     /**
      * Helper function called by ant to set the FilterFile
      * @param FilterFile the csv file used by the filterset
      */
-    public void setFilterFile(String file) throws Exception {
+    public void setFilterFile(File file) throws Exception {
         filterFile = file;
-        addCSVFromFile(file);
     }
 
     /**
      * Helper function called to get FilterFile.
      * @return filterfile used by this filterset
      */
-    public String getFilterFile() {
+    public File getFilterFile() {
         return filterFile;
     }
 
@@ -80,50 +79,57 @@
      * the precedence is maintained.
      * @return All filters
      */
-    public Vector<MetaDataFilter> getAllFilters() {
-        Vector<MetaDataFilter> allFilters = new Vector<MetaDataFilter>();
-        //First look for filters associated with this set.
-        if (filters.size() > 0) {
-            allFilters.addAll(filters);
+    public Collection<MetaDataFilter> getAllFilters() {
+        // Shall we treat current object as a reference?
+        if (this.isReference()) {
+            if (filterFile != null) {
+                throw new BuildException("You cannot use the 'filterFile' in reference object.");
+            }
+            if (!filterCollections.isEmpty()) {
+                throw new BuildException("You cannot have nested filters when using a reference object.");
+            }
+            Object filterSetObject = this.getRefid().getReferencedObject();
+            if (filterSetObject != null && filterSetObject instanceof MetaDataFilterCollection) {
+                Collection<MetaDataFilter> allFilters = ((MetaDataFilterCollection)filterSetObject).getAllFilters();
+                checkInvalidFilters(allFilters);
+                return allFilters;                
+            } else {
+                throw new BuildException("Filterset object is not instance of MetaDataFilterCollection");
+            }
+        } else {
+            if (!initialized) {
+                if (filterFile != null) {
+                    addDataFromCSVFile();
+                }
+                initialized = true;
+            }
+            Collection<MetaDataFilter> allFilters = new Vector<MetaDataFilter>();
+            // Add any nested filterCollection
+            for (MetaDataFilterCollection filterCollection : filterCollections) {
+                allFilters.addAll(filterCollection.getAllFilters());
+            }
+            checkInvalidFilters(allFilters);
             return allFilters;
         }
-        // Then filters as reference in filterset
-        Reference refId = getRefid();
-        Object filterSetObject = null;
-        if (refId != null) {
-            filterSetObject = refId.getReferencedObject();
-           if (filterSetObject != null && filterSetObject instanceof MetaDataFilterSet) {
-                allFilters.addAll(((MetaDataFilterSet)filterSetObject).getAllFilters());
-                return allFilters;
-            }
-            log.debug("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) {
-            allFilters.addAll(filterSet.getAllFilters());
-        }
-        
-        return removeInvalidFilters(allFilters);
     }
 
     /**
      * Helper function called to remove any invalid filters
      * @return only the valid filters
      */
-    private Vector<MetaDataFilter> removeInvalidFilters(Vector<MetaDataFilter> filterList) {
-        ListIterator<MetaDataFilter> iter = filterList.listIterator();
-        while (iter.hasNext()) {
-            MetaDataFilter filter = iter.next();
-            String priority = filter.getPriority();
+    private void checkInvalidFilters(Collection<MetaDataFilter> filterList) {
+        int count = 0;
+        for (MetaDataFilter filter : filterList) {
+            SeverityEnum.Severity severity = filter.getSeverity();
             String regEx = filter.getRegex();
-            if (priority == null || regEx == null) {
-                log("Warning: some filter is invalid removing it", Project.MSG_WARN);
-                iter.remove();
+            if (severity == null || regEx == null) {                
+                log("Invalid filter found at " + filter.getLocation().toString(), Project.MSG_ERR);
+                count++;
             }
         }
-        return filterList;
-        
+        if (count > 0) {
+            throw new BuildException("Invalid filter have been found. Please check your configuration.");
+        }
     }
     
     /**
@@ -135,19 +141,6 @@
         return filter;
     }
 
-    /**
-     * Helper function to add the created filter
-     * @param filter to be added to the filterset
-     */
-    public void add(MetaDataFilter filter) {
-        MetaDataFilterSet filterSet = createMetaDataFilterSet();
-        filterSet.getFilterList().add(filter);
-    }
-
-     Vector<MetaDataFilter> getFilterList() {
-         return filters;
-     }
-
      /**
      * Helper function called by ant to create the new filter
      */
@@ -161,9 +154,9 @@
      * Helper function to add the created filter
      * @param filter to be added to the filterset
      */
-    public void add(MetaDataFilterSet filterSet) {
-        if (filterSet != null) {
-            filterSets.add(filterSet);
+    public void add(MetaDataFilterCollection filterCollection) {
+        if (filterCollection != null) {
+            filterCollections.add(filterCollection);
         }
     }
 
@@ -171,38 +164,35 @@
      * Helper function to add the filters from the csv files
      * @param csv file path from which the filters needs to be added.
      */
-    private void addCSVFromFile(String csvPath) throws Exception {
+    private void addDataFromCSVFile() {
         CsvSequence csvs = new CsvSequence();
         csvs.setSeparator(',');
-        log.debug("filter file: " + filterFile);
         try {
-            csvs.load(new FileReader(new File(filterFile)));
-        } catch (java.io.FileNotFoundException fex) {
-            log.debug("Metadata CSV file not found:", fex);
-            throw fex;
-        } catch (fmpp.util.StringUtil.ParseException pex) {
-            log.debug("FMPP not able parse the Metadata CSV file. ", pex);
-            throw pex;
+            csvs.load(new FileReader(filterFile));
+            int size = 0;
+            size = csvs.size();
+            for (int i = 0; i < size; i++) {
+                TemplateSequenceModel model = (TemplateSequenceModel)csvs.get(i);
+                int modelSize = model.size();
+                if (modelSize != 3 ) {
+                    throw new BuildException("Metadata CSV file filter file format is invalid. It model must have 3 column, it currently has " + size);
+                }
+                MetaDataFilter filter = new MetaDataFilter();
+                SeverityEnum severity = new SeverityEnum();
+                severity.setValue(model.get(0).toString());
+                filter.setSeverity(severity);
+                filter.setRegex(model.get(1).toString());
+                filter.setDescription(model.get(2).toString());
+                filterCollections.add(filter);
+            }
+        } catch (FileNotFoundException fex) {
+            throw new BuildException(fex.getMessage(), fex);
+        } catch (ParseException pex) {
+            throw new BuildException(pex.getMessage(), pex);
         } catch (java.io.IOException iex) {
-            log.debug("Metadata I/O Exception. " + iex.getMessage(), iex);
-            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);
+            throw new BuildException(iex.getMessage(), iex);
+        } catch (TemplateModelException e) {
+            throw new BuildException(e.getMessage(), e);
         }
     }
 }
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/PolicyLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/PolicyLogMetaDataInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,11 +17,29 @@
 
 package com.nokia.helium.metadata.ant.types;
 
-import java.util.*;
-import org.apache.log4j.Logger;
-import javax.xml.stream.XMLStreamReader;
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
 import java.util.regex.Pattern;
 
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import com.nokia.helium.metadata.AutoCommitEntityManager;
+import com.nokia.helium.metadata.MetadataException;
+import com.nokia.helium.metadata.model.metadata.LogFile;
+import com.nokia.helium.metadata.model.metadata.MetadataEntry;
+import com.nokia.helium.metadata.model.metadata.Severity;
+import com.nokia.helium.metadata.model.metadata.SeverityDAO;
+
 
 /**
  * This Type is to specify and use the policy logparsertype to 
@@ -40,93 +58,102 @@
  * </pre>
  * @ant.task name="policymetadatainput" category="Metadata"
  */
-public class PolicyLogMetaDataInput extends XMLLogMetaDataInput {
-
-    private Logger log = Logger.getLogger(XMLLogMetaDataInput.class);
-    
-    private Map<String, String> currentAttributeMap;
+public class PolicyLogMetaDataInput extends LogMetaDataInput {
     
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void extract(EntityManagerFactory factory, File file)
+        throws MetadataException {
+        SAXParserFactory saxFactory = SAXParserFactory.newInstance();
+        EntityManager em = factory.createEntityManager();
+        AutoCommitEntityManager autoCommitEM = new AutoCommitEntityManager(factory);
+        try {
+            // get the severities
+            SeverityDAO pdao = new SeverityDAO();
+            pdao.setEntityManager(em);
+            Map<String, Severity> severities = pdao.getSeverities();
 
-    /**
-     * Constructor
-     */
-    public PolicyLogMetaDataInput() {
+            // Get the log file
+            LogFile logFile = getLogFile(em, file);
+
+            SAXParser parser = saxFactory.newSAXParser();
+            parser.parse(file, new PolicyFileParser(
+                    severities.get(SeverityEnum.Severity.ERROR.toString()),
+                    autoCommitEM, logFile));
+        } catch (SAXException e) {
+            throw new MetadataException(e.getMessage(), e);
+        } catch (IOException e) {
+            throw new MetadataException(e.getMessage(), e);
+        } catch (ParserConfigurationException e) {
+            throw new MetadataException(e.getMessage(), e);
+        } finally {
+            em.close();
+            autoCommitEM.close();
+        }
     }
     
-
     /**
-     * Helper function to return the attributes of the stream reader
-     * @returns the attributes as a map.
+     * SAX handler for Policy XML file format.
+     *
      */
-    private Map<String, String> getAttributes(XMLStreamReader streamReader) {
-        int count = streamReader.getAttributeCount() ;
-        if (count > 0 ) {
-            Map<String, String> attributesMap = new HashMap<String, String>();
-            for (int i = 0 ; i < count ; i++) {
-                attributesMap.put(streamReader.getAttributeLocalName(i), 
-                        streamReader.getAttributeValue(i));
-            }
-            return attributesMap;
+    class PolicyFileParser extends DefaultHandler {
+        private LogFile logFile;
+        private Severity severity;
+        private AutoCommitEntityManager autoCommitEM;
+        private Locator locator;
+        
+        /**
+         * Create a new PolicyFileParser.
+         * @param severity
+         * @param autoCommitEM
+         * @param logFile
+         */
+        public PolicyFileParser(Severity severity, AutoCommitEntityManager autoCommitEM, 
+                LogFile logFile) {
+            this.autoCommitEM = autoCommitEM;
+            this.logFile = logFile;
+            this.severity = severity;
         }
-        return null;
-    }
-
-   
-    /**
-     * Function to process the start event of xml stream callback.
-     * @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) {
-        String tagName = streamReader.getLocalName();
-        if (tagName.equalsIgnoreCase("error")) {
-            currentAttributeMap = getAttributes(streamReader);
-        }
-        return false;
-    }
 
-    /**
-     * Function to process the end event of xml stream callback.
-     * @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 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;
+        /**
+         * Implement the handling of error nodes.
+         */
+        @Override
+        public void startElement(String uri, String localName, String qName,
+                Attributes attributes) throws SAXException {
+            if (qName.equalsIgnoreCase("error")) {
+                String errorType = attributes.getValue("", "type");
+                MetadataEntry me = new MetadataEntry();
+                me.setLogFile(autoCommitEM.merge(logFile));
+                me.setLineNumber(locator.getLineNumber());
+                me.setSeverity(severity);
+                if (errorType.equals("unknownstatus")) {
+                    me.setText(attributes.getValue("", "message") + attributes.getValue("", "value"));
+                } 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);
+                    me.setText(pattern.matcher(errorType + "Found incorrect value for " 
+                            + attributes.getValue("", "message")).replaceAll(""));
+                } else if (errorType.equals("missing")) {
+                    me.setText(attributes.getValue("", "message"));
+                } else if (errorType.equals("invalidencoding")) {
+                    me.setText(attributes.getValue("", "message"));
+                }
+                autoCommitEM.persist(me);
             }
         }
-        return retValue;
+        
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public void setDocumentLocator(Locator locator) {
+            this.locator = locator;
+            super.setDocumentLocator(locator);
+        }
     }
     
-     /* Function to process the characters event of xml stream callback.
-     * @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) {
-        return false;
-    }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/SBSLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,784 +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.types;
-
-import java.io.*;
-import java.util.*;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import org.apache.log4j.Logger;
-import javax.xml.stream.XMLStreamReader;
-import com.nokia.helium.jpa.entity.metadata.Metadata;
-import com.nokia.helium.metadata.CustomMetaDataProvider;
-import com.nokia.helium.metadata.db.ORMMetadataDB;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.events.XMLEvent;
-import javax.xml.stream.FactoryConfigurationError;
-import javax.xml.stream.XMLStreamException;
-
-
-/**
- * This Type is to specify and use the sbs logparsertype to 
- * parse and store the data based on xmlstreamreader.
- * <pre>
- * &lt;hlm:metadatafilterset id="sbs.metadata.filter"&gt;
- *    &lt;metadatafilterset filterfile="common.csv" /&gt;
- * &lt;/hlm:metadatafilterset&gt;
- * 
- * &lt;hlm:sbsmetadatainput &gt
- *    &lt;fileset dir="${project.dir}/../data/"&gt;
- *        &lt;include name="*compile.log"/&gt;
- *    &lt;/fileset&gt;
- *    &lt;metadatafilterset refid="sbs.metadata.filter" /&gt;
- * &lt;/hlm:sbsmetadatainput&gt;
- * </pre>
- * @ant.task name="sbsmetadatainput" category="Metadata"
- */
-public class SBSLogMetaDataInput extends XMLLogMetaDataInput implements CustomMetaDataProvider {
-
-
-    private static final String DRIVE_LETTER_REGEX = "^(([a-zA-Z]):(\\\\|/))(.*)(/bld\\.inf)$";
-    
-    private static final String FAILED_STATUS_MESSAGE = "ERROR: recipe exit status is failed.";
-
-    private Logger logger = Logger.getLogger(SBSLogMetaDataInput.class);
-
-    private String currentComponent;
-    
-    private float currentElapsedTime;
-    
-    private String logTextInfo = "";
-    
-    private String recipeStatus = "ok";
-    
-    private HashMap<String, List <CategoryEntry>> generalTextEntries = new HashMap<String, List <CategoryEntry>>();
-    
-    private List<Metadata.WhatLogMember> members = new ArrayList<Metadata.WhatLogMember>();
-
-    private List<SpecialRegex> specialRegexPatternList = new ArrayList<SpecialRegex>();
-
-    private int lineNumber;
-    
-    private boolean inMainDataSection;
-    
-    private boolean inWhatLogSection;
-
-    private boolean recordText;
-    
-    private HashMap<String, TimeEntry> componentTimeMap = new HashMap<String, TimeEntry>();
-
-    private Pattern buildTimeMatcher = Pattern.compile("^Run time\\s+(\\d+)\\s+seconds$");
-    
-    private int buildTime;
-    
-    private File cleanLogFile;
-    
-    private boolean categorizationCompleted;
-
-    private CategorizationHandler categorizationHandler;
-    
-    /**
-     * Constructor
-     */
-    public SBSLogMetaDataInput() {
-        specialRegexPatternList.add(new SpecialRegex("(make.exe|make): \\*\\*\\* No rule to make target.*needed by `(.*)'.*", 2));
-        specialRegexPatternList.add(new SpecialRegex("(make.exe|make): \\*\\*\\* \\[(.*)\\].*", 2));
-    }
-    
-    
-    /**
-     * Removes the bld inf and the drive letter from the text
-     * @param text in which the bld.inf and drive letter to be removed
-     * @return updated string.
-     */
-    static String removeDriveAndBldInf(String text) {
-        // Some light linux support
-        if (File.separatorChar == '/' && text.endsWith("/bld.inf")) {
-            int start = 0;
            if (text.startsWith("/")) {
                start = 1;
-            }
-            return text.substring(start, text.length() - 8);
-        } else {
-            Matcher matcher = (Pattern.compile(DRIVE_LETTER_REGEX)).matcher(text);
-            if (matcher.matches()) {
-                return matcher.group(4);
-            }
-        }
-        return text;
-    }
-
-    /**
-     * Removes the bld inf and the drive letter from the text
-     * @param text in which the bld.inf and drive letter to be removed
-     * @return updated string.
-     */
-    static String getComponent(XMLStreamReader streamReader) {
-        String currentComponent = getAttribute("bldinf", streamReader);
-        if ( currentComponent != null && currentComponent.equals("")) {
-            return null;
-        }
-        if (currentComponent != null ) {
-            currentComponent = removeDriveAndBldInf(currentComponent);
-        }
-        return currentComponent;
-    }
-
-    /**
-     * Generic function to return the attribute value of an attribute from stream
-     * @param attribute for which the value from xml stream to be returned.
-     * @return the attribute value of an attribute.
-     */
-    static String getAttribute(String attribute, XMLStreamReader streamReader) {
-        int count = streamReader.getAttributeCount() ;
-        for (int i = 0 ; i < count ; i++) {
-            if ( streamReader.getAttributeLocalName(i).equals(attribute) ) {
-                return streamReader.getAttributeValue(i);
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Helper function to set the clean log file.
-     * @param logFile which is the clean log file to process for additional categories
-     * @deprecated
-     */
-    @Deprecated
-    public void setCleanLogFile(File logFile) {
-        log("The usage of the cleanLogFile is deprecated.");
-    }
-
-    /**
-     * Helper function to set the clean log file.
-     * @param logFile which is the what log file to process for missing
-     * components
-     * @deprecated
-     */
-    @Deprecated
-    public void setWhatLogFile(File logFile) {
-        log("The usage of the cleanLogFile is deprecated.");
-    }
-
-    /**
-     * Function to process the characters event of xml stream callback.
-     * @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.
-     */
-    public boolean characters (XMLStreamReader streamReader) {
-        HashMap<String, Integer> toProcess = new HashMap<String, Integer>(); 
-        if (recordText) {
-            logTextInfo += streamReader.getText();
-        } else {
-            if (inMainDataSection) {
-                String cdataText = streamReader.getText().trim();
-                String [] textList = cdataText.split("\n");
-                int i = 0;
-                for (String text : textList) {
-                    boolean added = false;
-                    if (text.trim().equals("")) {
-                        continue;
-                    }
-                    for (SpecialRegex specialRegex : specialRegexPatternList) {
-                        Matcher matcher = specialRegex.getRegexPattern().matcher(text); 
-                        int groupPosition = specialRegex.getGroupPosition();
-                        List <CategoryEntry> entryList  = null;
-                        if (matcher.matches()) {
-                            if (cleanLogFile == null) {
-                                cleanLogFile = new File(getCurrentFile().toString());
-                            }
-                            String componentName = matcher.group(groupPosition).toLowerCase();
-                            CategoryEntry newEntry = new CategoryEntry(text, componentName ,
-                                    "error", streamReader.getLocation().getLineNumber(), getCurrentFile().toString());
-                            entryList = generalTextEntries.get(componentName); 
-                            if (entryList == null) {
-                                entryList = new ArrayList<CategoryEntry>();
-                                generalTextEntries.put(componentName, entryList);
-                            }
-                            entryList.add(newEntry);
-                            added = true;
-                            break;
-                        }
-                    }
-                    if (!added) {
-                        toProcess.put(text.trim(), streamReader.getLocation().getLineNumber() + i);
-                    }
-                    i++;
-                }
-                boolean entryCreated = false;
-                //Check for any general errors.
-                for (String textString : toProcess.keySet()) {
-                    boolean created = findAndAddEntries(textString, "general",
-                        getCurrentFile().toString(), toProcess.get(textString));
-                    if (created && !entryCreated ) {
-                        entryCreated = true;
-                    }
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Function to process the start event of xml stream callback.
-     * @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.
-     */
-    public boolean startElement (XMLStreamReader streamReader) {
-        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);
-            }
-        } 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;
-        }
-        return false;
-    }
-
-    /**
-     * Checks whether is there any additional entry. During log parsing, all the text which are not part of any tag
-     * and are part of CDATA are recorded in a list and checked in this function for any matching errors and processed
-     * for their categorization.
-     * @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 (!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;
-                }
-            }
-            categorizationCompleted = true;
-        }
-        return false;
-    }
-
-    /**
-     * Function to process the end event of xml stream callback.
-     * @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.
-     */
-    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;
-            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 = "";
-        }
-        return false;
-    }
-
-
-    @Override
-    public void provide(ORMMetadataDB db, String logPath) {
-        logger.debug("!!!!!!!!!!!!!!!!!!Logpath: " + logPath);
-        db.addExecutionTime(logPath, buildTime);
-    }
-}
-
-class SpecialRegex {
-    private Pattern regexPattern;
-    private int groupPosition;
-
-    public SpecialRegex(String exp, int pos) {
-        regexPattern = Pattern.compile(exp);
-        groupPosition = pos;
-    }
-    
-    public Pattern getRegexPattern() {
-        return regexPattern;
-    }
-    
-    public int getGroupPosition() {
-        return groupPosition;
-    }
-}
-
-
-/* This class stores the temporary Time entry which is being recorded for each data
- * at the end of the build and during isAdditionalEntry function, the time for the component
- * is updated in the database.
- */
-class TimeEntry {
-    
-    private float elapsedTime;
-    private String filePath;
-    
-    /**
-     * Constructor to store the elapsedTime and the path which are to be updated to the database.
-     * @param elapsedTime: time duration of the component.
-     * @path of the component.
-     */
-    public TimeEntry(float time, String path) {
-        elapsedTime = time;
-        filePath = path;
-    }
-    
-
-    /**
-     * Helper function to add time to the previous elapsed time.
-     * @param time to be added to the elapsed timet.
-     */
-    public void addElapsedTime(float time) {
-        elapsedTime += time;
-    }
-    
-    /**
-     * Helper function to return the elapsed time
-     * @return elapsed time of this time entry.
-     */
-    public float getElapsedTime() {
-        return elapsedTime;
-    }
-
-    /**
-     * Helper function to return the file path of this entry
-     * @return path of this time entry.
-     */
-    public String getFilePath() {
-        return filePath;
-    }
-}
-/* This class stores the temporary category entry which is processed during
- * at the end of the build and categorized and written to the database.
- */
-class CategoryEntry {
-
-    private String text;
-    private int lineNumber;
-    private String fileName;
-    private String severity;
-    private String category;
-
-
-    /**
-     * Constructor of the category entry
-     * @param txt - text message of the entry
-     * @param ctgry - category of the entry
-     * @param svrty - severity of this entry
-     * @param lnNo - line number of this entry
-     * @param flName - name of the file being processed.
-     * @return path of this time entry.
-     */
-    public CategoryEntry(String txt, String ctgry, 
-            String svrty, int lnNo, String flName) {
-        text = txt;
-        lineNumber = lnNo;
-        fileName = flName;
-        severity = svrty;
-        category = "general";
-        if (ctgry != null) {
-            category = ctgry;
-        }
-    }
-    
-    /**
-     * Helper function to set the category
-     * @param set the category
-     */
-    void setCategory(String ctgry) {
-        category = ctgry;
-    }
-    
-    /**
-     * Helper function to return the category
-     * @return the category of this entry.
-     */
-    String getCategory() {
-        return category;
-    }
-
-    /**
-     * Returns the logfile of this entry
-     * @return logfile of this entry
-     */
-    String getLogFile() {
-        return fileName;
-    }
-
-    /**
-     * Helper function returns the severity of this entry
-     * @return severity of this entry
-     */
-    String getSeverity() {
-        return severity;
-    }
-
-    /**
-     * Helper function returns the line number of this entry
-     * @return the line number of this entry.
-     */
-    
-    int getLineNumber() {
-        return lineNumber;
-    }
-
-    /**
-     * Helper function returns the text message of this entry
-     * @return text message of this entry
-     */
-    String getText() {
-        return text;
-    }
-
-}
-/* This class handles the categorization of scanlog errors based on the clean log output
- * from raptor.
- */
- class CategorizationHandler {
-       
-    private String currentComponent;
-    private boolean isInFileTag;
-    
-    private HashMap<String, List <CategoryEntry>> categoryList;
-
-    private List<CategoryEntry> currentList;
-
-    private XMLInputFactory xmlInputFactory;
-
-    private XMLStreamReader xmlStreamReader;
-
-    private Logger log = Logger.getLogger(CategorizationHandler.class);
-
-    /**
-     * Constructor
-     * @param clean log file input using which the CDATA text are categorized
-     * @param list of entries to be categorized
-     */
-    public CategorizationHandler(File cleanLogFile, HashMap<String, List <CategoryEntry>> ctgMap) {
-        categoryList = ctgMap;
-        if (cleanLogFile != null ) {
-            try {
-                xmlInputFactory = XMLInputFactory.newInstance();
-                xmlStreamReader = xmlInputFactory.createXMLStreamReader(cleanLogFile.toString(), 
-                    new BufferedInputStream(new FileInputStream(cleanLogFile)));
-            } catch ( XMLStreamException ex) {
-                log.debug("exception while initializing stax processor",ex);
-            } catch (FactoryConfigurationError er) {
-                log.debug("exception while creating xmlinput factory",er);
-            } catch (java.io.FileNotFoundException iex) {
-                log.debug("clean log file not found:" + cleanLogFile,iex);
-            }
-        }
-    }
-
-    /**
-     * Checks whether is there any entry (by checking for categorization of the recorded CDATA text)
-     * @return true if there any entry that are being categorized.
-     */
-    public boolean hasNext() {
-        boolean generalEntriesStatus = categoryList != null && !categoryList.isEmpty();
-        boolean currentListStatus = currentList != null && ! currentList.isEmpty();
-        return generalEntriesStatus || currentListStatus;
-    }
-
-    /**
-     * Process the start element event of XML Stream from clean log.
-     * @param streamReader clean log xml stream reader to be processed
-     * @return true if there are any entry to be added.
-     */
-    
-    public boolean startElement(XMLStreamReader streamReader) {
-        String tagName = streamReader.getLocalName();
-        if (tagName.equals("clean")) {
-            currentComponent = getCategory(streamReader);
-            if (currentComponent != null) {
-                currentComponent = SBSLogMetaDataInput.removeDriveAndBldInf(currentComponent);
-            }
-        }
-        if (tagName.equals("file")) {
-            isInFileTag = true;
-        }
-        return false;
-    }
-
-    /**
-     * Process the end element event of XML Stream from clean log.
-     * @param streamReader clean log xml stream reader to be processed
-     * @return true if there are any entry to be added.
-     */
-    
-    public boolean endElement (XMLStreamReader streamReader) {
-        String tagName = streamReader.getLocalName();
-        if (tagName.equals("file")) {
-            isInFileTag = false;
-        }
-        return false;
-    }
-
-    /**
-     * Internal function to find bld inf from the component 
-     * @param streamReader clean log xml stream reader to be processed
-     * @return the bld.inf attribute.
-     */
-    private String getCategory(XMLStreamReader streamReader) {
-        int count = streamReader.getAttributeCount() ;
-        for (int i = 0 ; i < count ; i++) {
-            if ( streamReader.getAttributeLocalName(i).equals("bldinf") ) {
-                return streamReader.getAttributeValue(i);
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Internal function to find the CDATA text of the file attribute.
-     * @param streamReader clean log xml stream reader to be processed
-     * @return the CDATA text of <file> tag.
-     */
-    private String characters(XMLStreamReader xmlStreamReader) {
-        if (isInFileTag) {
-            return xmlStreamReader.getText().toLowerCase();
-        }
-        return null;
-    }
-
-    /**
-     * Gets the entry which matches the input path. For each line of <file> tag attribute, the entry list
-     * is compared with that and if there is any match, then it returns the entry from the list, which
-     * is being mtached.
-     * @param path for which matching entry is looked for.
-     * @return entry which matched the path from the clean log file.
-     */
-    private List<CategoryEntry> getEntry(String path) {
-        Set<String> categorySet = categoryList.keySet();
-        for (String key : categorySet) {
-        if (path.toLowerCase().equals(key)) {
-
-                List<CategoryEntry> entry = categoryList.get(key);
-                categoryList.remove(key);
-                return entry;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Internal function to update the category entries of the list.
-     * @param categoryList for which the category.
-     * @param category which is to be updated to the list.
-     */
-    private void updateCategoryEntries(List<CategoryEntry> categoryList, String category) {
-        for (CategoryEntry entry : categoryList) {
-            entry.setCategory(category);
-        }
-    }
-
-    /**
-     * Gets the next entry from the stream based on categorization.
-     * @return the category entry which is identified as categorized entry.
-     */
-    public CategoryEntry getNext() throws XMLStreamException {
-        try {
-            if (currentList != null && !currentList.isEmpty()) {
-                CategoryEntry entry = currentList.get(0);
-                currentList.remove(0);
-                return entry;
-            }
-            if (xmlStreamReader != null ) {
-                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;
-                                    }
-                                }
-                            }
-                            break;
-                        default:
-                            break;
-                    }
-                }
-                if (xmlStreamReader != null) {
-                    close();
-                }
-            }
-            Set<String> categorySet = categoryList.keySet();
-            for (String key : categorySet) {
-                currentList = categoryList.remove(key);
-                if (currentList != null && !currentList.isEmpty()) {
-                    updateCategoryEntries(currentList, "general");
-                    CategoryEntry entry = (CategoryEntry)currentList.remove(0);
-                    return entry;
-                }
-            }
-        } catch ( XMLStreamException ex) {
-            log.debug("exception in categorization",ex);
-            throw ex;
-        }
-        return null;
-    }
-    /**
-     * Internal function to close the clean log file stream
-     */
-    private void close() {
-        try {
-            if (xmlStreamReader != null) {
-                xmlStreamReader.close();
-                xmlStreamReader = null;
-            }
-        } catch (XMLStreamException ex) {
-            log.debug("exception while closing xml stream",ex);
-        }
-        
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/SeverityEnum.java	Fri Aug 13 14:59:05 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.metadata.ant.types;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.types.EnumeratedAttribute;
+
+/**
+ * Defines an Ant enumerated type for the severity. 
+ */
+public class SeverityEnum extends EnumeratedAttribute {
+
+    /**
+     * Defines a list of enumerated severities.
+     */
+    public enum Severity {
+        FATAL("FATAL"), ERROR("ERROR"), CRITICAL("CRITICAL"), WARNING("WARNING"), REMARK(
+                "REMARK"), INFO("INFO"), NONE("NONE");
+        
+        private final String value;
+
+        Severity(String value) {
+            this.value = value;
+        }
+
+        public String toString() {
+            return this.value;
+        }
+    }
+
+    private static String[] values;
+    
+    static {
+        // Let's support upper case and lower case string.
+        values = new String[Severity.values().length * 2];
+        int i = 0;
+        for (Severity severity : Severity.values()) {
+            values[i++] = severity.toString();
+            values[i++] = severity.toString().toLowerCase();
+        }
+    }
+
+    /**
+     * Get the list of supported severity types.
+     * @return List of supported severity types.
+     */
+    @Override
+    public String[] getValues() {
+        return values;
+    }
+
+    /**
+     * Get the severity as a Severity enum.
+     * @return The severity value.
+     */
+    public Severity getSeverity() {
+        for (Severity severity : Severity.values()) {
+            if (severity.toString().equalsIgnoreCase(getValue())) {
+                return severity;
+            }
+        }
+        throw new BuildException("Invalid severity: " + getValue());
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/SysdefMetaDataInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,220 @@
+/*
+ * 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.File;
+import java.io.IOException;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.DataType;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import com.nokia.helium.metadata.MetaDataInput;
+import com.nokia.helium.metadata.MetadataException;
+import com.nokia.helium.metadata.model.metadata.SysdefCollection;
+import com.nokia.helium.metadata.model.metadata.SysdefCollectionDAO;
+import com.nokia.helium.metadata.model.metadata.SysdefComponent;
+import com.nokia.helium.metadata.model.metadata.SysdefComponentDAO;
+import com.nokia.helium.metadata.model.metadata.SysdefPackage;
+import com.nokia.helium.metadata.model.metadata.SysdefPackageDAO;
+import com.nokia.helium.metadata.model.metadata.SysdefUnit;
+import com.nokia.helium.metadata.model.metadata.SysdefUnitDAO;
+
+/**
+ * The sysdefMetadataInput allows you to record a the current build
+ * model in the database. Packages, collection, component and units
+ * will be saved.
+ *
+ * @ant.type name="sysdefmetadatainput" category="Metadata"
+ */
+public class SysdefMetaDataInput extends DataType implements MetaDataInput {
+    private File file;
+    private File epocroot;
+    
+    @Override
+    public void extract(Task task, EntityManagerFactory factory)
+        throws MetadataException {
+        if (file == null) {
+            throw new MetadataException("file attribute is not defined.");
+        }
+        getEpocroot();
+        SAXParserFactory saxFactory = SAXParserFactory.newInstance();
+        SAXParser parser;
+        EntityManager entityManager = factory.createEntityManager();
+        try {
+            task.log("Extracting data from " + file);
+            parser = saxFactory.newSAXParser();
+            parser.parse(file, new SysdefParserHandler(entityManager));
+        } catch (ParserConfigurationException e) {
+            throw new MetadataException(e.getMessage(), e);
+        } catch (SAXException e) {
+            throw new MetadataException(e.getMessage(), e);
+        } catch (IOException e) {
+            throw new MetadataException(e.getMessage(), e);
+        } finally {
+            entityManager.close();
+        }
+    }
+
+    /**
+     * Defines epocroot. 
+     * @param epocroot
+     * @ant.not=required Default to EPOCROOT.
+     */
+    public void setEpocroot(File epocroot) {
+        this.epocroot = epocroot;
+    }
+    
+    /**
+     * Get epocroot.
+     * @return a File object representing epocroot, or throw a BuildException
+     *         if epocroot attribute and EPOCROOT environment variable
+     *         are not defined.
+     */
+    protected File getEpocroot() {
+        if (epocroot != null) {
+            return epocroot;
+        } else if (System.getenv("EPOCROOT") != null) {
+            return (new File(System.getenv("EPOCROOT") )).getAbsoluteFile();
+        }
+        throw new BuildException("EPOCROOT environment variable or epocroot attribute is not defined.");
+    }
+    
+    /**
+     * Define the location of the system definition file.
+     * @param file
+     * @ant.required
+     */
+    public void setFile(File file) {
+        this.file = file;
+    }
+    
+    /**
+     * Internal Handler to parse the sysdef file 
+     * using the SAX interface. 
+     *
+     */
+    class SysdefParserHandler extends DefaultHandler {
+
+        private static final String PACKAGE_TAG = "package";
+        private static final String COLLECTION_TAG = "collection";
+        private static final String COMPONENT_TAG = "component";
+        private static final String UNIT_TAG = "unit";
+        private static final String ID_ATTR = "id";
+        private static final String NAME_ATTR = "name";
+        private static final String BLDFILE_ATTR = "bldFile";
+        private SysdefPackage currentPackage;
+        private SysdefCollection currentCollection;
+        private SysdefComponent currentComponent;
+        private EntityManager entityManager;
+        private SysdefPackageDAO packageDAO;
+        private SysdefCollectionDAO collectionDAO;
+        private SysdefComponentDAO componentDAO;
+        private SysdefUnitDAO unitDAO;
+        
+        public SysdefParserHandler(EntityManager entityManager) {
+            this.entityManager = entityManager;
+            packageDAO = new SysdefPackageDAO();
+            packageDAO.setEntityManager(entityManager);
+            collectionDAO = new SysdefCollectionDAO();
+            collectionDAO.setEntityManager(entityManager);
+            componentDAO = new SysdefComponentDAO();
+            componentDAO.setEntityManager(entityManager);
+            unitDAO = new SysdefUnitDAO();
+            unitDAO.setEntityManager(entityManager);
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public void startElement(String uri, String localName, String qName,
+                Attributes attributes) throws SAXException {
+            if (PACKAGE_TAG.equals(qName)) {
+                currentPackage = packageDAO.getPackageById(attributes.getValue(ID_ATTR));
+                if (currentPackage == null) {
+                    entityManager.getTransaction().begin();
+                    currentPackage = new SysdefPackage();
+                    currentPackage.setPackageId(attributes.getValue(ID_ATTR));
+                    currentPackage.setName(attributes.getValue(NAME_ATTR));
+                    entityManager.persist(currentPackage);
+                    entityManager.getTransaction().commit();
+                }
+            } else if (currentPackage != null && COLLECTION_TAG.equals(qName)) {
+                currentCollection = collectionDAO.getCollectionById(attributes.getValue(ID_ATTR));
+                if (currentCollection == null) {
+                    entityManager.getTransaction().begin();
+                    currentCollection = new SysdefCollection();
+                    currentCollection.setCollectionId(attributes.getValue(ID_ATTR));
+                    currentCollection.setName(attributes.getValue(NAME_ATTR));
+                    currentCollection.setSysdefPackage(currentPackage);
+                    entityManager.persist(currentCollection);
+                    entityManager.getTransaction().commit();
+                }
+            } else if (currentCollection != null && COMPONENT_TAG.equals(qName)) {
+                currentComponent = componentDAO.getComponentById(attributes.getValue(ID_ATTR));
+                if (currentComponent == null) {
+                    entityManager.getTransaction().begin();
+                    currentComponent = new SysdefComponent();
+                    currentComponent.setComponentId(attributes.getValue(ID_ATTR));
+                    currentComponent.setName(attributes.getValue(NAME_ATTR));
+                    currentComponent.setSysdefCollection(currentCollection);
+                    entityManager.persist(currentComponent);
+                    entityManager.getTransaction().commit();
+                }
+            } else if (currentComponent != null && UNIT_TAG.equals(qName) && attributes.getValue(BLDFILE_ATTR) != null) {
+                SysdefUnit unit = unitDAO.getUnitByLocation(getEpocroot(), new File(attributes.getValue(BLDFILE_ATTR)));
+                if (unit == null) {
+                    entityManager.getTransaction().begin();
+                    unit = new SysdefUnit();
+                    // Location will be relative to epocroot.
+                    unit.setLocation(getEpocroot().toURI().relativize((new File(attributes.getValue(BLDFILE_ATTR))).getAbsoluteFile().toURI()).getPath());
+                    unit.setSysdefComponent(currentComponent);
+                    entityManager.persist(unit);
+                    entityManager.getTransaction().commit();
+                }
+            }
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public void endElement(String uri, String localName, String qName)
+            throws SAXException {
+            super.endElement(uri, localName, qName);
+            if (PACKAGE_TAG.equals(qName)) {
+                currentPackage = null;
+            } else if (COLLECTION_TAG.equals(qName)) {
+                currentCollection = null;
+            } else if (COMPONENT_TAG.equals(qName)) {
+                currentComponent = null;
+            }
+        }
+        
+    }
+
+}
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/TextLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/TextLogMetaDataInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,10 +17,22 @@
 
 package com.nokia.helium.metadata.ant.types;
 
-import java.io.*;
-import java.util.*;
-import org.apache.log4j.Logger;
-import org.apache.tools.ant.BuildException;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import com.nokia.helium.metadata.AutoCommitEntityManager;
+import com.nokia.helium.metadata.MetadataException;
+import com.nokia.helium.metadata.model.metadata.LogFile;
+import com.nokia.helium.metadata.model.metadata.MetadataEntry;
+import com.nokia.helium.metadata.model.metadata.Severity;
+import com.nokia.helium.metadata.model.metadata.SeverityDAO;
 
 /**
  * This Type is to specify and use the text logparser type to parse and store the data.
@@ -42,119 +54,52 @@
  */
 public class TextLogMetaDataInput extends LogMetaDataInput {
 
-    private Logger log = Logger.getLogger(TextLogMetaDataInput.class);
-    
-    private int lineNumber;
-    
-    private BufferedReader currentReader;
-
     /**
-     * Constructor
-     */
-    public TextLogMetaDataInput() {
-        
-    }
-
-    /**
-     * Helper function to set the line number
-     * @param lineNo to be set for the entry
-     */
-    protected void setLineNumber(int lineNo) {
-        lineNumber = lineNo;
-    }
-
-    /**
-     * Helper function to return the line number of this entry.
-     * @return line number of the entry.
+     * {@inheritDoc}
      */
-    protected int getLineNumber() {
-        return lineNumber;
-    }
-
-    /**
-     * Helper function to set the reader of this stream
-     * @param reader to process the stream.
-     */
-    protected void setCurrentReader(BufferedReader reader) {
-        currentReader = reader;
-    }
+    @Override
+    public void extract(EntityManagerFactory factory, File file) throws MetadataException {
+        EntityManager em = factory.createEntityManager();
+        AutoCommitEntityManager autoCommitEM = new AutoCommitEntityManager(factory);
+        try {
+            // Get the severities
+            SeverityDAO severityDao = new SeverityDAO();
+            severityDao.setEntityManager(em);
+            Map<String, Severity> priorities = severityDao.getSeverities();
+            
+            // Add a logfile entry into the database.
+            LogFile logFile = getLogFile(em, file);
 
-    /**
-     * Function to check if is there any additionaly entry. This is being used for example during streaming
-     * recorded and at the end of streaming use the recorded data to add any additional entry. Used by
-     * @return true if there are any additional entries which are to be recorded in the database.
-     */
-    public boolean isAdditionalEntry() {
-        return false;
-    }
-
-    /**
-     * Helper function to return the lbuffer reader for the current meta data input
-     * @return buffer reader object for the current metadata input.
-     */
-    protected BufferedReader getCurrentReader() {
-        return currentReader;
+            // Start parsing
+            BufferedReader reader = new BufferedReader(new FileReader(file));
+            String logText = null;
+            int lineNumber = 0;
+            while ((logText = reader.readLine()) != null) {
+                lineNumber++;                    
+                String line = logText.replaceFirst("^\\s*\\[.+?\\]\\s*", "");
+                SeverityEnum.Severity severity = getSeverity(line);
+                if (severity != SeverityEnum.Severity.NONE) {
+                    MetadataEntry entry = new MetadataEntry();
+                    entry.setLogFile(autoCommitEM.merge(logFile));
+                    entry.setLineNumber(lineNumber);
+                    entry.setSeverity(autoCommitEM.merge(priorities.get(severity.toString())));
+                    entry.setText(line);
+                    autoCommitEM.persist(entry);
+                }
+            }
+            reader.close();
+        } catch (FileNotFoundException ex) {
+            throw new MetadataException(ex.getMessage(), ex);
+        } catch (IOException ex) {
+            throw new MetadataException(ex.getMessage(), ex);
+        } finally {
+            if (autoCommitEM != null) {
+                autoCommitEM.close();
+            }
+            if (em != null) {
+                em.close();
+            }
+        }
     }
 
-    public boolean isEntryCreated(File currentFile) {
-        String exceptions = "";
-        try {
-            if (currentReader == null) {
-                lineNumber = 0;
-                log.debug("Current Text log file name:" + currentFile);
-                log.debug("Processing file: " + currentFile);
-                currentReader = new BufferedReader(new FileReader(currentFile));
-            }
-            String logText = null;
-            while ((logText = currentReader.readLine()) != null) {
-                logText = logText.replaceFirst("^[ ]*\\[.+?\\][ ]*", "");
-                String severity = getSeverity(logText);
-                if (severity != null) {
-                    addEntry(severity, currentFile.getName(), currentFile.toString(), 
-                            lineNumber, logText );
-                    lineNumber ++;
-                    return true;
-                }
-            }
-            currentReader.close();
-            currentReader = null;
-            if (isAdditionalEntry()) {
-                return true;
-            }
-        } catch (FileNotFoundException ex) {
-            log.debug("FileNotFoundException in TextLogMetadata", ex);
-            try {
-                currentReader.close();
-                currentReader = null;
-            } catch (IOException ex1) {
-                // We are Ignoring the errors as no need to fail the build.
-                log.debug("Exception in TextLogMetadata", ex1);
-                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;
-                exceptions = exceptions + ex.getMessage() + "\n";
-                return false;
-            }
-        } catch (IOException ex) {
-            log.debug("Exception in TextLogMetadata", ex);
-            try {
-                currentReader.close();
-                currentReader = null;
-            } catch (IOException ex1) {
-                // We are Ignoring the errors as no need to fail the build.
-                log.debug("Exception in TextLogMetadata", ex1);
-                exceptions = exceptions + ex.getMessage() + "\n";
-                return false;
-            }
-        }
-        if (!exceptions.equals("")) {
-            throw new BuildException(exceptions);
-        }
-        
-        return false;
-    }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/XMLLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +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.types;
-
-import java.io.*;
-import java.util.*;
-import org.apache.log4j.Logger;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.events.XMLEvent;
-import javax.xml.stream.XMLStreamException;
-import org.apache.tools.ant.BuildException;
-
-
-/**
- * This Type abstract base class for all the types based on
- * XML processing.
- */
-abstract class XMLLogMetaDataInput extends LogMetaDataInput {
-
-    private Logger log = Logger.getLogger(XMLLogMetaDataInput.class);
-
-    private XMLInputFactory xmlInputFactory;
-
-    private XMLStreamReader xmlStreamReader;
-    
-    private boolean inParsing;
-    
-
-    /**
-     * 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);
-
-    }
-    
-    /**
-     * Closes the xml stream
-     */
-    private void close() {
-        try {
-            if (xmlStreamReader != null) {
-                xmlStreamReader.close();
-                xmlStreamReader = null;
-            }
-        } catch (XMLStreamException ex) {
-         // We are Ignoring the errors as no need to fail the build.
-            log.debug("Exception while closing xml stream", ex);
-        }
-        
-    }
-
-    /**
-     * Function to check from the input stream if is there any entries available.
-     * @param file for which the contents needs to be parsed for errors
-     * @return true if there are any entry available otherwise false.
-     */
-    boolean isEntryCreated(File currentFile) {
-        boolean entryCreated = false;
-        try {
-            if (inParsing ) {
-                if (xmlStreamReader == null) {
-                    log.debug("Processing file: " + currentFile);
-                    xmlStreamReader = xmlInputFactory.createXMLStreamReader(
-                            currentFile.toString(), new BufferedInputStream(new FileInputStream(currentFile)));
-                }
-                int eventType = xmlStreamReader.getEventType();
-                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;
-                    }
-                    if ( entryCreated) {
-                        return true; 
-                    }
-                }
-                if (xmlStreamReader != null) {
-                    close();
-                }
-                inParsing = false;
-            }
-        } catch (XMLStreamException ex) {
-            log.debug("XMLStreamException in isEntryCreated" + ex);
-        } catch (FileNotFoundException ex) {
-            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);
-        }
-        // CheckStyle:IllegalCatch ON
-        return false;
-    }
-
-
-    /**
-     * Function implemented by the subclasses to process the start event of xml stream callback.
-     * @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) ;
-
-    /**
-     * Function implemented by the subclasses to process the end event of xml stream callback.
-     * @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 endElement(XMLStreamReader streamReader);
-
-    /**
-     * Function implemented by the subclasses to process the characters event of xml stream callback.
-     * @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);
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/sbs/CategorizationHandler.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,94 @@
+/*
+ * 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.sbs;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import com.nokia.helium.metadata.ant.types.sbs.SBSLogHandler.UncategorizedItem;
+import com.nokia.helium.metadata.ant.types.sbs.SBSLogHandler.UncategorizedItemMap;
+
+/**
+ * The CategorizationHandler will try to push general 
+ * make errors (UncategorizedItem) to a particular component.
+ *
+ */
+public class CategorizationHandler extends DefaultHandler {
+    private SBSLogHandler logHandler;
+    private boolean record;
+    private StringBuffer text = new StringBuffer();
+    private String currentComponent;
+    
+    /**
+     * Default constructor, it needs a SBSLogHandler.
+     * @param logHandler the calling SBSLogHandler
+     */
+    public CategorizationHandler(SBSLogHandler logHandler) {
+        this.logHandler = logHandler;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void endElement(String uri, String localName, String qName) {
+        if (qName.equalsIgnoreCase("clean") && currentComponent != null) {
+            record = false;
+            UncategorizedItemMap uncategorizedItemMap = this.logHandler.getUncategorizedItemMap();
+            for (String line : text.toString().split("\n")) {
+                line = line.trim().replace("\"", "");
+                if (line.length() > 0) {
+                    if (uncategorizedItemMap.containsKey(line)) {
+                        for (UncategorizedItem item : uncategorizedItemMap.get(line)) {
+                            this.logHandler.getEventHandler().add(item.getPriotity(), currentComponent, item.getText(), item.getLineNumber());
+                        }
+                        uncategorizedItemMap.remove(line);
+                    }
+                }
+            }
+            currentComponent = null;
+            text.setLength(0);
+        }
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void startElement(String uri, String localName, String qName,
+            Attributes attributes) throws SAXException {
+        if (qName.equalsIgnoreCase("clean")) {
+            currentComponent = this.logHandler.getComponent(attributes);
+            record = true;
+            text.setLength(0);
+        }
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void characters(char[] ch, int start, int length)
+        throws SAXException {
+        if (record) {
+            text.append(ch, start, length);
+        }
+        super.characters(ch, start, length);
+    }
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/sbs/SBSLogEvents.java	Fri Aug 13 14:59:05 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.metadata.ant.types.sbs;
+
+import java.io.File;
+
+import com.nokia.helium.metadata.ant.types.SeverityEnum;
+
+/**
+ * Basic interface that an object should implement to get
+ * event from SBS log parsing. 
+ *
+ */
+public interface SBSLogEvents {
+
+    /**
+     * Component is found.
+     * @param component
+     */
+    void declareComponent(String component);
+    
+    /**
+     * Analyzing text in component.
+     * @param text
+     */
+    SeverityEnum.Severity check(String component, String text, int lineNumber);
+
+    /**
+     * Analyzing text in general section
+     * @param text
+     */
+    SeverityEnum.Severity check(String text, int lineNumber);
+    
+    /**
+     * Add a message with a known severity
+     * @param severity
+     * @param text
+     * @param lineNumber
+     */
+    void add(SeverityEnum.Severity severity, String text, int lineNumber);
+    
+    /**
+     * 
+     * @param severity
+     * @param component
+     * @param text
+     * @param lineNumber
+     */
+    void add(SeverityEnum.Severity severity, String component, String text, int lineNumber);
+    
+    /**
+     * 
+     * @param component
+     * @param location
+     * @param lineNumber
+     */
+    void addWhatEntry(String component, String location, int lineNumber);
+    
+    /**
+     * Get the default component name, this is useful for global error. 
+     * @return
+     */
+    String getDefaultComponentName();
+
+    /**
+     * Get epocroot. This is used to compute the component name.
+     * @return epocroot.
+     */
+    File getEpocroot();
+
+    /**
+     * Update the elapsed time for a component. 
+     * @param currentComponent
+     * @param doubleValue
+     */
+    void addElapsedTime(String component, double duration);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/sbs/SBSLogHandler.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,400 @@
+/*
+ * 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.sbs;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import com.nokia.helium.metadata.ant.types.SeverityEnum;
+
+/**
+ * This class implements the parsing of a SBS log file.
+ * Information will be pushed using an SBSLogEvents.
+ *
+ */
+public class SBSLogHandler extends DefaultHandler {
+    private static final int UNCATEGORIZED_MAP_LIMIT = 10000;
+    private static final String BLDINF_COMPONENT = "/bld.inf";
+    private File file;
+    private SBSLogEvents eventHandler;
+    private boolean record;
+    private StringBuffer text = new StringBuffer();
+    private Locator locator; 
+    private String recipeStatus = "ok";
+    private String currentComponent;
+    private boolean inWhatLog;
+    private long deep;
+    private StringBuffer mainSectionText = new StringBuffer();
+    private List<SpecialPattern> specialPatterns = new ArrayList<SpecialPattern>();
+    private UncategorizedItemMap uncategorizedItemMap = new UncategorizedItemMap();
+
+    
+    class SpecialPattern {
+        private Pattern regexPattern;
+        private int groupPosition;
+
+        public SpecialPattern(String exp, int pos) {
+            regexPattern = Pattern.compile(exp);
+            groupPosition = pos;
+        }
+        
+        public Pattern getRegexPattern() {
+            return regexPattern;
+        }
+        
+        public int getGroupPosition() {
+            return groupPosition;
+        }
+    }
+    
+    class UncategorizedItemMap extends Hashtable<String, List<UncategorizedItem>> {
+        
+        private static final long serialVersionUID = 1L;
+
+        public void put(String key, UncategorizedItem item) {
+            if (this.containsKey(key)) {
+                this.get(key).add(item);
+            } else {
+                this.put(key, new ArrayList<UncategorizedItem>());
+                this.get(key).add(item);                
+            }
+        }
+    }
+    
+    class UncategorizedItem {
+        private SeverityEnum.Severity priotity;
+        private String text;
+        private int lineNumber;
+        
+        public UncategorizedItem(String text, int lineNumber, SeverityEnum.Severity priotity) {
+            this.text = text;
+            this.lineNumber = lineNumber;
+            this.priotity = priotity;
+        }
+
+        public SeverityEnum.Severity getPriotity() {
+            return priotity;
+        }
+
+        public String getText() {
+            return text;
+        }
+
+        public int getLineNumber() {
+            return lineNumber;
+        }
+    }
+    
+    /**
+     * Construct an SBSLogHandler, defining a SBSLogEvents object
+     * to receive parsing notifications. The file will be used
+     * by the categorization handler.
+     * 
+     * @param event
+     * @param file
+     */
+    public SBSLogHandler(SBSLogEvents event, File file) {
+        this.file = file;
+        this.eventHandler = event;
+        currentComponent = event.getDefaultComponentName();
+        specialPatterns.add(new SpecialPattern("(make.exe|make): \\*\\*\\* No rule to make target.*needed by `(.*)'.*", 2));
+        specialPatterns.add(new SpecialPattern("(make.exe|make): \\*\\*\\* \\[(.*)\\].*", 2));
+    }
+
+    /**
+     * This method will cleanup the path of a bld.inf to extract
+     * a component name.
+     * e.g: I:/root/layer/package/group/bld.inf
+     * will return root/layer/package/group
+     * 
+     * @param text
+     * @return
+     */
+    protected String removeDriveAndBldInf(String text) {
+        // Some light linux support
+        if (text.endsWith(BLDINF_COMPONENT)) {
+            text = text.substring(0, text.length() - BLDINF_COMPONENT.length());
+        }
+        if (this.eventHandler.getEpocroot() == null) {
+            return text.replaceFirst("^([a-zA-Z]:)?/", "");
+        } else {
+            text = this.eventHandler.getEpocroot().toURI().relativize((new File(text)).toURI()).getPath();
+            if (text.endsWith("/")) {
+                text = text.substring(0, text.length() - 1);
+            }
+            return text;
+        }
+    }
+
+    /**
+     * Get the component based on the Attributes list.
+     * If not found it will fallback to the default
+     * component name defined by the eventHandler.
+     * 
+     * @param attributes XML tag SAX attributes list.
+     * @return a String representing the component name
+     */
+    public String getComponent(Attributes attributes) {
+        String component = attributes.getValue("", "bldinf");
+        if (component == null || component.length() == 0) {
+            return eventHandler.getDefaultComponentName();
+        }
+        return removeDriveAndBldInf(component);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setDocumentLocator(Locator locator) {
+        this.locator = locator;
+        super.setDocumentLocator(locator);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void endElement(String uri, String localName, String qName)
+        throws SAXException {
+        // one level deeper
+        deep--;
+        if (qName.equals("error") || qName.equals("warning") || qName.equals("info")) {
+            record = false;
+            String line = text.toString();
+            if (!line.trim().equals("")) {
+                //log.info(qName + " - " + line);
+                eventHandler.add(SeverityEnum.Severity.valueOf(qName.toUpperCase()), text.toString(), locator.getLineNumber());
+            }
+        } else if (qName.equals("recipe")) {
+            record = false;
+            int count = 0;
+            for (String line : text.toString().split("\n")) {
+                if (eventHandler.check(currentComponent, line, locator.getLineNumber()) == SeverityEnum.Severity.ERROR) {
+                    count++;
+                }
+            }
+            if (count == 0 && recipeStatus.equalsIgnoreCase("failed")) {
+                eventHandler.add(SeverityEnum.Severity.ERROR, currentComponent, "ERROR: recipe exit status is failed.", locator.getLineNumber());
+            }
+            recipeStatus = "ok";
+            text.setLength(0);
+        } else if (qName.equalsIgnoreCase("whatlog") ) {
+            record = false;
+            for (String line : text.toString().split("\n")) {
+                line = line.trim().replace("\"", "");
+                if (line.length() > 0) {
+                    this.eventHandler.addWhatEntry(currentComponent, line, locator.getLineNumber());
+                }
+            }
+            text.setLength(0);
+            inWhatLog = false;
+        } else if (inWhatLog && qName.equalsIgnoreCase("member")) {
+            String line = text.toString().trim().replace("\"", "");
+            this.eventHandler.addWhatEntry(currentComponent, line, locator.getLineNumber());
+            record = false;
+            text.setLength(0);
+        } else if (qName.equalsIgnoreCase("clean")) {
+            record = false;
+            for (String line : text.toString().split("\n")) {
+                line = line.trim().replace("\"", "");
+                if (line.length() > 0) {
+                    if (uncategorizedItemMap.containsKey(line)) {
+                        for (UncategorizedItem item : uncategorizedItemMap.get(line)) {
+                            this.eventHandler.add(item.getPriotity(), currentComponent, item.getText(), item.getLineNumber());
+                        }
+                        uncategorizedItemMap.remove(line);
+                    }
+                }
+            }
+            text.setLength(0);
+        }
+        if (deep == 1) {
+            mainSectionText.setLength(0);
+        }
+        super.endElement(uri, localName, qName);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void fatalError(SAXParseException e) throws SAXException {
+        // Reporting an XML parsing error.
+        eventHandler.add(SeverityEnum.Severity.ERROR, e.getMessage(), e.getLineNumber());
+        super.fatalError(e);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void error(SAXParseException e) throws SAXException {
+        // Reporting an XML parsing error.
+        eventHandler.add(SeverityEnum.Severity.ERROR, e.getMessage(), e.getLineNumber());
+        super.error(e);
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void startElement(String uri, String localName, String qName,
+            Attributes attributes) throws SAXException {
+        // one level deeper
+        deep++;
+        if (deep == 2) {
+            for (String line : mainSectionText.toString().split("\n")) {
+                for (SpecialPattern sp : specialPatterns) {
+                    Matcher matcher = sp.getRegexPattern().matcher(line);
+                    if (matcher.matches()) {
+                        uncategorizedItemMap.put(matcher.group(sp.getGroupPosition()), new UncategorizedItem(line, locator.getLineNumber(), SeverityEnum.Severity.ERROR));
+                    }
+                }
+                // record external log messages (such as from emake)
+                eventHandler.check(line, locator.getLineNumber());
+            }
+            if (uncategorizedItemMap.size() > UNCATEGORIZED_MAP_LIMIT) {
+                emptyUncategorizedItemMap();
+            }
+            mainSectionText.setLength(0);
+        }
+        if (qName.equalsIgnoreCase("buildlog")) {
+            mainSectionText.setLength(0);
+        } else if (qName.equals("error") || qName.equals("warning") || qName.equals("info")) {
+            record = true;
+            text.setLength(0);
+        } else if (qName.equals("recipe")) {
+            record = true;
+            text.setLength(0);
+            currentComponent = getComponent(attributes);
+            this.eventHandler.declareComponent(currentComponent);
+        } else if (qName.equalsIgnoreCase("time")) {
+            //currentComponent
+            String elapsed = attributes.getValue("", "elapsed");
+            if (elapsed != null) {
+                try {
+                    this.eventHandler.addElapsedTime(currentComponent, Double.valueOf(elapsed).doubleValue());
+                } catch (NumberFormatException ex) {
+                    ex = null; // ignoring the error.
+                }
+            }
+            //elapsedTime = Float.valueOf(getAttribute("elapsed", streamReader)).floatValue();
+        } else if (qName.equalsIgnoreCase("status") ) {
+            String exit = attributes.getValue("", "exit");
+            recipeStatus = (exit != null) ? exit : "ok";
+        } else if (qName.equalsIgnoreCase("whatlog") ) {
+            record = true;
+            inWhatLog = true;
+            text.setLength(0);
+            currentComponent = getComponent(attributes);
+            this.eventHandler.declareComponent(currentComponent);
+        } else if (inWhatLog && qName.equalsIgnoreCase("export")) {
+            String filename = attributes.getValue("", "destination");
+            eventHandler.addWhatEntry(currentComponent, filename, locator.getLineNumber());
+        } else if (inWhatLog && qName.equalsIgnoreCase("member")) {
+            record = true;
+            text.setLength(0);
+        } else if (qName.equalsIgnoreCase("clean")) {
+            record = true;
+            currentComponent = getComponent(attributes);
+            this.eventHandler.declareComponent(currentComponent);
+            text.setLength(0);
+        }
+        super.startElement(uri, localName, qName, attributes);
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void characters(char[] ch, int start, int length)
+        throws SAXException {
+        if (record) {
+            text.append(ch, start, length);
+        }
+        if (deep == 1) {
+            mainSectionText.append(ch, start, length);            
+        }
+        super.characters(ch, start, length);
+    }
+
+
+    private void emptyUncategorizedItemMap() throws SAXException {
+        if (uncategorizedItemMap.size() > 0) {
+            try {
+                SAXParserFactory saxFactory = SAXParserFactory.newInstance();
+                SAXParser parser = saxFactory.newSAXParser();
+                parser.parse(file, new CategorizationHandler(this));
+            } catch (ParserConfigurationException e) {
+                throw new SAXException(e.getMessage(), e);
+            } catch (IOException e) {
+                throw new SAXException(e.getMessage(), e);
+            }
+        }        
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void endDocument() throws SAXException {
+        // Remaining changes
+        
+        // Let's try categorization handler first
+        emptyUncategorizedItemMap();
+        
+        // Last resorts
+        for (String key : uncategorizedItemMap.keySet()) {
+            for (UncategorizedItem item : uncategorizedItemMap.get(key)) {
+                this.eventHandler.add(item.getPriotity(), this.eventHandler.getDefaultComponentName(), item.getText(), item.getLineNumber());
+            }
+        }
+        super.endDocument();
+    }
+
+    /**
+     * Get the EventHandler.
+     * @return
+     */
+    public SBSLogEvents getEventHandler() {
+        return eventHandler;
+    }    
+
+    /**
+     * Get the uncategorized items map.
+     * @return a map of uncategorized items.
+     */
+    public UncategorizedItemMap getUncategorizedItemMap() {
+        return uncategorizedItemMap;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/sbs/SBSLogMetaDataInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,308 @@
+/*
+ * 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.sbs;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.xml.sax.SAXException;
+
+import com.nokia.helium.metadata.AutoCommitEntityManager;
+import com.nokia.helium.metadata.MetadataException;
+import com.nokia.helium.metadata.ant.types.AbstractComponentBaseMetadataInput;
+import com.nokia.helium.metadata.ant.types.SeverityEnum;
+import com.nokia.helium.metadata.model.metadata.Component;
+import com.nokia.helium.metadata.model.metadata.ComponentTime;
+import com.nokia.helium.metadata.model.metadata.ExecutionTime;
+import com.nokia.helium.metadata.model.metadata.LogFile;
+import com.nokia.helium.metadata.model.metadata.MetadataEntry;
+import com.nokia.helium.metadata.model.metadata.Severity;
+import com.nokia.helium.metadata.model.metadata.SeverityDAO;
+import com.nokia.helium.metadata.model.metadata.SysdefUnitDAO;
+import com.nokia.helium.metadata.model.metadata.WhatLogEntry;
+
+
+/**
+ * This metadata input will parse SBSv2 log and collect
+ * data into the database.
+ * <pre>
+ * 
+ * &lt;hlm:sbsmetadatainput &gt
+ *    &lt;fileset dir="${project.dir}/../data/"&gt;
+ *        &lt;include name="*_compile.log"/&gt;
+ *    &lt;/fileset&gt;
+ *    &lt;hlm:metadatafilterset id="sbs.metadata.filter"&gt;
+ *       &lt;metadatafilterset filterfile="common.csv" /&gt;
+ *    &lt;/hlm:metadatafilterset&gt;
+ * &lt;/hlm:sbsmetadatainput&gt;
+ * </pre>
+ * 
+ * @ant.task name="sbsmetadatainput" category="Metadata"
+ */
+public class SBSLogMetaDataInput extends AbstractComponentBaseMetadataInput implements SBSLogEvents {
+    private static final String  DEFAULT_COMPONENT_NAME = "general";
+    private EntityManager entityManager;
+    private AutoCommitEntityManager autoCommitEM;
+    private LogFile logFile;
+    private File epocroot;
+    private SysdefUnitDAO unitDAO;
+    private boolean checkMissing = true;
+
+    private Map<String, Severity> priorities;
+    private Pattern buildTimeMatcher = Pattern.compile("^Run time\\s+(\\d+)\\s+seconds$");
+    private boolean failOnInvalidXml = true;
+    private Map<String, ComponentTime> componentTimes = new Hashtable<String, ComponentTime>(); 
+
+    /**
+     * Defines if XML format error should be fatal, or treated as build error. 
+     * @param failOnXmlError
+     */
+    public void setFailOnInvalidXml(boolean failOnInvalidXml) {
+        this.failOnInvalidXml = failOnInvalidXml;
+    }
+
+    
+    /**
+     * Defines epocroot. 
+     * @param epocroot
+     * @ant.not-required Default to EPOCROOT.
+     */
+    public void setEpocroot(File epocroot) {
+        this.epocroot = epocroot;
+    }
+    
+    /**
+     * Get epocroot.
+     * @return a File object representing epocroot, or throw a BuildException
+     *         if epocroot attribute and EPOCROOT environment variable
+     *         are not defined.
+     */
+    public File getEpocroot() {
+        return epocroot;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void extract(EntityManagerFactory factory, File file)
+        throws MetadataException {
+        SAXParserFactory saxFactory = SAXParserFactory.newInstance();
+        entityManager = factory.createEntityManager();
+        autoCommitEM = new AutoCommitEntityManager(factory);
+        unitDAO = new SysdefUnitDAO();
+        unitDAO.setEntityManager(this.getEntityManager());
+        try {
+            logFile = getLogFile(entityManager, file);
+
+            SeverityDAO pdao = new SeverityDAO();
+            pdao.setEntityManager(entityManager);
+            priorities = pdao.getSeverities();
+            
+            // always create the default component and associated time.
+            this.getDefaultComponent(logFile);
+            this.addElapsedTime(this.getDefaultComponentName(), 0.0);
+            
+            SAXParser parser = saxFactory.newSAXParser();
+            parser.parse(file, new SBSLogHandler(this, file));
+            
+            // Pushing component times into the database.
+            entityManager.getTransaction().begin();
+            for (Entry<String, ComponentTime> entry : componentTimes.entrySet()) {
+                ComponentTime ct = entry.getValue();
+                ct.setComponent(entityManager.merge(getComponent(entry.getKey(), logFile)));
+                entityManager.persist(ct);
+            }
+            entityManager.getTransaction().commit();
+        } catch (SAXException e) {
+            if (failOnInvalidXml) {
+                throw new MetadataException(e.getMessage(), e);
+            }
+        } catch (IOException e) {
+            throw new MetadataException(e.getMessage(), e);
+        } catch (ParserConfigurationException e) {
+            throw new MetadataException(e.getMessage(), e);
+        } finally {
+            logFile = null;
+            autoCommitEM.close();
+            autoCommitEM = null;
+            entityManager.close();
+            entityManager = null;
+            unitDAO = null;
+            priorities = null;
+            clear();
+            componentTimes.clear();
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected EntityManager getEntityManager() {
+        return entityManager;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void add(SeverityEnum.Severity severity,
+            String text, int lineNumber) {
+        add(severity, this.getDefaultComponentName(), text, lineNumber);
+        
+        // Searching for build time. 
+        Matcher matcher = buildTimeMatcher.matcher(text);
+        if (matcher.matches()) {
+            ExecutionTime entry = new ExecutionTime();
+            entry.setLogFile(autoCommitEM.merge(logFile));
+            entry.setTime(new Integer(matcher.group(1)).intValue());
+            autoCommitEM.persist(entry);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void add(SeverityEnum.Severity severity,
+            String component, String text, int lineNumber) {
+        if (severity != SeverityEnum.Severity.INFO) {
+            MetadataEntry entry = new MetadataEntry();
+            entry.setComponent(autoCommitEM.merge(getComponent(component, logFile)));
+            entry.setLineNumber(lineNumber);
+            entry.setText(text);
+            entry.setLogFile(logFile);
+            entry.setSeverity(priorities.get(severity.toString()));
+            autoCommitEM.persist(entry);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void addWhatEntry(String component, String location, int lineNumber) {
+        boolean fileExists = (new File(location)).exists();
+        WhatLogEntry entry = new WhatLogEntry();
+        entry.setComponent(autoCommitEM.merge(getComponent(component, logFile)));
+        entry.setMember(location);
+        entry.setMissing(!fileExists);
+        autoCommitEM.persist(entry);
+        if (checkMissing && !fileExists) {
+            MetadataEntry mentry = new MetadataEntry();
+            mentry.setComponent(autoCommitEM.merge(getComponent(component, logFile)));
+            mentry.setLineNumber(lineNumber);
+            mentry.setText("Missing: " + location);
+            mentry.setLogFile(logFile);
+            mentry.setSeverity(priorities.get(SeverityEnum.Severity.ERROR.toString()));
+            autoCommitEM.persist(mentry);            
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public SeverityEnum.Severity check(String text, int lineNumber) {
+        check(getDefaultComponentName(), text, lineNumber);
+        return null;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public SeverityEnum.Severity check(
+            String component, String text, int lineNumber) {
+        SeverityEnum.Severity severity = this.getSeverity(text);
+        if (severity != SeverityEnum.Severity.NONE) {
+            MetadataEntry entry = new MetadataEntry();
+            entry.setComponent(autoCommitEM.merge(getComponent(component, logFile)));
+            entry.setLineNumber(lineNumber);
+            entry.setText(text);
+            entry.setLogFile(logFile);
+            entry.setSeverity(priorities.get(severity.toString()));
+            autoCommitEM.persist(entry);
+        }
+        return severity;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void declareComponent(String component) {
+        getComponent(component, logFile);
+    }
+
+    /**
+     * Define if we need to treat add error entries
+     * for missing files.
+     * @param checkMissing
+     */
+    public void setCheckMissing(boolean checkMissing) {
+        this.checkMissing = checkMissing;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String getDefaultComponentName() {
+        return DEFAULT_COMPONENT_NAME;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected Component createComponent(String name, LogFile logFile) {
+        Component component = new Component();
+        component.setComponent(name);
+        component.setLogFile(logFile);
+        component.setSysdefUnit(unitDAO.getUnitByLocation(name));
+        getEntityManager().getTransaction().begin();
+        getEntityManager().persist(component);
+        getEntityManager().getTransaction().commit();
+        return component;
+    }
+
+
+    @Override
+    public void addElapsedTime(String name, double duration) {
+        if (!componentTimes.containsKey(name)) {
+            ComponentTime ct = new ComponentTime();
+            componentTimes.put(name, ct);
+        }
+        ComponentTime ct = componentTimes.get(name);
+        ct.setDuration(ct.getDuration() + duration);
+    }
+
+}
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/db/ORMMetadataDB.java	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +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.db;
-
-
-import com.nokia.helium.jpa.entity.metadata.MetadataUtil;
-import java.io.File;
-import org.apache.log4j.Logger;
-import com.nokia.helium.jpa.entity.metadata.Metadata;
-
-/**
- * Database class to write the contents to the database.
- */
-public class ORMMetadataDB {
-
-    private static Logger log = Logger.getLogger(ORMMetadataDB.class);
-
-    private String dbPath;
-    
-    public ORMMetadataDB(String databasePath) {
-        log.debug("initializing ORMMetadataDB: dbPath: " + databasePath);
-        // Lower case the filename because of SMB share.
-        File actualPath = new File(databasePath);
-        String fileName = actualPath.getName();
-        dbPath = new File(actualPath.getParent(), fileName.toLowerCase()).getPath();
-        MetadataUtil.initializeORM(dbPath);
-    }
-
-    public void addLogEntry(Metadata.LogEntry entry) {
-        MetadataUtil.addEntry(dbPath, entry);
-    }
-    
-    /**
-     * Add an execution time record to the database for current log.
-     * @param time
-     */
-    public void addExecutionTime(String logPath, int time) {
-        MetadataUtil.addEntry(dbPath, logPath, time);
-    }
-
-    public void removeEntries(String logPath) {
-        MetadataUtil.removeEntries(dbPath, logPath);
-    }
-
-    public void finalizeMetadata(String logPath) {
-        MetadataUtil.finalizeMetadata(dbPath, logPath);
-    }
-
-    public void finalizeDB() {
-        MetadataUtil.finalizeORM(dbPath);
-    }
-
-}
\ 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/fmpp/ORMObjectModel.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,26 @@
+/*
+ * 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.fmpp;
+
+import freemarker.ext.beans.BeanModel;
+import freemarker.ext.beans.BeansWrapper;
+
+class ORMObjectModel extends BeanModel {
+    public ORMObjectModel(Object obj) {
+        super(obj, new BeansWrapper());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/fmpp/ORMQueryModeModel.java	Fri Aug 13 14:59:05 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.metadata.fmpp;
+
+import java.io.File;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.apache.log4j.Logger;
+
+
+import com.nokia.helium.metadata.FactoryManager;
+import com.nokia.helium.metadata.MetadataException;
+
+import fmpp.Engine;
+import fmpp.ProgressListener;
+import freemarker.template.TemplateHashModel;
+
+/**
+ * QueryModel (which supports hash, sequence, containers)
+ * arg0: database location
+ *  
+ */
+public class ORMQueryModeModel implements TemplateHashModel, ProgressListener {
+
+    private static Logger log = Logger.getLogger(ORMQueryModeModel.class);
+    private EntityManagerFactory factory;
+    private EntityManager entityManager;
+
+    public ORMQueryModeModel(File file) throws MetadataException {
+        this.factory = FactoryManager.getFactoryManager().getEntityManagerFactory(file);
+        this.entityManager = factory.createEntityManager();
+    }
+    
+    /**
+     * Gets the template model for the corresponding query
+     * @param query for which the model is returned.
+     * @return returns the template model for the query 
+     */
+    public TemplateHashModel get(String mode) {
+        String retType = null;
+        String actualMode = mode;
+        if (mode.startsWith("native")) {
+            String [] splitString = mode.split(":");
+            if (splitString.length == 2 ) {
+                actualMode = splitString[0]; 
+                retType = splitString[1];
+            }
+        }
+        
+        return new QueryTemplateModel(entityManager, actualMode, retType);
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isEmpty() {
+        return false;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void notifyProgressEvent(Engine engine, int event, File src,
+            int pMode, Throwable error, Object param) throws Exception {
+        log.debug("notifyProgressEvent - event: " + event);
+        if (event == ProgressListener.EVENT_END_PROCESSING_SESSION) {
+            log.debug("notifyProgressEvent - closing the factory.");
+            this.entityManager.close();
+            this.factory.close();
+        }  
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/fmpp/ORMQueryModel.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,49 @@
+/*
+ * 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.fmpp;
+
+import javax.persistence.EntityManager;
+
+import freemarker.template.TemplateCollectionModel;
+import freemarker.template.TemplateModelIterator;
+
+class ORMQueryModel implements TemplateCollectionModel {
+
+    private String queryType;
+    private String queryString;
+    private String returnType;
+    private EntityManager entityManager;
+
+    public ORMQueryModel(EntityManager entityManager, String queryString,
+            String type, String retType) {
+        this.entityManager = entityManager;
+        queryType = type;
+        this.queryString = queryString;
+        returnType = retType;
+    }
+
+    /*
+     * Provides data via collection interface.
+     * 
+     * @return the iterator model from which the data is accessed.
+     */
+    public TemplateModelIterator iterator() {
+        return new ORMTemplateModelIterator(entityManager, queryString,
+                queryType, returnType);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/fmpp/ORMSequenceModel.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,108 @@
+/*
+ * 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.fmpp;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.apache.log4j.Logger;
+
+import freemarker.template.SimpleNumber;
+import freemarker.template.SimpleScalar;
+import freemarker.template.TemplateModel;
+import freemarker.template.TemplateSequenceModel;
+
+class ORMSequenceModel implements TemplateSequenceModel {
+    public static final int PAGE_SIZE = 750;
+    private static Logger log = Logger.getLogger(ORMSequenceModel.class);
+    private Query query;
+    private int currentPage;
+    private List<Object> data;
+    private int size;
+    private EntityManager entityManager;
+    private String queryString;    
+
+    @SuppressWarnings("unchecked")
+    public ORMSequenceModel(EntityManager entityManager, String queryString) {
+        log.debug("ORMSequenceModel: " + queryString);
+        this.queryString = queryString;
+        this.entityManager = entityManager;
+        // Caching the full size
+        int page = 0;
+        do {
+            query = entityManager.createQuery(queryString);
+            query.setFirstResult(PAGE_SIZE * page);
+            query.setMaxResults(PAGE_SIZE);
+            data = query.getResultList();
+            // incrementing the size and page.
+            size += data.size();
+            page++;
+        } while (data.size() == PAGE_SIZE);
+
+        // First query
+        currentPage = 0;
+        query = entityManager.createQuery(queryString);
+        query.setFirstResult(currentPage);
+        query.setMaxResults(PAGE_SIZE);
+        data = query.getResultList();
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public int size() {
+        return size;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @SuppressWarnings("unchecked")
+    public synchronized TemplateModel get(int index) {
+        // Calculating the requested page
+        int page = index / PAGE_SIZE;
+        // Shall we load a new page
+        if (page != currentPage) {
+            query = entityManager.createQuery(queryString);
+            query.setFirstResult(page * PAGE_SIZE);
+            query.setMaxResults(PAGE_SIZE);
+            data = query.getResultList();
+            currentPage = page;
+            if (data.size() == 0) {
+                return null;
+            }
+        }
+        // Are we out of bound.
+        if (data.size() <= index % PAGE_SIZE) {
+            return null;
+        }
+        // Let's get the object.
+        Object obj = data.get(index % PAGE_SIZE);
+        if (obj instanceof String) {
+            return new SimpleScalar((String)obj);
+        } else if (obj instanceof Number) {
+            return new SimpleNumber((Number)obj);
+        } else if (obj == null) {
+            return null;
+        } else {
+            return new ORMObjectModel(obj);
+        }
+    }
+    
+}
\ 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/fmpp/ORMTemplateModelIterator.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,93 @@
+/*
+ * 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.fmpp;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import freemarker.template.SimpleScalar;
+import freemarker.template.TemplateModel;
+import freemarker.template.TemplateModelIterator;
+
+/**
+ * Internal Iterator class which provides data as collection. 
+ */
+class ORMTemplateModelIterator implements TemplateModelIterator {
+    
+    private static final int PAGE_SIZE = 2000;
+    private String queryString;
+    private Query query;
+    private int index;
+    private String returnType;
+    private boolean nativeQuery;
+    private EntityManager entityManager;
+    private List<Object> data;
+    private int currentPage;
+    private Object next;
+    
+    public ORMTemplateModelIterator(EntityManager entityManager, String queryString, String type, String retType) {
+        this.entityManager = entityManager;
+        this.queryString = queryString;
+        returnType = retType;
+        if (type.startsWith("native")) {
+            nativeQuery = true;
+        }
+        index = 0;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public TemplateModel next() {
+        Object value = next;
+        next = null;
+        if (value != null) {
+            if (nativeQuery && returnType.equals("java.lang.String")) {
+                return new SimpleScalar((String)value);
+            } else {
+                return new ORMObjectModel(value);
+            }
+        }
+        return null;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @SuppressWarnings("unchecked")
+    public boolean hasNext() {
+        int page = index / PAGE_SIZE;
+        if (query == null || page != currentPage) {
+            if (nativeQuery) {
+                query = entityManager.createNativeQuery(queryString);
+            } else {
+                query = entityManager.createQuery(queryString);
+            }
+            query.setFirstResult(page * PAGE_SIZE);
+            query.setMaxResults(PAGE_SIZE);
+            data = query.getResultList();
+            currentPage = page;
+        }
+        if (next == null && index < data.size()) {
+            next = data.get(index);
+            index++;
+        }
+        return next != null;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/fmpp/QueryTemplateModel.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,56 @@
+/*
+ * 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.fmpp;
+
+import javax.persistence.EntityManager;
+
+import freemarker.template.TemplateHashModel;
+import freemarker.template.TemplateModel;
+
+/**
+ * Internal class to handle the sql query and returns the data in either
+ * hash or sequence or containers.
+ */
+class QueryTemplateModel implements TemplateHashModel {
+
+    private EntityManager entityManager;
+    
+    private String queryMode;
+    
+    private String returnType;
+    
+    private TemplateModel resultObject;
+    
+    public QueryTemplateModel(EntityManager entityManager, String mode, String retType) {
+        this.entityManager = entityManager;
+        queryMode = mode;
+        returnType = retType;
+    }
+
+    public TemplateModel get(String query) {
+        if (queryMode.equals("jpasingle")) {
+            resultObject = new ORMSequenceModel(entityManager, query);
+        } else {
+            resultObject = new ORMQueryModel(entityManager, query, queryMode, returnType); 
+        }
+        return resultObject;
+    }
+    
+    public boolean isEmpty() {
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/Version.java	Fri Aug 13 14:59:05 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.metadata.model;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+
+
+/**
+ *  Entity Version to store the db version.
+ */
+@Entity
+public class Version {
+
+    public static final transient int DB_VERSION = 5;
+
+    
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    @Column(name = "VERSION_ID")
+    private int id;
+
+    //DB_VERSION to set as default if version changes
+    @Basic
+    @Column(unique = true, nullable = false)
+    private int version = DB_VERSION;
+
+    /**
+     *  Helper function to set the identifier for the log file.
+     *  @param identifier for the log file.
+     */
+    public void setId(int identifier) {
+        id = identifier;
+    }
+
+    /**
+     *  Helper function to get the identifier for the db schema version.
+     *  @return identifier for this log file.
+     */
+    public int getId() {
+        return id;
+    }
+
+    /**
+     *  Helper function to set the db schema version.
+     *  @param location of the log file.
+     */
+    public void setVersion(int ver) {
+        version = ver;
+    }
+
+    /**
+     *  Helper function to return the current db schema version.
+     *  @return path of the log file..
+     */
+    public int getVersion() {
+        return version;
+    }
+}
\ 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/model/metadata/Component.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,162 @@
+/*
+ * 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.model.metadata;
+
+
+import java.util.List;
+
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+
+
+/**
+ * Entity class to store the component information.
+ */
+@SuppressWarnings("PMD.UnusedPrivateField")
+@Entity
+public class Component {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    @Column(name = "COMPONENT_ID")
+    private int id;
+
+    @Basic
+    @Column(nullable = false, length = 500)
+    private String component;
+
+    @Basic
+    @Column(name = "LOGFILE_ID", insertable = false, updatable = false)
+    private int logFileId;
+
+    @Basic
+    @Column(name = "UNIT_ID", insertable = false, updatable = false)
+    private int unitId;
+
+    @ManyToOne(cascade = CascadeType.REMOVE)
+    @JoinColumn(name = "LOGFILE_ID", referencedColumnName = "LOGFILE_ID")
+    private LogFile logFile;
+
+    @OneToMany(cascade = CascadeType.REMOVE)
+    @JoinColumn(name = "COMPONENT_ID", referencedColumnName = "COMPONENT_ID")
+    private List<WhatLogEntry> whatLogEntries;
+
+    @OneToMany(cascade = CascadeType.REMOVE)
+    @JoinColumn(name = "COMPONENT_ID", referencedColumnName = "COMPONENT_ID")    
+    private List<ComponentTime> componentTimes;
+
+    @OneToMany(cascade = CascadeType.REMOVE)
+    @JoinColumn(name = "COMPONENT_ID", referencedColumnName = "COMPONENT_ID")
+    private List<MetadataEntry> metadataEntries;
+
+    @OneToOne
+    @JoinColumn(name = "UNIT_ID", referencedColumnName = "UNIT_ID")
+    private SysdefUnit sysdefUnit;
+    
+    /**
+     * Helper function to set the identifier.
+     * @param identifier to set the identifier for the component.
+     */
+    public void setId(int identifier) {
+        id = identifier;
+    }
+
+    /**
+     * Helper function to set the identifier.
+     * @return the identifier of the component.
+     */
+    public int getId() {
+        return id;
+    }
+
+    /**
+     * Helper function to set component name.
+     * @param cmp string to be set to.
+     */
+    public void setComponent(String cmp) {
+        component = cmp;
+    }
+
+    /**
+     * Helper function to set log file associated
+     * with this component.
+     * @param file associated file to this component.
+     */
+    public void setLogFile(LogFile file) {
+        logFile = file;
+    }
+
+    /**
+     * Helper function to return component string.
+     * @return component name of this component.
+     */
+    public String getComponent() {
+        return component;
+    }
+
+    /**
+     * Helper function to return log file associated with this component.
+     * @return component name of this component.
+     */
+    public LogFile getLogFile() {
+        return logFile;
+    }
+
+    /**
+     * Helper function to return logpath id.
+     * @return log path id associated with this component.
+     */
+    public int getLogFileId() {
+        return logFileId;
+    }
+
+    /**
+     * Set the related Package. 
+     * @param modelPackage the related package entity
+     */    
+    public void setSysdefUnit(SysdefUnit sysdefUnit) {
+        this.sysdefUnit = sysdefUnit;
+    }
+
+    /**
+     * Get the related Package. 
+     * @return Returns the related package entity, null if the component
+     *         is not link to any Package.
+     */
+    
+    public SysdefUnit getSysdefUnit() {
+        return sysdefUnit;
+    }
+
+    public void setUnitId(int unitId) {
+        this.unitId = unitId;
+    }
+
+    public int getUnitId() {
+        return unitId;
+    }
+}
\ 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/model/metadata/ComponentTime.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,84 @@
+/*
+ * 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.model.metadata;
+
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+
+
+
+/**
+ *  Entity component time to store the time taken for each
+ *  component to build.
+ */
+@SuppressWarnings("PMD.UnusedPrivateField")
+@Entity
+public class ComponentTime {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    @Column(name = "COMPONENTTIME_ID")
+    private int id;
+
+    @Basic
+    @Column(name = "TIME")
+    private double componentTime;
+
+    @Basic
+    @Column(name = "COMPONENT_ID", insertable = false, updatable = false)
+    private int componentId;
+
+
+    @ManyToOne(cascade = CascadeType.REMOVE)
+    @JoinColumn(name = "COMPONENT_ID", referencedColumnName = "COMPONENT_ID")    
+    private Component component;
+
+    /**
+     *  Helper function to set the associated component.
+     *  @param cmpt for which the time to be recorded.
+     */
+    public void setComponent(Component cmpt) {
+        component = cmpt;
+    }
+
+
+    /**Helper function to return the time taken for this component
+     *  to build.
+     *  @return duration to build this component.
+     */
+    public double getDuration() {
+        return componentTime;
+    }
+
+    /**
+     *  Helper function to set the duration for this component to build.
+     *  @param duration to build this component.
+     */
+
+    public void setDuration(double duration) {
+        componentTime = duration;
+    }
+}
\ 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/model/metadata/ExecutionTime.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,117 @@
+/*
+ * 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.model.metadata;
+
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+
+
+/**
+ * Entity to store execution of some step/log.
+ *
+ */
+@Entity
+public class ExecutionTime {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    @Column(name = "EXECUTIONTIME_ID")
+    private int id;
+    
+    @Basic
+    private int time;
+
+    @Basic
+    @Column(name = "LOGFILE_ID", insertable = false, updatable = false, unique = true)
+    private int logFileId;
+    
+    @OneToOne(cascade = CascadeType.REMOVE)
+    @JoinColumn(name = "LOGFILE_ID", referencedColumnName = "LOGFILE_ID")
+    private LogFile logFile;
+
+    /**
+     * Set record id.
+     * @param id
+     */
+    public void setId(int id) {
+        this.id = id;
+    }
+    
+    /**
+     * Get The record id.
+     * @return
+     */
+    public int getId() {
+        return id;
+    }
+
+    /**
+     * Set the execution time in seconds.
+     * @param time
+     */
+    public void setTime(int time) {
+        this.time = time;
+    }
+
+    /**
+     * Get the execution time in seconds.
+     * @return
+     */
+    public int getTime() {
+        return time;
+    }
+
+    /**
+     * Set the logPathId.
+     * @param logPathID
+     */
+    public void setLogFileId(int logFileId) {
+        this.logFileId = logFileId;
+    }
+
+    /**
+     * Get the logPathId.
+     * @return
+     */
+    public int getLogFileId() {
+        return logFileId;
+    }
+
+    /**
+     * Set the logFile.
+     * @param logFile
+     */
+    public void setLogFile(LogFile logFile) {
+        this.logFile = logFile;
+    }
+
+    /**
+     * Get the logFile.
+     * @return
+     */
+    public LogFile getLogFile() {
+        return logFile;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/LogFile.java	Fri Aug 13 14:59:05 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.metadata.model.metadata;
+
+import java.io.File;
+import java.util.List;
+
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+
+
+/**
+ *  Entity LogFile to store the information about the log for
+ *  which the data to be written to database.
+ */
+@SuppressWarnings("PMD.UnusedPrivateField")
+@Entity
+public class LogFile {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    @Column(name = "LOGFILE_ID")
+    private int id;
+
+    @Basic
+    @Column(nullable = false, length = 500)
+    private String path;
+
+    @OneToMany(cascade = CascadeType.REMOVE)
+    @JoinColumn(name = "LOGFILE_ID", referencedColumnName = "LOGFILE_ID")
+    private List<Component> components;
+
+    @OneToMany(cascade = CascadeType.REMOVE)
+    @JoinColumn(name = "LOGFILE_ID", referencedColumnName = "LOGFILE_ID")
+    private List<MetadataEntry> metadataEntries;
+
+    @OneToMany(cascade = CascadeType.REMOVE)
+    @JoinColumn(name = "LOGFILE_ID", referencedColumnName = "LOGFILE_ID")
+    private List<ExecutionTime> executionTimes;
+    
+    
+    /**
+     *  Helper function to set the identifier for the log file.
+     *  @param identifier for the log file.
+     */
+    public void setId(int identifier) {
+        id = identifier;
+    }
+
+    /**
+     *  Helper function to get the identifier for the log file.
+     *  @return identifier for this log file.
+     */
+    public int getId() {
+        return id;
+    }
+
+    /**
+     *  Helper function to set the path of the log file.
+     *  @param location of the log file.
+     */
+    public void setPath(String location) {
+        path = location.replace('\\', '/');
+    }
+
+    /**
+     *  Helper function to set the path of the log file.
+     *  @param location of the log file.
+     */
+    public void setPath(File location) {
+        setPath(location.getAbsolutePath());
+    }
+
+    /**
+     *  Helper function to get the path.
+     *  @return path of the log file..
+     */
+    public String getPath() {
+        return path;
+    }
+}
\ 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/model/metadata/LogFileDAO.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,52 @@
+/*
+ * 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.model.metadata;
+
+import java.io.File;
+import java.util.List;
+
+import javax.persistence.NoResultException;
+
+import com.nokia.helium.metadata.JpaDAO;
+
+/**
+ * Implements DAO for the LogFile.
+ * Contains all helpers related to LogFile manipulation.
+ *
+ */
+public class LogFileDAO extends JpaDAO<LogFile> {
+    
+    /**
+     * Get a logfile instance by file name.
+     * @param logfile
+     * @return
+     */
+    public LogFile findByLogName(File logfile) {
+        LogFile result = null;
+        try {
+            List<LogFile> resultList = this.getEntityManager().createQuery("select l from LogFile l where l.path='" +
+                logfile.getAbsolutePath().replace('\\', '/') + "'", LogFile.class).getResultList();
+            if (resultList.size() > 0) {
+                result = resultList.get(0);
+            }
+        } catch (NoResultException ex) {
+            result = null;
+        }
+        return result;
+    }
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/MetadataEntry.java	Fri Aug 13 14:59:05 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.metadata.model.metadata;
+
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+
+
+/**
+ * Entity class which stores the the mapping of all the other tables
+ * along with actual error information.
+ */
+@SuppressWarnings("PMD.UnusedPrivateField")
+@Entity
+public class MetadataEntry {
+
+    /// Maximum size of the text we store in the metadata
+    public static final int TEXT_LENGTH = 500;
+
+    @Id
+    @Column(name = "ENTRY_ID")
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    private int id;
+
+    @Basic
+    private int lineNumber;
+
+    @Basic
+    @Column(length = TEXT_LENGTH)
+    private String text;
+
+    @Basic
+    @Column(name = "COMPONENT_ID", insertable = false, updatable = false)
+    private int componentId;
+
+    @Basic
+    @Column(name = "SEVERITY_ID", insertable = false, updatable = false)
+    private int severityId;
+
+    @ManyToOne(cascade = CascadeType.REMOVE, optional = false)
+    @JoinColumn(name = "COMPONENT_ID", referencedColumnName = "COMPONENT_ID")
+    private Component component;
+
+    @ManyToOne(cascade = CascadeType.REFRESH, optional = false)
+    @JoinColumn(name = "SEVERITY_ID", referencedColumnName = "SEVERITY_ID")
+    private Severity severity;
+
+    @Column(name = "LOGFILE_ID", insertable = false, updatable = false)
+    private int logFileId;
+    
+    @ManyToOne(cascade = CascadeType.REMOVE, optional = false)
+    @JoinColumn(name = "LOGFILE_ID", referencedColumnName = "LOGFILE_ID")
+    private LogFile logFile;
+    
+    /**
+     * Helper function to get the identifier of the metadata record
+     * which is being stored in the database.
+     *  @return id - identifier for the log record.
+     */
+    public int getId() {
+        return id;
+    }
+
+    /**
+     * Helper function to set the logfile associated to the metadata entry.
+     *  @param LogFile object associated to this entry.
+     */
+    public void setLogFile(LogFile file) {
+        logFile = file;
+    }
+
+    /**
+     * Helper function to set the severity object associated to this entry.
+     *  @param severity object associated to this entry.
+     */
+    public void setSeverity(Severity severity) {
+        this.severity = severity;
+    }
+
+    /**
+     * Helper function to set the component object associated to this entry.
+     *  @param component object associated to this entry.
+     */
+    public void setComponent(Component component) {
+        this.component = component;
+    }
+
+    /**
+     * Helper function to set the identifier for this entry.
+     *  @param id identifier to be set for this entry.
+     */
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    /**
+     * Helper function to set the log text associated to this entry.
+     *  @param txt - text representing this log entry.
+     */
+    public void setText(String text) {
+        // Let's trunk ourselves the text we are passing to the 
+        // storage.
+        if (text.length() > TEXT_LENGTH) {
+            text = text.substring(0, TEXT_LENGTH);
+        }
+        this.text = text;
+    }
+
+    /**
+     * Helper function to set the line number for this entry.
+     *  @param line number associated to this entry.
+     */
+    public void setLineNumber(int lineNumber) {
+        this.lineNumber = lineNumber;
+    }
+
+    /**
+     * Helper function to get the text message associated to this entry.
+     *  @return text message of this entry.
+     */
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * Helper function to get line number of the error message associated
+     * with this object.
+     *  @return line number associated to this entry.
+     */
+    public int getLineNumber() {
+        return lineNumber;
+    }
+
+    /**
+     * Helper function to get the log path id of this entry.
+     *  @return log path id associated to this entry.
+     */
+    public int getLogFileId() {
+        return logFileId;
+    }
+
+    /**
+     * Helper function to set the logpath id associated to this entry.
+     *  @param id logpath id of this entry.
+     */
+    public void setLogFileId(int id) {
+        logFileId = id;
+    }
+
+    /**
+     * Helper function to set the severity id associated to this entry.
+     *  @param severityId severity id of this entry.
+     */
+    public void setSeverityId(int severityId) {
+        this.severityId = severityId;
+    }
+
+    /**
+     * Helper function to set the component id associated to this entry.
+     *  @param componentId component id of this entry.
+     */
+    public void setComponentId(int componentId) {
+        this.componentId = componentId;
+    }
+}
\ 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/model/metadata/Severity.java	Fri Aug 13 14:59:05 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.metadata.model.metadata;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+
+
+
+/**
+ * Entity Class stores the severity.
+ */
+@Entity
+public class Severity {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    @Column(name = "SEVERITY_ID")
+    private int id;
+
+    @Basic
+    @Column(name = "SEVERITY")
+    private String severity;
+
+
+    /**
+     * Helper function to set the severity string.
+     * @param prty - severity string to be stored for this
+     * severity object.
+     */
+    public void setSeverity(String severity) {
+        this.severity = severity.toUpperCase();
+    }
+
+    /**
+     * Helper function to get the severity of the severity object
+     * @return severity string of this severity object.
+     */
+    public String getSeverity() {
+        return severity.toUpperCase();
+    }
+
+    /**
+     * Set the identifier of this severity object in the database.
+     * @param id for this severity in the database
+     */
+    public void setId(int identifier) {
+        id = identifier;
+    }
+
+    /**
+     * Gets the identifier of the severity object.
+     * @return id of this severity object.
+     */
+    public int getId() {
+        return id;
+    }
+
+}
\ 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/model/metadata/SeverityDAO.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,39 @@
+/*
+ * 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.model.metadata;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import com.nokia.helium.metadata.JpaDAO;
+
+/**
+ * Implements DAO for the Severity.
+ * Contains all helpers related to Severity manipulation.
+ *
+ */
+public class SeverityDAO extends JpaDAO<Severity> {
+
+    public Map<String, Severity> getSeverities() {
+        Map<String, Severity> result = new Hashtable<String, Severity>();
+        for (Severity severity : this.getEntityManager().createQuery("SELECT s from Severity s", Severity.class).getResultList()) {
+            result.put(severity.getSeverity(), severity);
+        }
+        return result;
+    }
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefCollection.java	Fri Aug 13 14:59:05 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.model.metadata;
+
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+/**
+ * System definition collection. 
+ *
+ */
+@SuppressWarnings("PMD.UnusedPrivateField")
+@Entity
+public class SysdefCollection {
+    
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    @Column(name = "COLLECTION_ID")
+    private int id;
+    
+    @Column(name = "ID", nullable = false, unique = true, length = 255)
+    private String collectionId;
+
+    @Column(name = "NAME", nullable = false, length = 255)
+    private String name;
+
+    @Column(name = "PACKAGE_ID", insertable = false, updatable = false, nullable = false)
+    private int packageId;
+
+    @ManyToOne(cascade = CascadeType.REMOVE)
+    @JoinColumn(name = "PACKAGE_ID", referencedColumnName = "PACKAGE_ID")
+    private SysdefPackage sysdefPackage;
+
+    @OneToMany
+    @JoinColumn(name = "COLLECTION_ID", referencedColumnName = "COLLECTION_ID")
+    private List<SysdefComponent> sysdefComponents;
+    
+    
+    public void setSysdefPackage(SysdefPackage sysdefPackage) {
+        this.sysdefPackage = sysdefPackage;
+    }
+
+    public SysdefPackage getSysdefPackage() {
+        return sysdefPackage;
+    }
+
+    public void setCollectionId(String collectionId) {
+        this.collectionId = collectionId;
+    }
+
+    public String getCollectionId() {
+        return collectionId;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setPackageId(int packageId) {
+        this.packageId = packageId;
+    }
+
+    public int getPackageId() {
+        return packageId;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefCollectionDAO.java	Fri Aug 13 14:59:05 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.metadata.model.metadata;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.persistence.NoResultException;
+import javax.persistence.TypedQuery;
+
+import com.nokia.helium.metadata.JpaDAO;
+
+/**
+ * Implements DAO for the Collection.
+ * Contains all helpers related to Collection manipulation.
+ *
+ */
+public class SysdefCollectionDAO extends JpaDAO<SysdefCollection> {
+
+    /**
+     * Get a map of collections rows based on the collection name.
+     * @return a map of (collectionName, collection).
+     */
+    public Map<String, SysdefCollection> getCollections() {
+        Map<String, SysdefCollection> result = new Hashtable<String, SysdefCollection>();
+        for (SysdefCollection collection : this.getEntityManager().createQuery("SELECT c from SysdefCollection c", SysdefCollection.class).getResultList()) {
+            result.put(collection.getCollectionId(), collection);
+        }
+        return result;
+    }
+
+    /**
+     * Get a collection based on its model Id.
+     * @param id
+     * @return the entity representing the collection of null if not found.
+     */
+    public SysdefCollection getCollectionById(String id) {
+        TypedQuery<SysdefCollection> query = this.getEntityManager().createQuery("SELECT c from SysdefCollection c where c.collectionId=?1", SysdefCollection.class);
+        query.setParameter(1, id);
+        try {
+            return query.getSingleResult();
+        } catch (NoResultException ex) {
+            return null;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefComponent.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,99 @@
+/*
+ * 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.model.metadata;
+
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+/**
+ * System definition component. 
+ *
+ */
+@SuppressWarnings("PMD.UnusedPrivateField")
+@Entity
+public class SysdefComponent {
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    @Column(name = "COMPONENT_ID")
+    private int id;
+        
+    @Column(name = "ID", nullable = false, unique = true, length = 255)
+    private String componentId;
+
+    @Column(name = "NAME", nullable = false, length = 255)
+    private String name;
+    
+    @Column(name = "COLLECTION_ID", insertable = false, updatable = false, nullable = false)
+    private int collectionId;
+
+    @ManyToOne(cascade = CascadeType.REMOVE)
+    @JoinColumn(name = "COLLECTION_ID", referencedColumnName = "COLLECTION_ID")
+    private SysdefCollection sysdefCollection;
+    
+    @OneToMany
+    @JoinColumn(name = "COMPONENT_ID", referencedColumnName = "COMPONENT_ID")
+    private List<SysdefUnit> sysdefUnits;
+
+    public void setCollectionId(int collectionId) {
+        this.collectionId = collectionId;
+    }
+
+    public int getCollectionId() {
+        return collectionId;
+    }
+
+    public void setComponentId(String componentId) {
+        this.componentId = componentId;
+    }
+
+    public String getComponentId() {
+        return componentId;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setSysdefCollection(SysdefCollection sysdefCollection) {
+        this.sysdefCollection = sysdefCollection;
+    }
+
+    public SysdefCollection getSysdefCollection() {
+        return sysdefCollection;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefComponentDAO.java	Fri Aug 13 14:59:05 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.metadata.model.metadata;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.persistence.NoResultException;
+import javax.persistence.TypedQuery;
+
+import com.nokia.helium.metadata.JpaDAO;
+
+/**
+ * Implements DAO for the Component.
+ * Contains all helpers related to Component manipulation.
+ *
+ */
+public class SysdefComponentDAO extends JpaDAO<SysdefComponent> {
+
+    /**
+     * Get a map of components rows based on the component name.
+     * @return a map of (componentName, component).
+     */
+    public Map<String, SysdefComponent> getComponents() {
+        Map<String, SysdefComponent> result = new Hashtable<String, SysdefComponent>();
+        for (SysdefComponent component : this.getEntityManager().createQuery("SELECT c from SysdefComponent c", SysdefComponent.class).getResultList()) {
+            result.put(component.getComponentId(), component);
+        }
+        return result;
+    }
+
+    /**
+     * Get a component based on its model Id.
+     * @param id
+     * @return the entity representing the component of null if not found.
+     */
+    public SysdefComponent getComponentById(String id) {
+        TypedQuery<SysdefComponent> query = this.getEntityManager().createQuery("SELECT c from SysdefComponent c where c.componentId=?1", SysdefComponent.class);
+        query.setParameter(1, id);
+        try {
+            return query.getSingleResult();
+        } catch (NoResultException ex) {
+            return null;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefPackage.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,85 @@
+/*
+ * 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.model.metadata;
+
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+
+/**
+ * This class represent the PACKAGE table in the
+ * database.
+ * Each package name will be unique across the build
+ * that is why it is not link to any specific logFile. 
+ */
+@SuppressWarnings("PMD.UnusedPrivateField")
+@Entity
+public class SysdefPackage {
+    
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    @Column(name = "PACKAGE_ID")
+    private int id;
+
+    @Column(name = "ID", nullable = false, unique = true, length = 255)
+    private String packageId;
+
+    @Column(name = "NAME", nullable = false, length = 255)
+    private String name;
+    
+    @OneToMany
+    @JoinColumn(name = "PACKAGE_ID", referencedColumnName = "PACKAGE_ID")
+    private List<SysdefCollection> sysdefCollections;
+
+    /**
+     * Set the id of the row.
+     * @param id
+     */
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    /**
+     * Get the id of the row.
+     * @return the id
+     */
+    public int getId() {
+        return id;
+    }
+
+    public void setPackageId(String packageId) {
+        this.packageId = packageId;
+    }
+
+    public String getPackageId() {
+        return packageId;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefPackageDAO.java	Fri Aug 13 14:59:05 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.metadata.model.metadata;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.persistence.NoResultException;
+import javax.persistence.TypedQuery;
+
+import com.nokia.helium.metadata.JpaDAO;
+
+/**
+ * Implements DAO for the Package.
+ * Contains all helpers related to Package manipulation.
+ *
+ */
+public class SysdefPackageDAO extends JpaDAO<SysdefPackage> {
+
+    /**
+     * Get a map of packages rows based on the package name.
+     * @return a map of (pkgname, Package).
+     */
+    public Map<String, SysdefPackage> getPackages() {
+        Map<String, SysdefPackage> result = new Hashtable<String, SysdefPackage>();
+        for (SysdefPackage pkg : this.getEntityManager().createQuery("SELECT p from SysdefPackage p", SysdefPackage.class).getResultList()) {
+            result.put(pkg.getPackageId(), pkg);
+        }
+        return result;
+    }
+
+    /**
+     * Get an package based on its model Id.
+     * @param id
+     * @return the entity representing the package of null if not found.
+     */
+    public SysdefPackage getPackageById(String id) {
+        TypedQuery<SysdefPackage> query = this.getEntityManager().createQuery("SELECT p from SysdefPackage p where p.packageId=?1", SysdefPackage.class);
+        query.setParameter(1, id);
+        try {
+            return query.getSingleResult();
+        } catch (NoResultException ex) {
+            return null;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefUnit.java	Fri Aug 13 14:59:05 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.metadata.model.metadata;
+
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+/**
+ * System definition unit.
+ *
+ */
+@SuppressWarnings("PMD.UnusedPrivateField")
+@Entity
+public class SysdefUnit {
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    @Column(name = "UNIT_ID")
+    private int id;
+
+    @Column(name = "LOCATION", nullable = false, length = 4096)
+    private String location;
+
+    @Column(name = "COMPONENT_ID", insertable = false, updatable = false, nullable = false)
+    private int componentId;
+
+    @ManyToOne(cascade = CascadeType.REMOVE)
+    @JoinColumn(name = "COMPONENT_ID", referencedColumnName = "COMPONENT_ID")
+    private SysdefComponent sysdefComponent;
+
+    @OneToMany
+    @JoinColumn(name = "UNIT_ID", referencedColumnName = "UNIT_ID")
+    private List<Component> components;
+    
+    
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setLocation(String location) {
+        this.location = location;
+    }
+
+    public String getLocation() {
+        return location;
+    }
+
+    public void setComponentId(int componentId) {
+        this.componentId = componentId;
+    }
+
+    public int getComponentId() {
+        return componentId;
+    }
+
+    public void setSysdefComponent(SysdefComponent sysdefComponent) {
+        this.sysdefComponent = sysdefComponent;
+    }
+
+    public SysdefComponent getSysdefComponent() {
+        return sysdefComponent;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/SysdefUnitDAO.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,61 @@
+/*
+ * 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.model.metadata;
+
+import java.io.File;
+import java.util.List;
+
+import javax.persistence.NoResultException;
+import javax.persistence.TypedQuery;
+
+import com.nokia.helium.metadata.JpaDAO;
+
+/**
+ * Implements DAO for the Unit.
+ * Contains all helpers related to Unit manipulation.
+ *
+ */
+public class SysdefUnitDAO extends JpaDAO<SysdefUnit> {
+    
+    /**
+     * Get a map of units rows based on the unit name.
+     * @return a map of (unitName, unit).
+     */
+    public List<SysdefUnit> getUnits() {
+        return this.getEntityManager().createQuery("SELECT c from SysdefUnit c", SysdefUnit.class).getResultList();
+    }
+
+    /**
+     * Get a unit based on its model Id.
+     * @param id
+     * @return the entity representing the unit of null if not found.
+     */
+    public SysdefUnit getUnitByLocation(File epocroot, File location) {
+        return getUnitByLocation(epocroot.toURI().relativize(location.toURI()).getPath());
+    }
+
+    public SysdefUnit getUnitByLocation(String location) {
+        TypedQuery<SysdefUnit> query = this.getEntityManager().createQuery("SELECT u from SysdefUnit u where u.location=?1", SysdefUnit.class);
+        query.setParameter(1, location);
+        try {
+            return query.getSingleResult();
+        } catch (NoResultException ex) {
+            return null;
+        }
+    }
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/model/metadata/WhatLogEntry.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,128 @@
+/*
+ * 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.model.metadata;
+
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+
+/**
+ * Entity class to store the component information.
+ */
+@Entity
+public class WhatLogEntry {
+
+    public static final int PATH_MAX = 4096;
+    
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    @Column(name = "WHATLOG_ENTRY_ID")
+    private int id;
+
+    @Basic
+    @Column(name = "COMPONENT_ID", insertable = false, updatable = false)
+    private int componentId;
+
+    @Basic
+    @Column(name = "MEMBER", nullable = false, length = PATH_MAX)
+    private String member;
+
+    @Basic
+    @Column(name = "MISSING")
+    private boolean missing;
+
+    @ManyToOne(cascade = CascadeType.ALL)
+    @JoinColumn(name = "COMPONENT_ID", referencedColumnName = "COMPONENT_ID")
+    private Component component;
+
+    /**
+     * Helper function to set the identifier.
+     * @param identifier to set the identifier for the component.
+     */
+    public void setId(int identifier) {
+        id = identifier;
+    }
+
+    /**
+     * Helper function to set the identifier.
+     * @return the identifier of the component.
+     */
+    public int getId() {
+        return id;
+    }
+
+    /**
+     * Helper function to set component name.
+     * @param cmp string to be set to.
+     */
+    public void setComponent(Component cmp) {
+        component = cmp;
+    }
+
+    /**
+     * Helper function to set log file associated
+     * with this component.
+     * @param file associated file to this component.
+     */
+    public void setMember(String member) {
+        // Truncate the string if it doesn't fit to the schema.
+        if (member.length() > PATH_MAX) {
+            member = member.substring(0, PATH_MAX);
+        }
+        this.member = member;
+    }
+
+    /**
+     * Helper function to return component string.
+     * @return component name of this component.
+     */
+    public Component getComponent() {
+        return component;
+    }
+
+    /**
+     * Helper function to return log file associated with this component.
+     * @return component name of this component.
+     */
+    public String getMember() {
+        return member;
+    }
+
+    public void setMissing(boolean nonexistance) {
+        missing = nonexistance;
+    }
+
+    public boolean getMissing() {
+        return missing;
+    }
+
+    public int getComponentID() {
+        return componentId;
+    }
+
+    public void setComponentId(int componentId) {
+        this.componentId = componentId;
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/log4j.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : libs.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:
+
+============================================================================
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+    <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
+            <appender-ref ref="FILE"/>
+            <appender-ref ref="CONSOLE"/>
+    </appender>
+
+    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+        <layout class="org.apache.log4j.PatternLayout">
+               <param name="ConversionPattern" 
+                            value="%d{HH:mm:ss,SSS}  %-2p - %m  %n"/>
+        </layout>
+    <filter class="org.apache.log4j.varia.LevelMatchFilter">
+      <param name="LevelToMatch" value="DEBUG" />
+      <param name="AcceptOnMatch" value="false" />
+    </filter>
+    </appender>
+
+
+    <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
+        <param name="File" value="hlm_debug.log"/>
+        <param name="MaxFileSize" value="1024KB"/>
+        <param name="append" value="true"/>
+        <layout class="org.apache.log4j.PatternLayout">
+               <param name="ConversionPattern" 
+                            value="%d{HH:mm:ss,SSS}  %-2p - %m  %n"/>
+        </layout>
+    <filter class="org.apache.log4j.varia.LevelMatchFilter">
+      <param name="LevelToMatch" value="DEBUG" />
+      <param name="AcceptOnMatch" value="true" />
+    </filter>
+
+    <filter class="org.apache.log4j.varia.DenyAllFilter"/>
+
+    </appender>
+
+  <logger name="com.nokia" additivity="false">
+      <level value="DEBUG" />
+    <appender-ref ref="ASYNC" />
+  </logger>
+
+    <root>
+        <priority value="DEBUG"/>
+        <appender-ref ref="CONSOLE"/>
+    </root>
+</log4j:configuration>
--- a/buildframework/helium/sf/java/metadata/src/templates/build_status.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-<#--
-============================================================================ 
-Name        : email.html.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"?>
-<build-status>
-    <#assign table_info = pp.loadData('com.nokia.helium.metadata.SQLFMPPLoader',
-        "${dbPath}") >
-<#assign priority_table = table_info['select * from priority'] >
-<#assign priority_ids = priority_table?keys>
-
-<#list priority_ids as priority>
-    <#assign priority_count = table_info['select count(data) as COUNT from metadata where priority_id = ${priority} and logpath_id in (select id from logfiles where path like \'%${logfile}%\')'][0]['COUNT'] >
-    <#if (priority_count >= 0)>
-        <${priority_table['${priority}']?lower_case} count= "${priority_count}">
-    </#if>
-</#list>
-</build-status>
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/templates/cc_summary.html.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-<#--
-============================================================================ 
-Name        : cc_summary.html.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:
-
-============================================================================
--->
-
-    <#assign table_info = pp.loadData('com.nokia.helium.metadata.SQLFMPPLoader',
-        "${dbPath}") >
- 
-<h1>${ant['build.id']}</h1>
-
-<#if ant?keys?seq_contains('publish')>
-    <#if ant?keys?seq_contains('publish.dir.list')>
-        <h2>Publish locations</h2>
-        <p>
-        <#list ant['publish.dir.list']?split(',') as site>
-          <a href="${site}">${site}</a></br>
-        </#list>
-        </p>
-    <#else>
-        <#if ant?keys?seq_contains('publish.dir')>
-        <h2>Publish locations</h2>
-        <p><a href="${ant['publish.dir']}">${ant['publish.dir']}</a></p>
-        </#if>
-    </#if>
-</#if>
-
-<#assign ccm_logpath_table = table_info['select * from logfiles where path like \'%_ccm_get_input.log%\''] >
-
-<#assign logpath_id = ccm_logpath_table?keys>
-<#list logpath_id as logpath>
-<#assign metadata_ccm_records = table_info['select * from metadata where logpath_id = ${logpath} and (priority_id = (select id from priority where priority=\'ERROR\')  or priority_id = (select id from priority where priority=\'WARNING\'))'] >
-<h2>Synergy errors</h2>
-    <p>
-    <#list metadata_ccm_records as recordentry>
-        ${recordentry['data']}
-    </#list>
-    </p>
-</#list>
-
-<h2>Build errors</h2>
-<#assign compile_logpath_table = table_info['select * from logfiles where (path like \'%_compile.log\'  and path not like \'%_clean_compile.log\')'] >
-<#assign colors = {'error': 'FF0000', 'critical': 'FF7000', 'warning': 'FFF000', 'remark': '0000FF'}/>
-
-<table border="1" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-    <th width="55%">Component</th>
-    <th width="15%">Errors</th>
-    <th width="15%">Criticals</th>
-    <th width="15%">Warnings</th>
-    <th width="15%">Notes</th>
-</tr>
-<#assign logpath_id = compile_logpath_table?keys>
-<#list logpath_id as logpath>
-    <#assign component_table = table_info['select id, component from component where logPath_id=${logpath}'] >
-    <#assign component_ids = component_table?keys?sort >
-
-<#list component_ids as component_id>
-<tr>
-<td>"${component_table['${component_id}']}"</td>
-    <#list colors?keys as type>
-        <#assign count = "${table_info['select count(data) as COUNT from metadata where logpath_id=${logpath} and (priority_id = (select id from priority where priority like \"${type}\"))'][0]['COUNT']}" >
-        <#if ( count?number &gt; 0)>
-<td align="center" bgcolor="#${colors[type]}">${count}</td>
-        <#else>
-<td align="center">0</td>
-        </#if>
-    </#list>
-</tr>
-</#list>
-</#list>
-</table>
-
-<#assign rom_logpath_table = table_info['select * from logfiles where (path like \'%roms.log\')'] >
-<#assign logpath_id = rom_logpath_table?keys>
-<#list logpath_id as logpath>
-    <#assign romlog_table = table_info['select * from metadata where logpath_id = ${logpath}'] >
-    <h2>ROMs ${rom_logpath_table['${logpath}']}</h2>
-        <p>
-    <#list romlog_table as recordentry>
-        ${recordentry['data']}<br/>
-    </#list>
-        </p>
-</#list>
-
-<#assign policy_logpath_table = table_info['select * from logfiles where (path like \'%validate_policy.xml\')'] >
-<#assign logpath_id = policy_logpath_table?keys>
-<#list logpath_id as logpath>
-    <#assign policy_table = table_info['select * from metadata where logpath_id = ${logpath}'] >
-        <h2>Distribution Policy validation</h2>
-        <p>
-        <#list policy_table as recordentry>
-            ${recordentry['data']}<br/>
-        </#list>
-        </p>
-</#list>
-
-<#if ant?keys?seq_contains('diamonds.build.id')>
-<p>
-<h2>ATS Test Results</h2>
-    <a href="http://${ant['diamonds.host']}${ant['diamonds.build.id']}#tab=4" >http://${ant['diamonds.host']}${ant['diamonds.build.id']}#tab=4 </a>
-</p>
-</#if>
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/templates/cc_summary_metadata.html.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-<#--
-============================================================================ 
-Name        : cc_summary.html.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:
-
-============================================================================
--->
-
-    <#assign table_info = pp.loadData('com.nokia.helium.metadata.SQLFMPPLoader',
-        "${dbPath}") >
- 
-<h1>${ant['build.id']}</h1>
-
-<#if ant?keys?seq_contains('publish')>
-    <#if ant?keys?seq_contains('publish.dir.list')>
-        <h2>Publish locations</h2>
-        <p>
-        <#list ant['publish.dir.list']?split(',') as site>
-          <a href="${site}">${site}</a></br>
-        </#list>
-        </p>
-    <#else>
-        <#if ant?keys?seq_contains('publish.dir')>
-        <h2>Publish locations</h2>
-        <p><a href="${ant['publish.dir']}">${ant['publish.dir']}</a></p>
-        </#if>
-    </#if>
-</#if>
-
-<#assign ccm_logpath_table = table_info['select * from logfiles where path like \'%_ccm_get_input.log%\''] >
-
-<#assign logpath_id = ccm_logpath_table?keys>
-<#list logpath_id as logpath>
-<#assign metadata_ccm_records = table_info['select * from metadata where logpath_id = ${logpath} and (priority_id = (select id from priority where priority=\'ERROR\')  or priority_id = (select id from priority where priority=\'WARNING\'))'] >
-<h2>Synergy errors</h2>
-    <p>
-    <#list metadata_ccm_records as recordentry>
-        ${recordentry['data']}
-    </#list>
-    </p>
-</#list>
-
-<h2>Build errors</h2>
-<#assign compile_logpath_table = table_info['select * from logfiles where (path like \'%_compile.log\'  and path not like \'%_clean_compile.log\')'] >
-<#assign colors = {'error': 'FF0000', 'critical': 'FF7000', 'warning': 'FFF000', 'remark': '0000FF'}/>
-
-<table border="1" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-    <th width="55%">Component</th>
-    <th width="15%">Errors</th>
-    <th width="15%">Criticals</th>
-    <th width="15%">Warnings</th>
-    <th width="15%">Notes</th>
-</tr>
-<#assign logpath_id = compile_logpath_table?keys>
-<#list logpath_id as logpath>
-    <#assign component_table = table_info['select id, component from component where logPath_id=${logpath}'] >
-    <#assign component_ids = component_table?keys?sort >
-
-<#list component_ids as component_id>
-<tr>
-<td>"${component_table['${component_id}']}"</td>
-    <#list colors?keys as type>
-        <#assign count = "${table_info['select count(data) as COUNT from metadata where logpath_id=${logpath} and (priority_id = (select id from priority where priority like \"${type}\"))'][0]['COUNT']}" >
-        <#if ( count?number &gt; 0)>
-<td align="center" bgcolor="#${colors[type]}">${count}</td>
-        <#else>
-<td align="center">0</td>
-        </#if>
-    </#list>
-</tr>
-</#list>
-</#list>
-</table>
-
-<#assign rom_logpath_table = table_info['select * from logfiles where (path like \'%roms.log\')'] >
-<#assign logpath_id = rom_logpath_table?keys>
-<#list logpath_id as logpath>
-    <#assign romlog_table = table_info['select * from metadata where logpath_id = ${logpath}'] >
-    <h2>ROMs ${rom_logpath_table['${logpath}']}</h2>
-        <p>
-    <#list romlog_table as recordentry>
-        ${recordentry['data']}<br/>
-    </#list>
-        </p>
-</#list>
-
-<#assign policy_logpath_table = table_info['select * from logfiles where (path like \'%validate_policy.xml\')'] >
-<#assign logpath_id = policy_logpath_table?keys>
-<#list logpath_id as logpath>
-    <#assign policy_table = table_info['select * from metadata where logpath_id = ${logpath}'] >
-        <h2>Distribution Policy validation</h2>
-        <p>
-        <#list policy_table as recordentry>
-            ${recordentry['data']}<br/>
-        </#list>
-        </p>
-</#list>
-
-<#if ant?keys?seq_contains('diamonds.build.id')>
-<p>
-<h2>ATS Test Results</h2>
-    <a href="http://${ant['diamonds.host']}${ant['diamonds.build.id']}#tab=4" >http://${ant['diamonds.host']}${ant['diamonds.build.id']}#tab=4 </a>
-</p>
-</#if>
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/templates/diamonds_faults.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-<#--
-============================================================================ 
-Name        : macro.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:
-
-============================================================================
---> 
-<#setting number_format="0">
-
-    <#assign table_info = pp.loadData('com.nokia.helium.metadata.SQLFMPPLoader',
-        "${dbPath}") >
-    <#assign priority_table = table_info['select * from priority'] >
-    <#assign logpath_table = table_info['select * from logfiles'] >
-    <#assign priority_ids = priority_table?keys>
-    <#assign logpath_id = logpath_table?keys>
-    <#assign components = table_info['select component from component where logPath_id=(select id from logfiles where path=\'${logpath}\')'] >
-    <faults>
-        <total severity="error">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'ERROR\') and logpath_id=(select id from logfiles where path=\'${logpath}\')'][0]['COUNT']}</total>
-        <total severity="warning">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'WARNING\') and logpath_id=(select logpath_id from logfiles where path=\'${logpath}\')'][0]['COUNT']}</total>
-        <total severity="warning_rvct_other">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'WARNING\') and logpath_id=(select logpath_id from logfiles where path=\'${logpath}\')'][0]['COUNT']}</total>
-        <!-- todo update to calculate the correct value -->
-        <total severity="warning_rvct_bad">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'REMARK\')'][0]['COUNT']}</total>
-    <#list components as component>
-        <component>
-            <name>${component['component']}</name>
-            <total severity="error">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'ERROR\') and logpath_id=(select logpath_id from logfiles where path=\'${logpath}\')'][0]['COUNT']}</total>
-            <total severity="warning">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'WARNING\') and logpath_id=(select logpath_id from logfiles where path=\'${logpath}\')'][0]['COUNT']}</total>
-            <total severity="critical">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'REMARK\') and logpath_id=(select logpath_id from logfiles where path=\'${logpath}\')'][0]['COUNT']}</total>
-        </component>
-    </#list>
-
-    
-    </faults>
-    <components>
-    <#list components as component>
-    <!-- all components -->
-        <component>${component['component']}</component>
-    </#list>
-    </components>
-<#assign schema_version=10/>
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/templates/diamonds_macro.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-<#--
-============================================================================ 
-Name        : macro.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:
-
-============================================================================
---> 
-<#setting number_format="0">
-
-    <#assign table_info = pp.loadData('com.nokia.helium.metadata.SQLFMPPLoader',
-        "${dbPath}") >
-    <#assign priority_table = table_info['select * from priority'] >
-    <#assign logpath_table = table_info['select * from logfiles'] >
-    <#assign priority_ids = priority_table?keys>
-    <#assign logpath_id = logpath_table?keys>
-    <#assign components = table_info['select component from component where logPath_id=(select id from logfiles where path=\'${logpath}\')'] >
-    <faults>
-        <total severity="error">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'ERROR\') and logpath_id=(select id from logfiles where path=\'${logpath}\')'][0]['COUNT']}</total>
-        <total severity="warning">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'WARNING\') and logpath_id=(select logpath_id from logfiles where path=\'${logpath}\')'][0]['COUNT']}</total>
-        <total severity="warning_rvct_other">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'WARNING\') and logpath_id=(select logpath_id from logfiles where path=\'${logpath}\')'][0]['COUNT']}</total>
-        <!-- todo update to calculate the correct value -->
-        <total severity="warning_rvct_bad">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'REMARK\')'][0]['COUNT']}</total>
-    <#list components as component>
-        <component>
-            <name>${component['component']}</name>
-            <total severity="error">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'ERROR\') and logpath_id=(select logpath_id from logfiles where path=\'${logpath}\')'][0]['COUNT']}</total>
-            <total severity="warning">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'WARNING\') and logpath_id=(select logpath_id from logfiles where path=\'${logpath}\')'][0]['COUNT']}</total>
-            <total severity="critical">${table_info['select count(data) as COUNT from metadata where priority_id=(select id from priority where priority=\'REMARK\') and logpath_id=(select logpath_id from logfiles where path=\'${logpath}\')'][0]['COUNT']}</total>
-        </component>
-    </#list>
-    </faults>
-    <components>
-    <#list components as component>
-    <!-- all components -->
-        <component>${component['component']}</component>
-    </#list>
-    </components>
-<#assign schema_version=10/>
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/templates/email_new.html.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-<#--
-============================================================================ 
-Name        : email.html.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"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
-  <head>
-  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-    <title>
-      Build result e-mail from ${ant["env.COMPUTERNAME"]}.
-    </title>
-    <style type="text/css">
-        body{font-family:Verdana; font-size:10pt; line-height:1.1em; padding: 10px 10px; background-color:#E4F0F4;}
-        h1{
-          font-size:14pt;
-          color:#000;
-          padding: 20px 15px;
-              margin:0;
-         }
-        h2{font-size:12pt;}
-        h5{
-          font-size:10pt;
-          background-color:#8495BA;
-          color:#fff;
-          heigth:20pt;
-          padding: 5px 15px;
-          border-left:2px solid #5A6FA0;
-          border-bottom:2px solid #5A6FA0;
-          border-top:2px solid #98A6C6;
-          border-right:2px solid #98A6C6;
-          margin:0;
-         }
- 
-  
-        p {
-          font-size:10pt;
-          padding: 0em 1em 1em 1em;
-          margin: 0 1em 0.5em 1em;
-          border-right:1px solid #5A6FA0;
-          border-top:0;
-          border-bottom:1px solid #98A6C6;
-          border-left:1px solid #98A6C6;
-          background-color:#CDE4EB;
-          white-space:normal;
-        }
- 
-        .data{color:#00F;}
-        .okmessage{color:#24A22D;font-weight:bold; display:block; margin-bottom: 1em;padding-top: 1em;}
-        .errormessage{color:#F00;font-weight:bold; display:block; margin-bottom: 1em;padding-top: 1em;}
- 
-        span.items{text-indent:-1em; padding-left: 1em; display:block; word-wrap:normal;}
-
-        span.bold{font-weight:bold; display:block; padding: 1em 0;}
-        p.maintext{padding-top: 1em;}
-        p.logfolder{color:#000;font-weight:bold; padding-top: 1em;}
-        p.distrib{font-weight:bold;}
- 
- 
-        a:link,a:visited{color:#00E;}
-        
-    </style>
-  </head>
-  <body>
-      <!-- The title -->
-      <div id="buildname">
-        <h1>This is an e-mail notification that a build has been completed on ${ant["env.COMPUTERNAME"]}</h1>
-      </div>
-
-    <#assign table_info = pp.loadData('com.nokia.helium.metadata.SQLFMPPLoader',
-        "${dbPath}") >
-
-<#assign error_count = table_info['select count(data) as COUNT from metadata where priority_id in (select id from priority where priority like \'ERROR\') and logpath_id in (select id from logfiles where path like \'%${logfile}%\')'][0]['COUNT'] >
-    <!-- section -->
-    <#macro create_section title type>
-           <div id="foldername">
-               <h5>${title}</h5>
-               <p class="maintext">
-                   <!-- content span -->
-                   <span class="${type}"><#nested></span>
-               </p>
-           </div>
-       </#macro>
-<#if (error_count > 0)>
-        <span class="errormessage">
-            ${logfile}...FAIL<br/>
-    <#list table_info['select * from metadata where priority_id in (select id from priority where priority like \'ERROR\') and logpath_id in (select id from logfiles where path like \'%${logfile}%\')'] as recordentry >
-            <ul>
-            ${recordentry['data']}<br/>
-            </ul>
-    </#list>
-        </span>
-<#else>
-    <span class="okmessage">${logfile}...OK<br/></span>
-</#if>
-</body>
-</html>
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/templates/faults.txt.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-<#--
-============================================================================ 
-Name        : macro.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:
-
-============================================================================
--->
-<#setting number_format="0">
-
-    <#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader',
-        "${dbPath}") >
-    <#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>
-${component}: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]}
-    </#list>
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/templates/general_category.txt.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-<#--
-============================================================================ 
-Name        : summary.html.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:
-
-============================================================================
---> 
-
-    <#assign table_info = pp.loadData('com.nokia.helium.metadata.SQLFMPPLoader',
-        "${dbPath}") >
-
-
-
-<#assign logpath_table = table_info['select * from logfiles'] >
-<#assign logpath_id = logpath_table?keys>
-<#list logpath_id as logpath>
-    <#assign component_table = table_info['select id, component from component where logPath_id=${logpath}'] >
-    <#assign component_ids = component_table?keys?sort >
-    <#list component_ids as component_id >
-        component : ${component_table['${component_id}']} : logfile : ${logpath_table['${logpath}']}
-    </#list>
-</#list

>
--- a/buildframework/helium/sf/java/metadata/src/templates/macro/expand3.js	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-function __ToggleNode( divNode )
-{
-  var cntNode = document.getElementById(divNode.id.replace(/Img(.+)/, 'Content$1'));
-  
-  if(!cntNode) return;
-  
-  if(cntNode.style.display == 'none')
-  {
-    cntNode.style.display = 'block';
-    divNode.style.background = divNode.style.background.replace(/open./, 'close.');
-  }
-  else
-  {
-    cntNode.style.display = 'none';
-    divNode.style.background = divNode.style.background.replace(/close./, 'open.');
-  }
-  
-  return cntNode;
-}
-
-function __UpdateNode( divNode, dsp )
-{
-	var cntNode = document.getElementById(divNode.id.replace(/Img(.+)/, 'Content$1'));
-	
-	if(!cntNode) return;
-	
-	cntNode.style.display = dsp;
-	if(dsp == 'block')
-		divNode.style.background = divNode.style.background.replace(/open./, 'close.');
-	else
-		divNode.style.background = divNode.style.background.replace(/close./, 'open.');
-	
-	return cntNode;
-}
-
-function __ToggleChilds( divNode )
-{
-	var cntNode = __ToggleNode(divNode);
-	if(!cntNode) return;
-	var childs  = cntNode.getElementsByTagName('div');
-	
-	for(var i = 0; i != childs.length; ++i)
-		if(/Img/.test(childs[i].id))
-			__ToggleChilds(childs[i]);
-}
-
-function __UpdateChilds( divNode, dsp )
-{
-	var cntNode = __UpdateNode(divNode, dsp);
-	if(!cntNode) return;
-	var childs  = cntNode.getElementsByTagName('span');
-	
-	for(var i = 0; i != childs.length; ++i)
-		if(/Img/.test(childs[i].id))
-			__UpdateChilds(childs[i], dsp);
-}
-
-function ToggleNode( id )
-{ __ToggleNode(document.getElementById(id)); }
-
-function ShowContent( id )
-{ __UpdateNode(document.getElementById(id), 'block'); }
-
-function HideContent( id )
-{ __UpdateNode(document.getElementById(id), 'none'); }
-
-function ShowChilds( id )
-{ __UpdateChilds(document.getElementById(id), 'block'); }
-
-function HideChilds( id )
-{ __UpdateChilds(document.getElementById(id), 'none'); }
--- a/buildframework/helium/sf/java/metadata/src/templates/macro/log3.css	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/* Main components */
-/*-------------------------------------------------------------------------------------------------------------------------*/
-BODY { font-family: "Nokia Sans Regular", Tahoma; font-size: x-small; margin: 0em; padding: 0em; background: #EEEEFF; }
-A { color: #000000; text-decoration: none; }
-#mb, #s_mb { margin: 5px; padding: 0px; background: #DADAEE; border: 1px solid #2161B5; }
-.mc, .s_mc { margin: 3px; padding: 3px 2px; background: #FFFFFF; border: 1px solid #2161B5; }
-.mc h1, .s_mc h1 { padding-left: 5px; margin: 3px 0px; font-weight: bold; color: #2161B5; font-size: x-small; border-bottom: 1px solid #2161B5; }
-.s_tag { font-size: x-small; font-weight: bold; padding: 0px 5px 3px 5px; }
-.s_val { font-size: x-small }
-
-/* Header */
-/*-------------------------------------------------------------------------------------------------------------------------*/
-#h_wrapper { }
-.h_elmt { color: #0036CC; padding: 5px; margin: 10px; }
-.h_title { font-family: "Nokia Large", "Tahoma"; font-size: xx-large; font-weight: bold; }
-.h_subtitle { font-size: x-small; font-weight: normal; }
-
-/* Footer */
-/*-------------------------------------------------------------------------------------------------------------------------*/
-#f_wrapper { }
-.f_elmt { font-weight: normal; color: #0036CC; padding: 5px; margin: 10px 15px; border-top: solid 1px #0036CC; }
-.f_title { font-size: x-small; padding: 0px; margin: 0px; }
-.f_subtitle { font-size: xx-small; padding: 0px; margin: 0px; }
-
-/* Color cross images */
-/*-------------------------------------------------------------------------------------------------------------------------*/
-.cr_r, .cr_b, .cr_y { padding-left: 19px; padding-bottom: 2px; }
-.cr_r { background: url(../img/icons/delete_red.gif) no-repeat; }
-.cr_b { background: url(../img/icons/delete_blue.gif) no-repeat; }
-.cr_y { background: url(../img/icons/delete_yellow.gif) no-repeat; }
-
-/* Color check images */
-/*-------------------------------------------------------------------------------------------------------------------------*/
-.ch_g, .ch_b { padding-left: 19px; padding-bottom: 2px; }
-.ch_g { background: url(../img/icons/check_green.gif) no-repeat; }
-.ch_b { background: url(../img/icons/check_blue.gif) no-repeat; }
-
-/* Element icons */
-/*-------------------------------------------------------------------------------------------------------------------------*/
-.icn_dir, .icn_cpp, .icn_hpp, .icn_txt, .icn_inf, .icn_bin, .icn_xml, .icn_prj, .icn_mmp, .icn_iby, .icn_oby, .icn_spt, .icn_doc, .icn_xls, .icn_rss
-{ padding-left: 23px; padding-bottom: 2px; }
-.icn_dir { background: url(../img/icons/dir.gif) no-repeat; }
-.icn_cpp { background: url(../img/icons/cpp.gif) no-repeat; }
-.icn_hpp { background: url(../img/icons/hpp.gif) no-repeat; }
-.icn_txt { background: url(../img/icons/txt.gif) no-repeat; }
-.icn_inf { background: url(../img/icons/inf.gif) no-repeat; }
-.icn_bin { background: url(../img/icons/bin.gif) no-repeat; }
-.icn_xml { background: url(../img/icons/xml.gif) no-repeat; }
-.icn_prj { background: url(../img/icons/prj.gif) no-repeat; }
-.icn_mmp { background: url(../img/icons/mmp.gif) no-repeat; }
-.icn_iby { background: url(../img/icons/iby.gif) no-repeat; }
-.icn_oby { background: url(../img/icons/oby.gif) no-repeat; }
-.icn_spt { background: url(../img/icons/spt.gif) no-repeat; }
-.icn_doc { background: url(../img/icons/doc.gif) no-repeat; }
-.icn_xls { background: url(../img/icons/xls.gif) no-repeat; }
-.icn_rss { background: url(../img/icons/rss.gif) no-repeat; }
-
-/* Message counts */
-/*-------------------------------------------------------------------------------------------------------------------------*/
-.count_fatal_error, .count_error, .count_warning, .count_remark, .count_note, .count_default { text-align: center; padding: 0px 20px; width: 200px; }
-.gbl_count_fatal_error, .gbl_count_error, .gbl_count_warning, .gbl_count_remark, .gbl_count_note, .gbl_count_default, .count_critical, .gbl_count_critical , .count_info, .gbl_count_info{ text-align: center; padding: 0px 20px; margin: 0px 2px; }
-.count_fatal_error, .gbl_count_fatal_error { color: #EB320A; border: 1px solid #EB320A; background: #F5C2B9; }
-.count_error, .gbl_count_error { color: #EB320A; border: 1px solid #EB320A; background: #FFCC00; }
-.count_critical, .gbl_count_critical { color: #FF3200; border: 1px solid #FF3200; background: #FFF476; }
-.count_warning, .gbl_count_warning { color: #FFBA00; border: 1px solid #FFBA00; background: #FFF476; }
-.count_remark, .gbl_count_remark { color: #4EBE2C; border: 1px solid #4EBE2C; background: #EDEFFF; }
-.count_note, .gbl_count_note { color: #2161B5; border: 1px solid #2161B5; background: #EDEFFF; }
-.count_info, .gbl_count_info { color: #2161B5; border: 1px solid #2161B5; background: #EDEFFF; }
-.count_default, .gbl_count_default { color: #DADADA; border: 1px solid #DADADA; background: #FFFFFF; }
-
-/* Node components */
-/*-------------------------------------------------------------------------------------------------------------------------*/
-.node_head { padding: 1px 0px 2px 0px; }
-.node_title { padding-left: 19px; }
-.node_info { float: right; margin-top: -18px; padding: 1px 0px; }
-.node_content { padding: 2px 0px 2px 3px; margin-bottom: 3px; border-top: 1px solid #EDEDED; border-bottom: 1px solid #EDEDED;border-left: 1px solid #EDEDED; }
-.node_action { font-size: xx-small; color: #999999; }
-
-/* C++ components */
-/*-------------------------------------------------------------------------------------------------------------------------*/
-.code_sample { font-family: Anonymous, "Courier New"; font-size: x-small; padding: 3px 6px; border: 1px solid #BABABA; background: #EDEDED; }
-.code_kwd { color: #0000FF; }
-.code_smb { color: #AA11FF; }
-.code_pp  { color: #44AA11; }
-.code_cmt { color: #767676; }
-
-/* Error highlight */
-/*-------------------------------------------------------------------------------------------------------------------------*/
-.code_fatal_error { background-color: #F5C2B9; }
-.code_error { background-color: #FFCC00; }
-.code_critical { background-color: #FFDD00; }
-.code_warning { background-color: #FFF476; }
-
-/* Formatting components */
-/*-------------------------------------------------------------------------------------------------------------------------*/
-.separator { margin-top: 5px; }
-.t_wrapper { width: 100%; }
--- a/buildframework/helium/sf/java/metadata/src/templates/macro/logger.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-<#--
-============================================================================ 
-Name        : logger.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:
-
-============================================================================
---> 
-
-<#macro helium_logger_html_head>
-    <style type="text/css">
-        <#include "log3.css"/>
-    </style>
-    <script type="text/javascript">
-        <#include "expand3.js"/>
-    </script>
-</#macro>
-
-
-<#global helium_node_id = 0>
-
-
-<#macro helium_logger_header title subtitle="">
-    <div id="h_wrapper">
-        <div class="h_elmt">
-              <div class="h_title">${title}</div>
-              <div class="h_subtitle">${subtitle}</div>
-        </div>
-      </div>
-</#macro>
-
-
-<!-- Renders a main body of content -->
-<#macro helium_logger_content title>
-    <#assign helium_node_id = helium_node_id + 1>
-    <div id="mb">
-        <div class="mc">
-            <h1>${title}</h1>                                   
-            <div class="node_head"></div>
-                <div id="Content${helium_node_id}">
-                    <div class="node_content">
-                        <#nested>
-                    </div>
-                </div>      
-            </div>      
-        </div>      
-    </div>
-</#macro>
-
-
-<#macro helium_logger_print type>
-    <#if type == "">
-        <code><#nested></code><br/>
-    <#else>
-        <code class="code_${type}"><#nested></code><br/>
-    </#if>
-</#macro>
-
-<#macro helium_message_box nodeid type count>
-    <#if (count > 0)>
-        <a href="javascript:ToggleNode('Img${nodeid}')">
-            <span class="node_${type}">
-                <span class="count_${type}">${count} ${type}s</span>
-            </span>
-        </a>
-    </#if>
-</#macro>
-
-<#macro helium_logger_node_head nodeid title>
-    <div class="node_head">                    
-        <a href="javascript:ToggleNode('Img${nodeid}')">
-            <span id="Img${nodeid}">
-                <span class="node_action">[X]</span><span class="node_title">${title}</span>
-            </span>
-        </a>
-        <a href="javascript:ShowChilds('Img${nodeid}')">
-                <span class="node_action">[Show All]</span>
-        </a>
-        <a href="javascript:HideChilds('Img${nodeid}')">
-                <span class="node_action">[Hide All]</span>
-        </a>        
-        <!-- error reporting managenent -->
-        <#nested>
-    </div>
-</#macro>
-
-
-<#macro helium_logger_node_content nodeid>
-    <div id="Content${nodeid}" style="display:none">
-        <div class="node_content">
-            <#nested>
-        </div>
-    </div>
-</#macro>
--- a/buildframework/helium/sf/java/metadata/src/templates/readdata.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-<#--
-============================================================================ 
-Name        : bmd.macros.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:
-
-============================================================================
--->
-
-<#macro helium_scanlog_entry >
-    <style type="text/css">
-        <#include "log3.css"/>
-    </style>
-    <script type="text/javascript">
-        <#include "expand3.js"/>
-    </script>
-</#macro>
-
-    <#assign table_info = pp.loadData('com.nokia.helium.metadata.SQLFMPPLoader',
-        "${dbPath}") >
-<html>
-<body>
-<h1>Summary</h1>
-<table>
-<#assign priority_table = table_info['select * from priority'] >
-<#assign component_table = table_info['select id, component from component'] >
-<#assign logpath_table = table_info['select * from logfiles'] >
-<#assign priority_ids = priority_table?keys>
-<tr><td>Total&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
-<#assign quotes='\'' />
-<#list priority_ids as priority>
-<td>${priority_table['${priority}']}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-${table_info['select count(data) as COUNT from metadata where priority_id=${priority}'][0]['COUNT']}</td>
-</#list>
-</tr>
-</table>
-<h1>Listing based on Priority</h1>
-<table>
-<#list priority_ids as priority>
-<tr><td>priority_id:${priority}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
-<tr><td>&nbsp;</td></tr>
-<tr><td><h3>${priority_table['${priority}']}</h3></td></tr>
-
-<#list table_info['select * from metadata where priority_id=${priority}'] as recordentry >
-<tr><td>logtext:${recordentry['data']}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
-<td>lineNo:${recordentry['line_number']}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td></tr>
-</#list>
-</#list>
-</table>
-<h1>Listing based on Component</h1>
-<table>
-<#assign component_ids = component_table?keys>
-<#list component_ids as component>
-<tr><td>&nbsp;</td></tr>
-<tr><td><h3>${component_table['${component}']}</h3></td></tr>
-<#list table_info['select * from metadata where component_id=${component} order by priority_id'] as recordentry >
-<tr><td>priority:${priority_table["${recordentry['priority_id']}"]}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
-<td>logtext:${recordentry['data']}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
-<td>lineNo:${recordentry['line_number']}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td></tr>
-</#list>
-</#list>
-</table>
-</body>
-</html>
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/templates/scan2.html.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-<#--
-============================================================================ 
-Name        : scan2.html.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:
-
-============================================================================
--->
-
-<#macro print_component_summary component href_c_id >
-<#assign href_id = 0>
-<#assign component_time_list = table_info['jpasingle']['select t.componentTime from ComponentTime t where  t.componentId =${component.id}']>
-
-<#if component_time_list[0]?? >
-    <#assign time = component_time_list[0]?number>
-<#else>
-    <#assign time = 0>
-</#if>
-<tr>
-<#assign hours = (time /(60 * 60))?floor>
-<#assign minutes_secs = (time % (60 * 60))?floor>
-<#assign minutes = (minutes_secs / 60)?floor>
-<#assign seconds = (minutes_secs % 60)?floor>
-    <td>${component.component}</td>
-<#--write each of the component tables information -->
-<td align="center">${hours?string("00")}:${minutes?string("00")}:${seconds?string("00")}</td>
-<#list color_list?keys as priority>
-    <#assign count =  table_info['jpasingle']['select count(m.id) from MetadataEntry as m JOIN  m.priority as p JOIN m.component as c where UPPER(p.priority) like \'%${priority?upper_case}%\' and c.id=${component.id}'][0] >
-    <#if count &gt; 0>
-        <#assign color = color_list['${priority}']>
-        <td align="center" bgcolor="${color}"><a href="#section${priority}${href_c_id}">${count}</a></td>
-    <#else>
-        <td align="center">${count}</td>
-    </#if>
-    <#assign href_id = href_id + 1>
-</#list>
-</tr>
-</#macro>
-
-<#macro print_list_text priority component href_id>
-<#assign count =  table_info['jpasingle']['select count(m.id) from MetadataEntry as m JOIN m.priority as p JOIN m.component as c where  UPPER(p.priority) like \'%${priority?upper_case}%\' and c.id=${component.id}'][0] >
-<#if count?? && count?number &gt; 0>
-<#if "${component.component}" != "general">
-        <h3><a name="section${href_id}">${component.component}(${count})</a></h3>
-    <#else>
-        <h3><a name="section${href_id}">Uncategorized(${count})</a></h3>
-    </#if>
-</#if>
-<#list table_info['native:com.nokia.helium.jpa.entity.metadata.MetadataEntry']['select * from metadataentry INNER JOIN component ON component.component_id=metadataentry.component_id INNER JOIN priority ON priority.priority_id=metadataentry.priority_id where component.component_id=${component.id} and UPPER(priority.priority) like \'%${priority?upper_case}%\''] as entry >
-${logfile}:${entry.lineNumber}>${entry.text}<br />
-</#list>
-</#macro>
-
-<#macro add_severity_count severity, color, count>
-    <#if count &gt; 0>
-<td width="12%%" align="center" bgcolor="${color}"><a href="#${severity}">${count}</a></td>
-    <#else>
-    <td align="center">${count}</td>
-    </#if>
-</#macro>
-
-<#-- end of macros code starts here -->
-
-
-<#if (doc)??>
-    <#assign logfile = "${doc.sbsinfo.logfile.@name}" >
-    <#assign time = "${doc.sbsinfo.duration.@time}" >
-
-    <#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader',
-        "${dbPath}") >
-<#-- overall summary -->
-<#assign logpath_id_list = table_info['jpasingle']['select l.id from LogFile l where l.path like \'%${logfile}\''] >
-<#if logpath_id_list[0]?? >
-<#assign logpath_id = logpath_id_list[0] > 
-</#if>
-<html>
-<head><title>${logfile}</title></head>
-<body>
-<h2>Overall</h2>
-<table border="1" cellpadding="0" cellspacing="0" width="100%%">
-<tr>
-    <th width="22%%">&nbsp;</th>
-    <th width="11%%">Time</th>
-    <th width="11%%">Errors</th>
-    <th width="11%%">Warnings</th>
-    <th width="11%%">Critical</th>
-    <th width="23%%">Migration Notes</th>
-    <th width="11%%">Info</th>
-</tr>
-<tr>
-<#-- need to create variables for the items tobe displayed in the comment title Overall_Total
-doing this the long winded way because I could not find a way to add items to a hash in a loop -->
-<#assign color_list={'error': 'FF0000', 'warning': 'FFF000', 'critical': 'FF7000', 'remark': 'FFCCFF', 'info': 'FFFFFF'}>
-<#assign priority_ids = color_list?keys>
-<td width="22%%">Total</td>
-<td width="12%%" align="center">${time}</td>
-<#list priority_ids as priority>
-    <@add_severity_count severity='${priority}' color=color_list['${priority}'] 
-        count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority p where m.logPathId=${logpath_id} and UPPER(p.priority) like \'%${priority?upper_case}%\''][0] />
-</#list>
-</tr>
-</table>
-<#-- Summary for each component -->
-<h1>${logfile}</h1>
-<h2>By Component</h2>
-    <table border="1" cellpadding="0" cellspacing="0" width="100%%">
-        <tr>
-            <th width="50%%">Component</th>
-            <th width="9%%">Time</th>
-            <th width="9%%">Errors</th>
-            <th width="9%%">Warnings</th>
-            <th width="9%%">Criticals</th>
-            <th width="9%%">Notes</th>
-            <th width="9%%">Info</th>
-        </tr>
-
-<#assign c_id = 0>
-<#assign general_component_list = table_info['jpasingle']['select c from Component c where LOWER(c.component) like \'%general%\' and c.logPathID=${logpath_id}']>
-<#if general_component_list[0]?? >
-<#assign general_component = general_component_list[0] >
-<@print_component_summary component=general_component  href_c_id="${c_id}"/>
-<#assign c_id = c_id + 1>
-</#if>
-<#list table_info['jpa']['select c from Component c where c.logPathID=${logpath_id} and LOWER(c.component) not like \'%general%\' ORDER BY c.component'] as componentEntry>
-<@print_component_summary component=componentEntry href_c_id="${c_id}"/>
-<#assign c_id = c_id + 1>
-
-</#list>
-</table>
-
-<#-- Individual components status -->
-<#list priority_ids as p_id>
-<#assign p_count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority as p where m.logPathId=${logpath_id} and UPPER(p.priority) like \'%${p_id?upper_case}%\''][0]>
-<#if p_count &gt; 0>
-    <h3><a>${p_id} Details By Component</a></h3>
-</#if>
-<#assign href_cid = 0>
-<#if general_component??>
-    <@print_list_text priority="${p_id}" component=general_component href_id="${p_id}${href_cid}" /> 
-    <#assign href_cid = href_cid + 1>
-</#if>
-<#list table_info['jpa']['select c from Component c where c.logPathID=${logpath_id} and LOWER(c.component) not like \'%general%\' ORDER BY c.component'] as componentEntry>
-    <@print_list_text priority="${p_id}" component=componentEntry href_id="${p_id}${href_cid}" />
-    <#assign href_cid = href_cid + 1>
-</#list>
-</#list>
-</body>
-</html>
-</#if>
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/templates/summary.html.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-<#--
-============================================================================ 
-Name        : summary.html.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"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
-
-
-<#include "/@macro/logger.ftl"/>
-
-    <#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader',
-        "${dbPath}") >
-
-<head>
-    <title>
-<#if loginfo?? >
-<#assign mykey=loginfo.info.id>
-<#if (conv[mykey])?exists>
-${loginfo.info.id}
-</#if>
-build summary</title>
-    <@helium_logger_html_head/>
-</head>
-</#if>
-<body>
-
-
-<!--
-    Processing the Helium log summary.
--->
-<#macro logentry text, severity>
-    <#assign conv={"error": "error", "warning": "warning"}>
-    <#if (conv['${severity}'])?exists>
-        <@helium_logger_print type="${conv[\"${severity}\"]}">${text}</@helium_logger_print>
-    <#else>
-        <@helium_logger_print type="">${text}</@helium_logger_print>
-    </#if>
-</#macro>
-
-<#macro logfile_severity logname, priority, count, helium_node_id>
-    <@helium_message_box nodeid="${helium_node_id}" type="${priority}"  count="${count}"?number />
-</#macro>
-
-
-<#macro logfile_entry_detail text, priority, helium_node_id>
-    <@logentry "${text}", "${priority?lower_case}" />
-</#macro>
-
-<!-- Call the macros to render the log contents. -->
-<#assign mykey=loginfo>
-<#if (conv[mykey])?exists>
-<@helium_logger_header title="${loginfo.info.id} build"/>
-
-<@helium_logger_content title="Build overview">
-    Time started: ${loginfo.info.startTime}<br/>
-    Build machine: ${loginfo.info.machine}<br/>
-    Is published?: ${loginfo.info.publish.status}<br/>
-    <#if loginfo.info.publish.status?string == true?string>
-        Published location: ${loginfo.info.publish.location}</br>
-    </#if>
-</@helium_logger_content>
-</#if>
-
-<@helium_logger_content title="Errors and warnings details">
-<#list table_info['jpa']['select l from LogFile l'] as logentry>
-    <#assign helium_node_id = helium_node_id + 1>
-    <#-- -->
-    <@helium_logger_node_head nodeid="${helium_node_id}" title="${logentry.path}">
-        <#list table_info['jpa']['select p from Priority p where p.priority not like \'%DEFAULT%\''] as priority>
-        <#assign count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m where m.priorityId = ${priority.id} and m.logPathId=${logentry.id}'][0]>
-            <@logfile_severity "${logentry.path}", "${priority.priority?lower_case}", 
-                "${count}", 
-                "${helium_node_id}" />
-        </#list>
-    </@helium_logger_node_head>
-    <@helium_logger_node_content nodeid="${helium_node_id}">
-        <#list table_info['jpa']['select c from Component c where c.logPathID=${logentry.id}'] as component>
-            <#assign helium_node_id = helium_node_id + 1>
-            <@helium_logger_node_head nodeid="${helium_node_id}" title="${component.component}">
-                <#list table_info['jpa']['select p from Priority p where p.priority not like \'%DEFAULT%\''] as priority>
-                    <@logfile_severity "${component.id}", "${priority.priority}", 
-                            table_info['jpasingle']['select Count(m.id) from MetadataEntry m where m.priorityId=${priority.id} and m.componentId = ${component.id}'][0], 
-                            "${helium_node_id}" />
-                </#list>
-            </@helium_logger_node_head>
-            <@helium_logger_node_content nodeid="${helium_node_id}">
-                <#list table_info['jpa']['select p from Priority p'] as priority>
-                <#list table_info['native:com.nokia.helium.jpa.entity.metadata.MetadataEntry']['select * from metadataentry where metadataentry.component_id=${component.id} and metadataentry.priority_id = ${priority.id}'] as entry >
-                    <#if entry.text??>
-                    <#-- <#if sublog?node_name == "logfile"> --> 
-                        <@logfile_entry_detail "${entry.text}", "${priority.priority}", "${helium_node_id}" />
-                    </#if>
-                    <#-- <#elseif sublog?node_name == "log">
-                        <@antlognode sublog/>
-                    </#if> -->
-                </#list>
-            </#list>
-            </@helium_logger_node_content>
-        </#list>
-    </@helium_logger_node_content>
-</#list>
-</@helium_logger_content>
-</body>
-</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/antunit/test_abld_input.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,85 @@
+<!-- 
+============================================================================ 
+Name        : test_abld_input.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-abld-input" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium metadata Abld input unittests.</description>
+
+    <dirname property="project.dir" file="${ant.file.test-abld-input}" />
+    <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="setUp">
+        <echo>---=====================================---</echo>
+        <mkdir dir="${test.temp.dir}" />
+        <delete dir="${test.temp.dir}" />
+        <mkdir dir="${test.temp.dir}" />
+    </target>
+    
+    <target name="tearDown">
+        <delete dir="${test.temp.dir}" />
+        <echo>---=====================================---</echo>
+    </target>
+
+    <hlm:metadatafilterset id="abld.regex">
+        <metadatafilter severity="WARNING" regex=".*warning U4010" description="mingw error" />
+        <metadatafilterset filterfile="${project.dir}/../data/common.csv" />
+    </hlm:metadatafilterset>
+
+
+    <target name="test-abld-log-parsing">
+        <echo message="test-abld-log-parsing" />
+
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:abldmetadatainput>
+                <fileset dir="${project.dir}/../data/abld">
+                    <include  name="sample_abld.log"/>
+                </fileset>
+                <metadatafilterset refid="abld.regex" />
+            </hlm:abldmetadatainput>
+        </hlm:metadatarecord>
+        <au:assertTrue>
+            <available type="dir" file="${test.temp.dir}/metadata_db" />
+        </au:assertTrue>
+        
+        <fmpp sourceFile="${project.dir}/../data/abld/parsing_result.ini.ftl"
+                     outputfile="${test.temp.dir}/result.ini">
+            <data expandProperties="yes">
+                dbPath: ${test.temp.dir}/metadata_db
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <property file="${test.temp.dir}/result.ini" />
+        <echo>number.of.logs: ${number.of.logs}</echo>
+        <echo>number.of.execution.times: ${number.of.execution.times}</echo>
+        <echo>number.of.components: ${number.of.components}</echo>
+        <au:assertTrue message="Invalid number of logs">
+            <equals arg1="${number.of.logs}" arg2="1" />
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of execution time">
+            <equals arg1="${number.of.execution.times}" arg2="0" />
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of components">
+            <equals arg1="${number.of.components}" arg2="3" />
+        </au:assertTrue>
+    </target>
+
+
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/antunit/test_ant_input.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,81 @@
+<!-- 
+============================================================================ 
+Name        : test_ant_input.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-ant-input" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium metadata Ant input unittests.</description>
+    
+    <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"/>
+    
+    <target name="setUp">
+        <echo>---=====================================---</echo>
+        <mkdir dir="${test.temp.dir}" />
+        <delete dir="${test.temp.dir}" />
+        <mkdir dir="${test.temp.dir}" />
+    </target>
+    
+    <target name="tearDown">
+        <delete dir="${test.temp.dir}" />
+        <echo>---=====================================---</echo>
+    </target>
+
+    <hlm:metadatafilterset id="error.filterset">
+        <hlm:metadatafilter severity="error" regex="^ERROR: .*" description="Simple error pattern"/>
+        <hlm:metadatafilter severity="warning" regex="^WARNING: .*" description="Simple warning pattern"/>
+    </hlm:metadatafilterset>
+
+    
+    <target name="test-ant-log-metadata-input">
+        <echo message="Ant log metadata input validation" />
+        <mkdir dir="${test.temp.dir}"/>
+
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:antmetadatainput>
+                <fileset file="${project.dir}/../data/ant/package_ant_build.log" />
+                <metadatafilterset refid="error.filterset" />
+            </hlm:antmetadatainput>
+        </hlm:metadatarecord>
+
+        <fmpp sourceFile="${project.dir}/../data/ant/result.ini.ftl"
+                     outputfile="${test.temp.dir}/result.ini">
+            <data expandProperties="yes">
+                dbPath: ${test.temp.dir}/metadata_db
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <property file="${test.temp.dir}/result.ini" />
+        <echo>number.of.logs: ${number.of.logs}</echo>
+        <echo>number.of.components: ${number.of.components}</echo>
+        <echo>number.of.errors: ${number.of.errors}</echo>
+        <au:assertTrue message="Invalid number of logs">
+            <equals arg1="${number.of.logs}" arg2="1" />
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of components">
+            <equals arg1="${number.of.components}" arg2="16" />
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of errors">
+            <equals arg1="${number.of.errors}" arg2="1" />
+        </au:assertTrue>
+        
+    </target>
+        
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/antunit/test_imaker_input.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_imaker_input.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-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="setUp">
+        <echo>---=====================================---</echo>
+        <mkdir dir="${test.temp.dir}" />
+        <delete dir="${test.temp.dir}" />
+        <mkdir dir="${test.temp.dir}" />
+    </target>
+    
+    <target name="tearDown">
+        <delete dir="${test.temp.dir}" />
+        <echo>---=====================================---</echo>
+    </target>
+
+    <hlm:metadatafilterset id="filterset.imaker">
+        <metadatafilter severity="error" regex="^\s*Total duration:\s+\d+:\d+\s+Status:\s+FAILED" description="" />
+        <metadatafilter severity="error" regex="^.+- DOESN'T EXIST" description="" />
+    </hlm:metadatafilterset>
+    
+    <!-- Check the parsing of a default iMaker output log -->
+    <target name="test-imaker-metadata">
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:imakermetadatainput>
+                <fileset file="../data/imaker/build_roms_sample.log" />
+                <metadatafilterset refid="filterset.imaker" />
+            </hlm:imakermetadatainput>
+        </hlm:metadatarecord>
+
+        <fmpp sourceFile="../data/imaker/rombuild_result.ini.ftl"
+                     outputfile="${test.temp.dir}/result.ini">
+            <data expandProperties="yes">
+                dbPath: ${test.temp.dir}/metadata_db
+                ant: antProperties()
+            </data>
+        </fmpp>
+
+        <property file="${test.temp.dir}/result.ini" />
+        <echo>number.of.logs: ${number.of.logs}</echo>
+        <echo>number.of.components: ${number.of.components}</echo>
+        <echo>number.of.errors: ${number.of.errors}</echo>
+        <au:assertTrue message="Invalid number of logs">
+            <equals arg1="${number.of.logs}" arg2="1" />
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of components">
+            <equals arg1="${number.of.components}" arg2="5" />
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of errors">
+            <equals arg1="${number.of.errors}" arg2="9" />
+        </au:assertTrue>
+    </target>
+    
+</project>
+
+
+
--- a/buildframework/helium/sf/java/metadata/tests/antunit/test_metadata.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/tests/antunit/test_metadata.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -23,62 +23,35 @@
 <project name="test-metadata" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>Helium antlib metadata tests.</description>
 
+    <dirname property="project.dir" file="${ant.file.test-metadata}" />
     <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 name="setUp">
+        <echo>---=====================================---</echo>
+        <mkdir dir="${test.temp.dir}" />
+        <delete dir="${test.temp.dir}" />
+        <mkdir dir="${test.temp.dir}" />
     </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 name="tearDown">
+        <delete dir="${test.temp.dir}" />
+        <echo>---=====================================---</echo>
     </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:metadatafilter severity="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">
+    <target name="test-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">
+
+    <target name="test-metadata-regex-fail-string-missing">
         <au:expectfailure>
             <fail>
                 <condition>
@@ -89,7 +62,8 @@
             </fail>
         </au:expectfailure>
     </target>
-    <target name="test-scanlog-metadata-regex-fail-2">
+    
+    <target name="test-metadata-regex-fail-severity-missing">
         <au:expectfailure>
             <fail>
                 <condition>
@@ -101,45 +75,211 @@
         </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">
+    <target name="test-same-log-several-times">
+        <hlm:metadatarecord database="${test.temp.dir}/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" />
+                <fileset casesensitive="false" file="../data/sample_abld.log" />
+                <hlm:metadatafilterset>
+                    <metadatafilter severity="error" regex="^ERROR:" description="" />
+                    <metadatafilter severity="warning" regex="^WARNING:.*" description="" />
+                </hlm:metadatafilterset>
+            </hlm:imakermetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:imakermetadatainput>
+                <fileset casesensitive="false" file="../data/sample_abld.log" />
+                <hlm:metadatafilterset>
+                    <metadatafilter severity="error" regex="^ERROR:" description="" />
+                    <metadatafilter severity="warning" regex="^WARNING:.*" description="" />
+                </hlm:metadatafilterset>
             </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>
+    </target>
+    
+    <scriptdef language="jython" name="createLog">
+        <attribute name="file" />
+        <attribute name="length" />
+        <![CDATA[
+f = open(attributes.get('file'), 'w+')
+length = attributes.get('length')
+if length:
+    length = int(length)
+else:
+    length = 10000
+try:
+    while length > 0:
+        f.write("ERROR: error %d\n" % length)
+        length = length - 1
+finally:
+    f.close()
+        ]]>
+    </scriptdef>
+    
+    <!-- Let's try to get 4 logs pushed in parallel into the database. -->
+    <target name="test-parallel-database-creation">
+        <createLog file="${test.temp.dir}/log1.log" length="10000"/>
+        <copy file="${test.temp.dir}/log1.log" tofile="${test.temp.dir}/log2.log" />
+        <copy file="${test.temp.dir}/log1.log" tofile="${test.temp.dir}/log3.log" />
+        <copy file="${test.temp.dir}/log1.log" tofile="${test.temp.dir}/log4.log" />
+        
+        <parallel>
+            <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+                <hlm:textmetadatainput>
+                    <fileset casesensitive="false" file="${test.temp.dir}/log1.log" />
+                    <hlm:metadatafilterset>
+                        <metadatafilter severity="error" regex="^ERROR:.*" description="" />
+                    </hlm:metadatafilterset>
+                </hlm:textmetadatainput>
+            </hlm:metadatarecord>
+            <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+                <hlm:textmetadatainput>
+                    <fileset casesensitive="false" file="${test.temp.dir}/log2.log" />
+                    <hlm:metadatafilterset>
+                        <metadatafilter severity="error" regex="^ERROR:.*" description="" />
+                    </hlm:metadatafilterset>
+                </hlm:textmetadatainput>
+            </hlm:metadatarecord>
+            <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+                <hlm:textmetadatainput>
+                    <fileset casesensitive="false" file="${test.temp.dir}/log3.log" />
+                    <hlm:metadatafilterset>
+                        <metadatafilter severity="error" regex="^ERROR:.*" description="" />
+                    </hlm:metadatafilterset>
+                </hlm:textmetadatainput>
+            </hlm:metadatarecord>
+            <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+                <hlm:textmetadatainput>
+                    <fileset casesensitive="false" file="${test.temp.dir}/log4.log" />
+                    <hlm:metadatafilterset>
+                        <metadatafilter severity="error" regex="^ERROR:.*" description="" />
+                    </hlm:metadatafilterset>
+                </hlm:textmetadatainput>
+            </hlm:metadatarecord>
+        </parallel>
+        <hlm:metadataCountSeverity severity="error" database="${test.temp.dir}/metadata_db" property="errors">
+            <fileset dir="${test.temp.dir}" includes="log*.log" />
+        </hlm:metadataCountSeverity>
+        <echo>errors: ${errors}</echo>
+        <au:assertTrue>
+            <equals arg1="${errors}" arg2="40000" />
+        </au:assertTrue>
+    </target>
+    
+    <!-- Let's metadata delete. -->
+    <target name="test-metadatadelete">
+        <createLog file="${test.temp.dir}/log1.log" length="10"/>
+        <copy file="${test.temp.dir}/log1.log" tofile="${test.temp.dir}/log2.log" />
+        
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:textmetadatainput>
+                <fileset dir="${test.temp.dir}" includes="log*.log" />
+                <hlm:metadatafilterset>
+                    <metadatafilter severity="error" regex="^ERROR:.*" description="" />
+                </hlm:metadatafilterset>
+            </hlm:textmetadatainput>
         </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>
+        <hlm:metadataCountSeverity severity="error" log="${test.temp.dir}/log1.log" 
+            database="${test.temp.dir}/metadata_db" property="errors.before" />        
+        <echo>errors.before: ${errors.before}</echo>
+        <hlm:metadatadelete database="${test.temp.dir}/metadata_db">
+            <fileset dir="${test.temp.dir}" includes="log1.log" />
+        </hlm:metadatadelete>
+        <hlm:metadataCountSeverity severity="error" log="${test.temp.dir}/log1.log" 
+            database="${test.temp.dir}/metadata_db" property="errors.after" />        
+        <echo>errors.after: ${errors.after}</echo>
+
+        <au:assertTrue>
+            <equals arg1="${errors.before}" arg2="10" />
+        </au:assertTrue>
+        <au:assertTrue>
+            <equals arg1="${errors.after}" arg2="0" />
+        </au:assertTrue>
+    </target>
+
+    
+    <!-- Test that error and warnings are counted properly by the hlm:metadataHasSeverity task -->
+    <target name="test-has-severity">
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:textmetadatainput>
+                <fileset file="${project.dir}/../data/countseverity/text_has_severity.log" />
+                <hlm:metadatafilterset>
+                    <metadatafilter severity="error" regex="^ERROR:.*" description="" />
+                    <metadatafilter severity="warning" regex="^WARNING:.*" description="" />
+                </hlm:metadatafilterset>
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        
+        <au:assertTrue message="Must found an error">
+            <hlm:metadataHasSeverity severity="error" log="${project.dir}/../data/countseverity/text_has_severity.log" database="${test.temp.dir}/metadata_db" />
+        </au:assertTrue>
+        <au:assertTrue message="Must found a warning">
+            <hlm:metadataHasSeverity severity="warning" log="${project.dir}/../data/countseverity/text_has_severity.log" database="${test.temp.dir}/metadata_db" />
+        </au:assertTrue>
         
-        <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"/>
+        <au:assertTrue message="Must found an error">
+            <hlm:metadataHasSeverity severity="error" database="${test.temp.dir}/metadata_db">
+                <fileset file="${project.dir}/../data/countseverity/text_has_severity.log" />
+            </hlm:metadataHasSeverity>
+        </au:assertTrue>
+        <au:assertTrue message="Must found a warning">
+            <hlm:metadataHasSeverity severity="warning" database="${test.temp.dir}/metadata_db">
+                <fileset file="${project.dir}/../data/countseverity/text_has_severity.log" />
+            </hlm:metadataHasSeverity>
+        </au:assertTrue>
+    </target>
+        
+    <!-- Test that error and warnings are counted properly by the hlm:metadataHasSeverity task -->
+    <target name="test-has-severity-testing-parameters">
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:textmetadatainput>
+                <fileset file="${project.dir}/../data/countseverity/text_has_severity.log" />
+                <hlm:metadatafilterset>
+                    <metadatafilter severity="error" regex="^ERROR:.*" description="" />
+                    <metadatafilter severity="error" regex="^WARNING:*" description="" />
+                </hlm:metadatafilterset>
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        
+        <au:expectfailure expectedMessage="'log' attribute not defined.">
+            <condition property="test" value="whatever">
+                <hlm:metadataHasSeverity severity="error" database="${test.temp.dir}/metadata_db" />
+            </condition>
+        </au:expectfailure>
+        <au:expectfailure expectedMessage="'database' attribute not defined.">
+            <condition property="test" value="whatever">
+                <hlm:metadataHasSeverity severity="error" log="${project.dir}/../data/countseverity/text_has_severity.log" />
+            </condition>
+        </au:expectfailure>
+        <au:expectfailure expectedMessage="'severity' attribute is not defined.">
+            <condition property="test" value="whatever">
+                <hlm:metadataHasSeverity log="${project.dir}/../data/countseverity/text_has_severity.log" database="${test.temp.dir}/metadata_db" />
+            </condition>
+        </au:expectfailure>
     </target>
     
+	<!-- If the database is invalid, for example in the case of
+	     Derby only the directory exists, then implementation
+	     should remove it and create a valid database.
+	 -->
+    <target name="test-invalid-database">
+        <mkdir dir="${test.temp.dir}/metadata_db" />
+        <createLog file="${test.temp.dir}/log1.log" length="10"/>
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:textmetadatainput>
+                <fileset casesensitive="false" file="${test.temp.dir}/log1.log" />
+                <hlm:metadatafilterset>
+                    <metadatafilter severity="error" regex="^ERROR:.*" description="" />
+                </hlm:metadatafilterset>
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>    	
+        <hlm:metadataCountSeverity severity="error" log="${test.temp.dir}/log1.log" 
+            database="${test.temp.dir}/metadata_db" property="errors" />        
+        <echo>errors: ${errors}</echo>
+        <au:assertTrue>
+            <equals arg1="${errors}" arg2="10" />
+        </au:assertTrue>
+    </target>
 </project>
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/antunit/test_policy_input.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,64 @@
+<!-- 
+============================================================================ 
+Name        : test_policy_input.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-ant-input" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium metadata Ant input unittests.</description>
+    
+    <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"/>
+    
+    <target name="setUp">
+        <echo>---=====================================---</echo>
+        <mkdir dir="${test.temp.dir}" />
+        <delete dir="${test.temp.dir}" />
+        <mkdir dir="${test.temp.dir}" />
+    </target>
+    
+    <target name="tearDown">
+        <delete dir="${test.temp.dir}" />
+        <echo>---=====================================---</echo>
+    </target>
+
+    <hlm:metadatafilterset id="error.filterset">
+        <hlm:metadatafilter severity="error" regex="^ERROR: .*" description="Simple error pattern"/>
+        <hlm:metadatafilter severity="warning" regex="^WARNING: .*" description="Simple warning pattern"/>
+    </hlm:metadatafilterset>
+
+    <target name="test-policy-metadata-input">
+        <echo message="test-policy-metadata-input" />
+
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:policymetadatainput>
+                <fileset file="${project.dir}/../data/policy/validate_policy.log" />
+            </hlm:policymetadatainput>
+        </hlm:metadatarecord>
+            
+        <hlm:metadataCountSeverity severity="error" database="${test.temp.dir}/metadata_db"
+            log="${project.dir}/../data/policy/validate_policy.log" property="errors" />
+        <echo>${errors}</echo>
+        <au:assertTrue>
+            <equals arg1="${errors}" arg2="78" />
+        </au:assertTrue>
+    </target>
+
+        
+</project>
--- a/buildframework/helium/sf/java/metadata/tests/antunit/test_regex.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/tests/antunit/test_regex.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -37,59 +37,25 @@
     </hlm:metadatafilterset>
 
     <target name="setUp">
+        <echo>---=====================================---</echo>
+        <mkdir dir="${test.temp.dir}" />
+        <delete dir="${test.temp.dir}" />
         <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 name="tearDown">
+        <delete dir="${test.temp.dir}" />
+        <echo>---=====================================---</echo>
     </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:metadatarecord database="${test.temp.dir}/metadata_db">
             <hlm:sbsmetadatainput>
                 <fileset dir="${project.dir}/../data/">
                     <include  name="all_regex_type.log"/>
@@ -99,20 +65,16 @@
         </hlm:metadatarecord>
         <!-- check we have created the DB file-->
         <au:assertTrue>
-            <available type="dir" file="${metadata-read-db}" />
+            <available type="dir" file="${test.temp.dir}/metadata_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:metadatarecord database="${test.temp.dir}/metadata_db">
             <hlm:sbsmetadatainput>
                 <fileset dir="${project.dir}/../data/">
                     <include  name="all_regex1_type.log"/>
@@ -122,11 +84,12 @@
         </hlm:metadatarecord>
         <!-- check we have created the DB file-->
         <au:assertTrue>
-            <available type="dir" file="${metadata-read-db}" />
+            <available type="dir" file="${test.temp.dir}/metadata_db" />
         </au:assertTrue>
     </target>
 
     <target name="test-parser-error-ant-call">
+        <echo>test-parser-error-ant-call</echo>
         <parallel>
             <antcall target="parser-error" />
             <antcall target="parser-error1" />
@@ -146,129 +109,16 @@
         </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:metadatarecord database="${test.temp.dir}/metadata_db">
             <hlm:sbsmetadatainput>
                 <fileset dir="${project.dir}/../data/">
                     <include  name="*regex*.log"/>
@@ -278,50 +128,25 @@
         </hlm:metadatarecord>
         <!-- check we have created the DB file-->
         <au:assertTrue>
-            <available type="dir" file="${metadata-read-db}" />
+            <available type="dir" file="${test.temp.dir}/metadata_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" />
+        <metadatafilter severity="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:metadatarecord database="${test.temp.dir}/metadata_db">
             <hlm:sbsmetadatainput>
                 <fileset dir="${project.dir}/../data/">
                     <include  name="*regex*.log"/>
@@ -330,163 +155,80 @@
             </hlm:sbsmetadatainput>
         </hlm:metadatarecord>
         <au:assertTrue>
-            <available type="dir" file="${metadata-read-db}" />
+            <available type="dir" file="${test.temp.dir}/metadata_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. 
+    <!--
+        create an invalid priority type, so contains message invalid 
+        priority and set to error as priority, validation is done by ant, 
+        and parsing of the xml build script will fail.
     -->
-    <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}"/>
+    <target name="test-incorrect-severity-error">
+        <echo message="test-regex-validation-error" />
 
-        <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>
+        <au:expectfailure message="INCORRECT is not a legal value for this attribute">
+            <hlm:metadatarecord database="${test.temp.dir}/metadata_db" >
+                <hlm:textmetadatainput>
+                    <fileset dir="${project.dir}/../data/regex" includes="empty.log"/>
+                     <hlm:metadatafilterset id="all-regex-combined-error">
+                        <metadatafilter severity="INCORRECT" regex=".*warning U4010" description="test error handling so incorrect priority" />
+                    </hlm:metadatafilterset>
+                </hlm:textmetadatainput>
+            </hlm:metadatarecord>
+        </au:expectfailure>
         <!-- 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-->
+        <au:expectfailure message="Invalid filter have been found. Please check your configuration.">
+            <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+                <hlm:textmetadatainput>
+                    <fileset dir="${project.dir}/../data/regex" includes="empty.log" />
+                    <metadatafilterset refid="all-regex-combined-no-priority" />
+                    <!--try to add a different different filter type but not add the parameter so has an error -->
+                    <hlm:metadatafilterset>
+                        <metadatafilter severity="error" regex="^ERROR:.*" />
+                        <metadatafilter regex=".*warning U4010" description="test error handling so incorrect priority" />
+                        <metadatafilter severity="warning" regex="^WARNING*" />
+                    </hlm:metadatafilterset>
+                </hlm:textmetadatainput>
+            </hlm:metadatarecord>
+        </au:expectfailure>
     </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>
+        <au:expectfailure message="INCORRECT is not a legal value for this attribute">
+            <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+                <hlm:sbsmetadatainput>
+                    <fileset dir="${project.dir}/../data/">
+                        <include  name="*regex*.log"/>
+                    </fileset>
+                    <hlm:metadatafilterset>
+                        <metadatafilter severity="INCORRECT" description="test error handling so incorrect priority" />
+                        <metadatafilter severity="WARNING" description="test error handling so incorrect priority" />
+                        <metadatafilterset filterfile="${metadata-filterfile}" />
+                    </hlm:metadatafilterset>
+                </hlm:sbsmetadatainput>
+            </hlm:metadatarecord>
+        </au:expectfailure>
         <!-- 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" />
@@ -494,14 +236,10 @@
 
 
     <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:metadatarecord database="${test.temp.dir}/metadata_db">
             <hlm:antmetadatainput>
                 <fileset dir="${project.dir}/../data/">
                     <include  name="*ant*.log"/>
@@ -510,126 +248,52 @@
             </hlm:antmetadatainput>
         </hlm:metadatarecord>
         <au:assertTrue>
-            <available type="dir" file="${metadata-read-db}" />
+            <available type="dir" file="${test.temp.dir}/metadata_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>
+    <hlm:metadatafilterset id="text.log.metadata.input.filterset">
+        <metadatafilterset filterfile="${project.dir}/../data/common.csv" />
+    </hlm:metadatafilterset>
     
     <target name="test-countseverity">
-        <delete dir="${test.temp.dir}/dp_db" failonerror="false" />
-
-        <hlm:metadatarecord database="${test.temp.dir}/dp_db">
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
             <hlm:textmetadatainput>
-                <fileset dir="${project.dir}/../data/">
+                <fileset dir="${project.dir}/../data/countseverity">
                     <include  name="*_fixslashes*.log"/>
                 </fileset>
-                <metadatafilterset refid="text_log_metadata_input" />
+                <metadatafilterset refid="text.log.metadata.input.filterset" />
             </hlm:textmetadatainput>
         </hlm:metadatarecord>
 
-        <hlm:metadataCountSeverity severity="error" log="_fixslashes_raptor.log" db="${test.temp.dir}/dp_db" property="errors"/>
+        <hlm:metadataCountSeverity severity="error" database="${test.temp.dir}/metadata_db" property="errors">
+                <fileset dir="${project.dir}/../data/countseverity">
+                    <include  name="*_fixslashes*.log"/>
+                </fileset>
+        </hlm:metadataCountSeverity>
         <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" />
+            <hlm:metadataHasSeverity severity="error"  database="${test.temp.dir}/metadata_db">
+                <fileset dir="${project.dir}/../data/countseverity">
+                    <include  name="*_fixslashes*.log"/>
+                </fileset>
+            </hlm:metadataHasSeverity>
         </au:assertTrue>
         <au:assertFalse>
-            <hlm:metadataHasSeverity severity="fatal" log="_fixslashes_raptor.log" db="${test.temp.dir}/dp_db" />
+            <hlm:metadataHasSeverity severity="fatal"  database="${test.temp.dir}/metadata_db">
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="*_fixslashes*.log"/>
+                </fileset>
+            </hlm:metadataHasSeverity>
         </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" />
@@ -640,161 +304,69 @@
                     <include  name="very_long_warning.log"/>
                 </fileset>
                 <metadatafilterset>
-                    <metadatafilter priority="INFO" regex="^INFO:" description="info" />
-                    <metadatafilter priority="WARNING" regex=".*warning C4503:.*" description="warning" />
+                    <metadatafilter severity="INFO" regex="^INFO:" description="info" />
+                    <metadatafilter severity="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"/>
+        <hlm:metadataCountSeverity severity="warning" log="${project.dir}/../data/very_long_warning.log" database="${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:metadatarecord database="${test.temp.dir}/metadata_db">
             <hlm:textmetadatainput>
-                <fileset dir="${project.dir}/../data/">
+                <fileset dir="${project.dir}/../data/regex">
                     <include name="log-with-same-root-name.log*"/>
                 </fileset>
                 <metadatafilterset>
-                    <metadatafilter priority="ERROR" regex="^ERROR:.*" description="error" />
+                    <metadatafilter severity="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"/>
+        <hlm:metadataCountSeverity severity="error" log="${project.dir}/../data/regex/log-with-same-root-name.log" database="${test.temp.dir}/metadata_db" property="log-with-same-root-name.log.error"/>
+        <echo>log-with-same-root-name.log.error: ${log-with-same-root-name.log.error}</echo>
         <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:metadatarecord database="${test.temp.dir}/metadata_db">
             <hlm:textmetadatainput>
                 <fileset dir="${project.dir}/../data/">
                     <include name="test-release-database-metadatatask.log"/>
                 </fileset>
                 <metadatafilterset>
-                    <metadatafilter priority="ERROR" regex="^ERROR:.*" description="error" />
+                    <metadatafilter severity="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">
+        <echo>test-release-database-fmpp</echo>
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
             <hlm:textmetadatainput>
                 <fileset dir="${project.dir}/../data/">
                     <include name="test-release-database-metadatatask.log"/>
                 </fileset>
                 <metadatafilterset>
-                    <metadatafilter priority="ERROR" regex="^ERROR:.*" description="error" />
+                    <metadatafilter severity="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
+                dbPath: ${test.temp.dir}/metadata_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_sbs_input.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,432 @@
+<!-- 
+============================================================================ 
+Name        : test_sbs_input.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-input" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium metadata SBS input unittests.</description>
+    
+    <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"/>
+    
+    <target name="setUp">
+        <echo>---=====================================---</echo>
+        <mkdir dir="${test.temp.dir}" />
+        <delete dir="${test.temp.dir}" />
+        <mkdir dir="${test.temp.dir}" />
+    </target>
+    
+    <target name="tearDown">
+        <delete dir="${test.temp.dir}" />
+        <echo>---=====================================---</echo>
+    </target>
+
+    <hlm:metadatafilterset id="error.filterset">
+        <hlm:metadatafilter severity="error" regex="^ERROR: .*" description="Simple error pattern"/>
+        <hlm:metadatafilter severity="warning" regex="^WARNING: .*" description="Simple warning pattern"/>
+    </hlm:metadatafilterset>
+
+    
+
+    <!-- Test categorization for sbs scanlog
+    -->
+    <target name="test-categorization">
+        <echo message="categorization validation" />
+        <hlm:metadatarecord database="${test.temp.dir}/categorization_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include  name="categorization.log"/>
+                </fileset>
+                <metadatafilterset refid="error.filterset" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <fmpp sourceFile="${project.dir}/../data/sbs/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" />
+        <echo>number.of.logs: ${number.of.logs}</echo>
+        <echo>number.of.execution.times: ${number.of.execution.times}</echo>
+        <echo>number.of.components: ${number.of.components}</echo>
+        <echo>execution.time.0: ${execution.time.0}</echo>
+        <echo>number.of.component.times: ${number.of.component.times}</echo>
+        <au:assertTrue message="Invalid number of logs">
+            <equals arg1="${number.of.logs}" arg2="1" />
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of execution time">
+            <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>
+        <au:assertTrue message="Invalid number of components">
+            <equals arg1="${number.of.components}" arg2="2" />
+        </au:assertTrue>
+        <hlm:metadataCountSeverity severity="error" log="${project.dir}/../data/sbs/categorization.log" database="${test.temp.dir}/categorization_db" property="cleanlog_errors"/>
+        <echo>cleanlog_errors: ${cleanlog_errors}</echo>
+        <au:assertTrue>
+            <equals arg1="${cleanlog_errors}" arg2="2"/>
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of component times">
+            <equals arg1="${number.of.component.times}" arg2="2" />
+        </au:assertTrue>
+    </target>
+       
+    <target name="test-categorization-component-check">
+        <echo message="component error check for categorization" />
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include  name="categorization_compile.log"/>
+                </fileset>
+                <metadatafilterset refid="error.filterset" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <fmpp sourceFile="${project.dir}/../data/templates/component_categorization.txt.ftl"
+                     outputfile="${test.temp.dir}/faults.txt">
+            <data expandProperties="yes">
+                dbPath: ${test.temp.dir}/metadata_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-component-check-after">
+        <echo message="component error check for categorization" />
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include  name="categorization_error_after_compile.log"/>
+                </fileset>
+                <metadatafilterset refid="error.filterset" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <fmpp sourceFile="${project.dir}/../data/templates/component_categorization.txt.ftl"
+                     outputfile="${test.temp.dir}/faults.txt">
+            <data expandProperties="yes">
+                dbPath: ${test.temp.dir}/metadata_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">
+        <echo message="test-categorization-nocleanlog-failed-empty-recipe" />
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include  name="categorization_failed_empty_recipe.log"/>
+                </fileset>
+                <metadatafilterset refid="error.filterset" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="${project.dir}/../data/sbs/categorization_failed_empty_recipe.log" database="${test.temp.dir}/metadata_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">
+        <echo message="test-categorization-nocleanlog-failed-error-in-recipe" />
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include  name="categorization_failed_error_in_recipe.log"/>
+                </fileset>
+                <metadatafilterset refid="error.filterset" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="${project.dir}/../data/sbs/categorization_failed_error_in_recipe.log" 
+            database="${test.temp.dir}/metadata_db" property="empty_nocleanlog_errors"/>
+        <echo>empty_nocleanlog_errors: ${empty_nocleanlog_errors}</echo>
+        <au:assertTrue>
+            <equals arg1="${empty_nocleanlog_errors}" arg2="2"/>
+        </au:assertTrue>
+    </target>
+
+
+    <!-- To verify some lengthy text for recipe tag from 
+    sbs metadata input.
+    -->
+    <target name="test-recipe-lengthy-text">
+        <echo message="test-recipe-lengthy-text" />
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include  name="receipe_lengthy_warn.log"/>
+                </fileset>
+                <metadatafilterset refid="error.filterset" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <au:assertTrue>
+            <available type="dir" file="${test.temp.dir}/metadata_db" />
+        </au:assertTrue>
+        <hlm:metadataCountSeverity severity="warning" log="${project.dir}/../data/sbs/receipe_lengthy_warn.log" 
+            database="${test.temp.dir}/metadata_db" property="warnings"/>
+        <echo>warnings: ${warnings}</echo>
+        <au:assertTrue>
+            <equals arg1="${warnings}" arg2="1"/>
+        </au:assertTrue>
+    </target>
+
+    <!-- To verify some lengthy member are not failing the recording
+    -->
+    <target name="test-recipe-lengthy-member">
+        <echo message="test-recipe-lengthy-member" />
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include  name="receipe_lengthy_whatlog.log"/>
+                </fileset>
+                <metadatafilterset refid="error.filterset" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <au:assertTrue>
+            <available type="dir" file="${test.temp.dir}/metadata_db" />
+        </au:assertTrue>
+    </target>
+
+    <target name="test-metadatacount-no-error-with-missing-files-path-with-backslashes">
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include  name="metadatacount_missing_files.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter severity="INFO" regex="^INFO:" description="info" />
+                    <metadatafilter severity="ERROR" regex="^ERROR:" description="error" />
+                    <metadatafilter severity="WARNING" regex=".*warning C4503:.*" description="warning" />
+                </metadatafilterset>
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="${project.dir}/../data/sbs/metadatacount_missing_files.log" database="${test.temp.dir}/metadata_db" property="errors"/>
+        <echo>errors: ${errors}</echo>
+        <au:assertTrue message="We must have 5 missing files counted as error.">
+            <equals arg1="${errors}" arg2="5"/>
+        </au:assertTrue>
+    </target>
+    
+    <target name="test-metadatacount-no-error-with-missing-files">
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:sbsmetadatainput >
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include  name="metadatacount_missing_files.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter severity="INFO" regex="^INFO:" description="info" />
+                    <metadatafilter severity="ERROR" regex="^ERROR:" description="error" />
+                    <metadatafilter severity="WARNING" regex=".*warning C4503:.*" description="warning" />
+                </metadatafilterset>
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="${project.dir}/../data/sbs/metadatacount_missing_files.log" database="${test.temp.dir}/metadata_db" property="errors"/>
+        <echo>errors: ${errors}</echo>
+        <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">
+    	<echo>test-metadatacount-error-with-missing-files</echo>
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include name="metadatacount_error_and_missing_files.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter severity="INFO" regex="^INFO:" description="info" />
+                    <metadatafilter severity="ERROR" regex="^ERROR:" description="error" />
+                    <metadatafilter severity="WARNING" regex=".*warning C4503:.*" description="warning" />
+                </metadatafilterset>
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="${project.dir}/../data/sbs/metadatacount_error_and_missing_files.log" database="${test.temp.dir}/metadata_db" property="errors"/>
+        <echo>error: ${errors}</echo>
+    	<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}/metadata_db">
+            <hlm:sbsmetadatainput checkMissing="false">
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include  name="metadatacount_error_and_missing_files.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter severity="INFO" regex="^INFO:" description="info" />
+                    <metadatafilter severity="ERROR" regex="^ERROR:" description="error" />
+                    <metadatafilter severity="WARNING" regex=".*warning C4503:.*" description="warning" />
+                </metadatafilterset>
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="${project.dir}/../data/sbs/metadatacount_error_and_missing_files.log"
+            database="${test.temp.dir}/metadata_db" property="errors"
+            />
+        <au:assertTrue message="We must have 1 missing files counted as error.">
+            <equals arg1="${errors}" arg2="1"/>
+        </au:assertTrue>
+    </target>
+
+    <target name="test-whatlog-parsing">
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include name="build_whatlog.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter severity="INFO" regex="^INFO:" description="info" />
+                    <metadatafilter severity="ERROR" regex="^ERROR:" description="error" />
+                    <metadatafilter severity="WARNING" regex=".*warning C4503:.*" description="warning" />
+                </metadatafilterset>
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <fmpp sourceFile="${project.dir}/../data/sbs/whatlog_result.ini.ftl"
+                     outputfile="${test.temp.dir}/whatlog_result.ini">
+            <data expandProperties="yes">
+                dbPath: ${test.temp.dir}/metadata_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-count-error-with-invalid-xml-fail-on-invalid-xml-false">
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:sbsmetadatainput checkMissing="false" failOnInvalidXml="false">
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include  name="invalid_xml_log_format.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter severity="INFO" regex="^INFO:" description="info" />
+                    <metadatafilter severity="ERROR" regex="^ERROR:" description="error" />
+                    <metadatafilter severity="WARNING" regex=".*warning C4503:.*" description="warning" />
+                </metadatafilterset>
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="${project.dir}/../data/sbs/invalid_xml_log_format.log"
+            database="${test.temp.dir}/metadata_db" property="errors"
+            />
+        <au:assertTrue message="We must have 1 error in the log because of invalid xml format.">
+            <equals arg1="${errors}" arg2="1"/>
+        </au:assertTrue>
+    </target>
+
+    <target name="test-count-error-with-invalid-xml-fail-on-invalid-xml-true">
+        <au:expectfailure expectedMessage="The element type &quot;error&quot; must be terminated by the matching end-tag &quot;&lt;/error&gt;&quot;">
+            <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+                <hlm:sbsmetadatainput>
+                    <fileset dir="${project.dir}/../data/sbs">
+                        <include  name="invalid_xml_log_format.log"/>
+                    </fileset>
+                    <metadatafilterset>
+                        <metadatafilter severity="INFO" regex="^INFO:" description="info" />
+                        <metadatafilter severity="ERROR" regex="^ERROR:" description="error" />
+                        <metadatafilter severity="WARNING" regex=".*warning C4503:.*" description="warning" />
+                    </metadatafilterset>
+                </hlm:sbsmetadatainput>
+            </hlm:metadatarecord>
+        </au:expectfailure>
+        <hlm:metadataCountSeverity severity="error" log="${project.dir}/../data/sbs/invalid_xml_log_format.log"
+            database="${test.temp.dir}/metadata_db" property="errors"
+            />
+        <au:assertTrue message="We must have 1 error in the log because of invalid xml format.">
+            <equals arg1="${errors}" arg2="1"/>
+        </au:assertTrue>
+    </target>
+    
+    <target name="test-emake-errors-in-sbs-compile">
+        <hlm:metadatarecord  database="${test.temp.dir}/metadata_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/sbs">
+                    <include  name="sbs_compile_emake_errors.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter priority="error" regex="^ERROR\s+EC\d+:.*$" description="To capture emake errors" />
+                </metadatafilterset>
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="${project.dir}/../data/sbs/sbs_compile_emake_errors.log"
+            database="${test.temp.dir}/metadata_db" property="errors"/>
+        <au:assertTrue message="We must have 5 emake errors in the log.">
+            <equals arg1="${errors}" arg2="5"/>
+        </au:assertTrue>
+    </target>
+	
+	
+    <target name="test-unit-linkage">
+    	<property name="epocroot" location="../" />
+    	<copy file="${project.dir}/../data/sbs/unit_categorization_compile.log" tofile="${test.temp.dir}/unit_categorization_compile.log">
+    	    <filterchain>
+    		    <expandproperties/>
+    	    </filterchain>
+    	</copy>
+        <hlm:metadatarecord  database="${test.temp.dir}/metadata_db">
+            <hlm:sysdefmetadatainput file="../data/sbs/sysdef3.xml" epocroot="${epocroot}" />
+            <hlm:sbsmetadatainput epocroot="../">
+                <fileset file="${test.temp.dir}/unit_categorization_compile.log" />
+                <metadatafilterset>
+                    <metadatafilter priority="error" regex="^ERROR:.*" description="To capture emake errors" />
+                </metadatafilterset>
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <fmpp sourceFile="../data/sbs/sysdef_data.ini.ftl"
+                     outputfile="${test.temp.dir}/sysdef_data.ini">
+            <data expandProperties="yes">
+                dbPath: ${test.temp.dir}/metadata_db
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <property file="${test.temp.dir}/sysdef_data.ini" />
+        <echo>component.count: ${component.count}</echo>
+        <echo>component.0.unit.id: ${component.0.unit.id}</echo>
+        <echo>component.0.unit.location: ${component.0.unit.location}</echo>
+        <echo>component.1.unit.id: ${component.1.unit.id}</echo>
+        <echo>component.1.unit.location: ${component.1.unit.location}</echo>
+        <au:assertTrue message="Check the first component do not links to any unit (uncategorized)">
+            <equals arg1="${component.0.unit.id}" arg2="0" />
+        </au:assertTrue>
+        <au:assertTrue message="Check the first component do not links to any unit (uncategorized)">
+            <equals arg1="${component.0.unit.location}" arg2="" />
+        </au:assertTrue>
+        <au:assertTrue message="Check the second component links to a unit">
+            <equals arg1="${component.1.unit.location}" arg2="sf/mw/helloworldapi/group" />
+        </au:assertTrue>
+    </target>
+    
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/antunit/test_sysdef_input.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,97 @@
+<!-- 
+============================================================================ 
+Name        : test_sysdef_input.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-sysdef-input" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium metadata text input unittests.</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="setUp">
+        <echo>---=====================================---</echo>
+        <mkdir dir="${test.temp.dir}" />
+        <delete dir="${test.temp.dir}" />
+        <mkdir dir="${test.temp.dir}" />
+    </target>
+    
+    <target name="tearDown">
+        <delete dir="${test.temp.dir}" />
+        <echo>---=====================================---</echo>
+    </target>
+
+    <target name="test-sysdef-metadata-input-missing-file">
+        <echo message="test-sysdef-metadata-input" />
+        <au:expectfailure expectedMessage="file attribute is not defined.">
+            <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+                <hlm:sysdefmetadatainput />
+            </hlm:metadatarecord>
+        </au:expectfailure>
+    </target>
+    
+    <target name="test-sysdef-metadata-input-inexisting-file">
+        <echo message="test-sysdef-metadata-input" />
+        <au:expectfailure>
+            <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+                <hlm:sysdefmetadatainput file="inexisting/inexisting_sysdef3.xml" />
+            </hlm:metadatarecord>
+        </au:expectfailure>
+    </target>
+    
+    <target name="test-sysdef-metadata-input">
+        <echo message="test-sysdef-metadata-input" />
+        <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+            <hlm:sysdefmetadatainput file="../data/sysdef/sysdef3.xml" epocroot="../" />
+        </hlm:metadatarecord>
+        <fmpp sourceFile="../data/sysdef/sysdef_data.ini.ftl"
+                     outputfile="${test.temp.dir}/sysdef_data.ini">
+            <data expandProperties="yes">
+                dbPath: ${test.temp.dir}/metadata_db
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <property file="${test.temp.dir}/sysdef_data.ini" />
+        <echo>package.count: ${package.count}</echo>
+        <echo>collection.count: ${collection.count}</echo>
+        <echo>component.count: ${component.count}</echo>
+        <echo>unit.count: ${unit.count}</echo>
+        <au:assertTrue message="Invalid number of packages">
+            <equals arg1="${package.count}" arg2="2" />
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of collection">
+            <equals arg1="${collection.count}" arg2="2" />
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of components">
+            <equals arg1="${component.count}" arg2="2" />
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of units">
+            <equals arg1="${unit.count}" arg2="2" />
+        </au:assertTrue>
+    </target>
+
+    <target name="test-sysdef-metadata-input-with-invalid-model">
+        <echo message="test-sysdef-metadata-input" />
+        <au:expectfailure>
+            <hlm:metadatarecord database="${test.temp.dir}/metadata_db">
+                <hlm:sysdefmetadatainput file="../data/sysdef/invalid_sysdef3.xml" epocroot="../" />
+            </hlm:metadatarecord>
+        </au:expectfailure>
+    </target>
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/antunit/test_text_input.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,67 @@
+<!-- 
+============================================================================ 
+Name        : test_ant_input.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-text-input" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium metadata text input unittests.</description>
+    
+    <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"/>
+    
+    <target name="setUp">
+        <echo>---=====================================---</echo>
+        <mkdir dir="${test.temp.dir}" />
+        <delete dir="${test.temp.dir}" />
+        <mkdir dir="${test.temp.dir}" />
+    </target>
+    
+    <target name="tearDown">
+        <delete dir="${test.temp.dir}" />
+        <echo>---=====================================---</echo>
+    </target>
+
+    <hlm:metadatafilterset id="error.filterset">
+        <hlm:metadatafilter severity="error" regex="^ERROR: .*" description="Simple error pattern"/>
+        <hlm:metadatafilter severity="warning" regex="^WARNING: .*" description="Simple warning pattern"/>
+    </hlm:metadatafilterset>
+
+    
+    <target name="test-text-log-metadata-input">
+        <echo message="text log metadata input validation" />
+        <property name="metadata-read-db" value="${test.temp.dir}/log_text_metadata_input_db"/>
+        <echo message="database: ${metadata-read-db}" />
+        <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="error.filterset" />
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        <au:assertTrue>
+            <available type="dir" file="${metadata-read-db}" />
+        </au:assertTrue>
+        <!-- TODO: Assert the number of errors. -->
+    </target>
+        
+</project>
--- a/buildframework/helium/sf/java/metadata/tests/antunit/test_validity.ant.xml	Wed Jun 16 16:51:40 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/metadata/tests/data/IDO_lcdo_tb92-ci_MCL.92.64_ant_build.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-zip-binaries:
-   [length] t:\output\temp_build_files\IDO_lcdo_tb92-ci_MCL.92.64_nonhw_binaries_includefile.txt does not exist
-
-ats-test:
-log file not exists
-log file not exists
-
-ats-aste:
-log file not exists
-log file not exists
-
-ido-zip-wa:
-     [echo] Zipping wa
-      [zip] Building zip: t:\output\src\IDO_lcdo_tb92-ci_MCL.92.64_sources.zip
-
-build-log-extracts:
-Converting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64.sysdef_GenxmlMerge.log...
-Converting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64__armv5_winscw_armv5.test_dfs_build.sbs_ant_output.log...
-Extracted log is uptodate: t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64__armv5_winscw_armv5.test_dfs_build_compile.log
-Converting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_ant_build.log...
-Converting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_bom.log...
-Extracted log is uptodate: t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_ccm_get_input.log
-Extracted log is uptodate: t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_validate-policy.log
-
-log-merge:
-[dependset] Warning: t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_bom.log.xml modified in the future.
-     [echo] Merging all *.log.xml files
-     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64.sysdef_GenxmlMerge.log.xml into summary.
-     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64__armv5_winscw_armv5.test_dfs_build.sbs_ant_output.log.xml into summary.
-     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64__armv5_winscw_armv5.test_dfs_build_compile.log.xml into summary.
-     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_ant_build.log.xml into summary.
-     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_bom.log.xml into summary.
-     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_ccm_get_input.log.xml into summary.
-     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_info.log.xml into summary.
-     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_validate-policy.log.xml into summary.
-
-render-log-summary:
-     [fmpp] File processed.
-
-build-log-summary:
-
-prep-publish:
-
-ido-publish-sites:
-   [script] Publishing \\vagrp006\GROUPS5\SP_IDO\LCDo\CI_builds
-   [script] execute
-      [IDO] data.drive.letter is already defined to E
-      [IDO] Build.drive: t:, the drive exists: true
-      [IDO] Build drive substing skipped
-      [IDO] data.drive.letter is already defined to E
-      [IDO] Category folder name: idos
-      [IDO] Type: ido
-      [IDO] Updated build.family to ido_lcdo_tb92-ci_sbs-ec_sbs-ec
-[IDO] Using S60 version: tb92
-Trying to override old definition of task http://www.nokia.com/helium:diskspaceMacro
-Trying to override old definition of task http://www.nokia.com/helium:diskspaceMacro
-
-prep-publish:
-    [mkdir] Created dir: \\vagrp006\GROUPS5\SP_IDO\LCDo\CI_builds\tb92-ci\MCL.92.64
-
-publish:
-     [copy] Copying 26 files to \\vagrp006\GROUPS5\SP_IDO\LCDo\CI_builds\tb92-ci\MCL.92.64
-     [echo] ERROR: There are 5214 changes in the publish directory. Uploading the changes again...
-
-ido-recopy:
-      [IDO] data.drive.letter is already defined to E
-      [IDO] Build.drive: t:, the drive exists: true
-      [IDO] Build drive substing skipped
-      [IDO] data.drive.letter is already defined to E
-      [IDO] Category folder name: idos
-      [IDO] Type: ido
-      [IDO] Updated build.family to ido_lcdo_tb92-ci_sbs-ec_sbs-ec
-[IDO] Using S60 version: tb92
-Trying to override old definition of task http://www.nokia.com/helium:diskspaceMacro
-Trying to override old definition of task http://www.nokia.com/helium:diskspaceMacro
-
-ido-create-ado-mapping:
-[hlm:referenceToFileMacro] Creating t:\output\temp_build_files\null903042207.txt using system.definition.files
-[hlm:referenceToFileMacro] E:\Build_E\idoconfiguration\running\common\sysdefs\build.sysdef.xml
-[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\LC_Domain\LC_Domain\btservices\layers.sysdef.xml
-[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\LC_Domain\LC_Domain\printing\layers.sysdef.xml
-[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\LC_Domain\LC_Domain\remoteconn\layers.sysdef.xml
-[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\LC_Domain\LC_Domain\usbservices\layers.sysdef.xml
-[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\LC_Domain_osext\LC_Domain_osext\btaudioadaptation_stub\layers.sysdef.xml
-[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\LC_Domain_osext\LC_Domain_osext\shortlinksrv\layers.sysdef.xml
-[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\SystemSW_Domain_OSExt\SystemSW_Domain_OSExt\devicesrv\layers.sysdef.xml
-
-ido-prep-copy:
-     [fmpp] File processed.
-
-all:
-   [delete] Deleting directory t:\sf\app\printing_old
-   [delete] Deleting directory t:\sf\mw\btservices_old
-   [delete] Deleting directory t:\sf\mw\usbservices_old
-   [delete] Deleting directory t:\sf\mw\remoteconn_old
-   [delete] Deleting directory t:\sf\os\devicesrv_old
-   [delete] Deleting directory t:\sf\adaptation\stubs\btaudioadaptation_stub_old
-   [delete] Deleting directory t:\sf\os\shortlinksrv_old
-     [fmpp] File processed.
-
-all:
-    [mkdir] Created dir: t:\sf\app\printing
-    [mkdir] Created dir: t:\sf\adaptation\stubs\btaudioadaptation_stub
-    [mkdir] Created dir: t:\sf\os\shortlinksrv
-    [mkdir] Created dir: t:\sf\mw\remoteconn
-    [mkdir] Created dir: t:\sf\os\devicesrv
-    [mkdir] Created dir: t:\sf\mw\btservices
-    [mkdir] Created dir: t:\sf\mw\usbservices
-     [copy] Copying 30 files to t:\sf\adaptation\stubs\btaudioadaptation_stub
-     [copy] Copying 359 files to t:\sf\os\shortlinksrv
-     [copy] Copying 496 files to t:\sf\app\printing
-     [copy] Copying 1584 files to t:\sf\mw\remoteconn
-     [copy] Copying 2341 files to t:\sf\mw\btservices
-     [copy] Copying 1767 files to t:\sf\mw\usbservices
-     [copy] Copying 6833 files to t:\sf\os\devicesrv
-
-IDO-additions.final:
-Deferred failure: Yes
-
-BUILD FAILED
-
-compileSignal: Expected result was 0, actual result was 1 : compile-signal
-E:\Build_E\idoconfiguration\running\common\ido-additions.ant.xml:110: if=pending.failure
-	at com.nokia.helium.core.ant.HeliumExecutor.executeTargets(HeliumExecutor.java:98)
-	at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
-	at org.apache.tools.ant.Main.runBuild(Main.java:698)
-	at org.apache.tools.ant.Main.startAnt(Main.java:199)
-	at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
-	at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/abld/parsing_result.ini.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,31 @@
+<#--
+============================================================================ 
+Name        : whatlog_result.ini.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:
+
+============================================================================
+-->
+<#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "${dbPath}") >
+number.of.logs=${table_info['jpasingle']['select count(l.path) path from LogFile l'][0]}
+number.of.metadata.entries=${table_info['jpasingle']['select count(e) from MetadataEntry e'][0]}
+number.of.execution.times=${table_info['jpasingle']['select count(e) path from ExecutionTime e'][0]}
+number.of.components=${table_info['jpasingle']['select count(c) path from Component c'][0]}
+<#assign c = 0 />
+<#list table_info['jpa']['select e from ExecutionTime e'] as e>
+execution.time.${c}=${e.time}
+<#assign c = c + 1  />
+</#list>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/abld/sample_abld.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,486 @@
+
+x:\>set
+ALLUSERSPROFILE=C:\Documents and Settings\All Users
+ANT_ARGS=-lib "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\helium-antlib\bin" -lib "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\tools\common\java\lib" -lib "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\antlibs" -lib "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\antlibs\internal" -lib "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\jep_1.6_2.5" -logger com.nokia.ant.HeliumLogger   -listener com.nokia.helium.diamonds.ant.HeliumListener  -listener com.nokia.ant.listener.internaldata.Listener  -Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor  -listener com.nokia.ant.listener.TracingLogger
+ANT_CMD_LINE_ARGS=-Dhelium.dir "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium" -listener nokia.ant.XmlLogger -DXmlLogger.file E:\BUILD_E\ido-config-cc-svn\cruisecontrol/../robot/log.xml -Dcclastbuildtimestamp 20090702114112 "-Dcvstimestamp=2009-07-02 12:11:44 GMT" -Dbuildforced false -Dcclastgoodbuildtimestamp 20090606000000 -Dcctimestamp 20090702131144 -Dlabel build.33 -Dprojectname ido_abs_tb92-nightly -Dlastbuildsuccessful false -Dbuild.system ec-helium -Dconfiguration.dir E:\BUILD_E\ido-config-cc-svn\cruisecontrol/../idos/abs/branches/tb92-nightly -Dbuild.drive x: -Ds60.grace.cache E:\BUILD_E\ido-config-cc-svn\build/ido_abs_tb92-nightly_grace_cache.txt -Dskip.codescanner true -Dcc.output.dir E:\BUILD_E\ido-config-cc-svn\build -buildfile E:\BUILD_E\ido-config-cc-svn\cruisecontrol/config/wrapper.xml test-publish-prop ido-build
+ANT_HOME=C:\APPS\ant_1.7
+ANT_OPTS=-Xmx896M -Dlog4j.configuration=com/nokia/log4j.xml
+APPDATA=C:\Documents and Settings\username\Application Data
+ARMROOT=\
+ARMV5VER=:ARM/Thumb C/C++ Compiler, RVCT2.2 [Build 593]
+CCDIR=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl\
+CC_BAT=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl\real_cruisecontrol.bat
+CC_OPTS= -Ddashboard.config=E:\BUILD_E\ido-config-cc-svn\build\helium-dashboard-config.xml -Xms512m -Xmx1024m
+CLASSPATH=e:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl\lib;%CLASSPATH%
+CLIENTNAME=4GBD01728
+ClusterLog=C:\EESP\Cluster\cluster.log
+CMTHOME=C:\APPS\cmt
+CommonProgramFiles=C:\Program Files\Common Files
+COMPUTERNAME=FASYM011
+ComSpec=C:\EESP\system32\cmd.exe
+COPYCMD=/y
+CRUISE_PATH=C:\Apps\j2sdk_1.6.0_02\lib\tools.jar
+CTCHOME=C:\APPS\ctc
+DERBY_HOME=C:\APPS\j2sdk_1.6.0_02\JavaDB
+DIAMONDS_ANT_ARGS= -listener com.nokia.helium.diamonds.ant.HeliumListener
+EMAKEFLAGS=--no-print-directory --emake-volatile=.def,.info,.class,.mmp --emake-reg-roots=-\HKEY_CLASSES_ROOT
+EMAKE_CM=fawec001
+EMAKE_EMULATION=symbian
+EMAKE_ROOT=\;c:\apps
+EPOCROOT=\
+EXEC="C:\Apps\j2sdk_1.6.0_02\bin\java"  -Ddashboard.config=E:\BUILD_E\ido-config-cc-svn\build\helium-dashboard-config.xml -Xms512m -Xmx1024m -Djmx.remote.x.server.connection.timeout=-1 -Djmx.remote.x.client.connection.check.period=0 -jar "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl\lib\cruisecontrol-launcher.jar" -webapppath E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl/webapps/cruisecontrol -dashboard E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl/webapps/dashboard -webport 8080 -rmiport 1099
+FILTERWHAT_FILE=\output\logs\about_what.log
+FLEXLM_BATCH=1
+FLEXLM_TIMEOUT=900000
+FP_NO_HOST_CHECK=NO
+HELIUM_CACHE_DIR=C:\DOCUME~1\username\LOCALS~1\Temp\2\helium\username
+HELIUM_HOME=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium
+HLM_ENABLE_MEM_TRACING=1
+HLM_MEM_TRACING_ANT_ARGS= -listener com.nokia.ant.listener.TracingLogger
+HOME=h:\
+HOMEDRIVE=C:
+HOMEPATH=\Documents and Settings\username
+include=C:\apps\msvc6\VC98\ATL\INCLUDE;C:\apps\msvc6\VC98\INCLUDE;C:\apps\msvc6\VC98\MFC\INCLUDE;C:\apps\msvc6\VC98\atl\include;C:\apps\msvc6\VC98\mfc\include;C:\apps\msvc6\VC98\include
+INTERNAL_DATA_ANT_ARGS= -listener com.nokia.ant.listener.internaldata.Listener
+JAVA_1_3_1_HOME=C:\APPS\j2sdk_1.3.1_06
+JAVA_HOME=C:\Apps\j2sdk_1.6.0_02
+JAVA_PATH="C:\Apps\j2sdk_1.6.0_02\bin\java"
+JEP_HOME=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\jep_1.6_2.5
+LAUNCHER=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl\lib\cruisecontrol-launcher.jar
+lib=C:\apps\msvc6\VC98\LIB;C:\apps\msvc6\VC98\MFC\LIB;C:\apps\msvc6\VC98\mfc\lib;C:\apps\msvc6\VC98\lib
+LIBDIR=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl\lib
+LM_LICENSE_FILE=C:\APPS\licenses\emea.dat;1700@fake1.domain.invalid;C:\APPS\licenses\PCLint.dat;6969@sfake2.domain.invalid;
+LOGONSERVER=\\CAWDC101
+MSDevDir=C:\apps\msvc6\Common\msdev98
+MSVCDir=C:\apps\msvc6\VC98
+MSVC_ENV_BAT=c:\APPS\msvc6\VC98\Bin\VCVARS32.BAT
+MWCSym2Includes=C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_X86;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C++\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Headers\Win32 SDK
+MWSym2Libraries=C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Libraries\Win32 SDK;C:\APPS\carbide\x86Build\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs
+MWSym2LibraryFiles=MSL_All_MSE_Symbian_D.lib;gdi32.lib;user32.lib;kernel32.lib;
+NOKIA_LICENSE_FILE=C:\APPS\licenses\emea.dat;
+NUMBER_OF_PROCESSORS=4
+OS=Windows_NT
+Path=C:\apps\msvc6\Common\msdev98\BIN;C:\apps\msvc6\VC98\BIN;C:\apps\msvc6\Common\TOOLS\WINNT;C:\apps\msvc6\Common\TOOLS;e:\BUILD_E\ido-config-cc-svn\sbs\bin;e:\BUILD_E\slick-svn\bin;c:\ECloud\i686_win32\bin;C:\Program Files\HP\NCU;c:\apps\actperl\bin\;c:\apps\rvct22_593\bin;c:\apps\atool;\epoc32\tools;\epoc32\gcc\bin;c:\apps\ue;c:\apps\ccm65\bin;c:\apps\carbide\x86build\symbian_tools\command_line_tools;c:\apps\symdec;c:\apps\actpython\.;C:\Symbian\SITK\stat\bin;C:\Symbian\SITK;C:\Symbian\SITK\edgd\bin\;C:\Symbian\SITK\cbr;C:\Symbian\SITK\ucc\bin;C:\Symbian\SITK\ucc\SyncService\bin;C:\Symbian\SITK\ucc\TestDriverService\bin;C:\Symbian\SITK\sqlite-db-creator;C:\Symbian\SITK\testdriver\product;C:\Symbian\SITK\imgcheck;C:\Symbian\SITK\SystemModelGenerator;C:\Symbian\SITK/sbs/bin;;c:\program files\hp\ncu;c:\program files\windows resource kits\tools\;c:\eesp\system32;c:\eesp\system32\wbem;c:\apps\msvc6\common\tools\winnt;c:\apps\msvc6\common\msdev98\bin;c:\apps\msvc6\vc98\bin;c:\progra~1\winzip;c:\apps\wget;c:\apps\ant_1.7\bin;c:\apps\understand\bin\pc-win95;c:\etpwin\system32;c:\etpwin\system32\wbem;c:\apps\sbs\bin;c:\apps\pclint;c:\apps\cltools;c:\apps\codescanner;c:\apps\symrec;c:\apps\gracecli\bin;c:\apps\7zip;c:\apps\ctc;c:\apps\unzip;c:\apps\bc;c:\apps\cmt\;c:\apps\j2sdk_1.6.0_02;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\jep_1.6_2.5;\epoc32\tools;\epoc32\gcc\bin;\epoc32\tools\build;\epoc32\rombuild;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\tools\common\bin;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\unxutils;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\filedisk;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\info-zip;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\Subversion\bin;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\graphviz\bin;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\LSC_5.2;\tools;\tools\ncp_tools;C:\APPS\ctc;C:\EESP\system32;C:\EESP;C:\EESP\System32\Wbem\;C:\EESP\system32;C:\EESP;C:\EESP\System32\Wbem;C:\ETPWIN\system32;C:\ETPWIN;C:\ETPWIN\System32\Wbem
+PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw
+PERL=C:\APPS\actperl\bin\perl.exe
+PERL5LIB=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\tools\common\packages
+PID=8296
+ppd_tools=\tools\
+PROCESSOR_ARCHITECTURE=x86
+PROCESSOR_IDENTIFIER=x86 Family 15 Model 5 Stepping 10, AuthenticAMD
+PROCESSOR_LEVEL=15
+PROCESSOR_REVISION=050a
+ProgramFiles=C:\Program Files
+PROMPT=$P$G
+PYTHONPATH=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\python\lib\2.5;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\tools\common\python\lib;e:\BUILD_E\ido-config-cc-svn\sbs\python
+RVCT22BIN=C:\APPS\rvct22_593\bin
+RVCT22INC=C:\APPS\rvct22_593\include
+RVCT22LIB=C:\APPS\rvct22_593\lib
+RVCT22_ASMOPT=--licretry --fastlicense --sitelicense
+RVCT22_CCOPT=--licretry --fastlicense --sitelicense
+RVCT22_LINKOPT=--licretry --fastlicense --sitelicense
+SBS_HOME=e:\BUILD_E\ido-config-cc-svn\sbs
+SESSIONNAME=RDP-Tcp#22
+SIGNALING_ANT_ARGS= -Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor
+SITK_PATHS=C:\Symbian\SITK\stat\bin;C:\Symbian\SITK;C:\Symbian\SITK\edgd\bin\;C:\Symbian\SITK\cbr;C:\Symbian\SITK\ucc\bin;C:\Symbian\SITK\ucc\SyncService\bin;C:\Symbian\SITK\ucc\TestDriverService\bin;C:\Symbian\SITK\sqlite-db-creator;C:\Symbian\SITK\testdriver\product;C:\Symbian\SITK\imgcheck;C:\Symbian\SITK\SystemModelGenerator;C:\Symbian\SITK/sbs/bin;
+spp_tools=\tools\
+SYMBIANBUILD_DEPENDENCYOFF=1
+SYMSEE_VERSION=9.1.0
+SystemDrive=C:
+SystemRoot=C:\EESP
+TEAM=xxxxxx
+TEMP=C:\DOCUME~1\username\LOCALS~1\Temp\2
+TESTED_ANT=C:\APPS\ant_1.7
+TESTED_JAVA=C:\Apps\j2sdk_1.6.0_02
+TMP=C:\DOCUME~1\username\LOCALS~1\Temp\2
+USERDNSDOMAIN=fake.domain.invalid
+USERDOMAIN=userdomain
+USERNAME=username
+USERPROFILE=C:\Documents and Settings\username
+windir=C:\EESP
+_JAVACMD=C:\Apps\j2sdk_1.6.0_02\bin\java.exe
+_USE_CLASSPATH=yes
+
+x:\>emake --emake-build-label=ido_abs_tb92-nightly_5.2.33.dfs_build --emake-class=default --emake-priority=normal --emake-maxagents=0 --emake-job-limit=0 --emake-mem-limit=1000000000 --emake-history=merge --emake-annodetail=basic,history,file,waiting --emake-annofile=x:\output\logs\ido_abs_tb92-nightly_5.2.33.dfs_build.emake.anno.xml --emake-historyfile=x:/emake.data --emake-debug=g --emake-logfile=x:\output\logs\ido_abs_tb92-nightly_5.2.33.dfs_build.emake.g.dlog --emake-root=\;c:\apps;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium --emake-autodepend=1 -k -i -f x:/dfs_build.make LOGBUILDTIME="" VERBOSE="" SAVESPACE="" dfs_build 
+WARNING EC1137: Unrecognized option '--no-print-directory' in EMAKEFLAGS.
+Starting build: 50896
+WARNING EC1137: Unrecognized option '--no-print-directory' in EMAKEFLAGS.
+===-------------------------------------------------
+=== dfs_build
+===-------------------------------------------------
+=== dfs_build started Thu Jul  2 13:13:58 2009
+emake -f dfs_build.make dfs_build-bldmake_bldfiles
+make[1]: Entering directory `x:/'
+=== dfs_build == \sf/os/graphics/group
+-- bldmake bldfiles 
+++ Started at Thu Jul  2 13:13:58 2009
++++ HiRes Start 1246536838.91662
+cd \sf/os/graphics/group && bldmake bldfiles   -keepgoing   
++++ HiRes End 1246536840.97909
+++ Finished at Thu Jul  2 13:14:01 2009
+=== dfs_build == \sf/os/textandloc/group
+-- bldmake bldfiles 
+++ Started at Thu Jul  2 13:13:58 2009
++++ HiRes Start 1246536839.05724
+cd \sf/os/textandloc/group && bldmake bldfiles   -keepgoing   
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
+WARNING: Should install MSVC6 Service Pack 3
++++ HiRes End 1246536842.55719
+++ Finished at Thu Jul  2 13:14:02 2009
+make[1]: Leaving directory `x:/'
+emake -f dfs_build.make dfs_build-abld_export
+make[1]: Entering directory `x:/'
+=== dfs_build == \sf/os/graphics/group
+-- abld export 
+++ Started at Thu Jul  2 13:14:02 2009
++++ HiRes Start 1246536843.01031
+cd \sf/os/graphics/group && abld export   -keepgoing   
+  emake -r  -k -f "\EPOC32\BUILD\sf\os\graphics\group\EXPORT.make" EXPORT VERBOSE=-s KEEPGOING=-k
+make[2]: Entering directory `X:/sf/os/graphics/group'
+copy "\sf\os\graphics\graphics_plat\openvg_binding_api\inc\vg\vgcontext.h" "\epoc32\include\platform\vg\vgcontext.h"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphics_plat\openvg_binding_api\inc\vg\vgcontext_symbian.h" "\epoc32\include\platform\vg\vgcontext_symbian.h"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphics_plat\m3g_core_api\inc\M3G\m3g_core.h" "\epoc32\include\platform\M3G\m3g_core.h"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphicsaccelaration\3d_opengl_es_1_1\group\opengles_nokia.iby" "\epoc32\rom\include\opengles_nokia.iby"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphicsaccelaration\2d_openvg_1_1\rom\openvg_nokia.iby" "\epoc32\rom\include\core\os\openvg_nokia.iby"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphicsaccelaration\egl\group\egl_sw_gce.iby" "\epoc32\rom\include\egl_sw_gce.iby"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphicsaccelaration\egl\group\egl_sw_nongce.iby" "\epoc32\rom\include\egl_sw_nongce.iby"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\products\egl\3.0\include\eglInternalApi.h" "\epoc32\include\platform\eglInternalApi.h"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\products\egl\3.0\include\oglcontextapi.h" "\epoc32\include\platform\oglContextApi.h"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\products\egl\3.0\include\ovgContextApi.h" "\epoc32\include\platform\ovgContextApi.h"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\products\egl\3.0\include\EGL\eglWrapper.h" "\epoc32\include\platform\EGL\eglWrapper.h"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\products\egl\3.0\src\symbian\eglsymbianpaniccodes.h" "\epoc32\include\platform\eglsymbianpaniccodes.h"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\libs\hg\3.1\hgDefs.h" "\epoc32\include\platform\hgDefs.h"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\libs\hg\3.1\hgPublicDefs.h" "\epoc32\include\platform\hgPublicDefs.h"
+        1 file(s) copied.
+copy "\sf\os\graphics\graphicsaccelaration\vgi\rom\libvgi.iby" "\epoc32\rom\include\core\os\libvgi.iby"
+        1 file(s) copied.
+copy "\sf\os\graphics\m3g\m3gcore11\rom\m3gcore.iby" "\epoc32\rom\include\core\os\m3gcore.iby"
+        1 file(s) copied.
+make[2]: Leaving directory `X:/sf/os/graphics/group'
++++ HiRes End 1246536843.8853
+++ Finished at Thu Jul  2 13:14:03 2009
+=== dfs_build == \sf/os/textandloc/group
+-- abld export 
+++ Started at Thu Jul  2 13:14:02 2009
++++ HiRes Start 1246536843.04156
+cd \sf/os/textandloc/group && abld export   -keepgoing   
+  emake -r  -k -f "\EPOC32\BUILD\sf\os\textandloc\group\EXPORT.make" EXPORT VERBOSE=-s KEEPGOING=-k
+make[2]: Entering directory `X:/sf/os/textandloc/group'
+Creating \sf\os\textandloc\inc
+copy "\sf\os\textandloc\textandloc_plat\findutil_api\inc\FindUtil.h" "\epoc32\include\platform\FindUtil.h"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_plat\japanese_language_utilities_api\inc\jplangutil.h" "\epoc32\include\platform\mw\jplangutil.h"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_plat\character_conversion_nonpublic_api\inc\JapaneseCharConv.h" "\epoc32\include\platform\JapaneseCharConv.h"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_plat\sortutil_api\inc\SortUtil.h" "\epoc32\include\platform\SortUtil.h"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\GBK.H" "\epoc32\include\GBK.H"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\JISX0208.H" "\epoc32\include\JISX0208.H"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\GB2312.H" "\epoc32\include\GB2312.H"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\CharacterSetConverter.h" "\epoc32\include\CharacterSetConverter.h"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\CONVDATA.H" "\epoc32\include\CONVDATA.H"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\JISX0201.H" "\epoc32\include\JISX0201.H"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\UTF.H" "\epoc32\include\UTF.H"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\JISX0212.H" "\epoc32\include\JISX0212.H"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\CharacterSetConverter.inl" "\epoc32\include\CharacterSetConverter.inl"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\BIG5.H" "\epoc32\include\BIG5.H"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\CONVNAMES.H" "\epoc32\include\CONVNAMES.H"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\CHARCONV.H" "\epoc32\include\CHARCONV.H"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\SHIFTJIS.H" "\epoc32\include\SHIFTJIS.H"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_plugin_provider_api\inc\CONVUTILS.H" "\epoc32\include\CONVUTILS.H"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\character_conversion_plugin_provider_api\inc\CONVGENERATEDCPP.H" "\epoc32\include\CONVGENERATEDCPP.H"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\directory_localizer_api\inc\DirectoryLocalizer.rh" "\epoc32\include\mw\DirectoryLocalizer.rh"
+        1 file(s) copied.
+copy "\sf\os\textandloc\textandloc_pub\directory_localizer_api\inc\CDirectoryLocalizer.h" "\epoc32\include\mw\CDirectoryLocalizer.h"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\localizer\rom\DirectoryLocalizer.iby" "\epoc32\rom\include\core\mw\directorylocalizer.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\localizer\rom\DirectoryLocalizerResources.iby" "\epoc32\rom\include\language\mw\directorylocalizerresources.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\localizer\loc\DirectoryLocalizer.loc" "\epoc32\include\platform\mw\loc\sc\directorylocalizer.loc"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1250.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1250.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1251.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1251.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1252.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1252.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1253.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1253.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1254.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1254.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1255.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1255.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1256.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1256.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1257.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1257.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win874.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win874.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\TIS_620.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\TIS_620.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\KOI8U.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\KOI8U.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\KOI8R.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\KOI8R.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1258.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1258.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\iscii.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\iscii.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\EUCKR.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\EUCKR.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\iso2022kr.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\iso2022kr.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\ksc5601.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\ksc5601.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1250.snm" "\epoc32\data\z\Resource\charconv\Win1250.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1251.snm" "\epoc32\data\z\Resource\charconv\Win1251.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1252.snm" "\epoc32\data\z\Resource\charconv\Win1252.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1253.snm" "\epoc32\data\z\Resource\charconv\Win1253.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1254.snm" "\epoc32\data\z\Resource\charconv\Win1254.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1255.snm" "\epoc32\data\z\Resource\charconv\Win1255.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1256.snm" "\epoc32\data\z\Resource\charconv\Win1256.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1257.snm" "\epoc32\data\z\Resource\charconv\Win1257.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win874.snm" "\epoc32\data\z\Resource\charconv\Win874.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\TIS_620.snm" "\epoc32\data\z\Resource\charconv\TIS_620.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\KOI8U.snm" "\epoc32\data\z\Resource\charconv\KOI8U.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\KOI8R.snm" "\epoc32\data\z\Resource\charconv\KOI8R.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1258.snm" "\epoc32\data\z\Resource\charconv\Win1258.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\iscii.snm" "\epoc32\data\z\Resource\charconv\iscii.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\EUCKR.snm" "\epoc32\data\z\Resource\charconv\EUCKR.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\iso2022kr.snm" "\epoc32\data\z\Resource\charconv\iso2022kr.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\ksc5601.snm" "\epoc32\data\z\Resource\charconv\ksc5601.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\rom\CharConvPlugin.iby" "\epoc32\rom\include\core\mw\charconvplugin.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\rom\CharConvPluginPictograph.IBY" "\epoc32\rom\include\core\mw\charconvpluginpictograph.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\rom\CharConvPluginPictograph_Variant.iby" "\epoc32\rom\include\customer\mw\charconvpluginpictograph_Variant.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconvplugin\rom\CharConvPlugin_Variant.IBY" "\epoc32\rom\include\customer\mw\charconvplugin_Variant.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\findutil\rom\Findutil.iby" "\epoc32\rom\include\core\mw\findutil.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\findutil\rom\Findutil_Variant.iby" "\epoc32\rom\include\customer\mw\findutil_Variant.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\numbergrouping\rom\NumberGrouping.iby" "\epoc32\rom\include\core\mw\numbergrouping.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\numbergrouping\conf\numbergrouping.confml" "\epoc32\rom\config\confml_data\s60\numbergrouping.confml"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\numbergrouping\conf\numbergrouping_101F8775.crml" "\epoc32\rom\config\confml_data\s60\numbergrouping_101F8775.crml"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\gamerecognizer\rom\GameRecognizer.iby" "\epoc32\rom\include\core\mw\gamerecognizer.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\jplangutil\rom\JPLangUtil.iby" "\epoc32\rom\include\core\mw\jplangutil.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\sortutil\rom\Sortutil.iby" "\epoc32\rom\include\core\mw\sortutil.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\sortutil\rom\SortUtil_Variant.iby" "\epoc32\rom\include\customer\mw\sortutil_Variant.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\aknjapanesereading\rom\AknJapaneseReading.iby" "\epoc32\rom\include\core\mw\aknjapanesereading.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CNVTOOL.BAT" "\epoc32\tools\CNVTOOL.BAT"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\SNMTOOL.BAT" "\epoc32\tools\SNMTOOL.BAT"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CHARCONV.BAT" "\epoc32\tools\CHARCONV.BAT"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CHARCONV.PL" "\epoc32\tools\CHARCONV.PL"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CNVTOOL.PL" "\epoc32\tools\CNVTOOL.PL"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\SNMTOOL.PL" "\epoc32\tools\SNMTOOL.PL"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\PARSER.PM" "\epoc32\tools\PARSER.PM"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\WRITER.PM" "\epoc32\tools\WRITER.PM"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\UTF.PM" "\epoc32\tools\UTF.PM"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CHARCONV_EXE.IPR" "\epoc32\engdoc\tools\CHARCONV_EXE.IPR"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CHARCONV_PERLTOOLS.IPR" "\epoc32\engdoc\tools\CHARCONV_PERLTOOLS.IPR"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CNVAPI.RTF" "\epoc32\engdoc\charconv\CNVAPI.RTF"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CNVTOOL.RTF" "\epoc32\engdoc\charconv\CNVTOOL.RTF"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\SNMTOOL.RTF" "\epoc32\engdoc\charconv\SNMTOOL.RTF"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\AUTODETECT.RTF" "\epoc32\engdoc\charconv\AUTODETECT.RTF"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\big5.dat" "\epoc32\tools\charconv\big5.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\cp1252.dat" "\epoc32\tools\charconv\cp1252.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\gb12345.dat" "\epoc32\tools\charconv\gb12345.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\gb2312.dat" "\epoc32\tools\charconv\gb2312.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\gbk.dat" "\epoc32\tools\charconv\gbk.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88591.dat" "\epoc32\tools\charconv\iso88591.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso885910.dat" "\epoc32\tools\charconv\iso885910.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso885913.dat" "\epoc32\tools\charconv\iso885913.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso885914.dat" "\epoc32\tools\charconv\iso885914.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso885915.dat" "\epoc32\tools\charconv\iso885915.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88592.dat" "\epoc32\tools\charconv\iso88592.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88593.dat" "\epoc32\tools\charconv\iso88593.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88594.dat" "\epoc32\tools\charconv\iso88594.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88595.dat" "\epoc32\tools\charconv\iso88595.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88596.dat" "\epoc32\tools\charconv\iso88596.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88597.dat" "\epoc32\tools\charconv\iso88597.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88598.dat" "\epoc32\tools\charconv\iso88598.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88599.dat" "\epoc32\tools\charconv\iso88599.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\shiftjis.dat" "\epoc32\tools\charconv\shiftjis.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\shiftjisdirectmap.dat" "\epoc32\tools\charconv\shiftjisdirectmap.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\gsm7_turkish_single.dat" "\epoc32\tools\charconv\gsm7_turkish_single.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\turkish_locking_gsm7ext.dat" "\epoc32\tools\charconv\turkish_locking_gsm7ext.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\turkish_locking_single.dat" "\epoc32\tools\charconv\turkish_locking_single.dat"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\include\PictographObserver.h" "\sf\os\textandloc\inc\PictographObserver.h"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\include\CnvPictographShared.h" "\sf\os\textandloc\inc\CnvPictographShared.h"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\include\CnvShiftJisDirectmap.h" "\sf\os\textandloc\inc\CnvShiftJisDirectmap.h"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\snm\basic.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\basic.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\snm\basic.snm" "\epoc32\data\z\Resource\charconv\basic.snm"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV.IBY" "\epoc32\rom\include\core\mw\charconv.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_CHINESE_SIMPLFIED.IBY" "\epoc32\rom\include\customer\mw\charconv_chinese_simplfied.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_CHINESE_TRADITIONAL.IBY" "\epoc32\rom\include\customer\mw\charconv_chinese_traditional.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_CODEPAGE.iby" "\epoc32\rom\include\core\mw\charconv_codepage.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_ISO8859X.IBY" "\epoc32\rom\include\core\mw\charconv_iso8859x.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_JAPANESE.IBY" "\epoc32\rom\include\customer\mw\charconv_japanese.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\Charconv_Pictographs_Variant.Iby" "\epoc32\rom\include\customer\mw\charconv_pictographs_variant.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\charconv_gsm7_turkish_Variant.iby" "\epoc32\rom\include\customer\mw\charconv_gsm7_turkish_Variant.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\charconv_gsm7_turkish_Variant.iby" "\epoc32\rom\include\charconv_gsm7_turkish_Variant.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV.IBY" "\epoc32\rom\include\charconv.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CharConv_All_Plugins.iby" "\epoc32\rom\include\charconv_all_plugins.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_CHINESE_SIMPLFIED.IBY" "\epoc32\rom\include\charconv_chinese_simplfied.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_CHINESE_TRADITIONAL.IBY" "\epoc32\rom\include\charconv_chinese_traditional.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_JAPANESE.IBY" "\epoc32\rom\include\charconv_japanese.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_CODEPAGE.iby" "\epoc32\rom\include\charconv_codepage.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_ISO8859X.IBY" "\epoc32\rom\include\charconv_iso8859x.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\charconv_gsm7_turkish.iby" "\epoc32\rom\include\charconv_gsm7_turkish.iby"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\inlinetext\inc\inlinetextbase.h" "\epoc32\include\platform\mw\inlinetextbase.h"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\inlinetext\inc\inlinetextcompositesource.h" "\epoc32\include\platform\mw\inlinetextcompositesource.h"
+        1 file(s) copied.
+copy "\sf\os\textandloc\charconvfw\inlinetext\inc\inlinetextnomatchesindicatorsource.h" "\epoc32\include\platform\mw\inlinetextnomatchesindicatorsource.h"
+        1 file(s) copied.
+make[2]: Leaving directory `X:/sf/os/textandloc/group'
++++ HiRes End 1246536844.10405
+++ Finished at Thu Jul  2 13:14:04 2009
+make[1]: Leaving directory `x:/'
+emake -f dfs_build.make dfs_build-abld_makefile-tools
+make[1]: Entering directory `x:/'
+=== dfs_build == \sf/os/graphics/group
+-- abld makefile 
+++ Started at Thu Jul  2 13:14:05 2009
++++ HiRes Start 1246536845.63642
+cd \sf/os/graphics/group && abld makefile   -keepgoing   tools
+This project does not support platform or  program "TOOLS"
++++ HiRes End 1246536847.1364
+++ Finished at Thu Jul  2 13:14:07 2009
+=== dfs_build == \sf/os/textandloc/group
+-- abld makefile 
+++ Started at Thu Jul  2 13:14:05 2009
++++ HiRes Start 1246536845.6208
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/ant/package_ant_build.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,129 @@
+zip-binaries:
+   [length] t:\output\temp_build_files\IDO_lcdo_tb92-ci_MCL.92.64_nonhw_binaries_includefile.txt does not exist
+
+ats-test:
+log file not exists
+log file not exists
+
+ats-aste:
+log file not exists
+log file not exists
+
+ido-zip-wa:
+     [echo] Zipping wa
+      [zip] Building zip: t:\output\src\IDO_lcdo_tb92-ci_MCL.92.64_sources.zip
+
+build-log-extracts:
+Converting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64.sysdef_GenxmlMerge.log...
+Converting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64__armv5_winscw_armv5.test_dfs_build.sbs_ant_output.log...
+Extracted log is uptodate: t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64__armv5_winscw_armv5.test_dfs_build_compile.log
+Converting t:\output\logs\package_ant_build.log...
+Converting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_bom.log...
+Extracted log is uptodate: t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_ccm_get_input.log
+Extracted log is uptodate: t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_validate-policy.log
+
+log-merge:
+[dependset] Warning: t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_bom.log.xml modified in the future.
+     [echo] Merging all *.log.xml files
+     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64.sysdef_GenxmlMerge.log.xml into summary.
+     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64__armv5_winscw_armv5.test_dfs_build.sbs_ant_output.log.xml into summary.
+     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64__armv5_winscw_armv5.test_dfs_build_compile.log.xml into summary.
+     [echo] Inserting t:\output\logs\package_ant_build.log.xml into summary.
+     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_bom.log.xml into summary.
+     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_ccm_get_input.log.xml into summary.
+     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_info.log.xml into summary.
+     [echo] Inserting t:\output\logs\IDO_lcdo_tb92-ci_MCL.92.64_validate-policy.log.xml into summary.
+
+render-log-summary:
+     [fmpp] File processed.
+
+build-log-summary:
+
+prep-publish:
+
+ido-publish-sites:
+   [script] Publishing \\vagrp006\GROUPS5\SP_IDO\LCDo\CI_builds
+   [script] execute
+      [IDO] data.drive.letter is already defined to E
+      [IDO] Build.drive: t:, the drive exists: true
+      [IDO] Build drive substing skipped
+      [IDO] data.drive.letter is already defined to E
+      [IDO] Category folder name: idos
+      [IDO] Type: ido
+      [IDO] Updated build.family to ido_lcdo_tb92-ci_sbs-ec_sbs-ec
+[IDO] Using S60 version: tb92
+Trying to override old definition of task http://www.nokia.com/helium:diskspaceMacro
+Trying to override old definition of task http://www.nokia.com/helium:diskspaceMacro
+
+prep-publish:
+    [mkdir] Created dir: \\vagrp006\GROUPS5\SP_IDO\LCDo\CI_builds\tb92-ci\MCL.92.64
+
+publish:
+     [copy] Copying 26 files to \\vagrp006\GROUPS5\SP_IDO\LCDo\CI_builds\tb92-ci\MCL.92.64
+     [echo] ERROR: There are 5214 changes in the publish directory. Uploading the changes again...
+
+ido-recopy:
+      [IDO] data.drive.letter is already defined to E
+      [IDO] Build.drive: t:, the drive exists: true
+      [IDO] Build drive substing skipped
+      [IDO] data.drive.letter is already defined to E
+      [IDO] Category folder name: idos
+      [IDO] Type: ido
+      [IDO] Updated build.family to ido_lcdo_tb92-ci_sbs-ec_sbs-ec
+[IDO] Using S60 version: tb92
+Trying to override old definition of task http://www.nokia.com/helium:diskspaceMacro
+Trying to override old definition of task http://www.nokia.com/helium:diskspaceMacro
+
+ido-create-ado-mapping:
+[hlm:referenceToFileMacro] Creating t:\output\temp_build_files\null903042207.txt using system.definition.files
+[hlm:referenceToFileMacro] E:\Build_E\idoconfiguration\running\common\sysdefs\build.sysdef.xml
+[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\LC_Domain\LC_Domain\btservices\layers.sysdef.xml
+[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\LC_Domain\LC_Domain\printing\layers.sysdef.xml
+[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\LC_Domain\LC_Domain\remoteconn\layers.sysdef.xml
+[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\LC_Domain\LC_Domain\usbservices\layers.sysdef.xml
+[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\LC_Domain_osext\LC_Domain_osext\btaudioadaptation_stub\layers.sysdef.xml
+[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\LC_Domain_osext\LC_Domain_osext\shortlinksrv\layers.sysdef.xml
+[hlm:referenceToFileMacro] E:\Build_E\ido_wa\IDO_lcdo_tb92-ci\SystemSW_Domain_OSExt\SystemSW_Domain_OSExt\devicesrv\layers.sysdef.xml
+
+ido-prep-copy:
+     [fmpp] File processed.
+
+all:
+   [delete] Deleting directory t:\sf\app\printing_old
+   [delete] Deleting directory t:\sf\mw\btservices_old
+   [delete] Deleting directory t:\sf\mw\usbservices_old
+   [delete] Deleting directory t:\sf\mw\remoteconn_old
+   [delete] Deleting directory t:\sf\os\devicesrv_old
+   [delete] Deleting directory t:\sf\adaptation\stubs\btaudioadaptation_stub_old
+   [delete] Deleting directory t:\sf\os\shortlinksrv_old
+     [fmpp] File processed.
+
+all:
+    [mkdir] Created dir: t:\sf\app\printing
+    [mkdir] Created dir: t:\sf\adaptation\stubs\btaudioadaptation_stub
+    [mkdir] Created dir: t:\sf\os\shortlinksrv
+    [mkdir] Created dir: t:\sf\mw\remoteconn
+    [mkdir] Created dir: t:\sf\os\devicesrv
+    [mkdir] Created dir: t:\sf\mw\btservices
+    [mkdir] Created dir: t:\sf\mw\usbservices
+     [copy] Copying 30 files to t:\sf\adaptation\stubs\btaudioadaptation_stub
+     [copy] Copying 359 files to t:\sf\os\shortlinksrv
+     [copy] Copying 496 files to t:\sf\app\printing
+     [copy] Copying 1584 files to t:\sf\mw\remoteconn
+     [copy] Copying 2341 files to t:\sf\mw\btservices
+     [copy] Copying 1767 files to t:\sf\mw\usbservices
+     [copy] Copying 6833 files to t:\sf\os\devicesrv
+
+IDO-additions.final:
+Deferred failure: Yes
+
+BUILD FAILED
+
+compileSignal: Expected result was 0, actual result was 1 : compile-signal
+E:\Build_E\idoconfiguration\running\common\ido-additions.ant.xml:110: if=pending.failure
+	at com.nokia.helium.core.ant.HeliumExecutor.executeTargets(HeliumExecutor.java:98)
+	at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
+	at org.apache.tools.ant.Main.runBuild(Main.java:698)
+	at org.apache.tools.ant.Main.startAnt(Main.java:199)
+	at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
+	at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/ant/result.ini.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,27 @@
+<#--
+============================================================================ 
+Name        : result.ini.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:
+
+============================================================================
+-->
+<#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "${dbPath}") >
+number.of.logs=${table_info['jpasingle']['select count(l.path) from LogFile l'][0]}
+number.of.components=${table_info['jpasingle']['select count(c.component) from Component c'][0]}
+number.of.errors=${table_info['jpasingle']['select count(e.id) from MetadataEntry e JOIN e.severity as p WHERE p.severity=\'ERROR\''][0]}
+
+
--- a/buildframework/helium/sf/java/metadata/tests/data/build_roms_sample.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,282 +0,0 @@
-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/data/build_whatlog.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<buildlog sbs_version="2.12.3 [2010-02-23 symbian build system 007900c31eef]" xmlns="http://symbian.com/xml/build/log" xmlns:progress="http://symbian.com/xml/build/log/progress" 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">
-<whatlog bldinf='G:/sf/mw/svgt/group/bld.inf' mmp='' config=''>
-<export destination='G:/epoc32/include/platform/mw/SVGImageLoadingObserver.h' source='G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h'/>
-<resource>G:/epoc32/include/hrv_gain_mappings.rsg</resource>
-<build>G:/epoc32/release/armv5/urel/ekeyb.dll</build>
-</whatlog>
-<whatlog bldinf='G:/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
-<archive zipfile='G:/sf/os/deviceplatformrelease/locfiles/data/65.zip'>
-<member>G:/epoc32/include/platform/loc/65/101f6dd6_65.loc</member>
-<member>G:/epoc32/include/platform/loc/65/101f6dd7_65.loc</member>
-</archive>
-</whatlog>
-</buildlog>
--- a/buildframework/helium/sf/java/metadata/tests/data/build_whatlog.whatlog.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<buildlog sbs_version="2.12.3 [2010-02-23 symbian build system 007900c31eef]" xmlns="http://symbian.com/xml/build/log" xmlns:progress="http://symbian.com/xml/build/log/progress" 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.12.3 [2010-02-23 symbian build system 007900c31eef]
-</info>
-<info>SBS_HOME C:/apps/sbs</info>
-<info>Set-up C:/apps/sbs/sbs_init.xml</info>
-<info>Command-line-arguments -s G:\output\build\canonical_system_definition_dfs_build_export.xml --filters=FilterMetadataLog -k --logfile G:\output\logs\compile/92_7952_201006_32_dfs_build_export.log --makefile=G:\output\logs/makefile/92_7952_201006_32_dfs_build_export --export-only -e emake --mo=--emake-emulation=gmake --mo=--emake-annofile=#MAKEFILE#.emake.anno --mo=--emake-class=DFS_7x01-64 --mo=--emake-annodetail=basic,history,file,waiting --mo=--case-sensitive=0 --mo=--emake-root=G:/;\;C:\apps;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium;C:\apps\sbs</info>
-<info>Current working directory G:\</info>
-<info>Environment /S=BHTEST001</info>
-<info>Environment ABLD_TOOLSMOD_COMPATIBILITY_MODE=alpha</info>
-<info>Environment ALLUSERSPROFILE=C:\Documents and Settings\All Users</info>
-<info>Environment APTLMHOST=@oupelic4.emea.nsn-net.net</info>
-<info>Environment ARMLMD_LICENSE_FILE=8224@trelic01;8224@salmg01;28747@saslmg04;</info>
-<info>Environment ARMROOT=\</info>
-<info>Environment ARMV5VER=:ARM/Thumb C/C++ Compiler, RVCT2.2 [Build 686]</info>
-<info>Environment BASE=E:\build_e\wbernard\hudson</info>
-<info>Environment CLUSTERLOG=C:\ETPWIN\Cluster\cluster.log</info>
-<info>Environment CMTHOME=C:\APPS\cmt</info>
-<info>Environment COMMONPROGRAMFILES=C:\Program Files (x86)\Common Files</info>
-<info>Environment COMMONPROGRAMFILES(X86)=C:\Program Files (x86)\Common Files</info>
-<info>Environment COMMONPROGRAMW6432=C:\Program Files\Common Files</info>
-<info>Environment COMPUTERNAME=TRWEC090</info>
-<info>Environment COMSPEC=C:\ETPWIN\system32\cmd.exe</info>
-<info>Environment COPYCMD=/y</info>
-<info>Environment CTCHOME=C:\APPS\ctc</info>
-<info>Environment CTC_AGENT_DEBUG=*</info>
-<info>Environment CYGWIN=nontsec nosmbntsec</info>
-<info>Environment DERBY_HOME=C:\APPS\jdk_1.6.0_11\JavaDB</info>
-<info>Environment EMAKEFLAGS=--emake-reg-roots=-\HKEY_CLASSES_ROOT</info>
-<info>Environment EMAKE_CM=trwec001</info>
-<info>Environment EMAKE_EMULATION=symbian</info>
-<info>Environment EMAKE_ROOT=\;C:\apps</info>
-<info>Environment EPOCROOT=\</info>
-<info>Environment EXECUTOR_NUMBER=3</info>
-<info>Environment FLEXLM_BATCH=1</info>
-<info>Environment FLEXLM_TIMEOUT=900000</info>
-<info>Environment FP_NO_HOST_CHECK=NO</info>
-<info>Environment HELIUM_CACHE_DIR=e:\ec_temp\helium\wbernard</info>
-<info>Environment HELIUM_HOME=E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium</info>
-<info>Environment HOME=h:\</info>
-<info>Environment HOSTPLATFORM=win 32</info>
-<info>Environment HOSTPLATFORM_DIR=win32</info>
-<info>Environment INCLUDE=C:\APPS\MSVC6\VC98\ATL\Include\;C:\APPS\MSVC6\VC98\MFC\Include\;C:\APPS\MSVC6\VC98\Include\</info>
-<info>Environment JAVA_1_3_1_HOME=C:\apps\j2sdk_1.3.1_06</info>
-<info>Environment JAVA_5_HOME=C:\APPS\jdk_1.5.0_17</info>
-<info>Environment JAVA_6_HOME=C:\APPS\jdk_1.6.0_11</info>
-<info>Environment JAVA_HOME=C:\APPS\jdk_1.6.0_11</info>
-<info>Environment LIB=C:\APPS\MSVC6\VC98\MFC\Lib\;C:\APPS\MSVC6\VC98\Lib\</info>
-<info>Environment MSDEVDIR=C:\APPS\MSVC6\Common\MSDev98</info>
-<info>Environment MWCSYM2INCLUDES=C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_X86;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C++\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Headers\Win32 SDK</info>
-<info>Environment MWSYM2LIBRARIES=C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Libraries\Win32 SDK;C:\APPS\carbide\x86Build\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs</info>
-<info>Environment MWSYM2LIBRARYFILES=MSL_All_MSE_Symbian_D.lib;gdi32.lib;user32.lib;kernel32.lib;</info>
-<info>Environment NODE_NAME=trwec090</info>
-<info>Environment NUMBER_OF_PROCESSORS=12</info>
-<info>Environment OS=Windows_NT</info>
-<info>Environment PATH=C:\apps\sbs\win32\mingw\bin;C:\apps\sbs\win32\cygwin\bin;C:\apps\sbs\win32\bin;c:\apps\actperl\bin\;c:\apps\rvct22_686\bin;c:\apps\atool;\epoc32\tools;\epoc32\gcc\bin;c:\apps\ue;c:\apps\ccm65\bin;c:\apps\carbide\x86Build\Symbian_Tools\Command_Line_Tools;C:\Program Files\HP\NCU;c:\ECloud\i686_win32\bin;C:\Program Files (x86)\Windows Resource Kits\Tools\;C:\ETPWIN\system32;C:\ETPWIN;C:\ETPWIN\System32\Wbem;C:\ETPWIN\sysWOW64;C:\PROGRA~2\PuTTY;C:\APPS\MSVC6\Common\Tools\WinNT;C:\APPS\MSVC6\Common\MSDev98\Bin;C:\APPS\MSVC6\Common\Tools;C:\APPS\MSVC6\VC98\bin;C:\EESP\System32;C:\APPS\pclint;C:\APPS\cmt\;C:\APPS\ctc;C:\APPS\prevent\bin;C:\APPS\cltools;C:\APPS\symrec;C:\APPS\7zip;C:\APPS\understand\bin\pc-win95;C:\APPS\unzip;C:\APPS\jdk_1.6.0_11\bin;C:\apps\mercurial;C:\APPS\ant_1.7\bin;C:\Program Files\subversion;C:\APPS\sbs\bin;C:\APPS\actpython\.;C:\APPS\blocks\bin;C:\APPS\codescanner;C:\APPS\symdec;C:\APPS\bc;\epoc32\gcc_mingw\bin;C:\ETPWIN\system32\WindowsPowerShell\v1.0;C:\APPS\MSVC6\VC98\Bin\;C:\APPS\MSVC6\Common\Tools\;C:\APPS\MSVC6\Common\MSDev98\Bin\;\epoc32\tools;\epoc32\gcc\bin;\epoc32\tools\build;\epoc32\rombuild;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\unxutils;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\Subversion\bin;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\graphviz\bin;C:\APPS\ctc</info>
-<info>Environment PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw;.PSC1</info>
-<info>Environment PERL=C:\APPS\actperl\bin\perl.exe</info>
-<info>Environment PERL5LIB=E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\tools\common\packages</info>
-<info>Environment PID=6932</info>
-<info>Environment PROCESSOR_ARCHITECTURE=x86</info>
-<info>Environment PROCESSOR_ARCHITEW6432=AMD64</info>
-<info>Environment PROCESSOR_IDENTIFIER=AMD64 Family 16 Model 8 Stepping 0, AuthenticAMD</info>
-<info>Environment PROCESSOR_LEVEL=16</info>
-<info>Environment PROCESSOR_REVISION=0800</info>
-<info>Environment PROGRAMFILES=C:\Program Files (x86)</info>
-<info>Environment PROGRAMFILES(X86)=C:\Program Files (x86)</info>
-<info>Environment PROGRAMW6432=C:\Program Files</info>
-<info>Environment PROMPT=$P$G</info>
-<info>Environment PSMODULEPATH=C:\ETPWIN\system32\WindowsPowerShell\v1.0\Modules\</info>
-<info>Environment PYTHONPATH=C:\apps\sbs\win32\python264</info>
-<info>Environment PYTHONVERSION=2.6</info>
-<info>Environment RVCT22BIN=C:\APPS\rvct22_686\bin</info>
-<info>Environment RVCT22INC=C:\APPS\rvct22_686\include</info>
-<info>Environment RVCT22LIB=C:\APPS\rvct22_686\lib</info>
-<info>Environment RVCT22_ASMOPT=--licretry --fastlicense --sitelicense</info>
-<info>Environment RVCT22_CCOPT=--licretry --fastlicense --sitelicense</info>
-<info>Environment RVCT22_LINKOPT=--licretry --fastlicense --sitelicense</info>
-<info>Environment SBS_CLEAN_LOG_FILE=G:\output\logs\compile/92_7952_201006_32_dfs_build_export.log.clean.log</info>
-<info>Environment SBS_HOME=C:\apps\sbs</info>
-<info>Environment SBS_PYTHON=C:\APPS\actpython\python.exe</info>
-<info>Environment SYMSEE_VERSION=11.2.0</info>
-<info>Environment SYSTEMDRIVE=C:</info>
-<info>Environment SYSTEMROOT=C:\ETPWIN</info>
-<info>Environment TEAM=helium_tampere64.92</info>
-<info>Environment TEMP=e:\ec_temp</info>
-<info>Environment TESTED_ANT=C:\APPS\ant_1.7</info>
-<info>Environment TESTED_JAVA=C:\APPS\jdk_1.6.0_11</info>
-<info>Environment TMP=e:\ec_temp</info>
-<info>Environment TMPDIR=e:\ec_tmpdir</info>
-<info>Environment WINDIR=C:\ETPWIN</info>
-<info>Environment WORKSPACE=E:\build_e\wbernard\hudson\workspace\TB92-64bit</info>
-<info>Environment _JAVACMD=C:\APPS\jdk_1.6.0_11\bin\java.exe</info>
-<info>Environment _USE_CLASSPATH=no</info>
-<info>Environment __CYGWIN__=C:\apps\sbs\win32\cygwin</info>
-<info>Environment __MINGW__=C:\apps\sbs\win32\mingw</info>
-<info>Environment __PYTHON__=C:\APPS\actpython\python.exe</info>
-<info>Duplicate alias 'make' (the one from 'G:/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/apps/sbs/lib/config\make.xml')</info>
-<info>Duplicate alias 'emake' (the one from 'G:/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/apps/sbs/lib/config\make.xml')</info>
-<info>Buildable configuration 'armv5_urel'</info>
-<info>Buildable configuration 'armv5_udeb'</info>
-<info>Buildable configuration 'winscw_udeb'</info>
-<info>Buildable configuration 'winscw_urel'</info>
-<info>System Definition file G:/output/build/canonical_system_definition_dfs_build_export.xml</info>
-<info>Found 372 bld.inf references in G:/output/build/canonical_system_definition_dfs_build_export.xml within 10 layers:</info>
-<info>	ncp_layer, mw_layer, os_layer, bldfirst_mw_layer, bldfirst_app_layer, app_layer, tools_layer, addon_layer, unit_test_layer, complementary_layer</info>
-<info>Found 95 bld.inf references in layer "ncp_layer"</info>
-<info>Found 112 bld.inf references in layer "mw_layer"</info>
-<info>Found 25 bld.inf references in layer "os_layer"</info>
-<info>Found 2 bld.inf references in layer "bldfirst_mw_layer"</info>
-<info>Found 1 bld.inf references in layer "bldfirst_app_layer"</info>
-<info>Found 98 bld.inf references in layer "app_layer"</info>
-<info>Found 3 bld.inf references in layer "tools_layer"</info>
-<info>Found 30 bld.inf references in layer "addon_layer"</info>
-<info>Found 0 bld.inf references in layer "unit_test_layer"</info>
-<info>Found 6 bld.inf references in layer "complementary_layer"</info>
-<info>Toolcheck cache G:/epoc32/build/toolcheck_cache_.tmp ignored - environment changed
-</info>
-<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
-<info>applying the OS variant to the configuration "armv5_urel".</info>
-<info>'armv5_urel' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
-<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
-<info>applying the OS variant to the configuration "armv5_udeb".</info>
-<info>'armv5_udeb' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
-<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
-<info>applying the OS variant to the configuration "winscw_udeb".</info>
-<info>'winscw_udeb' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
-<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
-<info>applying the OS variant to the configuration "winscw_urel".</info>
-<info>'winscw_urel' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
-<info>Processing G:/sf/mw/svgt/group/bld.inf</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h to G:/epoc32/include/platform/mw/SVGImageLoadingObserver.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h to G:/epoc32/include/platform/mw/SVGEngineInterfaceImpl.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SvgListener.h to G:/epoc32/include/platform/mw/SVGListener.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGErrorImpl.h to G:/epoc32/include/platform/mw/SVGErrorImpl.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h to G:/epoc32/include/platform/mw/SvgJavaInterfaceImpl.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGHyperlinkListener.h to G:/epoc32/include/platform/mw/SVGHyperlinkListener.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGAnimationListener.h to G:/epoc32/include/platform/mw/SVGAnimationListener.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGRequestObserver.h to G:/epoc32/include/platform/mw/SVGRequestObserver.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGRendererId.h to G:/epoc32/include/platform/mw/SVGRendererId.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/nvg_api/inc/nvg.h to G:/epoc32/include/platform/mw/nvg.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/nvg_api/inc/MVGImageBinder.h to G:/epoc32/include/platform/mw/MVGImageBinder.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/nvg_api/inc/NVGIcon.h to G:/epoc32/include/platform/mw/NVGIcon.h</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/SVGEngine.iby to G:/epoc32/rom/include/core/mw/SVGEngine.iby</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/SvgtPluginEcom.iby to G:/epoc32/rom/include/core/mw/SvgtPluginEcom.iby</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/nvgdecoder.iby to G:/epoc32/rom/include/core/mw/NVGDecoder.iby</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/NVGDecoder_SW.iby to G:/epoc32/rom/include/core/mw/NVGDecoder_SW.iby</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/VGRenderer.iby to G:/epoc32/rom/include/core/mw/VGRenderer.iby</info>
-<whatlog bldinf='G:/sf/mw/svgt/group/bld.inf' mmp='' config=''>
-<export destination='G:/epoc32/include/platform/mw/SVGImageLoadingObserver.h' source='G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h'/>
-<resource>G:/epoc32/include/hrv_gain_mappings.rsg</resource>
-<build>G:/epoc32/release/armv5/urel/ekeyb.dll</build>
-</whatlog>
-<clean bldinf='G:/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
-<zipmarker>G:/epoc32/build/G__sf_os_deviceplatformrelease_locfiles_data_65.zipG__epoc32_include_platform_loc.unzipped</zipmarker>
-</clean>
-<whatlog bldinf='G:/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
-<archive zipfile='G:/sf/os/deviceplatformrelease/locfiles/data/65.zip'>
-<member>G:/epoc32/include/platform/loc/65/101f6dd6_65.loc</member>
-<member>G:/epoc32/include/platform/loc/65/101f6dd7_65.loc</member>
-</archive>
-</whatlog>
-<info>The make-engine exited successfully.</info>
-<info>Run time 999 seconds</info>
-<info>Created/Updated toolcheck cache: G:/epoc32/build/toolcheck_cache_.tmp
-</info>
-</buildlog>
--- a/buildframework/helium/sf/java/metadata/tests/data/categorization.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<buildlog sbs_version="2.9.2 [2009-09-21 sf 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">
-<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp'>
-<![CDATA[
-+ C:/APPS/rvct22_616/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="X:/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -D__DLL__ --preinclude X:/epoc32/include/rvct/rvct.h -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/inc -JX:/sf/app/organizer/searchui/searchapp/inc -JX:/sf/app/organizer/searchui/searchapp/SrchUICommon/inc -JX:/epoc32/ -JX:/epoc32/include/config/platform -JX:/epoc32/include/baseport -JX:/epoc32/include -JX:/epoc32/include/ecom -JX:/epoc32/include -JX:/epoc32/include/mw -JX:/epoc32/include/platform/mw -JX:/epoc32/include/platform -JX:/epoc32/include/app -JX:/epoc32/include/platform/app -JX:/epoc32/include/platform/loc -JX:/epoc32/include/platform/mw/loc -JX:/epoc32/include/platform/app/loc -JX:/epoc32/include/platform/loc/sc -JX:/epoc32/include/platform/mw/loc/sc -JX:/epoc32/include/platform/app/loc/sc --depend_format=unix --depend X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o.d -o X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp
-"X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp", line 339: Error:  #20: identifier "KSEARCH_HLP_SINGLE_RE" is undefined
-          	helpContext.iContext = KSEARCH_HLP_SINGLE_RE; // add correct help context when available
-          	                       ^
-X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp: 0 warnings, 1 error
-
-]]><time start='1253718692.38008' elapsed='1.094' />
-<status exit='failed' code='1' attempt='3' />
-</recipe>
-make: *** [X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o] Error 1
-<clean bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_udeb.product'>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll</file>
-<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.def"</file>
-<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.dso"</file>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.sym</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin_udeb_objects.via</file>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.map</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.sym</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.map</file>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb</dir>
-<dir>X:/epoc32/release/armv5/udeb</dir>
-<dir>X:/epoc32/release/armv5/lib</dir>
-<dir>X:/epoc32/release/armv5/lib</dir>
-<dir>X:/epoc32/release/armv5.product/udeb</dir>
-</clean>
-<info>Run time 226 seconds</info>
-</buildlog>
--- a/buildframework/helium/sf/java/metadata/tests/data/categorization_clean.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<buildlog sbs_version="2.9.2 [2009-09-21 sf 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">
-<clean bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_udeb.product'>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll</file>
-<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.def"</file>
-<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.dso"</file>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.sym</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin_udeb_objects.via</file>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.map</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.sym</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.map</file>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb</dir>
-<dir>X:/epoc32/release/armv5/udeb</dir>
-<dir>X:/epoc32/release/armv5/lib</dir>
-<dir>X:/epoc32/release/armv5/lib</dir>
-<dir>X:/epoc32/release/armv5.product/udeb</dir>
-</clean>
-</buildlog>
--- a/buildframework/helium/sf/java/metadata/tests/data/categorization_compile.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<buildlog sbs_version="2.9.2 [2009-09-21 sf 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">
-<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp'>
-<![CDATA[
-+ C:/APPS/rvct22_616/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="X:/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -D__DLL__ --preinclude X:/epoc32/include/rvct/rvct.h -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/inc -JX:/sf/app/organizer/searchui/searchapp/inc -JX:/sf/app/organizer/searchui/searchapp/SrchUICommon/inc -JX:/epoc32/ -JX:/epoc32/include/config/platform -JX:/epoc32/include/baseport -JX:/epoc32/include -JX:/epoc32/include/ecom -JX:/epoc32/include -JX:/epoc32/include/mw -JX:/epoc32/include/platform/mw -JX:/epoc32/include/platform -JX:/epoc32/include/app -JX:/epoc32/include/platform/app -JX:/epoc32/include/platform/loc -JX:/epoc32/include/platform/mw/loc -JX:/epoc32/include/platform/app/loc -JX:/epoc32/include/platform/loc/sc -JX:/epoc32/include/platform/mw/loc/sc -JX:/epoc32/include/platform/app/loc/sc --depend_format=unix --depend X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o.d -o X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp
-"X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp", line 339: Error:  #20: identifier "KSEARCH_HLP_SINGLE_RE" is undefined
-          	helpContext.iContext = KSEARCH_HLP_SINGLE_RE; // add correct help context when available
-          	                       ^
-X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp: 0 warnings, 1 error
-
-]]><time start='1253718692.38008' elapsed='1.094' />
-<status exit='failed' code='1' attempt='3' />
-</recipe>
-make: *** [X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o] Error 1
-<clean bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_udeb.product'>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll</file>
-<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.def"</file>
-<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.dso"</file>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.sym</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin_udeb_objects.via</file>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.map</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.sym</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.map</file>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb</dir>
-<dir>X:/epoc32/release/armv5/udeb</dir>
-<dir>X:/epoc32/release/armv5/lib</dir>
-<dir>X:/epoc32/release/armv5/lib</dir>
-<dir>X:/epoc32/release/armv5.product/udeb</dir>
-</clean>
-<info>Run time 226 seconds</info>
-</buildlog>
--- a/buildframework/helium/sf/java/metadata/tests/data/categorization_failed_empty_recipe.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<buildlog sbs_version="2.9.2 [2009-09-21 sf 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">
-<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview2.cpp'>
-<![CDATA[
-]]><time start='1253718692.38008' elapsed='1.094' />
-<status exit='failed' code='1' attempt='3' />
-</recipe>
-make: *** [X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o] Error 1
-<clean bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_udeb.product'>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll</file>
-<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.def"</file>
-<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.dso"</file>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.sym</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin_udeb_objects.via</file>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.map</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.sym</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.map</file>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb</dir>
-<dir>X:/epoc32/release/armv5/udeb</dir>
-<dir>X:/epoc32/release/armv5/lib</dir>
-<dir>X:/epoc32/release/armv5/lib</dir>
-<dir>X:/epoc32/release/armv5.product/udeb</dir>
-</clean>
-</buildlog>
--- a/buildframework/helium/sf/java/metadata/tests/data/categorization_failed_error_in_recipe.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<buildlog sbs_version="2.9.2 [2009-09-21 sf 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">
-<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview2.cpp'>
-<![CDATA[
-ERROR: only this error should be counted 
-]]><time start='1253718692.38008' elapsed='1.094' />
-<status exit='failed' code='1' attempt='3' />
-</recipe>
-make: *** [X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o] Error 1
-<clean bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_udeb.product'>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll</file>
-<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.def"</file>
-<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.dso"</file>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.sym</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin_udeb_objects.via</file>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.map</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.sym</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.map</file>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb</dir>
-<dir>X:/epoc32/release/armv5/udeb</dir>
-<dir>X:/epoc32/release/armv5/lib</dir>
-<dir>X:/epoc32/release/armv5/lib</dir>
-<dir>X:/epoc32/release/armv5.product/udeb</dir>
-</clean>
-</buildlog>
--- a/buildframework/helium/sf/java/metadata/tests/data/common.csv	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/tests/data/common.csv	Fri Aug 13 14:59:05 2010 +0300
@@ -1,4 +1,4 @@
-priority,regex,description
+severity,regex,description
 FATAL,.*mingw_make\.exe.*,
 ERROR,.*\): Missing file:.*, 
 ERROR,^(?:(?:\s*\d+\)\s*)|(?:\s*\*\*\*\s*))ERROR:.*,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/countseverity/package_build_fixslashes_raptor.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,36 @@
+
+No changes to P:\sf\mw\svgt\svgtopt\SVG\SVGRecog\Group\SvgRecog.MMP
+ERROR: P:\sf\mw\svgt\svgt_plat\svgt_api\tsrc\group\Bld.inf: #1: // to the same name in \epoc32\include
+ERROR: P:\sf\mw\svgt\svgt_plat\svgt_api\tsrc\group\Bld.inf: #1: \agnmodel\inc\AGMCOMON.H
+ERROR: P:\sf\mw\svgt\svgt_plat\svgt_api\tsrc\group\Bld.inf: #1: \agnmodel\group\agnmodel.mmp
+ERROR: P:\sf\mw\svgt\svgt_plat\svgt_api\tsrc\group\Bld.inf: #1: \agnmodel\group\agsvexe.mmp
+PRINT ONLY -> Writing P:\sf\mw\svgt\svgt_plat\svgt_api\tsrc\group\Bld.inf
+No changes to P:\sf\mw\svgt\svgt_plat\svgt_api\tsrc\group\svgtmodule.mmp
+ERROR: P:\sf\mw\classicui\uifw\AvKon\odeconf\group\odeconf.mmp: #1: SOURCEPATH		..\src
+ERROR: P:\sf\mw\classicui\uifw\AvKon\odeconf\group\odeconf.mmp: #1: SOURCEPATH		..\data
+ERROR: P:\sf\mw\classicui\uifw\AvKon\odeconf\group\odeconf.mmp: #1: TARGETPATH      resource\apps
+ERROR: P:\sf\mw\classicui\uifw\AvKon\odeconf\group\odeconf.mmp: #1: TARGETPATH 	    \private\10003a3f\apps
+ERROR: P:\sf\mw\classicui\uifw\AvKon\odeconf\group\odeconf.mmp: #1: USERINCLUDE	   ..\inc
+PRINT ONLY -> Writing P:\sf\mw\classicui\uifw\AvKon\odeconf\group\odeconf.mmp
+No changes to P:\sf\mw\classicui\uifw\AvKon\odeconf\inc\odeconf.hrh
+ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1: _LIT( KAICal2ArabicSummaryLocationSeparator, " \x060c" );
+ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x0009 horizontal tab
+ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x000a new line
+ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x000b line tabulation (vertical
+ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x000c form feed
+ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x000d carriage return
+ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x2028 line separator
+ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x2029 paragraph separator
+ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1: "\x0009\x000A\x000B\x000C\x000D\x2028\x2029" );
+PRINT ONLY -> Writing P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh
+No changes to P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2uids.hrh
+No changes to P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\calendar.hrh
+No changes to P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\CalendarVariant.hrh
+ERROR: P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh: #1: _LIT(KStandardPuncExclamatoryPoint, "\x0021");
+ERROR: P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh: #1: _LIT(KStandardPuncDotPoint, "\x002E");
+ERROR: P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh: #1: _LIT(KArabicPuncComma, "\x060C");
+ERROR: P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh: #1: _LIT(KArabicPuncSemicolon, "\x061B");
+ERROR: P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh: #1: _LIT(KArabicPuncQuestion, "\x061F");
+ERROR: P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh: #1: _LIT(KArabicPuncWaw, "\x0648");
+PRINT ONLY -> Writing P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/countseverity/text_has_severity.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,4 @@
+ERROR: foobar
+WARNING: warn
+bla bla....
+bla bla....
--- a/buildframework/helium/sf/java/metadata/tests/data/ido_abs_mcl_devlon70_robot_MCL.70.500_fixslashes_raptor.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-
-No changes to P:\sf\mw\svgt\svgtopt\SVG\SVGRecog\Group\SvgRecog.MMP
-ERROR: P:\sf\mw\svgt\svgt_plat\svgt_api\tsrc\group\Bld.inf: #1: // to the same name in \epoc32\include
-ERROR: P:\sf\mw\svgt\svgt_plat\svgt_api\tsrc\group\Bld.inf: #1: \agnmodel\inc\AGMCOMON.H
-ERROR: P:\sf\mw\svgt\svgt_plat\svgt_api\tsrc\group\Bld.inf: #1: \agnmodel\group\agnmodel.mmp
-ERROR: P:\sf\mw\svgt\svgt_plat\svgt_api\tsrc\group\Bld.inf: #1: \agnmodel\group\agsvexe.mmp
-PRINT ONLY -> Writing P:\sf\mw\svgt\svgt_plat\svgt_api\tsrc\group\Bld.inf
-No changes to P:\sf\mw\svgt\svgt_plat\svgt_api\tsrc\group\svgtmodule.mmp
-ERROR: P:\sf\mw\classicui\uifw\AvKon\odeconf\group\odeconf.mmp: #1: SOURCEPATH		..\src
-ERROR: P:\sf\mw\classicui\uifw\AvKon\odeconf\group\odeconf.mmp: #1: SOURCEPATH		..\data
-ERROR: P:\sf\mw\classicui\uifw\AvKon\odeconf\group\odeconf.mmp: #1: TARGETPATH      resource\apps
-ERROR: P:\sf\mw\classicui\uifw\AvKon\odeconf\group\odeconf.mmp: #1: TARGETPATH 	    \private\10003a3f\apps
-ERROR: P:\sf\mw\classicui\uifw\AvKon\odeconf\group\odeconf.mmp: #1: USERINCLUDE	   ..\inc
-PRINT ONLY -> Writing P:\sf\mw\classicui\uifw\AvKon\odeconf\group\odeconf.mmp
-No changes to P:\sf\mw\classicui\uifw\AvKon\odeconf\inc\odeconf.hrh
-ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1: _LIT( KAICal2ArabicSummaryLocationSeparator, " \x060c" );
-ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x0009 horizontal tab
-ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x000a new line
-ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x000b line tabulation (vertical
-ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x000c form feed
-ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x000d carriage return
-ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x2028 line separator
-ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1:  * \x2029 paragraph separator
-ERROR: P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh: #1: "\x0009\x000A\x000B\x000C\x000D\x2028\x2029" );
-PRINT ONLY -> Writing P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2constants.hrh
-No changes to P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\aicalendarplugin2uids.hrh
-No changes to P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\calendar.hrh
-No changes to P:\sf\app\homescreen\idlehomescreen\hsplugins\organizer\aiagendaplugin2\inc\CalendarVariant.hrh
-ERROR: P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh: #1: _LIT(KStandardPuncExclamatoryPoint, "\x0021");
-ERROR: P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh: #1: _LIT(KStandardPuncDotPoint, "\x002E");
-ERROR: P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh: #1: _LIT(KArabicPuncComma, "\x060C");
-ERROR: P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh: #1: _LIT(KArabicPuncSemicolon, "\x061B");
-ERROR: P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh: #1: _LIT(KArabicPuncQuestion, "\x061F");
-ERROR: P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh: #1: _LIT(KArabicPuncWaw, "\x0648");
-PRINT ONLY -> Writing P:\sf\mw\inputmethods\textinput\peninputgenerichwr\inc\peninputhwrarabic.hrh
-
--- a/buildframework/helium/sf/java/metadata/tests/data/ido_abs_mcl_devlon70_robot_MCL.70.500_info.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<info>
-                <id>ido_abs_mcl_devlon70_robot_MCL.70.500</id>
-                <number>500</number>
-                <startTime>2009-04-25T19:31:43</startTime>
-                <machine>FASYM011</machine>
-                <publish>
-                    <status>true</status>
-                    <location>\\fasamba\dfs\r1120_isis\NT\Build_and_Release\IDO_Statistics\ABS_Domain\Releases</location>
-                </publish>
-            </info>
--- a/buildframework/helium/sf/java/metadata/tests/data/ido_abs_tb92-nightly_5.2.58_validate_policy.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-<?xml version="1.0"?>
-<policyvalidation>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\screensaver\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\screensaver\scrsaver\scrsaverplugins\ScreenSaverAnimPlugin\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\screensaver\scrsaver\scrsaverplugins\ScreenSaverGifAnimPlugin\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\screensaver\scrsaver\scrsaverplugins\SlideshowPlugin\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\applicationinterworkingfw\ServiceHandler\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_plat\alarm_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_plat\extended_notifiers_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\aiw_criteria_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\aiw_generic_parameter_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\aiw_service_handler_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\buttons_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\common_file_dialogs_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\context_pane_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\dialogs_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\document_handler_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\editors_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\form_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\grids_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\hierarchical_lists_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\indicators_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\information_preview_popup_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\lists_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\navigation_pane_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\notes_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\notifiers_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\options_menu_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\popups_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\screen_saver_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\scroller_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\setting_pages_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\sounds_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\status_pane_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\tabs_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\title_pane_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\title_pane_touch_observer_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\tsrc\bc\apps\bctestlauncher\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\CommonAdapter\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\commonuis\CommonDialogs\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\commonuis\CommonUi\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\psln\Doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\AknGlobalUI\avkonstartupextplg\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\AknGlobalUI\Doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\AvKon\akncompamode\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\AvKon\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\AvKon\tsrc\bc\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\AvKon\tsrc\bc\script\codetest_script\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\EikStd\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\svgt\svgtopt\Doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\svgt\svgtopt\VGRenderer\Doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiresources\layouts\cdl\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiresources\pictographs\AknPictograph\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiresources\skins\AknSkins\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiresources\uigraphics\AknIcon\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiresources\uiresources_pub\pictograph_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiresources\uiresources_pub\skins_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\hapticsservices\tactilefeedback\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\graphicsuis\svgtviewer\SvgtViewerPlugin\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\helps\csxhelp\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiaccelerator\uiacceltk\hitchcock\coretoolkit\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiaccelerator\uiacceltk\hitchcock\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiaccelerator\uiacceltk\hitchcock\Tracer\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uitools\svgtencoder\svgtenc\standalone\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\ocrsrv\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\fep\aknfep\peninputplugins\peninputimeplugincn\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\inputmethods_pub\ptiengine_iti_api\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\textinput\peninputarc\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\textinput\peninputarc\utils\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\textinput\peninputcommonctrls\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\textinput\peninputhwrboxcn\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\textinput\ptienginev2\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\dictionary\userdict\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\charconvfw\Charconvplugin\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\charconvfw\Findutil\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\charconvfw\gamerecognizer\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\charconvfw\JPLangUtil\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\charconvfw\Localizer\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\charconvfw\SortUtil\doc" value="None"/>
-    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\textandloc_pub\directory_localizer_api\doc" value="None"/>
-</policyvalidation>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/imaker/build_roms_sample.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,281 @@
+Starting build: 75090
+mkdir epoc32\rombuild\temp
+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/platform/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/platform/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/platform/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/platform/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/platform/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/platform/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/platform/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/application/licenses/product/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/application/licenses/product/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_applicationStub.exe.map" or "\epoc32\release\ARMV5\urel\ap_applicationStub.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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/imaker/rombuild_result.ini.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,27 @@
+<#--
+============================================================================ 
+Name        : whatlog_result.ini.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:
+
+============================================================================
+-->
+<#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "${dbPath}") >
+number.of.logs=${table_info['jpasingle']['select count(l.path) from LogFile l'][0]}
+number.of.components=${table_info['jpasingle']['select count(c.component) from Component c'][0]}
+number.of.errors=${table_info['jpasingle']['select count(e.id) from MetadataEntry e JOIN e.severity as p WHERE p.severity=\'ERROR\''][0]}
+
+
--- a/buildframework/helium/sf/java/metadata/tests/data/log-with-same-root-name.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-ERROR: from log-with-same-root-name.log
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/tests/data/log-with-same-root-name.log.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-ERROR: from log-with-same-root-name.log.log
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/tests/data/metadata_regex.csv	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/tests/data/metadata_regex.csv	Fri Aug 13 14:59:05 2010 +0300
@@ -1,4 +1,4 @@
-priority,regex,description
+severity,regex,description
 CRITICAL,.*Error:.*mingw_make\.exe.*,
 ERROR,.*\): Missing file:.*, 
 ERROR,(?:(?:\s*\d+\)\s*)|(?:\s*\*\*\*\s*))ERROR:.*,
--- a/buildframework/helium/sf/java/metadata/tests/data/metadata_regex_compile.csv	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/tests/data/metadata_regex_compile.csv	Fri Aug 13 14:59:05 2010 +0300
@@ -1,4 +1,4 @@
-priority,regex,description
+severity,regex,description
 ERROR,.*target pattern contains no.*,
 ERROR,.*mixed implicit and static pattern rules.*,
 ERROR,.*multiple target patterns.*,
--- a/buildframework/helium/sf/java/metadata/tests/data/metadatacount_error_and_missing_files.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,172 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<buildlog sbs_version="2.12.3 [2010-02-23 symbian build system 007900c31eef]" xmlns="http://symbian.com/xml/build/log" xmlns:progress="http://symbian.com/xml/build/log/progress" 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.12.3 [2010-02-23 symbian build system 007900c31eef]
-</info>
-<info>SBS_HOME C:/apps/sbs</info>
-<info>Set-up C:/apps/sbs/sbs_init.xml</info>
-<info>Command-line-arguments -s G:\output\build\canonical_system_definition_dfs_build_export.xml --filters=FilterMetadataLog -k --logfile G:\output\logs\compile/92_7952_201006_32_dfs_build_export.log --makefile=G:\output\logs/makefile/92_7952_201006_32_dfs_build_export --export-only -e emake --mo=--emake-emulation=gmake --mo=--emake-annofile=#MAKEFILE#.emake.anno --mo=--emake-class=DFS_7x01-64 --mo=--emake-annodetail=basic,history,file,waiting --mo=--case-sensitive=0 --mo=--emake-root=G:/;\;C:\apps;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium;C:\apps\sbs</info>
-<info>Current working directory G:\</info>
-<info>Environment /S=BHTEST001</info>
-<info>Environment ABLD_TOOLSMOD_COMPATIBILITY_MODE=alpha</info>
-<info>Environment ALLUSERSPROFILE=C:\Documents and Settings\All Users</info>
-<info>Environment APTLMHOST=@oupelic4.emea.nsn-net.net</info>
-<info>Environment ARMLMD_LICENSE_FILE=8224@trelic01;8224@salmg01;28747@saslmg04;</info>
-<info>Environment ARMROOT=\</info>
-<info>Environment ARMV5VER=:ARM/Thumb C/C++ Compiler, RVCT2.2 [Build 686]</info>
-<info>Environment BASE=E:\build_e\wbernard\hudson</info>
-<info>Environment CLUSTERLOG=C:\ETPWIN\Cluster\cluster.log</info>
-<info>Environment CMTHOME=C:\APPS\cmt</info>
-<info>Environment COMMONPROGRAMFILES=C:\Program Files (x86)\Common Files</info>
-<info>Environment COMMONPROGRAMFILES(X86)=C:\Program Files (x86)\Common Files</info>
-<info>Environment COMMONPROGRAMW6432=C:\Program Files\Common Files</info>
-<info>Environment COMPUTERNAME=TRWEC090</info>
-<info>Environment COMSPEC=C:\ETPWIN\system32\cmd.exe</info>
-<info>Environment COPYCMD=/y</info>
-<info>Environment CTCHOME=C:\APPS\ctc</info>
-<info>Environment CTC_AGENT_DEBUG=*</info>
-<info>Environment CYGWIN=nontsec nosmbntsec</info>
-<info>Environment DERBY_HOME=C:\APPS\jdk_1.6.0_11\JavaDB</info>
-<info>Environment EMAKEFLAGS=--emake-reg-roots=-\HKEY_CLASSES_ROOT</info>
-<info>Environment EMAKE_CM=trwec001</info>
-<info>Environment EMAKE_EMULATION=symbian</info>
-<info>Environment EMAKE_ROOT=\;C:\apps</info>
-<info>Environment EPOCROOT=\</info>
-<info>Environment EXECUTOR_NUMBER=3</info>
-<info>Environment FLEXLM_BATCH=1</info>
-<info>Environment FLEXLM_TIMEOUT=900000</info>
-<info>Environment FP_NO_HOST_CHECK=NO</info>
-<info>Environment HELIUM_CACHE_DIR=e:\ec_temp\helium\wbernard</info>
-<info>Environment HELIUM_HOME=E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium</info>
-<info>Environment HOME=h:\</info>
-<info>Environment HOSTPLATFORM=win 32</info>
-<info>Environment HOSTPLATFORM_DIR=win32</info>
-<info>Environment INCLUDE=C:\APPS\MSVC6\VC98\ATL\Include\;C:\APPS\MSVC6\VC98\MFC\Include\;C:\APPS\MSVC6\VC98\Include\</info>
-<info>Environment JAVA_1_3_1_HOME=C:\apps\j2sdk_1.3.1_06</info>
-<info>Environment JAVA_5_HOME=C:\APPS\jdk_1.5.0_17</info>
-<info>Environment JAVA_6_HOME=C:\APPS\jdk_1.6.0_11</info>
-<info>Environment JAVA_HOME=C:\APPS\jdk_1.6.0_11</info>
-<info>Environment LIB=C:\APPS\MSVC6\VC98\MFC\Lib\;C:\APPS\MSVC6\VC98\Lib\</info>
-<info>Environment MSDEVDIR=C:\APPS\MSVC6\Common\MSDev98</info>
-<info>Environment MWCSYM2INCLUDES=C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_X86;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C++\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Headers\Win32 SDK</info>
-<info>Environment MWSYM2LIBRARIES=C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Libraries\Win32 SDK;C:\APPS\carbide\x86Build\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs</info>
-<info>Environment MWSYM2LIBRARYFILES=MSL_All_MSE_Symbian_D.lib;gdi32.lib;user32.lib;kernel32.lib;</info>
-<info>Environment NODE_NAME=trwec090</info>
-<info>Environment NUMBER_OF_PROCESSORS=12</info>
-<info>Environment OS=Windows_NT</info>
-<info>Environment PATH=C:\apps\sbs\win32\mingw\bin;C:\apps\sbs\win32\cygwin\bin;C:\apps\sbs\win32\bin;c:\apps\actperl\bin\;c:\apps\rvct22_686\bin;c:\apps\atool;\epoc32\tools;\epoc32\gcc\bin;c:\apps\ue;c:\apps\ccm65\bin;c:\apps\carbide\x86Build\Symbian_Tools\Command_Line_Tools;C:\Program Files\HP\NCU;c:\ECloud\i686_win32\bin;C:\Program Files (x86)\Windows Resource Kits\Tools\;C:\ETPWIN\system32;C:\ETPWIN;C:\ETPWIN\System32\Wbem;C:\ETPWIN\sysWOW64;C:\PROGRA~2\PuTTY;C:\APPS\MSVC6\Common\Tools\WinNT;C:\APPS\MSVC6\Common\MSDev98\Bin;C:\APPS\MSVC6\Common\Tools;C:\APPS\MSVC6\VC98\bin;C:\EESP\System32;C:\APPS\pclint;C:\APPS\cmt\;C:\APPS\ctc;C:\APPS\prevent\bin;C:\APPS\cltools;C:\APPS\symrec;C:\APPS\7zip;C:\APPS\understand\bin\pc-win95;C:\APPS\unzip;C:\APPS\jdk_1.6.0_11\bin;C:\apps\mercurial;C:\APPS\ant_1.7\bin;C:\Program Files\subversion;C:\APPS\sbs\bin;C:\APPS\actpython\.;C:\APPS\blocks\bin;C:\APPS\codescanner;C:\APPS\symdec;C:\APPS\bc;\epoc32\gcc_mingw\bin;C:\ETPWIN\system32\WindowsPowerShell\v1.0;C:\APPS\MSVC6\VC98\Bin\;C:\APPS\MSVC6\Common\Tools\;C:\APPS\MSVC6\Common\MSDev98\Bin\;\epoc32\tools;\epoc32\gcc\bin;\epoc32\tools\build;\epoc32\rombuild;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\unxutils;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\Subversion\bin;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\graphviz\bin;C:\APPS\ctc</info>
-<info>Environment PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw;.PSC1</info>
-<info>Environment PERL=C:\APPS\actperl\bin\perl.exe</info>
-<info>Environment PERL5LIB=E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\tools\common\packages</info>
-<info>Environment PID=6932</info>
-<info>Environment PROCESSOR_ARCHITECTURE=x86</info>
-<info>Environment PROCESSOR_ARCHITEW6432=AMD64</info>
-<info>Environment PROCESSOR_IDENTIFIER=AMD64 Family 16 Model 8 Stepping 0, AuthenticAMD</info>
-<info>Environment PROCESSOR_LEVEL=16</info>
-<info>Environment PROCESSOR_REVISION=0800</info>
-<info>Environment PROGRAMFILES=C:\Program Files (x86)</info>
-<info>Environment PROGRAMFILES(X86)=C:\Program Files (x86)</info>
-<info>Environment PROGRAMW6432=C:\Program Files</info>
-<info>Environment PROMPT=$P$G</info>
-<info>Environment PSMODULEPATH=C:\ETPWIN\system32\WindowsPowerShell\v1.0\Modules\</info>
-<info>Environment PYTHONPATH=C:\apps\sbs\win32\python264</info>
-<info>Environment PYTHONVERSION=2.6</info>
-<info>Environment RVCT22BIN=C:\APPS\rvct22_686\bin</info>
-<info>Environment RVCT22INC=C:\APPS\rvct22_686\include</info>
-<info>Environment RVCT22LIB=C:\APPS\rvct22_686\lib</info>
-<info>Environment RVCT22_ASMOPT=--licretry --fastlicense --sitelicense</info>
-<info>Environment RVCT22_CCOPT=--licretry --fastlicense --sitelicense</info>
-<info>Environment RVCT22_LINKOPT=--licretry --fastlicense --sitelicense</info>
-<info>Environment SBS_CLEAN_LOG_FILE=G:\output\logs\compile/92_7952_201006_32_dfs_build_export.log.clean.log</info>
-<info>Environment SBS_HOME=C:\apps\sbs</info>
-<info>Environment SBS_PYTHON=C:\APPS\actpython\python.exe</info>
-<info>Environment SYMSEE_VERSION=11.2.0</info>
-<info>Environment SYSTEMDRIVE=C:</info>
-<info>Environment SYSTEMROOT=C:\ETPWIN</info>
-<info>Environment TEAM=helium_tampere64.92</info>
-<info>Environment TEMP=e:\ec_temp</info>
-<info>Environment TESTED_ANT=C:\APPS\ant_1.7</info>
-<info>Environment TESTED_JAVA=C:\APPS\jdk_1.6.0_11</info>
-<info>Environment TMP=e:\ec_temp</info>
-<info>Environment TMPDIR=e:\ec_tmpdir</info>
-<info>Environment WINDIR=C:\ETPWIN</info>
-<info>Environment WORKSPACE=E:\build_e\wbernard\hudson\workspace\TB92-64bit</info>
-<info>Environment _JAVACMD=C:\APPS\jdk_1.6.0_11\bin\java.exe</info>
-<info>Environment _USE_CLASSPATH=no</info>
-<info>Environment __CYGWIN__=C:\apps\sbs\win32\cygwin</info>
-<info>Environment __MINGW__=C:\apps\sbs\win32\mingw</info>
-<info>Environment __PYTHON__=C:\APPS\actpython\python.exe</info>
-<info>Duplicate alias 'make' (the one from 'G:/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/apps/sbs/lib/config\make.xml')</info>
-<info>Duplicate alias 'emake' (the one from 'G:/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/apps/sbs/lib/config\make.xml')</info>
-<info>Buildable configuration 'armv5_urel'</info>
-<info>Buildable configuration 'armv5_udeb'</info>
-<info>Buildable configuration 'winscw_udeb'</info>
-<info>Buildable configuration 'winscw_urel'</info>
-<info>System Definition file G:/output/build/canonical_system_definition_dfs_build_export.xml</info>
-<info>Found 372 bld.inf references in G:/output/build/canonical_system_definition_dfs_build_export.xml within 10 layers:</info>
-<info>	ncp_layer, mw_layer, os_layer, bldfirst_mw_layer, bldfirst_app_layer, app_layer, tools_layer, addon_layer, unit_test_layer, complementary_layer</info>
-<info>Found 95 bld.inf references in layer "ncp_layer"</info>
-<info>Found 112 bld.inf references in layer "mw_layer"</info>
-<info>Found 25 bld.inf references in layer "os_layer"</info>
-<info>Found 2 bld.inf references in layer "bldfirst_mw_layer"</info>
-<info>Found 1 bld.inf references in layer "bldfirst_app_layer"</info>
-<info>Found 98 bld.inf references in layer "app_layer"</info>
-<info>Found 3 bld.inf references in layer "tools_layer"</info>
-<info>Found 30 bld.inf references in layer "addon_layer"</info>
-<info>Found 0 bld.inf references in layer "unit_test_layer"</info>
-<info>Found 6 bld.inf references in layer "complementary_layer"</info>
-<info>Toolcheck cache G:/epoc32/build/toolcheck_cache_.tmp ignored - environment changed
-</info>
-<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
-<info>applying the OS variant to the configuration "armv5_urel".</info>
-<info>'armv5_urel' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
-<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
-<info>applying the OS variant to the configuration "armv5_udeb".</info>
-<info>'armv5_udeb' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
-<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
-<info>applying the OS variant to the configuration "winscw_udeb".</info>
-<info>'winscw_udeb' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
-<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
-<info>applying the OS variant to the configuration "winscw_urel".</info>
-<info>'winscw_urel' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
-<info>Processing G:/sf/mw/svgt/group/bld.inf</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h to G:/epoc32/include/platform/mw/SVGImageLoadingObserver.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h to G:/epoc32/include/platform/mw/SVGEngineInterfaceImpl.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SvgListener.h to G:/epoc32/include/platform/mw/SVGListener.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGErrorImpl.h to G:/epoc32/include/platform/mw/SVGErrorImpl.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h to G:/epoc32/include/platform/mw/SvgJavaInterfaceImpl.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGHyperlinkListener.h to G:/epoc32/include/platform/mw/SVGHyperlinkListener.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGAnimationListener.h to G:/epoc32/include/platform/mw/SVGAnimationListener.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGRequestObserver.h to G:/epoc32/include/platform/mw/SVGRequestObserver.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGRendererId.h to G:/epoc32/include/platform/mw/SVGRendererId.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/nvg_api/inc/nvg.h to G:/epoc32/include/platform/mw/nvg.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/nvg_api/inc/MVGImageBinder.h to G:/epoc32/include/platform/mw/MVGImageBinder.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/nvg_api/inc/NVGIcon.h to G:/epoc32/include/platform/mw/NVGIcon.h</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/SVGEngine.iby to G:/epoc32/rom/include/core/mw/SVGEngine.iby</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/SvgtPluginEcom.iby to G:/epoc32/rom/include/core/mw/SvgtPluginEcom.iby</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/nvgdecoder.iby to G:/epoc32/rom/include/core/mw/NVGDecoder.iby</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/NVGDecoder_SW.iby to G:/epoc32/rom/include/core/mw/NVGDecoder_SW.iby</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/VGRenderer.iby to G:/epoc32/rom/include/core/mw/VGRenderer.iby</info>
-<whatlog bldinf='G:/sf/mw/svgt/group/bld.inf' mmp='' config=''>
-<export destination='G:/epoc32/include/platform/mw/SVGImageLoadingObserver.h' source='G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h'/>
-<resource>G:/epoc32/include/hrv_gain_mappings.rsg</resource>
-<build>G:/epoc32/release/armv5/urel/ekeyb.dll</build>
-</whatlog>
-<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview2.cpp'>
-<![CDATA[
-]]><time start='1253718692.38008' elapsed='1.094' />
-<status exit='failed' code='1' attempt='3' />
-</recipe>
-<clean bldinf='G:/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
-<zipmarker>G:/epoc32/build/G__sf_os_deviceplatformrelease_locfiles_data_65.zipG__epoc32_include_platform_loc.unzipped</zipmarker>
-</clean>
-<whatlog bldinf='G:/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
-<archive zipfile='G:/sf/os/deviceplatformrelease/locfiles/data/65.zip'>
-<member>G:/epoc32/include/platform/loc/65/101f6dd6_65.loc</member>
-<member>G:/epoc32/include/platform/loc/65/101f6dd7_65.loc</member>
-</archive>
-</whatlog>
-<info>The make-engine exited successfully.</info>
-<info>Run time 999 seconds</info>
-<info>Created/Updated toolcheck cache: G:/epoc32/build/toolcheck_cache_.tmp
-</info>
-</buildlog>
--- a/buildframework/helium/sf/java/metadata/tests/data/metadatacount_missing_files.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<buildlog sbs_version="2.12.3 [2010-02-23 symbian build system 007900c31eef]" xmlns="http://symbian.com/xml/build/log" xmlns:progress="http://symbian.com/xml/build/log/progress" 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.12.3 [2010-02-23 symbian build system 007900c31eef]
-</info>
-<info>SBS_HOME C:/apps/sbs</info>
-<info>Set-up C:/apps/sbs/sbs_init.xml</info>
-<info>Command-line-arguments -s G:\output\build\canonical_system_definition_dfs_build_export.xml --filters=FilterMetadataLog -k --logfile G:\output\logs\compile/92_7952_201006_32_dfs_build_export.log --makefile=G:\output\logs/makefile/92_7952_201006_32_dfs_build_export --export-only -e emake --mo=--emake-emulation=gmake --mo=--emake-annofile=#MAKEFILE#.emake.anno --mo=--emake-class=DFS_7x01-64 --mo=--emake-annodetail=basic,history,file,waiting --mo=--case-sensitive=0 --mo=--emake-root=G:/;\;C:\apps;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium;C:\apps\sbs</info>
-<info>Current working directory G:\</info>
-<info>Environment /S=BHTEST001</info>
-<info>Environment ABLD_TOOLSMOD_COMPATIBILITY_MODE=alpha</info>
-<info>Environment ALLUSERSPROFILE=C:\Documents and Settings\All Users</info>
-<info>Environment APTLMHOST=@oupelic4.emea.nsn-net.net</info>
-<info>Environment ARMLMD_LICENSE_FILE=8224@trelic01;8224@salmg01;28747@saslmg04;</info>
-<info>Environment ARMROOT=\</info>
-<info>Environment ARMV5VER=:ARM/Thumb C/C++ Compiler, RVCT2.2 [Build 686]</info>
-<info>Environment BASE=E:\build_e\wbernard\hudson</info>
-<info>Environment CLUSTERLOG=C:\ETPWIN\Cluster\cluster.log</info>
-<info>Environment CMTHOME=C:\APPS\cmt</info>
-<info>Environment COMMONPROGRAMFILES=C:\Program Files (x86)\Common Files</info>
-<info>Environment COMMONPROGRAMFILES(X86)=C:\Program Files (x86)\Common Files</info>
-<info>Environment COMMONPROGRAMW6432=C:\Program Files\Common Files</info>
-<info>Environment COMPUTERNAME=TRWEC090</info>
-<info>Environment COMSPEC=C:\ETPWIN\system32\cmd.exe</info>
-<info>Environment COPYCMD=/y</info>
-<info>Environment CTCHOME=C:\APPS\ctc</info>
-<info>Environment CTC_AGENT_DEBUG=*</info>
-<info>Environment CYGWIN=nontsec nosmbntsec</info>
-<info>Environment DERBY_HOME=C:\APPS\jdk_1.6.0_11\JavaDB</info>
-<info>Environment EMAKEFLAGS=--emake-reg-roots=-\HKEY_CLASSES_ROOT</info>
-<info>Environment EMAKE_CM=trwec001</info>
-<info>Environment EMAKE_EMULATION=symbian</info>
-<info>Environment EMAKE_ROOT=\;C:\apps</info>
-<info>Environment EPOCROOT=\</info>
-<info>Environment EXECUTOR_NUMBER=3</info>
-<info>Environment FLEXLM_BATCH=1</info>
-<info>Environment FLEXLM_TIMEOUT=900000</info>
-<info>Environment FP_NO_HOST_CHECK=NO</info>
-<info>Environment HELIUM_CACHE_DIR=e:\ec_temp\helium\wbernard</info>
-<info>Environment HELIUM_HOME=E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium</info>
-<info>Environment HOME=h:\</info>
-<info>Environment HOSTPLATFORM=win 32</info>
-<info>Environment HOSTPLATFORM_DIR=win32</info>
-<info>Environment INCLUDE=C:\APPS\MSVC6\VC98\ATL\Include\;C:\APPS\MSVC6\VC98\MFC\Include\;C:\APPS\MSVC6\VC98\Include\</info>
-<info>Environment JAVA_1_3_1_HOME=C:\apps\j2sdk_1.3.1_06</info>
-<info>Environment JAVA_5_HOME=C:\APPS\jdk_1.5.0_17</info>
-<info>Environment JAVA_6_HOME=C:\APPS\jdk_1.6.0_11</info>
-<info>Environment JAVA_HOME=C:\APPS\jdk_1.6.0_11</info>
-<info>Environment LIB=C:\APPS\MSVC6\VC98\MFC\Lib\;C:\APPS\MSVC6\VC98\Lib\</info>
-<info>Environment MSDEVDIR=C:\APPS\MSVC6\Common\MSDev98</info>
-<info>Environment MWCSYM2INCLUDES=C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_X86;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C++\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Headers\Win32 SDK</info>
-<info>Environment MWSYM2LIBRARIES=C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Libraries\Win32 SDK;C:\APPS\carbide\x86Build\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs</info>
-<info>Environment MWSYM2LIBRARYFILES=MSL_All_MSE_Symbian_D.lib;gdi32.lib;user32.lib;kernel32.lib;</info>
-<info>Environment NODE_NAME=trwec090</info>
-<info>Environment NUMBER_OF_PROCESSORS=12</info>
-<info>Environment OS=Windows_NT</info>
-<info>Environment PATH=C:\apps\sbs\win32\mingw\bin;C:\apps\sbs\win32\cygwin\bin;C:\apps\sbs\win32\bin;c:\apps\actperl\bin\;c:\apps\rvct22_686\bin;c:\apps\atool;\epoc32\tools;\epoc32\gcc\bin;c:\apps\ue;c:\apps\ccm65\bin;c:\apps\carbide\x86Build\Symbian_Tools\Command_Line_Tools;C:\Program Files\HP\NCU;c:\ECloud\i686_win32\bin;C:\Program Files (x86)\Windows Resource Kits\Tools\;C:\ETPWIN\system32;C:\ETPWIN;C:\ETPWIN\System32\Wbem;C:\ETPWIN\sysWOW64;C:\PROGRA~2\PuTTY;C:\APPS\MSVC6\Common\Tools\WinNT;C:\APPS\MSVC6\Common\MSDev98\Bin;C:\APPS\MSVC6\Common\Tools;C:\APPS\MSVC6\VC98\bin;C:\EESP\System32;C:\APPS\pclint;C:\APPS\cmt\;C:\APPS\ctc;C:\APPS\prevent\bin;C:\APPS\cltools;C:\APPS\symrec;C:\APPS\7zip;C:\APPS\understand\bin\pc-win95;C:\APPS\unzip;C:\APPS\jdk_1.6.0_11\bin;C:\apps\mercurial;C:\APPS\ant_1.7\bin;C:\Program Files\subversion;C:\APPS\sbs\bin;C:\APPS\actpython\.;C:\APPS\blocks\bin;C:\APPS\codescanner;C:\APPS\symdec;C:\APPS\bc;\epoc32\gcc_mingw\bin;C:\ETPWIN\system32\WindowsPowerShell\v1.0;C:\APPS\MSVC6\VC98\Bin\;C:\APPS\MSVC6\Common\Tools\;C:\APPS\MSVC6\Common\MSDev98\Bin\;\epoc32\tools;\epoc32\gcc\bin;\epoc32\tools\build;\epoc32\rombuild;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\unxutils;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\Subversion\bin;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\graphviz\bin;C:\APPS\ctc</info>
-<info>Environment PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw;.PSC1</info>
-<info>Environment PERL=C:\APPS\actperl\bin\perl.exe</info>
-<info>Environment PERL5LIB=E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\tools\common\packages</info>
-<info>Environment PID=6932</info>
-<info>Environment PROCESSOR_ARCHITECTURE=x86</info>
-<info>Environment PROCESSOR_ARCHITEW6432=AMD64</info>
-<info>Environment PROCESSOR_IDENTIFIER=AMD64 Family 16 Model 8 Stepping 0, AuthenticAMD</info>
-<info>Environment PROCESSOR_LEVEL=16</info>
-<info>Environment PROCESSOR_REVISION=0800</info>
-<info>Environment PROGRAMFILES=C:\Program Files (x86)</info>
-<info>Environment PROGRAMFILES(X86)=C:\Program Files (x86)</info>
-<info>Environment PROGRAMW6432=C:\Program Files</info>
-<info>Environment PROMPT=$P$G</info>
-<info>Environment PSMODULEPATH=C:\ETPWIN\system32\WindowsPowerShell\v1.0\Modules\</info>
-<info>Environment PYTHONPATH=C:\apps\sbs\win32\python264</info>
-<info>Environment PYTHONVERSION=2.6</info>
-<info>Environment RVCT22BIN=C:\APPS\rvct22_686\bin</info>
-<info>Environment RVCT22INC=C:\APPS\rvct22_686\include</info>
-<info>Environment RVCT22LIB=C:\APPS\rvct22_686\lib</info>
-<info>Environment RVCT22_ASMOPT=--licretry --fastlicense --sitelicense</info>
-<info>Environment RVCT22_CCOPT=--licretry --fastlicense --sitelicense</info>
-<info>Environment RVCT22_LINKOPT=--licretry --fastlicense --sitelicense</info>
-<info>Environment SBS_CLEAN_LOG_FILE=G:\output\logs\compile/92_7952_201006_32_dfs_build_export.log.clean.log</info>
-<info>Environment SBS_HOME=C:\apps\sbs</info>
-<info>Environment SBS_PYTHON=C:\APPS\actpython\python.exe</info>
-<info>Environment SYMSEE_VERSION=11.2.0</info>
-<info>Environment SYSTEMDRIVE=C:</info>
-<info>Environment SYSTEMROOT=C:\ETPWIN</info>
-<info>Environment TEAM=helium_tampere64.92</info>
-<info>Environment TEMP=e:\ec_temp</info>
-<info>Environment TESTED_ANT=C:\APPS\ant_1.7</info>
-<info>Environment TESTED_JAVA=C:\APPS\jdk_1.6.0_11</info>
-<info>Environment TMP=e:\ec_temp</info>
-<info>Environment TMPDIR=e:\ec_tmpdir</info>
-<info>Environment WINDIR=C:\ETPWIN</info>
-<info>Environment WORKSPACE=E:\build_e\wbernard\hudson\workspace\TB92-64bit</info>
-<info>Environment _JAVACMD=C:\APPS\jdk_1.6.0_11\bin\java.exe</info>
-<info>Environment _USE_CLASSPATH=no</info>
-<info>Environment __CYGWIN__=C:\apps\sbs\win32\cygwin</info>
-<info>Environment __MINGW__=C:\apps\sbs\win32\mingw</info>
-<info>Environment __PYTHON__=C:\APPS\actpython\python.exe</info>
-<info>Duplicate alias 'make' (the one from 'G:/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/apps/sbs/lib/config\make.xml')</info>
-<info>Duplicate alias 'emake' (the one from 'G:/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/apps/sbs/lib/config\make.xml')</info>
-<info>Buildable configuration 'armv5_urel'</info>
-<info>Buildable configuration 'armv5_udeb'</info>
-<info>Buildable configuration 'winscw_udeb'</info>
-<info>Buildable configuration 'winscw_urel'</info>
-<info>System Definition file G:/output/build/canonical_system_definition_dfs_build_export.xml</info>
-<info>Found 372 bld.inf references in G:/output/build/canonical_system_definition_dfs_build_export.xml within 10 layers:</info>
-<info>	ncp_layer, mw_layer, os_layer, bldfirst_mw_layer, bldfirst_app_layer, app_layer, tools_layer, addon_layer, unit_test_layer, complementary_layer</info>
-<info>Found 95 bld.inf references in layer "ncp_layer"</info>
-<info>Found 112 bld.inf references in layer "mw_layer"</info>
-<info>Found 25 bld.inf references in layer "os_layer"</info>
-<info>Found 2 bld.inf references in layer "bldfirst_mw_layer"</info>
-<info>Found 1 bld.inf references in layer "bldfirst_app_layer"</info>
-<info>Found 98 bld.inf references in layer "app_layer"</info>
-<info>Found 3 bld.inf references in layer "tools_layer"</info>
-<info>Found 30 bld.inf references in layer "addon_layer"</info>
-<info>Found 0 bld.inf references in layer "unit_test_layer"</info>
-<info>Found 6 bld.inf references in layer "complementary_layer"</info>
-<info>Toolcheck cache G:/epoc32/build/toolcheck_cache_.tmp ignored - environment changed
-</info>
-<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
-<info>applying the OS variant to the configuration "armv5_urel".</info>
-<info>'armv5_urel' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
-<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
-<info>applying the OS variant to the configuration "armv5_udeb".</info>
-<info>'armv5_udeb' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
-<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
-<info>applying the OS variant to the configuration "winscw_udeb".</info>
-<info>'winscw_udeb' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
-<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
-<info>applying the OS variant to the configuration "winscw_urel".</info>
-<info>'winscw_urel' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
-<info>Processing G:/sf/mw/svgt/group/bld.inf</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h to G:/epoc32/include/platform/mw/SVGImageLoadingObserver.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h to G:/epoc32/include/platform/mw/SVGEngineInterfaceImpl.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SvgListener.h to G:/epoc32/include/platform/mw/SVGListener.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGErrorImpl.h to G:/epoc32/include/platform/mw/SVGErrorImpl.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h to G:/epoc32/include/platform/mw/SvgJavaInterfaceImpl.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGHyperlinkListener.h to G:/epoc32/include/platform/mw/SVGHyperlinkListener.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGAnimationListener.h to G:/epoc32/include/platform/mw/SVGAnimationListener.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGRequestObserver.h to G:/epoc32/include/platform/mw/SVGRequestObserver.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGRendererId.h to G:/epoc32/include/platform/mw/SVGRendererId.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/nvg_api/inc/nvg.h to G:/epoc32/include/platform/mw/nvg.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/nvg_api/inc/MVGImageBinder.h to G:/epoc32/include/platform/mw/MVGImageBinder.h</info>
-<info>Copied G:/sf/mw/svgt/svgt_plat/nvg_api/inc/NVGIcon.h to G:/epoc32/include/platform/mw/NVGIcon.h</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/SVGEngine.iby to G:/epoc32/rom/include/core/mw/SVGEngine.iby</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/SvgtPluginEcom.iby to G:/epoc32/rom/include/core/mw/SvgtPluginEcom.iby</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/nvgdecoder.iby to G:/epoc32/rom/include/core/mw/NVGDecoder.iby</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/NVGDecoder_SW.iby to G:/epoc32/rom/include/core/mw/NVGDecoder_SW.iby</info>
-<info>Copied G:/sf/mw/svgt/svgtopt/rom/VGRenderer.iby to G:/epoc32/rom/include/core/mw/VGRenderer.iby</info>
-<whatlog bldinf='G:/sf/mw/svgt/group/bld.inf' mmp='' config=''>
-<export destination='G:/epoc32/include/platform/mw/SVGImageLoadingObserver.h' source='G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h'/>
-<resource>G:/epoc32/include/hrv_gain_mappings.rsg</resource>
-<build>G:/epoc32/release/armv5/urel/ekeyb.dll</build>
-</whatlog>
-<clean bldinf='G:/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
-<zipmarker>G:/epoc32/build/G__sf_os_deviceplatformrelease_locfiles_data_65.zipG__epoc32_include_platform_loc.unzipped</zipmarker>
-</clean>
-<whatlog bldinf='G:/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
-<archive zipfile='G:/sf/os/deviceplatformrelease/locfiles/data/65.zip'>
-<member>G:/epoc32/include/platform/loc/65/101f6dd6_65.loc</member>
-<member>G:/epoc32/include/platform/loc/65/101f6dd7_65.loc</member>
-</archive>
-</whatlog>
-<info>The make-engine exited successfully.</info>
-<info>Run time 999 seconds</info>
-<info>Created/Updated toolcheck cache: G:/epoc32/build/toolcheck_cache_.tmp
-</info>
-</buildlog>
--- a/buildframework/helium/sf/java/metadata/tests/data/parser_error.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<buildlog sbs_version="2.9.2 [2009-09-21 sf 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">
-<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp'>
-<![CDATA[
-+ C:/APPS/rvct22_616/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="X:/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -D__DLL__ --preinclude X:/epoc32/include/rvct/rvct.h -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/inc -JX:/sf/app/organizer/searchui/searchapp/inc -JX:/sf/app/organizer/searchui/searchapp/SrchUICommon/inc -JX:/epoc32/ -JX:/epoc32/include/config/platform -JX:/epoc32/include/baseport -JX:/epoc32/include -JX:/epoc32/include/ecom -JX:/epoc32/include -JX:/epoc32/include/mw -JX:/epoc32/include/platform/mw -JX:/epoc32/include/platform -JX:/epoc32/include/app -JX:/epoc32/include/platform/app -JX:/epoc32/include/platform/loc -JX:/epoc32/include/platform/mw/loc -JX:/epoc32/include/platform/app/loc -JX:/epoc32/include/platform/loc/sc -JX:/epoc32/include/platform/mw/loc/sc -JX:/epoc32/include/platform/app/loc/sc --depend_format=unix --depend X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o.d -o X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp
-"X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp", line 339: Error:  #20: identifier "KSEARCH_HLP_SINGLE_RE" is undefined
-          	helpContext.iContext = KSEARCH_HLP_SINGLE_RE; // add correct help context when available
-          	                       ^
-X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp: 0 warnings, 1 error
-
-]]><time start='1253718692.38008' elapsed='1.094' />
-<error>
-<status exit='failed' code='1' attempt='3' />
-</recipe>
-make: *** [X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o] Error 1
-<clean bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_udeb.product'>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll</file>
-<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.def"</file>
-<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.dso"</file>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.sym</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin_udeb_objects.via</file>
-<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.map</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o.d</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
-<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.sym</file>
-<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.map</file>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
-<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb</dir>
-<dir>X:/epoc32/release/armv5/udeb</dir>
-<dir>X:/epoc32/release/armv5/lib</dir>
-<dir>X:/epoc32/release/armv5/lib</dir>
-<dir>X:/epoc32/release/armv5.product/udeb</dir>
-</clean>
-</buildlog>
--- a/buildframework/helium/sf/java/metadata/tests/data/parsing_result.ini.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-<#--
-============================================================================ 
-Name        : whatlog_result.ini.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:
-
-============================================================================
--->
-<#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "${dbPath}") >
-number.of.logs=${table_info['jpasingle']['select count(l.path) path from LogFile l'][0]}
-number.of.metadata.entries=${table_info['jpasingle']['select count(e) from MetadataEntry e'][0]}
-number.of.execution.times=${table_info['jpasingle']['select count(e) path from ExecutionTime e'][0]}
-number.of.components=${table_info['jpasingle']['select count(c) path from Component c'][0]}
-<#assign c = 0 />
-<#list table_info['jpa']['select e from ExecutionTime e'] as e>
-execution.time.${c}=${e.time}
-<#assign c = c + 1  />
-</#list>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/policy/validate_policy.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,81 @@
+<?xml version="1.0"?>
+<policyvalidation>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\screensaver\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\screensaver\scrsaver\scrsaverplugins\ScreenSaverAnimPlugin\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\screensaver\scrsaver\scrsaverplugins\ScreenSaverGifAnimPlugin\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\screensaver\scrsaver\scrsaverplugins\SlideshowPlugin\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\applicationinterworkingfw\ServiceHandler\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_plat\alarm_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_plat\extended_notifiers_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\aiw_criteria_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\aiw_generic_parameter_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\aiw_service_handler_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\buttons_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\common_file_dialogs_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\context_pane_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\dialogs_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\document_handler_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\editors_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\form_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\grids_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\hierarchical_lists_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\indicators_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\information_preview_popup_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\lists_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\navigation_pane_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\notes_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\notifiers_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\options_menu_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\popups_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\screen_saver_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\scroller_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\setting_pages_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\sounds_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\status_pane_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\tabs_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\title_pane_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\title_pane_touch_observer_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\classicui_pub\tsrc\bc\apps\bctestlauncher\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\CommonAdapter\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\commonuis\CommonDialogs\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\commonuis\CommonUi\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\psln\Doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\AknGlobalUI\avkonstartupextplg\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\AknGlobalUI\Doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\AvKon\akncompamode\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\AvKon\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\AvKon\tsrc\bc\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\AvKon\tsrc\bc\script\codetest_script\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\classicui\uifw\EikStd\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\svgt\svgtopt\Doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\svgt\svgtopt\VGRenderer\Doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiresources\layouts\cdl\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiresources\pictographs\AknPictograph\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiresources\skins\AknSkins\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiresources\uigraphics\AknIcon\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiresources\uiresources_pub\pictograph_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiresources\uiresources_pub\skins_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\hapticsservices\tactilefeedback\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\graphicsuis\svgtviewer\SvgtViewerPlugin\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\helps\csxhelp\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiaccelerator\uiacceltk\hitchcock\coretoolkit\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiaccelerator\uiacceltk\hitchcock\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uiaccelerator\uiacceltk\hitchcock\Tracer\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\uitools\svgtencoder\svgtenc\standalone\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\ocrsrv\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\fep\aknfep\peninputplugins\peninputimeplugincn\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\inputmethods_pub\ptiengine_iti_api\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\textinput\peninputarc\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\textinput\peninputarc\utils\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\textinput\peninputcommonctrls\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\textinput\peninputhwrboxcn\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\inputmethods\textinput\ptienginev2\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\dictionary\userdict\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\charconvfw\Charconvplugin\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\charconvfw\Findutil\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\charconvfw\gamerecognizer\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\charconvfw\JPLangUtil\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\charconvfw\Localizer\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\charconvfw\SortUtil\doc" value="None"/>
+    <error type="missing" message="E:\Build_E\ido_wa\ido_abs_tb92-nightly\textandloc\textandloc_pub\directory_localizer_api\doc" value="None"/>
+</policyvalidation>
--- a/buildframework/helium/sf/java/metadata/tests/data/receipe_lengthy_warn.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,182 +0,0 @@
-<?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>
-<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='win32compile2object' target='x:/epoc32/build/opensrv/c_672cbe451a1cdf8d/libgabble-convenience_dll/winscw/urel/gabble-connection.o' host='fawec103' layer='sf' component='opensrv' bldinf='x:/sf/mw/opensrv/group/bld.inf' mmp='x:/sf/mw/opensrv/telepathygabble/group/libgabble-convenience.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='x:/sf/mw/opensrv/telepathygabble/src/gabble-connection.c'>
-<![CDATA[
-+ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d SYMBIAN -d HAVE_CONFIG_H -d HAVE_ERRNO_H -d VERBOSE -d EMULATOR -d NDEBUG -d __DLL__ -i- -i x:/sf/mw/opensrv/telepathygabble/inc -i x:/sf/mw/opensrv/loudmouth/inc -i x:/epoc32/include -i x:/epoc32/include -i x:/epoc32/include/mw -i x:/epoc32/include/platform/mw -i x:/epoc32/include/platform -i x:/epoc32/include/platform/loc -i x:/epoc32/include/platform/mw/loc -i x:/epoc32/include/platform/loc/sc -i x:/epoc32/include/platform/mw/loc/sc -i x:/epoc32/include/stdapis -i x:/epoc32/include/stdapis/glib-2.0 -i x:/epoc32/include/stdapis/glib-2.0/glib -i x:/epoc32/include/stdapis/glib-2.0/gObject -i x:/epoc32/include/stdapis/openssl -i x:/epoc32/include/stdapis/stlport -i x:/epoc32/include/stdapis/dbus-1.0 -i x:/epoc32/include/stdapis/dbus-1.0/dbus -include bldvariant.hrh -o x:/epoc32/build/opensrv/c_672cbe451a1cdf8d/libgabble-convenience_dll/winscw/urel/gabble-connection.o x:/sf/mw/opensrv/telepathygabble/src/gabble-connection.c
-epoc32\include\e32def.h:315: warning: macro 'TRUE' redefined
-epoc32\include\e32def.h:315: warning: (included from:
-epoc32\include\e32def.h:315: warning:   X:\epoc32\include\stdapis\pthread.h:40
-epoc32\include\e32def.h:315: warning:   X:\epoc32\include\stdapis\glib-2.0\glibconfig.h:46
-epoc32\include\e32def.h:315: warning:   X:\epoc32\include\stdapis\glib-2.0\glib\gtypes.h:30
-epoc32\include\e32def.h:315: warning:   X:\epoc32\include\stdapis\glib-2.0\glib\galloca.h:31
-epoc32\include\e32def.h:315: warning:   X:\epoc32\include\stdapis\glib-2.0\glib.h:43
-epoc32\include\e32def.h:315: warning:   X:\epoc32\include\stdapis\glib-2.0\gobject\gtype.h:28
-epoc32\include\e32def.h:315: warning:   X:\epoc32\include\stdapis\glib-2.0\gobject\gboxed.h:28
-epoc32\include\e32def.h:315: warning:   X:\epoc32\include\stdapis\glib-2.0\glib-object.h:25
-epoc32\include\e32def.h:315: warning:   X:\epoc32\include\stdapis\dbus-1.0\dbus\dbus-glib.h:27
-epoc32\include\e32def.h:315: warning:   X:\sf\mw\opensrv\telepathygabble\src\gabble-connection.c:23)
-epoc32\include\stdapis\glib-2.0\glib\gmacros.h:163: warning:     (location of previous definition)
-epoc32\include\e32def.h:326: warning: macro 'FALSE' redefined
-epoc32\include\e32def.h:326: warning: (included from:
-epoc32\include\e32def.h:326: warning:   X:\epoc32\include\stdapis\pthread.h:40
-epoc32\include\e32def.h:326: warning:   X:\epoc32\include\stdapis\glib-2.0\glibconfig.h:46
-epoc32\include\e32def.h:326: warning:   X:\epoc32\include\stdapis\glib-2.0\glib\gtypes.h:30
-epoc32\include\e32def.h:326: warning:   X:\epoc32\include\stdapis\glib-2.0\glib\galloca.h:31
-epoc32\include\e32def.h:326: warning:   X:\epoc32\include\stdapis\glib-2.0\glib.h:43
-epoc32\include\e32def.h:326: warning:   X:\epoc32\include\stdapis\glib-2.0\gobject\gtype.h:28
-epoc32\include\e32def.h:326: warning:   X:\epoc32\include\stdapis\glib-2.0\gobject\gboxed.h:28
-epoc32\include\e32def.h:326: warning:   X:\epoc32\include\stdapis\glib-2.0\glib-object.h:25
-epoc32\include\e32def.h:326: warning:   X:\epoc32\include\stdapis\dbus-1.0\dbus\dbus-glib.h:27
-epoc32\include\e32def.h:326: warning:   X:\sf\mw\opensrv\telepathygabble\src\gabble-connection.c:23)
-epoc32\include\stdapis\glib-2.0\glib\gmacros.h:159: warning:     (location of previous definition)
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:85: warning: variable / argument 'invocation_hint' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:132: warning: variable / argument 'return_value' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:132: warning: variable / argument 'invocation_hint' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:182: warning: variable / argument 'invocation_hint' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:233: warning: variable / argument 'invocation_hint' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:280: warning: variable / argument 'invocation_hint' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:331: warning: variable / argument 'invocation_hint' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:380: warning: variable / argument 'invocation_hint' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:429: warning: variable / argument 'invocation_hint' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:476: warning: variable / argument 'return_value' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:476: warning: variable / argument 'invocation_hint' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:522: warning: variable / argument 'return_value' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:522: warning: variable / argument 'invocation_hint' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:566: warning: variable / argument 'invocation_hint' is not used in function
-sf\mw\opensrv\telepathygabble\inc\gabble-connection-glue.h:611: warning: variable / argument 'invocation_hint' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:197: warning: illegal empty declaration
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:197: warning: illegal empty declaration
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:430: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:430: warning: '@enum$4028gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:597: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:597: warning: '@enum$4028gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:630: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:630: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:638: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:638: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:646: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:646: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:656: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:656: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:663: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:663: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:672: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:672: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:681: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:681: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:689: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:689: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:697: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:697: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:705: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:705: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:713: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:713: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:723: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:723: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:731: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:731: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:741: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:741: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:751: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:751: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:760: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:760: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:769: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:769: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:779: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:779: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:789: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:789: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:799: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:799: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:809: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:809: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:819: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:819: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:829: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:829: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:839: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:839: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:848: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:848: warning: '@enum$2379gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:860: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:860: warning: '@enum$2645gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:869: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:869: warning: '@enum$2645gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:878: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:878: warning: '@enum$2645gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:887: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:887: warning: '@enum$2645gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:896: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:896: warning: '@enum$2645gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:905: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:905: warning: '@enum$2645gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:1273: warning: variable / argument 'handler' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:1273: warning: variable / argument 'connection' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:1304: warning: variable / argument 'where_the_object_was' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:1851: warning: variable / argument 'user_data' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:1904: warning: variable / argument 'factory' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:1956: warning: variable / argument 'factory' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:2003: warning: variable / argument 'cache' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:2500: warning: variable / argument 'handler' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:2500: warning: variable / argument 'connection' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:2584: warning: variable / argument 'handler' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:2617: warning: variable / argument 'handler' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:2653: warning: variable / argument 'lmssl' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:2919: warning: variable / argument 'disco' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:2919: warning: variable / argument 'request' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:2919: warning: variable / argument 'node' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3059: warning: variable / argument 'status' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3059: warning: variable / argument 'parms' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3092: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3092: warning: '@enum$4893gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3137: warning: variable / argument 'cache' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3170: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3170: warning: '@enum$4893gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3170: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3170: warning: '@enum$4893gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3320: warning: variable / argument 'error' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3647: warning: variable / argument 'error' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3766: warning: illegal implicit conversion from 'unsigned int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3766: warning: '@enum$4009gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3778: warning: illegal implicit conversion from 'unsigned int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3778: warning: '@enum$4009gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3819: warning: illegal implicit conversion from 'unsigned int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3819: warning: '@enum$4009gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3836: warning: illegal implicit conversion from 'unsigned int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3836: warning: '@enum$4009gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3992: warning: illegal implicit conversion from 'unsigned int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:3992: warning: '@enum$4009gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4004: warning: illegal implicit conversion from 'unsigned int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4004: warning: '@enum$4009gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4123: warning: variable / argument 'manager' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4123: warning: variable / argument 'handle' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4123: warning: variable / argument 'vcard' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4123: warning: variable / argument 'error' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4373: warning: illegal implicit conversion from 'unsigned int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4373: warning: '@enum$4009gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4558: warning: variable / argument 'disco' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4558: warning: variable / argument 'request' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4558: warning: variable / argument 'jid' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4558: warning: variable / argument 'node' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4643: warning: variable / argument 'context' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4703: warning: illegal implicit conversion from 'unsigned int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4703: warning: '@enum$4009gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4720: warning: illegal implicit conversion from 'unsigned int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4720: warning: '@enum$4009gabble_connection_c'
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:4963: warning: variable / argument 'time' is not used in function
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:5039: warning: illegal implicit conversion from 'int' to
-sf\mw\opensrv\telepathygabble\src\gabble-connection.c:5039: warning: '@enum$4229gabble_connection_c'
-+ E:/build_e/sbs_272/sbs/win32/cygwin/bin/sed.exe 's#\\\\\(.\)#/\1#g;s#/ #\\\ #g;s#\([A-Za-z]:\)\\\\#\1/#g;1,1s#.*: .* \(.\)\?$#    x:/epoc32/build/opensrv/c_672cbe451a1cdf8d/libgabble-convenience_dll/winscw/urel/gabble-connection.o: x:/sf/mw/opensrv/telepathygabble/src/gabble-connection.c \1#' x:/epoc32/build/opensrv/c_672cbe451a1cdf8d/libgabble-convenience_dll/winscw/urel/gabble-connection.dep
-]]><time start='1245768194.876303000' elapsed='1.140' />
-+ 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/regex/empty.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,2 @@
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/regex/log-with-same-root-name.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,1 @@
+ERROR: from log-with-same-root-name.log
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/regex/log-with-same-root-name.log.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,1 @@
+ERROR: from log-with-same-root-name.log.log
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/tests/data/sample_abld.log	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,488 +0,0 @@
-
-x:\>set
-ALLUSERSPROFILE=C:\Documents and Settings\All Users
-ANT_ARGS=-lib "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\helium-antlib\bin" -lib "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\tools\common\java\lib" -lib "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\antlibs" -lib "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\antlibs\internal" -lib "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\jep_1.6_2.5" -logger com.nokia.ant.HeliumLogger   -listener com.nokia.helium.diamonds.ant.HeliumListener  -listener com.nokia.ant.listener.internaldata.Listener  -Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor  -listener com.nokia.ant.listener.TracingLogger
-ANT_CMD_LINE_ARGS=-Dhelium.dir "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium" -listener nokia.ant.XmlLogger -DXmlLogger.file E:\BUILD_E\ido-config-cc-svn\cruisecontrol/../robot/log.xml -Dcclastbuildtimestamp 20090702114112 "-Dcvstimestamp=2009-07-02 12:11:44 GMT" -Dbuildforced false -Dcclastgoodbuildtimestamp 20090606000000 -Dcctimestamp 20090702131144 -Dlabel build.33 -Dprojectname ido_abs_tb92-nightly -Dlastbuildsuccessful false -Dbuild.system ec-helium -Dconfiguration.dir E:\BUILD_E\ido-config-cc-svn\cruisecontrol/../idos/abs/branches/tb92-nightly -Dbuild.drive x: -Ds60.grace.cache E:\BUILD_E\ido-config-cc-svn\build/ido_abs_tb92-nightly_grace_cache.txt -Dskip.codescanner true -Dcc.output.dir E:\BUILD_E\ido-config-cc-svn\build -buildfile E:\BUILD_E\ido-config-cc-svn\cruisecontrol/config/wrapper.xml test-publish-prop ido-build
-ANT_HOME=C:\APPS\ant_1.7
-ANT_OPTS=-Xmx896M -Dlog4j.configuration=com/nokia/log4j.xml
-APPDATA=C:\Documents and Settings\username\Application Data
-APTLMHOST=@oupelic4.emea.nsn-net.net
-ARMLMD_LICENSE_FILE=8224@fake1.domain.invalid;8224@fake2.domain.invalid;
-ARMROOT=\
-ARMV5VER=:ARM/Thumb C/C++ Compiler, RVCT2.2 [Build 593]
-CCDIR=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl\
-CC_BAT=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl\real_cruisecontrol.bat
-CC_OPTS= -Ddashboard.config=E:\BUILD_E\ido-config-cc-svn\build\helium-dashboard-config.xml -Xms512m -Xmx1024m
-CLASSPATH=e:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl\lib;%CLASSPATH%
-CLIENTNAME=4GBD01728
-ClusterLog=C:\EESP\Cluster\cluster.log
-CMTHOME=C:\APPS\cmt
-CommonProgramFiles=C:\Program Files\Common Files
-COMPUTERNAME=FASYM011
-ComSpec=C:\EESP\system32\cmd.exe
-COPYCMD=/y
-CRUISE_PATH=C:\Apps\j2sdk_1.6.0_02\lib\tools.jar
-CTCHOME=C:\APPS\ctc
-DERBY_HOME=C:\APPS\j2sdk_1.6.0_02\JavaDB
-DIAMONDS_ANT_ARGS= -listener com.nokia.helium.diamonds.ant.HeliumListener
-EMAKEFLAGS=--no-print-directory --emake-volatile=.def,.info,.class,.mmp --emake-reg-roots=-\HKEY_CLASSES_ROOT
-EMAKE_CM=fawec001
-EMAKE_EMULATION=symbian
-EMAKE_ROOT=\;c:\apps
-EPOCROOT=\
-EXEC="C:\Apps\j2sdk_1.6.0_02\bin\java"  -Ddashboard.config=E:\BUILD_E\ido-config-cc-svn\build\helium-dashboard-config.xml -Xms512m -Xmx1024m -Djmx.remote.x.server.connection.timeout=-1 -Djmx.remote.x.client.connection.check.period=0 -jar "E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl\lib\cruisecontrol-launcher.jar" -webapppath E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl/webapps/cruisecontrol -dashboard E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl/webapps/dashboard -webport 8080 -rmiport 1099
-FILTERWHAT_FILE=\output\logs\about_what.log
-FLEXLM_BATCH=1
-FLEXLM_TIMEOUT=900000
-FP_NO_HOST_CHECK=NO
-HELIUM_CACHE_DIR=C:\DOCUME~1\username\LOCALS~1\Temp\2\helium\varamana
-HELIUM_HOME=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium
-HLM_ENABLE_MEM_TRACING=1
-HLM_MEM_TRACING_ANT_ARGS= -listener com.nokia.ant.listener.TracingLogger
-HOME=h:\
-HOMEDRIVE=C:
-HOMEPATH=\Documents and Settings\username
-include=C:\apps\msvc6\VC98\ATL\INCLUDE;C:\apps\msvc6\VC98\INCLUDE;C:\apps\msvc6\VC98\MFC\INCLUDE;C:\apps\msvc6\VC98\atl\include;C:\apps\msvc6\VC98\mfc\include;C:\apps\msvc6\VC98\include
-INTERNAL_DATA_ANT_ARGS= -listener com.nokia.ant.listener.internaldata.Listener
-JAVA_1_3_1_HOME=C:\APPS\j2sdk_1.3.1_06
-JAVA_HOME=C:\Apps\j2sdk_1.6.0_02
-JAVA_PATH="C:\Apps\j2sdk_1.6.0_02\bin\java"
-JEP_HOME=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\jep_1.6_2.5
-LAUNCHER=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl\lib\cruisecontrol-launcher.jar
-lib=C:\apps\msvc6\VC98\LIB;C:\apps\msvc6\VC98\MFC\LIB;C:\apps\msvc6\VC98\mfc\lib;C:\apps\msvc6\VC98\lib
-LIBDIR=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\CruiseControl\lib
-LM_LICENSE_FILE=C:\APPS\licenses\emea.dat;1700@fake1.domain.invalid;C:\APPS\licenses\PCLint.dat;6969@sfake2.domain.invalid;
-LOGONSERVER=\\CAWDC101
-MSDevDir=C:\apps\msvc6\Common\msdev98
-MSVCDir=C:\apps\msvc6\VC98
-MSVC_ENV_BAT=c:\APPS\msvc6\VC98\Bin\VCVARS32.BAT
-MWCSym2Includes=C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_X86;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C++\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Headers\Win32 SDK
-MWSym2Libraries=C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Libraries\Win32 SDK;C:\APPS\carbide\x86Build\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs
-MWSym2LibraryFiles=MSL_All_MSE_Symbian_D.lib;gdi32.lib;user32.lib;kernel32.lib;
-NOKIA_LICENSE_FILE=C:\APPS\licenses\emea.dat;
-NUMBER_OF_PROCESSORS=4
-OS=Windows_NT
-Path=C:\apps\msvc6\Common\msdev98\BIN;C:\apps\msvc6\VC98\BIN;C:\apps\msvc6\Common\TOOLS\WINNT;C:\apps\msvc6\Common\TOOLS;e:\BUILD_E\ido-config-cc-svn\sbs\bin;e:\BUILD_E\slick-svn\bin;c:\ECloud\i686_win32\bin;C:\Program Files\HP\NCU;c:\apps\actperl\bin\;c:\apps\rvct22_593\bin;c:\apps\atool;\epoc32\tools;\epoc32\gcc\bin;c:\apps\ue;c:\apps\ccm65\bin;c:\apps\carbide\x86build\symbian_tools\command_line_tools;c:\apps\symdec;c:\apps\actpython\.;C:\Symbian\SITK\stat\bin;C:\Symbian\SITK;C:\Symbian\SITK\edgd\bin\;C:\Symbian\SITK\cbr;C:\Symbian\SITK\ucc\bin;C:\Symbian\SITK\ucc\SyncService\bin;C:\Symbian\SITK\ucc\TestDriverService\bin;C:\Symbian\SITK\sqlite-db-creator;C:\Symbian\SITK\testdriver\product;C:\Symbian\SITK\imgcheck;C:\Symbian\SITK\SystemModelGenerator;C:\Symbian\SITK/sbs/bin;;c:\program files\hp\ncu;c:\program files\windows resource kits\tools\;c:\eesp\system32;c:\eesp\system32\wbem;c:\apps\msvc6\common\tools\winnt;c:\apps\msvc6\common\msdev98\bin;c:\apps\msvc6\vc98\bin;c:\progra~1\winzip;c:\apps\wget;c:\apps\ant_1.7\bin;c:\apps\understand\bin\pc-win95;c:\etpwin\system32;c:\etpwin\system32\wbem;c:\apps\sbs\bin;c:\apps\pclint;c:\apps\cltools;c:\apps\codescanner;c:\apps\symrec;c:\apps\gracecli\bin;c:\apps\7zip;c:\apps\ctc;c:\apps\unzip;c:\apps\bc;c:\apps\cmt\;c:\apps\j2sdk_1.6.0_02;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\jep_1.6_2.5;\epoc32\tools;\epoc32\gcc\bin;\epoc32\tools\build;\epoc32\rombuild;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\tools\common\bin;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\unxutils;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\filedisk;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\info-zip;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\Subversion\bin;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\graphviz\bin;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\LSC_5.2;\tools;\tools\ncp_tools;C:\APPS\ctc;C:\EESP\system32;C:\EESP;C:\EESP\System32\Wbem\;C:\EESP\system32;C:\EESP;C:\EESP\System32\Wbem;C:\ETPWIN\system32;C:\ETPWIN;C:\ETPWIN\System32\Wbem
-PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw
-PERL=C:\APPS\actperl\bin\perl.exe
-PERL5LIB=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\tools\common\packages
-PID=8296
-ppd_tools=\tools\
-PROCESSOR_ARCHITECTURE=x86
-PROCESSOR_IDENTIFIER=x86 Family 15 Model 5 Stepping 10, AuthenticAMD
-PROCESSOR_LEVEL=15
-PROCESSOR_REVISION=050a
-ProgramFiles=C:\Program Files
-PROMPT=$P$G
-PYTHONPATH=E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\external\python\lib\2.5;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium\tools\common\python\lib;e:\BUILD_E\ido-config-cc-svn\sbs\python
-RVCT22BIN=C:\APPS\rvct22_593\bin
-RVCT22INC=C:\APPS\rvct22_593\include
-RVCT22LIB=C:\APPS\rvct22_593\lib
-RVCT22_ASMOPT=--licretry --fastlicense --sitelicense
-RVCT22_CCOPT=--licretry --fastlicense --sitelicense
-RVCT22_LINKOPT=--licretry --fastlicense --sitelicense
-SBS_HOME=e:\BUILD_E\ido-config-cc-svn\sbs
-SESSIONNAME=RDP-Tcp#22
-SIGNALING_ANT_ARGS= -Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor
-SITK_PATHS=C:\Symbian\SITK\stat\bin;C:\Symbian\SITK;C:\Symbian\SITK\edgd\bin\;C:\Symbian\SITK\cbr;C:\Symbian\SITK\ucc\bin;C:\Symbian\SITK\ucc\SyncService\bin;C:\Symbian\SITK\ucc\TestDriverService\bin;C:\Symbian\SITK\sqlite-db-creator;C:\Symbian\SITK\testdriver\product;C:\Symbian\SITK\imgcheck;C:\Symbian\SITK\SystemModelGenerator;C:\Symbian\SITK/sbs/bin;
-spp_tools=\tools\
-SYMBIANBUILD_DEPENDENCYOFF=1
-SYMSEE_VERSION=9.1.0
-SystemDrive=C:
-SystemRoot=C:\EESP
-TEAM=xxxxxx
-TEMP=C:\DOCUME~1\username\LOCALS~1\Temp\2
-TESTED_ANT=C:\APPS\ant_1.7
-TESTED_JAVA=C:\Apps\j2sdk_1.6.0_02
-TMP=C:\DOCUME~1\username\LOCALS~1\Temp\2
-USERDNSDOMAIN=fake.domain.invalid
-USERDOMAIN=userdomain
-USERNAME=username
-USERPROFILE=C:\Documents and Settings\username
-windir=C:\EESP
-_JAVACMD=C:\Apps\j2sdk_1.6.0_02\bin\java.exe
-_USE_CLASSPATH=yes
-
-x:\>emake --emake-build-label=ido_abs_tb92-nightly_5.2.33.dfs_build --emake-class=default --emake-priority=normal --emake-maxagents=0 --emake-job-limit=0 --emake-mem-limit=1000000000 --emake-history=merge --emake-annodetail=basic,history,file,waiting --emake-annofile=x:\output\logs\ido_abs_tb92-nightly_5.2.33.dfs_build.emake.anno.xml --emake-historyfile=x:/emake.data --emake-debug=g --emake-logfile=x:\output\logs\ido_abs_tb92-nightly_5.2.33.dfs_build.emake.g.dlog --emake-root=\;c:\apps;E:\BUILD_E\ido-config-cc-svn\helium-4.0.x_lat\helium --emake-autodepend=1 -k -i -f x:/dfs_build.make LOGBUILDTIME="" VERBOSE="" SAVESPACE="" dfs_build 
-WARNING EC1137: Unrecognized option '--no-print-directory' in EMAKEFLAGS.
-Starting build: 50896
-WARNING EC1137: Unrecognized option '--no-print-directory' in EMAKEFLAGS.
-===-------------------------------------------------
-=== dfs_build
-===-------------------------------------------------
-=== dfs_build started Thu Jul  2 13:13:58 2009
-emake -f dfs_build.make dfs_build-bldmake_bldfiles
-make[1]: Entering directory `x:/'
-=== dfs_build == \sf/os/graphics/group
--- bldmake bldfiles 
-++ Started at Thu Jul  2 13:13:58 2009
-+++ HiRes Start 1246536838.91662
-cd \sf/os/graphics/group && bldmake bldfiles   -keepgoing   
-+++ HiRes End 1246536840.97909
-++ Finished at Thu Jul  2 13:14:01 2009
-=== dfs_build == \sf/os/textandloc/group
--- bldmake bldfiles 
-++ Started at Thu Jul  2 13:13:58 2009
-+++ HiRes Start 1246536839.05724
-cd \sf/os/textandloc/group && bldmake bldfiles   -keepgoing   
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-WARNING: Should install MSVC6 Service Pack 3
-+++ HiRes End 1246536842.55719
-++ Finished at Thu Jul  2 13:14:02 2009
-make[1]: Leaving directory `x:/'
-emake -f dfs_build.make dfs_build-abld_export
-make[1]: Entering directory `x:/'
-=== dfs_build == \sf/os/graphics/group
--- abld export 
-++ Started at Thu Jul  2 13:14:02 2009
-+++ HiRes Start 1246536843.01031
-cd \sf/os/graphics/group && abld export   -keepgoing   
-  emake -r  -k -f "\EPOC32\BUILD\sf\os\graphics\group\EXPORT.make" EXPORT VERBOSE=-s KEEPGOING=-k
-make[2]: Entering directory `X:/sf/os/graphics/group'
-copy "\sf\os\graphics\graphics_plat\openvg_binding_api\inc\vg\vgcontext.h" "\epoc32\include\platform\vg\vgcontext.h"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphics_plat\openvg_binding_api\inc\vg\vgcontext_symbian.h" "\epoc32\include\platform\vg\vgcontext_symbian.h"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphics_plat\m3g_core_api\inc\M3G\m3g_core.h" "\epoc32\include\platform\M3G\m3g_core.h"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphicsaccelaration\3d_opengl_es_1_1\group\opengles_nokia.iby" "\epoc32\rom\include\opengles_nokia.iby"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphicsaccelaration\2d_openvg_1_1\rom\openvg_nokia.iby" "\epoc32\rom\include\core\os\openvg_nokia.iby"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphicsaccelaration\egl\group\egl_sw_gce.iby" "\epoc32\rom\include\egl_sw_gce.iby"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphicsaccelaration\egl\group\egl_sw_nongce.iby" "\epoc32\rom\include\egl_sw_nongce.iby"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\products\egl\3.0\include\eglInternalApi.h" "\epoc32\include\platform\eglInternalApi.h"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\products\egl\3.0\include\oglcontextapi.h" "\epoc32\include\platform\oglContextApi.h"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\products\egl\3.0\include\ovgContextApi.h" "\epoc32\include\platform\ovgContextApi.h"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\products\egl\3.0\include\EGL\eglWrapper.h" "\epoc32\include\platform\EGL\eglWrapper.h"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\products\egl\3.0\src\symbian\eglsymbianpaniccodes.h" "\epoc32\include\platform\eglsymbianpaniccodes.h"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\libs\hg\3.1\hgDefs.h" "\epoc32\include\platform\hgDefs.h"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphicsaccelaration\egl\implementation\libs\hg\3.1\hgPublicDefs.h" "\epoc32\include\platform\hgPublicDefs.h"
-        1 file(s) copied.
-copy "\sf\os\graphics\graphicsaccelaration\vgi\rom\libvgi.iby" "\epoc32\rom\include\core\os\libvgi.iby"
-        1 file(s) copied.
-copy "\sf\os\graphics\m3g\m3gcore11\rom\m3gcore.iby" "\epoc32\rom\include\core\os\m3gcore.iby"
-        1 file(s) copied.
-make[2]: Leaving directory `X:/sf/os/graphics/group'
-+++ HiRes End 1246536843.8853
-++ Finished at Thu Jul  2 13:14:03 2009
-=== dfs_build == \sf/os/textandloc/group
--- abld export 
-++ Started at Thu Jul  2 13:14:02 2009
-+++ HiRes Start 1246536843.04156
-cd \sf/os/textandloc/group && abld export   -keepgoing   
-  emake -r  -k -f "\EPOC32\BUILD\sf\os\textandloc\group\EXPORT.make" EXPORT VERBOSE=-s KEEPGOING=-k
-make[2]: Entering directory `X:/sf/os/textandloc/group'
-Creating \sf\os\textandloc\inc
-copy "\sf\os\textandloc\textandloc_plat\findutil_api\inc\FindUtil.h" "\epoc32\include\platform\FindUtil.h"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_plat\japanese_language_utilities_api\inc\jplangutil.h" "\epoc32\include\platform\mw\jplangutil.h"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_plat\character_conversion_nonpublic_api\inc\JapaneseCharConv.h" "\epoc32\include\platform\JapaneseCharConv.h"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_plat\sortutil_api\inc\SortUtil.h" "\epoc32\include\platform\SortUtil.h"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\GBK.H" "\epoc32\include\GBK.H"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\JISX0208.H" "\epoc32\include\JISX0208.H"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\GB2312.H" "\epoc32\include\GB2312.H"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\CharacterSetConverter.h" "\epoc32\include\CharacterSetConverter.h"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\CONVDATA.H" "\epoc32\include\CONVDATA.H"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\JISX0201.H" "\epoc32\include\JISX0201.H"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\UTF.H" "\epoc32\include\UTF.H"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\JISX0212.H" "\epoc32\include\JISX0212.H"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\CharacterSetConverter.inl" "\epoc32\include\CharacterSetConverter.inl"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\BIG5.H" "\epoc32\include\BIG5.H"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\CONVNAMES.H" "\epoc32\include\CONVNAMES.H"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\CHARCONV.H" "\epoc32\include\CHARCONV.H"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_api\inc\SHIFTJIS.H" "\epoc32\include\SHIFTJIS.H"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_plugin_provider_api\inc\CONVUTILS.H" "\epoc32\include\CONVUTILS.H"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\character_conversion_plugin_provider_api\inc\CONVGENERATEDCPP.H" "\epoc32\include\CONVGENERATEDCPP.H"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\directory_localizer_api\inc\DirectoryLocalizer.rh" "\epoc32\include\mw\DirectoryLocalizer.rh"
-        1 file(s) copied.
-copy "\sf\os\textandloc\textandloc_pub\directory_localizer_api\inc\CDirectoryLocalizer.h" "\epoc32\include\mw\CDirectoryLocalizer.h"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\localizer\rom\DirectoryLocalizer.iby" "\epoc32\rom\include\core\mw\directorylocalizer.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\localizer\rom\DirectoryLocalizerResources.iby" "\epoc32\rom\include\language\mw\directorylocalizerresources.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\localizer\loc\DirectoryLocalizer.loc" "\epoc32\include\platform\mw\loc\sc\directorylocalizer.loc"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1250.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1250.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1251.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1251.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1252.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1252.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1253.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1253.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1254.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1254.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1255.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1255.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1256.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1256.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1257.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1257.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win874.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win874.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\TIS_620.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\TIS_620.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\KOI8U.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\KOI8U.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\KOI8R.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\KOI8R.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1258.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\Win1258.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\iscii.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\iscii.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\EUCKR.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\EUCKR.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\iso2022kr.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\iso2022kr.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\ksc5601.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\ksc5601.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1250.snm" "\epoc32\data\z\Resource\charconv\Win1250.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1251.snm" "\epoc32\data\z\Resource\charconv\Win1251.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1252.snm" "\epoc32\data\z\Resource\charconv\Win1252.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1253.snm" "\epoc32\data\z\Resource\charconv\Win1253.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1254.snm" "\epoc32\data\z\Resource\charconv\Win1254.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1255.snm" "\epoc32\data\z\Resource\charconv\Win1255.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1256.snm" "\epoc32\data\z\Resource\charconv\Win1256.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1257.snm" "\epoc32\data\z\Resource\charconv\Win1257.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win874.snm" "\epoc32\data\z\Resource\charconv\Win874.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\TIS_620.snm" "\epoc32\data\z\Resource\charconv\TIS_620.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\KOI8U.snm" "\epoc32\data\z\Resource\charconv\KOI8U.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\KOI8R.snm" "\epoc32\data\z\Resource\charconv\KOI8R.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\Win1258.snm" "\epoc32\data\z\Resource\charconv\Win1258.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\iscii.snm" "\epoc32\data\z\Resource\charconv\iscii.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\EUCKR.snm" "\epoc32\data\z\Resource\charconv\EUCKR.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\iso2022kr.snm" "\epoc32\data\z\Resource\charconv\iso2022kr.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\Data\ksc5601.snm" "\epoc32\data\z\Resource\charconv\ksc5601.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\rom\CharConvPlugin.iby" "\epoc32\rom\include\core\mw\charconvplugin.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\rom\CharConvPluginPictograph.IBY" "\epoc32\rom\include\core\mw\charconvpluginpictograph.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\rom\CharConvPluginPictograph_Variant.iby" "\epoc32\rom\include\customer\mw\charconvpluginpictograph_Variant.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconvplugin\rom\CharConvPlugin_Variant.IBY" "\epoc32\rom\include\customer\mw\charconvplugin_Variant.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\findutil\rom\Findutil.iby" "\epoc32\rom\include\core\mw\findutil.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\findutil\rom\Findutil_Variant.iby" "\epoc32\rom\include\customer\mw\findutil_Variant.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\numbergrouping\rom\NumberGrouping.iby" "\epoc32\rom\include\core\mw\numbergrouping.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\numbergrouping\conf\numbergrouping.confml" "\epoc32\rom\config\confml_data\s60\numbergrouping.confml"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\numbergrouping\conf\numbergrouping_101F8775.crml" "\epoc32\rom\config\confml_data\s60\numbergrouping_101F8775.crml"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\gamerecognizer\rom\GameRecognizer.iby" "\epoc32\rom\include\core\mw\gamerecognizer.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\jplangutil\rom\JPLangUtil.iby" "\epoc32\rom\include\core\mw\jplangutil.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\sortutil\rom\Sortutil.iby" "\epoc32\rom\include\core\mw\sortutil.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\sortutil\rom\SortUtil_Variant.iby" "\epoc32\rom\include\customer\mw\sortutil_Variant.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\aknjapanesereading\rom\AknJapaneseReading.iby" "\epoc32\rom\include\core\mw\aknjapanesereading.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CNVTOOL.BAT" "\epoc32\tools\CNVTOOL.BAT"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\SNMTOOL.BAT" "\epoc32\tools\SNMTOOL.BAT"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CHARCONV.BAT" "\epoc32\tools\CHARCONV.BAT"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CHARCONV.PL" "\epoc32\tools\CHARCONV.PL"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CNVTOOL.PL" "\epoc32\tools\CNVTOOL.PL"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\SNMTOOL.PL" "\epoc32\tools\SNMTOOL.PL"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\PARSER.PM" "\epoc32\tools\PARSER.PM"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\WRITER.PM" "\epoc32\tools\WRITER.PM"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\UTF.PM" "\epoc32\tools\UTF.PM"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CHARCONV_EXE.IPR" "\epoc32\engdoc\tools\CHARCONV_EXE.IPR"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CHARCONV_PERLTOOLS.IPR" "\epoc32\engdoc\tools\CHARCONV_PERLTOOLS.IPR"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CNVAPI.RTF" "\epoc32\engdoc\charconv\CNVAPI.RTF"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\CNVTOOL.RTF" "\epoc32\engdoc\charconv\CNVTOOL.RTF"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\SNMTOOL.RTF" "\epoc32\engdoc\charconv\SNMTOOL.RTF"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\group\AUTODETECT.RTF" "\epoc32\engdoc\charconv\AUTODETECT.RTF"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\big5.dat" "\epoc32\tools\charconv\big5.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\cp1252.dat" "\epoc32\tools\charconv\cp1252.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\gb12345.dat" "\epoc32\tools\charconv\gb12345.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\gb2312.dat" "\epoc32\tools\charconv\gb2312.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\gbk.dat" "\epoc32\tools\charconv\gbk.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88591.dat" "\epoc32\tools\charconv\iso88591.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso885910.dat" "\epoc32\tools\charconv\iso885910.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso885913.dat" "\epoc32\tools\charconv\iso885913.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso885914.dat" "\epoc32\tools\charconv\iso885914.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso885915.dat" "\epoc32\tools\charconv\iso885915.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88592.dat" "\epoc32\tools\charconv\iso88592.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88593.dat" "\epoc32\tools\charconv\iso88593.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88594.dat" "\epoc32\tools\charconv\iso88594.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88595.dat" "\epoc32\tools\charconv\iso88595.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88596.dat" "\epoc32\tools\charconv\iso88596.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88597.dat" "\epoc32\tools\charconv\iso88597.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88598.dat" "\epoc32\tools\charconv\iso88598.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\iso88599.dat" "\epoc32\tools\charconv\iso88599.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\shiftjis.dat" "\epoc32\tools\charconv\shiftjis.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\shiftjisdirectmap.dat" "\epoc32\tools\charconv\shiftjisdirectmap.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\gsm7_turkish_single.dat" "\epoc32\tools\charconv\gsm7_turkish_single.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\turkish_locking_gsm7ext.dat" "\epoc32\tools\charconv\turkish_locking_gsm7ext.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\generateddat\turkish_locking_single.dat" "\epoc32\tools\charconv\turkish_locking_single.dat"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\include\PictographObserver.h" "\sf\os\textandloc\inc\PictographObserver.h"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\include\CnvPictographShared.h" "\sf\os\textandloc\inc\CnvPictographShared.h"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\include\CnvShiftJisDirectmap.h" "\sf\os\textandloc\inc\CnvShiftJisDirectmap.h"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\snm\basic.snm" "\epoc32\release\winscw\udeb\z\Resource\charconv\basic.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\data\snm\basic.snm" "\epoc32\data\z\Resource\charconv\basic.snm"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV.IBY" "\epoc32\rom\include\core\mw\charconv.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_CHINESE_SIMPLFIED.IBY" "\epoc32\rom\include\customer\mw\charconv_chinese_simplfied.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_CHINESE_TRADITIONAL.IBY" "\epoc32\rom\include\customer\mw\charconv_chinese_traditional.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_CODEPAGE.iby" "\epoc32\rom\include\core\mw\charconv_codepage.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_ISO8859X.IBY" "\epoc32\rom\include\core\mw\charconv_iso8859x.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_JAPANESE.IBY" "\epoc32\rom\include\customer\mw\charconv_japanese.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\Charconv_Pictographs_Variant.Iby" "\epoc32\rom\include\customer\mw\charconv_pictographs_variant.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\charconv_gsm7_turkish_Variant.iby" "\epoc32\rom\include\customer\mw\charconv_gsm7_turkish_Variant.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\charconv_gsm7_turkish_Variant.iby" "\epoc32\rom\include\charconv_gsm7_turkish_Variant.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV.IBY" "\epoc32\rom\include\charconv.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CharConv_All_Plugins.iby" "\epoc32\rom\include\charconv_all_plugins.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_CHINESE_SIMPLFIED.IBY" "\epoc32\rom\include\charconv_chinese_simplfied.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_CHINESE_TRADITIONAL.IBY" "\epoc32\rom\include\charconv_chinese_traditional.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_JAPANESE.IBY" "\epoc32\rom\include\charconv_japanese.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_CODEPAGE.iby" "\epoc32\rom\include\charconv_codepage.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\CHARCONV_ISO8859X.IBY" "\epoc32\rom\include\charconv_iso8859x.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\charconv\ongoing\rom\charconv_gsm7_turkish.iby" "\epoc32\rom\include\charconv_gsm7_turkish.iby"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\inlinetext\inc\inlinetextbase.h" "\epoc32\include\platform\mw\inlinetextbase.h"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\inlinetext\inc\inlinetextcompositesource.h" "\epoc32\include\platform\mw\inlinetextcompositesource.h"
-        1 file(s) copied.
-copy "\sf\os\textandloc\charconvfw\inlinetext\inc\inlinetextnomatchesindicatorsource.h" "\epoc32\include\platform\mw\inlinetextnomatchesindicatorsource.h"
-        1 file(s) copied.
-make[2]: Leaving directory `X:/sf/os/textandloc/group'
-+++ HiRes End 1246536844.10405
-++ Finished at Thu Jul  2 13:14:04 2009
-make[1]: Leaving directory `x:/'
-emake -f dfs_build.make dfs_build-abld_makefile-tools
-make[1]: Entering directory `x:/'
-=== dfs_build == \sf/os/graphics/group
--- abld makefile 
-++ Started at Thu Jul  2 13:14:05 2009
-+++ HiRes Start 1246536845.63642
-cd \sf/os/graphics/group && abld makefile   -keepgoing   tools
-This project does not support platform or  program "TOOLS"
-+++ HiRes End 1246536847.1364
-++ Finished at Thu Jul  2 13:14:07 2009
-=== dfs_build == \sf/os/textandloc/group
--- abld makefile 
-++ Started at Thu Jul  2 13:14:05 2009
-+++ HiRes Start 1246536845.6208
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/build_whatlog.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.12.3 [2010-02-23 symbian build system 007900c31eef]" xmlns="http://symbian.com/xml/build/log" xmlns:progress="http://symbian.com/xml/build/log/progress" 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">
+<whatlog bldinf='G:/sf/mw/svgt/group/bld.inf' mmp='' config=''>
+<export destination='G:/epoc32/include/platform/mw/SVGImageLoadingObserver.h' source='G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h'/>
+<resource>G:/epoc32/include/hrv_gain_mappings.rsg</resource>
+<build>G:/epoc32/release/armv5/urel/ekeyb.dll</build>
+</whatlog>
+<whatlog bldinf='G:/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
+<archive zipfile='G:/sf/os/deviceplatformrelease/locfiles/data/65.zip'>
+<member>G:/epoc32/include/platform/loc/65/101f6dd6_65.loc</member>
+<member>G:/epoc32/include/platform/loc/65/101f6dd7_65.loc</member>
+</archive>
+</whatlog>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/build_whatlog.whatlog.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.12.3 [2010-02-23 symbian build system 007900c31eef]" xmlns="http://symbian.com/xml/build/log" xmlns:progress="http://symbian.com/xml/build/log/progress" 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.12.3 [2010-02-23 symbian build system 007900c31eef]
+</info>
+<info>SBS_HOME C:/apps/sbs</info>
+<info>Set-up C:/apps/sbs/sbs_init.xml</info>
+<info>Command-line-arguments -s G:\output\build\canonical_system_definition_dfs_build_export.xml --filters=FilterMetadataLog -k --logfile G:\output\logs\compile/92_7952_201006_32_dfs_build_export.log --makefile=G:\output\logs/makefile/92_7952_201006_32_dfs_build_export --export-only -e emake --mo=--emake-emulation=gmake --mo=--emake-annofile=#MAKEFILE#.emake.anno --mo=--emake-class=DFS_7x01-64 --mo=--emake-annodetail=basic,history,file,waiting --mo=--case-sensitive=0 --mo=--emake-root=G:/;\;C:\apps;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium;C:\apps\sbs</info>
+<info>Current working directory G:\</info>
+<info>Environment /S=BHTEST001</info>
+<info>Environment ABLD_TOOLSMOD_COMPATIBILITY_MODE=alpha</info>
+<info>Environment ALLUSERSPROFILE=C:\Documents and Settings\All Users</info>
+<info>Environment APTLMHOST=@oupelic4.emea.nsn-net.net</info>
+<info>Environment ARMLMD_LICENSE_FILE=8224@trelic01;8224@salmg01;28747@saslmg04;</info>
+<info>Environment ARMROOT=\</info>
+<info>Environment ARMV5VER=:ARM/Thumb C/C++ Compiler, RVCT2.2 [Build 686]</info>
+<info>Environment BASE=E:\build_e\wbernard\hudson</info>
+<info>Environment CLUSTERLOG=C:\ETPWIN\Cluster\cluster.log</info>
+<info>Environment CMTHOME=C:\APPS\cmt</info>
+<info>Environment COMMONPROGRAMFILES=C:\Program Files (x86)\Common Files</info>
+<info>Environment COMMONPROGRAMFILES(X86)=C:\Program Files (x86)\Common Files</info>
+<info>Environment COMMONPROGRAMW6432=C:\Program Files\Common Files</info>
+<info>Environment COMPUTERNAME=TRWEC090</info>
+<info>Environment COMSPEC=C:\ETPWIN\system32\cmd.exe</info>
+<info>Environment COPYCMD=/y</info>
+<info>Environment CTCHOME=C:\APPS\ctc</info>
+<info>Environment CTC_AGENT_DEBUG=*</info>
+<info>Environment CYGWIN=nontsec nosmbntsec</info>
+<info>Environment DERBY_HOME=C:\APPS\jdk_1.6.0_11\JavaDB</info>
+<info>Environment EMAKEFLAGS=--emake-reg-roots=-\HKEY_CLASSES_ROOT</info>
+<info>Environment EMAKE_CM=trwec001</info>
+<info>Environment EMAKE_EMULATION=symbian</info>
+<info>Environment EMAKE_ROOT=\;C:\apps</info>
+<info>Environment EPOCROOT=\</info>
+<info>Environment EXECUTOR_NUMBER=3</info>
+<info>Environment FLEXLM_BATCH=1</info>
+<info>Environment FLEXLM_TIMEOUT=900000</info>
+<info>Environment FP_NO_HOST_CHECK=NO</info>
+<info>Environment HELIUM_CACHE_DIR=e:\ec_temp\helium\wbernard</info>
+<info>Environment HELIUM_HOME=E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium</info>
+<info>Environment HOME=h:\</info>
+<info>Environment HOSTPLATFORM=win 32</info>
+<info>Environment HOSTPLATFORM_DIR=win32</info>
+<info>Environment INCLUDE=C:\APPS\MSVC6\VC98\ATL\Include\;C:\APPS\MSVC6\VC98\MFC\Include\;C:\APPS\MSVC6\VC98\Include\</info>
+<info>Environment JAVA_1_3_1_HOME=C:\apps\j2sdk_1.3.1_06</info>
+<info>Environment JAVA_5_HOME=C:\APPS\jdk_1.5.0_17</info>
+<info>Environment JAVA_6_HOME=C:\APPS\jdk_1.6.0_11</info>
+<info>Environment JAVA_HOME=C:\APPS\jdk_1.6.0_11</info>
+<info>Environment LIB=C:\APPS\MSVC6\VC98\MFC\Lib\;C:\APPS\MSVC6\VC98\Lib\</info>
+<info>Environment MSDEVDIR=C:\APPS\MSVC6\Common\MSDev98</info>
+<info>Environment MWCSYM2INCLUDES=C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_X86;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C++\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Headers\Win32 SDK</info>
+<info>Environment MWSYM2LIBRARIES=C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Libraries\Win32 SDK;C:\APPS\carbide\x86Build\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs</info>
+<info>Environment MWSYM2LIBRARYFILES=MSL_All_MSE_Symbian_D.lib;gdi32.lib;user32.lib;kernel32.lib;</info>
+<info>Environment NODE_NAME=trwec090</info>
+<info>Environment NUMBER_OF_PROCESSORS=12</info>
+<info>Environment OS=Windows_NT</info>
+<info>Environment PATH=C:\apps\sbs\win32\mingw\bin;C:\apps\sbs\win32\cygwin\bin;C:\apps\sbs\win32\bin;c:\apps\actperl\bin\;c:\apps\rvct22_686\bin;c:\apps\atool;\epoc32\tools;\epoc32\gcc\bin;c:\apps\ue;c:\apps\ccm65\bin;c:\apps\carbide\x86Build\Symbian_Tools\Command_Line_Tools;C:\Program Files\HP\NCU;c:\ECloud\i686_win32\bin;C:\Program Files (x86)\Windows Resource Kits\Tools\;C:\ETPWIN\system32;C:\ETPWIN;C:\ETPWIN\System32\Wbem;C:\ETPWIN\sysWOW64;C:\PROGRA~2\PuTTY;C:\APPS\MSVC6\Common\Tools\WinNT;C:\APPS\MSVC6\Common\MSDev98\Bin;C:\APPS\MSVC6\Common\Tools;C:\APPS\MSVC6\VC98\bin;C:\EESP\System32;C:\APPS\pclint;C:\APPS\cmt\;C:\APPS\ctc;C:\APPS\prevent\bin;C:\APPS\cltools;C:\APPS\symrec;C:\APPS\7zip;C:\APPS\understand\bin\pc-win95;C:\APPS\unzip;C:\APPS\jdk_1.6.0_11\bin;C:\apps\mercurial;C:\APPS\ant_1.7\bin;C:\Program Files\subversion;C:\APPS\sbs\bin;C:\APPS\actpython\.;C:\APPS\blocks\bin;C:\APPS\codescanner;C:\APPS\symdec;C:\APPS\bc;\epoc32\gcc_mingw\bin;C:\ETPWIN\system32\WindowsPowerShell\v1.0;C:\APPS\MSVC6\VC98\Bin\;C:\APPS\MSVC6\Common\Tools\;C:\APPS\MSVC6\Common\MSDev98\Bin\;\epoc32\tools;\epoc32\gcc\bin;\epoc32\tools\build;\epoc32\rombuild;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\unxutils;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\Subversion\bin;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\graphviz\bin;C:\APPS\ctc</info>
+<info>Environment PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw;.PSC1</info>
+<info>Environment PERL=C:\APPS\actperl\bin\perl.exe</info>
+<info>Environment PERL5LIB=E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium\tools\common\packages</info>
+<info>Environment PID=6932</info>
+<info>Environment PROCESSOR_ARCHITECTURE=x86</info>
+<info>Environment PROCESSOR_ARCHITEW6432=AMD64</info>
+<info>Environment PROCESSOR_IDENTIFIER=AMD64 Family 16 Model 8 Stepping 0, AuthenticAMD</info>
+<info>Environment PROCESSOR_LEVEL=16</info>
+<info>Environment PROCESSOR_REVISION=0800</info>
+<info>Environment PROGRAMFILES=C:\Program Files (x86)</info>
+<info>Environment PROGRAMFILES(X86)=C:\Program Files (x86)</info>
+<info>Environment PROGRAMW6432=C:\Program Files</info>
+<info>Environment PROMPT=$P$G</info>
+<info>Environment PSMODULEPATH=C:\ETPWIN\system32\WindowsPowerShell\v1.0\Modules\</info>
+<info>Environment PYTHONPATH=C:\apps\sbs\win32\python264</info>
+<info>Environment PYTHONVERSION=2.6</info>
+<info>Environment RVCT22BIN=C:\APPS\rvct22_686\bin</info>
+<info>Environment RVCT22INC=C:\APPS\rvct22_686\include</info>
+<info>Environment RVCT22LIB=C:\APPS\rvct22_686\lib</info>
+<info>Environment RVCT22_ASMOPT=--licretry --fastlicense --sitelicense</info>
+<info>Environment RVCT22_CCOPT=--licretry --fastlicense --sitelicense</info>
+<info>Environment RVCT22_LINKOPT=--licretry --fastlicense --sitelicense</info>
+<info>Environment SBS_CLEAN_LOG_FILE=G:\output\logs\compile/92_7952_201006_32_dfs_build_export.log.clean.log</info>
+<info>Environment SBS_HOME=C:\apps\sbs</info>
+<info>Environment SBS_PYTHON=C:\APPS\actpython\python.exe</info>
+<info>Environment SYMSEE_VERSION=11.2.0</info>
+<info>Environment SYSTEMDRIVE=C:</info>
+<info>Environment SYSTEMROOT=C:\ETPWIN</info>
+<info>Environment TEAM=helium_tampere64.92</info>
+<info>Environment TEMP=e:\ec_temp</info>
+<info>Environment TESTED_ANT=C:\APPS\ant_1.7</info>
+<info>Environment TESTED_JAVA=C:\APPS\jdk_1.6.0_11</info>
+<info>Environment TMP=e:\ec_temp</info>
+<info>Environment TMPDIR=e:\ec_tmpdir</info>
+<info>Environment WINDIR=C:\ETPWIN</info>
+<info>Environment WORKSPACE=E:\build_e\wbernard\hudson\workspace\TB92-64bit</info>
+<info>Environment _JAVACMD=C:\APPS\jdk_1.6.0_11\bin\java.exe</info>
+<info>Environment _USE_CLASSPATH=no</info>
+<info>Environment __CYGWIN__=C:\apps\sbs\win32\cygwin</info>
+<info>Environment __MINGW__=C:\apps\sbs\win32\mingw</info>
+<info>Environment __PYTHON__=C:\APPS\actpython\python.exe</info>
+<info>Duplicate alias 'make' (the one from 'G:/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/apps/sbs/lib/config\make.xml')</info>
+<info>Duplicate alias 'emake' (the one from 'G:/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/apps/sbs/lib/config\make.xml')</info>
+<info>Buildable configuration 'armv5_urel'</info>
+<info>Buildable configuration 'armv5_udeb'</info>
+<info>Buildable configuration 'winscw_udeb'</info>
+<info>Buildable configuration 'winscw_urel'</info>
+<info>System Definition file G:/output/build/canonical_system_definition_dfs_build_export.xml</info>
+<info>Found 372 bld.inf references in G:/output/build/canonical_system_definition_dfs_build_export.xml within 10 layers:</info>
+<info>	ncp_layer, mw_layer, os_layer, bldfirst_mw_layer, bldfirst_app_layer, app_layer, tools_layer, addon_layer, unit_test_layer, complementary_layer</info>
+<info>Found 95 bld.inf references in layer "ncp_layer"</info>
+<info>Found 112 bld.inf references in layer "mw_layer"</info>
+<info>Found 25 bld.inf references in layer "os_layer"</info>
+<info>Found 2 bld.inf references in layer "bldfirst_mw_layer"</info>
+<info>Found 1 bld.inf references in layer "bldfirst_app_layer"</info>
+<info>Found 98 bld.inf references in layer "app_layer"</info>
+<info>Found 3 bld.inf references in layer "tools_layer"</info>
+<info>Found 30 bld.inf references in layer "addon_layer"</info>
+<info>Found 0 bld.inf references in layer "unit_test_layer"</info>
+<info>Found 6 bld.inf references in layer "complementary_layer"</info>
+<info>Toolcheck cache G:/epoc32/build/toolcheck_cache_.tmp ignored - environment changed
+</info>
+<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "armv5_urel".</info>
+<info>'armv5_urel' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
+<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "armv5_udeb".</info>
+<info>'armv5_udeb' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
+<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "winscw_udeb".</info>
+<info>'winscw_udeb' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
+<info>OS version "vtb92sf" determined from file "G:/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "winscw_urel".</info>
+<info>'winscw_urel' uses variant hrh file 'G:/epoc32/include/feature_settings.hrh'</info>
+<info>Processing G:/sf/mw/svgt/group/bld.inf</info>
+<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h to G:/epoc32/include/platform/mw/SVGImageLoadingObserver.h</info>
+<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h to G:/epoc32/include/platform/mw/SVGEngineInterfaceImpl.h</info>
+<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SvgListener.h to G:/epoc32/include/platform/mw/SVGListener.h</info>
+<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGErrorImpl.h to G:/epoc32/include/platform/mw/SVGErrorImpl.h</info>
+<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h to G:/epoc32/include/platform/mw/SvgJavaInterfaceImpl.h</info>
+<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGHyperlinkListener.h to G:/epoc32/include/platform/mw/SVGHyperlinkListener.h</info>
+<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGAnimationListener.h to G:/epoc32/include/platform/mw/SVGAnimationListener.h</info>
+<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGRequestObserver.h to G:/epoc32/include/platform/mw/SVGRequestObserver.h</info>
+<info>Copied G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGRendererId.h to G:/epoc32/include/platform/mw/SVGRendererId.h</info>
+<info>Copied G:/sf/mw/svgt/svgt_plat/nvg_api/inc/nvg.h to G:/epoc32/include/platform/mw/nvg.h</info>
+<info>Copied G:/sf/mw/svgt/svgt_plat/nvg_api/inc/MVGImageBinder.h to G:/epoc32/include/platform/mw/MVGImageBinder.h</info>
+<info>Copied G:/sf/mw/svgt/svgt_plat/nvg_api/inc/NVGIcon.h to G:/epoc32/include/platform/mw/NVGIcon.h</info>
+<info>Copied G:/sf/mw/svgt/svgtopt/rom/SVGEngine.iby to G:/epoc32/rom/include/core/mw/SVGEngine.iby</info>
+<info>Copied G:/sf/mw/svgt/svgtopt/rom/SvgtPluginEcom.iby to G:/epoc32/rom/include/core/mw/SvgtPluginEcom.iby</info>
+<info>Copied G:/sf/mw/svgt/svgtopt/rom/nvgdecoder.iby to G:/epoc32/rom/include/core/mw/NVGDecoder.iby</info>
+<info>Copied G:/sf/mw/svgt/svgtopt/rom/NVGDecoder_SW.iby to G:/epoc32/rom/include/core/mw/NVGDecoder_SW.iby</info>
+<info>Copied G:/sf/mw/svgt/svgtopt/rom/VGRenderer.iby to G:/epoc32/rom/include/core/mw/VGRenderer.iby</info>
+<whatlog bldinf='G:/sf/mw/svgt/group/bld.inf' mmp='' config=''>
+<export destination='G:/epoc32/include/platform/mw/SVGImageLoadingObserver.h' source='G:/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h'/>
+<resource>G:/epoc32/include/hrv_gain_mappings.rsg</resource>
+<build>G:/epoc32/release/armv5/urel/ekeyb.dll</build>
+</whatlog>
+<clean bldinf='G:/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
+<zipmarker>G:/epoc32/build/G__sf_os_deviceplatformrelease_locfiles_data_65.zipG__epoc32_include_platform_loc.unzipped</zipmarker>
+</clean>
+<whatlog bldinf='G:/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
+<archive zipfile='G:/sf/os/deviceplatformrelease/locfiles/data/65.zip'>
+<member>G:/epoc32/include/platform/loc/65/101f6dd6_65.loc</member>
+<member>G:/epoc32/include/platform/loc/65/101f6dd7_65.loc</member>
+</archive>
+</whatlog>
+<info>The make-engine exited successfully.</info>
+<info>Run time 999 seconds</info>
+<info>Created/Updated toolcheck cache: G:/epoc32/build/toolcheck_cache_.tmp
+</info>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/categorization.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.9.2 [2009-09-21 sf 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">
+<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp'>
+<![CDATA[
++ C:/APPS/rvct22_616/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="X:/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -D__DLL__ --preinclude X:/epoc32/include/rvct/rvct.h -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/inc -JX:/sf/app/organizer/searchui/searchapp/inc -JX:/sf/app/organizer/searchui/searchapp/SrchUICommon/inc -JX:/epoc32/ -JX:/epoc32/include/config/platform -JX:/epoc32/include/baseport -JX:/epoc32/include -JX:/epoc32/include/ecom -JX:/epoc32/include -JX:/epoc32/include/mw -JX:/epoc32/include/platform/mw -JX:/epoc32/include/platform -JX:/epoc32/include/app -JX:/epoc32/include/platform/app -JX:/epoc32/include/platform/loc -JX:/epoc32/include/platform/mw/loc -JX:/epoc32/include/platform/app/loc -JX:/epoc32/include/platform/loc/sc -JX:/epoc32/include/platform/mw/loc/sc -JX:/epoc32/include/platform/app/loc/sc --depend_format=unix --depend X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o.d -o X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp
+"X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp", line 339: Error:  #20: identifier "KSEARCH_HLP_SINGLE_RE" is undefined
+          	helpContext.iContext = KSEARCH_HLP_SINGLE_RE; // add correct help context when available
+          	                       ^
+X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp: 0 warnings, 1 error
+
+]]><time start='1253718692.38008' elapsed='1.094' />
+<status exit='failed' code='1' attempt='3' />
+</recipe>
+make: *** [X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o] Error 1
+<clean bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_udeb.product'>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll</file>
+<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.def"</file>
+<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.dso"</file>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.sym</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin_udeb_objects.via</file>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.map</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.sym</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.map</file>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb</dir>
+<dir>X:/epoc32/release/armv5/udeb</dir>
+<dir>X:/epoc32/release/armv5/lib</dir>
+<dir>X:/epoc32/release/armv5/lib</dir>
+<dir>X:/epoc32/release/armv5.product/udeb</dir>
+</clean>
+<info>Run time 226 seconds</info>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/categorization_compile.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.9.2 [2009-09-21 sf 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">
+<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp'>
+<![CDATA[
++ C:/APPS/rvct22_616/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="X:/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -D__DLL__ --preinclude X:/epoc32/include/rvct/rvct.h -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/inc -JX:/sf/app/organizer/searchui/searchapp/inc -JX:/sf/app/organizer/searchui/searchapp/SrchUICommon/inc -JX:/epoc32/ -JX:/epoc32/include/config/platform -JX:/epoc32/include/baseport -JX:/epoc32/include -JX:/epoc32/include/ecom -JX:/epoc32/include -JX:/epoc32/include/mw -JX:/epoc32/include/platform/mw -JX:/epoc32/include/platform -JX:/epoc32/include/app -JX:/epoc32/include/platform/app -JX:/epoc32/include/platform/loc -JX:/epoc32/include/platform/mw/loc -JX:/epoc32/include/platform/app/loc -JX:/epoc32/include/platform/loc/sc -JX:/epoc32/include/platform/mw/loc/sc -JX:/epoc32/include/platform/app/loc/sc --depend_format=unix --depend X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o.d -o X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp
+"X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp", line 339: Error:  #20: identifier "KSEARCH_HLP_SINGLE_RE" is undefined
+          	helpContext.iContext = KSEARCH_HLP_SINGLE_RE; // add correct help context when available
+          	                       ^
+X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp: 0 warnings, 1 error
+
+]]><time start='1253718692.38008' elapsed='1.094' />
+<status exit='failed' code='1' attempt='3' />
+</recipe>
+make: *** [X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o] Error 1
+<clean bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_udeb.product'>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll</file>
+<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.def"</file>
+<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.dso"</file>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.sym</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin_udeb_objects.via</file>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.map</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.sym</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.map</file>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb</dir>
+<dir>X:/epoc32/release/armv5/udeb</dir>
+<dir>X:/epoc32/release/armv5/lib</dir>
+<dir>X:/epoc32/release/armv5/lib</dir>
+<dir>X:/epoc32/release/armv5.product/udeb</dir>
+</clean>
+<info>Run time 226 seconds</info>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/categorization_error_after_compile.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.9.2 [2009-09-21 sf 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">
+<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp'>
+<![CDATA[
++ C:/APPS/rvct22_616/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="X:/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -D__DLL__ --preinclude X:/epoc32/include/rvct/rvct.h -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/inc -JX:/sf/app/organizer/searchui/searchapp/inc -JX:/sf/app/organizer/searchui/searchapp/SrchUICommon/inc -JX:/epoc32/ -JX:/epoc32/include/config/platform -JX:/epoc32/include/baseport -JX:/epoc32/include -JX:/epoc32/include/ecom -JX:/epoc32/include -JX:/epoc32/include/mw -JX:/epoc32/include/platform/mw -JX:/epoc32/include/platform -JX:/epoc32/include/app -JX:/epoc32/include/platform/app -JX:/epoc32/include/platform/loc -JX:/epoc32/include/platform/mw/loc -JX:/epoc32/include/platform/app/loc -JX:/epoc32/include/platform/loc/sc -JX:/epoc32/include/platform/mw/loc/sc -JX:/epoc32/include/platform/app/loc/sc --depend_format=unix --depend X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o.d -o X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp
+"X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp", line 339: Error:  #20: identifier "KSEARCH_HLP_SINGLE_RE" is undefined
+          	helpContext.iContext = KSEARCH_HLP_SINGLE_RE; // add correct help context when available
+          	                       ^
+X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp: 0 warnings, 1 error
+
+]]><time start='1253718692.38008' elapsed='1.094' />
+<status exit='failed' code='1' attempt='3' />
+</recipe>
+<clean bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_udeb.product'>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll</file>
+<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.def"</file>
+<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.dso"</file>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.sym</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin_udeb_objects.via</file>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.map</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.sym</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.map</file>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb</dir>
+<dir>X:/epoc32/release/armv5/udeb</dir>
+<dir>X:/epoc32/release/armv5/lib</dir>
+<dir>X:/epoc32/release/armv5/lib</dir>
+<dir>X:/epoc32/release/armv5.product/udeb</dir>
+</clean>
+make: *** [X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o] Error 1
+<info>Run time 226 seconds</info>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/categorization_failed_empty_recipe.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.9.2 [2009-09-21 sf 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">
+<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview2.cpp'>
+<![CDATA[
+]]><time start='1253718692.38008' elapsed='1.094' />
+<status exit='failed' code='1' attempt='3' />
+</recipe>
+make: *** [X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o] Error 1
+<clean bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_udeb.product'>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll</file>
+<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.def"</file>
+<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.dso"</file>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.sym</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin_udeb_objects.via</file>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.map</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.sym</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.map</file>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb</dir>
+<dir>X:/epoc32/release/armv5/udeb</dir>
+<dir>X:/epoc32/release/armv5/lib</dir>
+<dir>X:/epoc32/release/armv5/lib</dir>
+<dir>X:/epoc32/release/armv5.product/udeb</dir>
+</clean>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/categorization_failed_error_in_recipe.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.9.2 [2009-09-21 sf 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">
+<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview2.cpp'>
+<![CDATA[
+ERROR: only this error should be counted 
+]]><time start='1253718692.38008' elapsed='1.094' />
+<status exit='failed' code='1' attempt='3' />
+</recipe>
+make: *** [X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o] Error 1
+<clean bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_udeb.product'>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll</file>
+<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.def"</file>
+<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.dso"</file>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.sym</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin_udeb_objects.via</file>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.map</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.sym</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.map</file>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb</dir>
+<dir>X:/epoc32/release/armv5/udeb</dir>
+<dir>X:/epoc32/release/armv5/lib</dir>
+<dir>X:/epoc32/release/armv5/lib</dir>
+<dir>X:/epoc32/release/armv5.product/udeb</dir>
+</clean>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/invalid_xml_log_format.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.9.2 [2009-09-21 sf 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">
+<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp'>
+<![CDATA[
++ C:/APPS/rvct22_616/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="X:/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -D__DLL__ --preinclude X:/epoc32/include/rvct/rvct.h -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src -JX:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/inc -JX:/sf/app/organizer/searchui/searchapp/inc -JX:/sf/app/organizer/searchui/searchapp/SrchUICommon/inc -JX:/epoc32/ -JX:/epoc32/include/config/platform -JX:/epoc32/include/baseport -JX:/epoc32/include -JX:/epoc32/include/ecom -JX:/epoc32/include -JX:/epoc32/include/mw -JX:/epoc32/include/platform/mw -JX:/epoc32/include/platform -JX:/epoc32/include/app -JX:/epoc32/include/platform/app -JX:/epoc32/include/platform/loc -JX:/epoc32/include/platform/mw/loc -JX:/epoc32/include/platform/app/loc -JX:/epoc32/include/platform/loc/sc -JX:/epoc32/include/platform/mw/loc/sc -JX:/epoc32/include/platform/app/loc/sc --depend_format=unix --depend X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o.d -o X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp
+"X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp", line 339: Error:  #20: identifier "KSEARCH_HLP_SINGLE_RE" is undefined
+          	helpContext.iContext = KSEARCH_HLP_SINGLE_RE; // add correct help context when available
+          	                       ^
+X:\sf\app\organizer\searchui\searchapp\plugins\resultviewerplugin\src\srchuiresultview.cpp: 0 warnings, 1 error
+
+]]><time start='1253718692.38008' elapsed='1.094' />
+<error>
+<status exit='failed' code='1' attempt='3' />
+</recipe>
+make: *** [X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o] Error 1
+<clean bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_udeb.product'>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll</file>
+<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.def"</file>
+<file>"X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin{000a0000}.dso"</file>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.sym</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresviewplugin_udeb_objects.via</file>
+<file>X:/epoc32/release/armv5/udeb/srchuiresviewplugin.dll.map</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o.d</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultview.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultcontainer.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/srchuiresultmodel.o</file>
+<file>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb/proxy.o</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.sym</file>
+<file>X:/epoc32/release/armv5.product/udeb/srchuiresviewplugin.dll.map</file>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5</dir>
+<dir>X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/udeb</dir>
+<dir>X:/epoc32/release/armv5/udeb</dir>
+<dir>X:/epoc32/release/armv5/lib</dir>
+<dir>X:/epoc32/release/armv5/lib</dir>
+<dir>X:/epoc32/release/armv5.product/udeb</dir>
+</clean>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/metadatacount_error_and_missing_files.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.12.3 [2010-02-23 symbian build system 007900c31eef]" xmlns="http://symbian.com/xml/build/log" xmlns:progress="http://symbian.com/xml/build/log/progress" 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.12.3 [2010-02-23 symbian build system 007900c31eef]
+</info>
+<info>SBS_HOME C:/apps/sbs</info>
+<info>Set-up C:/apps/sbs/sbs_init.xml</info>
+<info>Command-line-arguments -s G:\output\build\canonical_system_definition_dfs_build_export.xml --filters=FilterMetadataLog -k --logfile G:\output\logs\compile/92_7952_201006_32_dfs_build_export.log --makefile=G:\output\logs/makefile/92_7952_201006_32_dfs_build_export --export-only -e emake --mo=--emake-emulation=gmake --mo=--emake-annofile=#MAKEFILE#.emake.anno --mo=--emake-class=DFS_7x01-64 --mo=--emake-annodetail=basic,history,file,waiting --mo=--case-sensitive=0 --mo=--emake-root=G:/unexisting_sdk/;\;C:\apps;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium;C:\apps\sbs</info>
+<info>Current working directory G:\</info>
+<info>Environment ABLD_TOOLSMOD_COMPATIBILITY_MODE=alpha</info>
+<info>Environment ALLUSERSPROFILE=C:\Documents and Settings\All Users</info>
+<info>Environment ARMROOT=\</info>
+<info>Environment ARMV5VER=:ARM/Thumb C/C++ Compiler, RVCT2.2 [Build 686]</info>
+<info>Environment CLUSTERLOG=C:\ETPWIN\Cluster\cluster.log</info>
+<info>Environment CMTHOME=C:\APPS\cmt</info>
+<info>Environment COMMONPROGRAMFILES=C:\Program Files (x86)\Common Files</info>
+<info>Environment COMMONPROGRAMFILES(X86)=C:\Program Files (x86)\Common Files</info>
+<info>Environment COMMONPROGRAMW6432=C:\Program Files\Common Files</info>
+<info>Environment COMPUTERNAME=TRWEC090</info>
+<info>Environment COMSPEC=C:\ETPWIN\system32\cmd.exe</info>
+<info>Environment COPYCMD=/y</info>
+<info>Environment CTCHOME=C:\APPS\ctc</info>
+<info>Environment CTC_AGENT_DEBUG=*</info>
+<info>Environment CYGWIN=nontsec nosmbntsec</info>
+<info>Environment DERBY_HOME=C:\APPS\jdk_1.6.0_11\JavaDB</info>
+<info>Environment EMAKEFLAGS=--emake-reg-roots=-\HKEY_CLASSES_ROOT</info>
+<info>Environment EMAKE_CM=trwec001</info>
+<info>Environment EMAKE_EMULATION=symbian</info>
+<info>Environment EMAKE_ROOT=\;C:\apps</info>
+<info>Environment EPOCROOT=\</info>
+<info>Environment EXECUTOR_NUMBER=3</info>
+<info>Environment FLEXLM_BATCH=1</info>
+<info>Environment FLEXLM_TIMEOUT=900000</info>
+<info>Environment FP_NO_HOST_CHECK=NO</info>
+<info>Environment HELIUM_CACHE_DIR=e:\ec_temp\helium\user</info>
+<info>Environment HELIUM_HOME=E:\build_e\user\hudson\workspace\TB92-64bit\helium-svn\helium</info>
+<info>Environment HOME=h:\</info>
+<info>Environment HOSTPLATFORM=win 32</info>
+<info>Environment HOSTPLATFORM_DIR=win32</info>
+<info>Environment INCLUDE=C:\APPS\MSVC6\VC98\ATL\Include\;C:\APPS\MSVC6\VC98\MFC\Include\;C:\APPS\MSVC6\VC98\Include\</info>
+<info>Environment JAVA_1_3_1_HOME=C:\apps\j2sdk_1.3.1_06</info>
+<info>Environment JAVA_5_HOME=C:\APPS\jdk_1.5.0_17</info>
+<info>Environment JAVA_6_HOME=C:\APPS\jdk_1.6.0_11</info>
+<info>Environment JAVA_HOME=C:\APPS\jdk_1.6.0_11</info>
+<info>Environment LIB=C:\APPS\MSVC6\VC98\MFC\Lib\;C:\APPS\MSVC6\VC98\Lib\</info>
+<info>Environment MSDEVDIR=C:\APPS\MSVC6\Common\MSDev98</info>
+<info>Environment MWCSYM2INCLUDES=C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_X86;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C++\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Headers\Win32 SDK</info>
+<info>Environment MWSYM2LIBRARIES=C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Libraries\Win32 SDK;C:\APPS\carbide\x86Build\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs</info>
+<info>Environment MWSYM2LIBRARYFILES=MSL_All_MSE_Symbian_D.lib;gdi32.lib;user32.lib;kernel32.lib;</info>
+<info>Environment NODE_NAME=trwec090</info>
+<info>Environment NUMBER_OF_PROCESSORS=12</info>
+<info>Environment OS=Windows_NT</info>
+<info>Environment PATH=C:\apps\sbs\win32\mingw\bin;C:\apps\sbs\win32\cygwin\bin;C:\apps\sbs\win32\bin;c:\apps\actperl\bin\;c:\apps\rvct22_686\bin;c:\apps\atool;\epoc32\tools;\epoc32\gcc\bin;c:\apps\ue;c:\apps\ccm65\bin;c:\apps\carbide\x86Build\Symbian_Tools\Command_Line_Tools;C:\Program Files\HP\NCU;c:\ECloud\i686_win32\bin;C:\Program Files (x86)\Windows Resource Kits\Tools\;C:\ETPWIN\system32;C:\ETPWIN;C:\ETPWIN\System32\Wbem;C:\ETPWIN\sysWOW64;C:\PROGRA~2\PuTTY;C:\APPS\MSVC6\Common\Tools\WinNT;C:\APPS\MSVC6\Common\MSDev98\Bin;C:\APPS\MSVC6\Common\Tools;C:\APPS\MSVC6\VC98\bin;C:\EESP\System32;C:\APPS\pclint;C:\APPS\cmt\;C:\APPS\ctc;C:\APPS\prevent\bin;C:\APPS\cltools;C:\APPS\symrec;C:\APPS\7zip;C:\APPS\understand\bin\pc-win95;C:\APPS\unzip;C:\APPS\jdk_1.6.0_11\bin;C:\apps\mercurial;C:\APPS\ant_1.7\bin;C:\Program Files\subversion;C:\APPS\sbs\bin;C:\APPS\actpython\.;C:\APPS\blocks\bin;C:\APPS\codescanner;C:\APPS\symdec;C:\APPS\bc;\epoc32\gcc_mingw\bin;C:\ETPWIN\system32\WindowsPowerShell\v1.0;C:\APPS\MSVC6\VC98\Bin\;C:\APPS\MSVC6\Common\Tools\;C:\APPS\MSVC6\Common\MSDev98\Bin\;\epoc32\tools;\epoc32\gcc\bin;\epoc32\tools\build;\epoc32\rombuild;E:\build_e\user\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\unxutils;E:\build_e\user\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\Subversion\bin;E:\build_e\user\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\graphviz\bin;C:\APPS\ctc</info>
+<info>Environment PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw;.PSC1</info>
+<info>Environment PERL=C:\APPS\actperl\bin\perl.exe</info>
+<info>Environment PERL5LIB=E:\build_e\user\hudson\workspace\TB92-64bit\helium-svn\helium\tools\common\packages</info>
+<info>Environment PID=6932</info>
+<info>Environment PROCESSOR_ARCHITECTURE=x86</info>
+<info>Environment PROCESSOR_ARCHITEW6432=AMD64</info>
+<info>Environment PROCESSOR_IDENTIFIER=AMD64 Family 16 Model 8 Stepping 0, AuthenticAMD</info>
+<info>Environment PROCESSOR_LEVEL=16</info>
+<info>Environment PROCESSOR_REVISION=0800</info>
+<info>Environment PROGRAMFILES=C:\Program Files (x86)</info>
+<info>Environment PROGRAMFILES(X86)=C:\Program Files (x86)</info>
+<info>Environment PROGRAMW6432=C:\Program Files</info>
+<info>Environment PROMPT=$P$G</info>
+<info>Environment PSMODULEPATH=C:\ETPWIN\system32\WindowsPowerShell\v1.0\Modules\</info>
+<info>Environment PYTHONPATH=C:\apps\sbs\win32\python264</info>
+<info>Environment PYTHONVERSION=2.6</info>
+<info>Environment RVCT22BIN=C:\APPS\rvct22_686\bin</info>
+<info>Environment RVCT22INC=C:\APPS\rvct22_686\include</info>
+<info>Environment RVCT22LIB=C:\APPS\rvct22_686\lib</info>
+<info>Environment RVCT22_ASMOPT=--licretry --fastlicense --sitelicense</info>
+<info>Environment RVCT22_CCOPT=--licretry --fastlicense --sitelicense</info>
+<info>Environment RVCT22_LINKOPT=--licretry --fastlicense --sitelicense</info>
+<info>Environment SBS_CLEAN_LOG_FILE=G:\output\logs\compile/92_7952_201006_32_dfs_build_export.log.clean.log</info>
+<info>Environment SBS_HOME=C:\apps\sbs</info>
+<info>Environment SBS_PYTHON=C:\APPS\actpython\python.exe</info>
+<info>Environment SYMSEE_VERSION=11.2.0</info>
+<info>Environment SYSTEMDRIVE=C:</info>
+<info>Environment SYSTEMROOT=C:\ETPWIN</info>
+<info>Environment TEAM=helium_tampere64.92</info>
+<info>Environment TEMP=e:\ec_temp</info>
+<info>Environment TESTED_ANT=C:\APPS\ant_1.7</info>
+<info>Environment TESTED_JAVA=C:\APPS\jdk_1.6.0_11</info>
+<info>Environment TMP=e:\ec_temp</info>
+<info>Environment TMPDIR=e:\ec_tmpdir</info>
+<info>Environment WINDIR=C:\ETPWIN</info>
+<info>Environment WORKSPACE=E:\build_e\user\hudson\workspace\TB92-64bit</info>
+<info>Environment _JAVACMD=C:\APPS\jdk_1.6.0_11\bin\java.exe</info>
+<info>Environment _USE_CLASSPATH=no</info>
+<info>Environment __CYGWIN__=C:\apps\sbs\win32\cygwin</info>
+<info>Environment __MINGW__=C:\apps\sbs\win32\mingw</info>
+<info>Environment __PYTHON__=C:\APPS\actpython\python.exe</info>
+<info>Duplicate alias 'make' (the one from 'G:/unexisting_sdk/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/apps/sbs/lib/config\make.xml')</info>
+<info>Duplicate alias 'emake' (the one from 'G:/unexisting_sdk/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/apps/sbs/lib/config\make.xml')</info>
+<info>Buildable configuration 'armv5_urel'</info>
+<info>Buildable configuration 'armv5_udeb'</info>
+<info>Buildable configuration 'winscw_udeb'</info>
+<info>Buildable configuration 'winscw_urel'</info>
+<info>System Definition file G:/unexisting_sdk/output/build/canonical_system_definition_dfs_build_export.xml</info>
+<info>Found 372 bld.inf references in G:/unexisting_sdk/output/build/canonical_system_definition_dfs_build_export.xml within 10 layers:</info>
+<info>	ncp_layer, mw_layer, os_layer, bldfirst_mw_layer, bldfirst_app_layer, app_layer, tools_layer, addon_layer, unit_test_layer, complementary_layer</info>
+<info>Found 95 bld.inf references in layer "ncp_layer"</info>
+<info>Found 112 bld.inf references in layer "mw_layer"</info>
+<info>Found 25 bld.inf references in layer "os_layer"</info>
+<info>Found 2 bld.inf references in layer "bldfirst_mw_layer"</info>
+<info>Found 1 bld.inf references in layer "bldfirst_app_layer"</info>
+<info>Found 98 bld.inf references in layer "app_layer"</info>
+<info>Found 3 bld.inf references in layer "tools_layer"</info>
+<info>Found 30 bld.inf references in layer "addon_layer"</info>
+<info>Found 0 bld.inf references in layer "unit_test_layer"</info>
+<info>Found 6 bld.inf references in layer "complementary_layer"</info>
+<info>Toolcheck cache G:/unexisting_sdk/epoc32/build/toolcheck_cache_.tmp ignored - environment changed
+</info>
+<info>OS version "vtb92sf" determined from file "G:/unexisting_sdk/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "armv5_urel".</info>
+<info>'armv5_urel' uses variant hrh file 'G:/unexisting_sdk/epoc32/include/feature_settings.hrh'</info>
+<info>OS version "vtb92sf" determined from file "G:/unexisting_sdk/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "armv5_udeb".</info>
+<info>'armv5_udeb' uses variant hrh file 'G:/unexisting_sdk/epoc32/include/feature_settings.hrh'</info>
+<info>OS version "vtb92sf" determined from file "G:/unexisting_sdk/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "winscw_udeb".</info>
+<info>'winscw_udeb' uses variant hrh file 'G:/unexisting_sdk/epoc32/include/feature_settings.hrh'</info>
+<info>OS version "vtb92sf" determined from file "G:/unexisting_sdk/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "winscw_urel".</info>
+<info>'winscw_urel' uses variant hrh file 'G:/unexisting_sdk/epoc32/include/feature_settings.hrh'</info>
+<info>Processing G:/unexisting_sdk/sf/mw/svgt/group/bld.inf</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGImageLoadingObserver.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGEngineInterfaceImpl.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SvgListener.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGListener.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGErrorImpl.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGErrorImpl.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h to G:/unexisting_sdk/epoc32/include/platform/mw/SvgJavaInterfaceImpl.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGHyperlinkListener.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGHyperlinkListener.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGAnimationListener.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGAnimationListener.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGRequestObserver.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGRequestObserver.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGRendererId.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGRendererId.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/nvg_api/inc/nvg.h to G:/unexisting_sdk/epoc32/include/platform/mw/nvg.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/nvg_api/inc/MVGImageBinder.h to G:/unexisting_sdk/epoc32/include/platform/mw/MVGImageBinder.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/nvg_api/inc/NVGIcon.h to G:/unexisting_sdk/epoc32/include/platform/mw/NVGIcon.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgtopt/rom/SVGEngine.iby to G:/unexisting_sdk/epoc32/rom/include/core/mw/SVGEngine.iby</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgtopt/rom/SvgtPluginEcom.iby to G:/unexisting_sdk/epoc32/rom/include/core/mw/SvgtPluginEcom.iby</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgtopt/rom/nvgdecoder.iby to G:/unexisting_sdk/epoc32/rom/include/core/mw/NVGDecoder.iby</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgtopt/rom/NVGDecoder_SW.iby to G:/unexisting_sdk/epoc32/rom/include/core/mw/NVGDecoder_SW.iby</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgtopt/rom/VGRenderer.iby to G:/unexisting_sdk/epoc32/rom/include/core/mw/VGRenderer.iby</info>
+<whatlog bldinf='G:/unexisting_sdk/sf/mw/svgt/group/bld.inf' mmp='' config=''>
+<export destination='G:/unexisting_sdk/epoc32/include/platform/mw/SVGImageLoadingObserver.h' source='G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h'/>
+<resource>G:/unexisting_sdk/epoc32/include/hrv_gain_mappings.rsg</resource>
+<build>G:/unexisting_sdk/epoc32/release/armv5/urel/ekeyb.dll</build>
+</whatlog>
+<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='X:/sf/app/organizer/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview2.cpp'>
+<![CDATA[
+]]><time start='1253718692.38008' elapsed='1.094' />
+<status exit='failed' code='1' attempt='3' />
+</recipe>
+<clean bldinf='G:/unexisting_sdk/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
+<zipmarker>G:/unexisting_sdk/epoc32/build/G__sf_os_deviceplatformrelease_locfiles_data_65.zipG__epoc32_include_platform_loc.unzipped</zipmarker>
+</clean>
+<whatlog bldinf='G:/unexisting_sdk/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
+<archive zipfile='G:/unexisting_sdk/sf/os/deviceplatformrelease/locfiles/data/65.zip'>
+<member>G:/unexisting_sdk/epoc32/include/platform/loc/65/101f6dd6_65.loc</member>
+<member>G:/unexisting_sdk/epoc32/include/platform/loc/65/101f6dd7_65.loc</member>
+</archive>
+</whatlog>
+<info>The make-engine exited successfully.</info>
+<info>Run time 999 seconds</info>
+<info>Created/Updated toolcheck cache: G:/unexisting_sdk/epoc32/build/toolcheck_cache_.tmp
+</info>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/metadatacount_missing_files.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.12.3 [2010-02-23 symbian build system 007900c31eef]" xmlns="http://symbian.com/xml/build/log" xmlns:progress="http://symbian.com/xml/build/log/progress" 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.12.3 [2010-02-23 symbian build system 007900c31eef]
+</info>
+<info>SBS_HOME C:/apps/sbs</info>
+<info>Set-up C:/apps/sbs/sbs_init.xml</info>
+<info>Command-line-arguments -s G:\output\build\canonical_system_definition_dfs_build_export.xml --filters=FilterMetadataLog -k --logfile G:\output\logs\compile/92_7952_201006_32_dfs_build_export.log --makefile=G:\output\logs/makefile/92_7952_201006_32_dfs_build_export --export-only -e emake --mo=--emake-emulation=gmake --mo=--emake-annofile=#MAKEFILE#.emake.anno --mo=--emake-class=DFS_7x01-64 --mo=--emake-annodetail=basic,history,file,waiting --mo=--case-sensitive=0 --mo=--emake-root=G:/unexisting_sdk/;\;C:\apps;E:\build_e\wbernard\hudson\workspace\TB92-64bit\helium-svn\helium;C:\apps\sbs</info>
+<info>Current working directory G:\</info>
+<info>Environment /S=BHTEST001</info>
+<info>Environment ABLD_TOOLSMOD_COMPATIBILITY_MODE=alpha</info>
+<info>Environment ALLUSERSPROFILE=C:\Documents and Settings\All Users</info>
+<info>Environment ARMROOT=\</info>
+<info>Environment ARMV5VER=:ARM/Thumb C/C++ Compiler, RVCT2.2 [Build 686]</info>
+<info>Environment BASE=E:\build_e\user\hudson</info>
+<info>Environment CLUSTERLOG=C:\ETPWIN\Cluster\cluster.log</info>
+<info>Environment CMTHOME=C:\APPS\cmt</info>
+<info>Environment COMMONPROGRAMFILES=C:\Program Files (x86)\Common Files</info>
+<info>Environment COMMONPROGRAMFILES(X86)=C:\Program Files (x86)\Common Files</info>
+<info>Environment COMMONPROGRAMW6432=C:\Program Files\Common Files</info>
+<info>Environment COMPUTERNAME=TRWEC090</info>
+<info>Environment COMSPEC=C:\ETPWIN\system32\cmd.exe</info>
+<info>Environment COPYCMD=/y</info>
+<info>Environment CTCHOME=C:\APPS\ctc</info>
+<info>Environment CTC_AGENT_DEBUG=*</info>
+<info>Environment CYGWIN=nontsec nosmbntsec</info>
+<info>Environment DERBY_HOME=C:\APPS\jdk_1.6.0_11\JavaDB</info>
+<info>Environment EMAKEFLAGS=--emake-reg-roots=-\HKEY_CLASSES_ROOT</info>
+<info>Environment EMAKE_CM=trwec001</info>
+<info>Environment EMAKE_EMULATION=symbian</info>
+<info>Environment EMAKE_ROOT=\;C:\apps</info>
+<info>Environment EPOCROOT=\</info>
+<info>Environment EXECUTOR_NUMBER=3</info>
+<info>Environment FLEXLM_BATCH=1</info>
+<info>Environment FLEXLM_TIMEOUT=900000</info>
+<info>Environment FP_NO_HOST_CHECK=NO</info>
+<info>Environment HELIUM_CACHE_DIR=e:\ec_temp\helium\user</info>
+<info>Environment HELIUM_HOME=E:\build_e\user\hudson\workspace\TB92-64bit\helium-svn\helium</info>
+<info>Environment HOME=h:\</info>
+<info>Environment HOSTPLATFORM=win 32</info>
+<info>Environment HOSTPLATFORM_DIR=win32</info>
+<info>Environment INCLUDE=C:\APPS\MSVC6\VC98\ATL\Include\;C:\APPS\MSVC6\VC98\MFC\Include\;C:\APPS\MSVC6\VC98\Include\</info>
+<info>Environment JAVA_1_3_1_HOME=C:\apps\j2sdk_1.3.1_06</info>
+<info>Environment JAVA_5_HOME=C:\APPS\jdk_1.5.0_17</info>
+<info>Environment JAVA_6_HOME=C:\APPS\jdk_1.6.0_11</info>
+<info>Environment JAVA_HOME=C:\APPS\jdk_1.6.0_11</info>
+<info>Environment LIB=C:\APPS\MSVC6\VC98\MFC\Lib\;C:\APPS\MSVC6\VC98\Lib\</info>
+<info>Environment MSDEVDIR=C:\APPS\MSVC6\Common\MSDev98</info>
+<info>Environment MWCSYM2INCLUDES=C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_X86;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C++\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Headers\Win32 SDK</info>
+<info>Environment MWSYM2LIBRARIES=C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Libraries\Win32 SDK;C:\APPS\carbide\x86Build\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs</info>
+<info>Environment MWSYM2LIBRARYFILES=MSL_All_MSE_Symbian_D.lib;gdi32.lib;user32.lib;kernel32.lib;</info>
+<info>Environment NODE_NAME=trwec090</info>
+<info>Environment NUMBER_OF_PROCESSORS=12</info>
+<info>Environment OS=Windows_NT</info>
+<info>Environment PATH=C:\apps\sbs\win32\mingw\bin;C:\apps\sbs\win32\cygwin\bin;C:\apps\sbs\win32\bin;c:\apps\actperl\bin\;c:\apps\rvct22_686\bin;c:\apps\atool;\epoc32\tools;\epoc32\gcc\bin;c:\apps\ue;c:\apps\ccm65\bin;c:\apps\carbide\x86Build\Symbian_Tools\Command_Line_Tools;C:\Program Files\HP\NCU;c:\ECloud\i686_win32\bin;C:\Program Files (x86)\Windows Resource Kits\Tools\;C:\ETPWIN\system32;C:\ETPWIN;C:\ETPWIN\System32\Wbem;C:\ETPWIN\sysWOW64;C:\PROGRA~2\PuTTY;C:\APPS\MSVC6\Common\Tools\WinNT;C:\APPS\MSVC6\Common\MSDev98\Bin;C:\APPS\MSVC6\Common\Tools;C:\APPS\MSVC6\VC98\bin;C:\EESP\System32;C:\APPS\pclint;C:\APPS\cmt\;C:\APPS\ctc;C:\APPS\prevent\bin;C:\APPS\cltools;C:\APPS\symrec;C:\APPS\7zip;C:\APPS\understand\bin\pc-win95;C:\APPS\unzip;C:\APPS\jdk_1.6.0_11\bin;C:\apps\mercurial;C:\APPS\ant_1.7\bin;C:\Program Files\subversion;C:\APPS\sbs\bin;C:\APPS\actpython\.;C:\APPS\blocks\bin;C:\APPS\codescanner;C:\APPS\symdec;C:\APPS\bc;\epoc32\gcc_mingw\bin;C:\ETPWIN\system32\WindowsPowerShell\v1.0;C:\APPS\MSVC6\VC98\Bin\;C:\APPS\MSVC6\Common\Tools\;C:\APPS\MSVC6\Common\MSDev98\Bin\;\epoc32\tools;\epoc32\gcc\bin;\epoc32\tools\build;\epoc32\rombuild;E:\build_e\user\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\unxutils;E:\build_e\user\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\Subversion\bin;E:\build_e\user\hudson\workspace\TB92-64bit\helium-svn\helium\extensions\nokia\external\graphviz\bin;C:\APPS\ctc</info>
+<info>Environment PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw;.PSC1</info>
+<info>Environment PERL=C:\APPS\actperl\bin\perl.exe</info>
+<info>Environment PERL5LIB=E:\build_e\user\hudson\workspace\TB92-64bit\helium-svn\helium\tools\common\packages</info>
+<info>Environment PID=6932</info>
+<info>Environment PROCESSOR_ARCHITECTURE=x86</info>
+<info>Environment PROCESSOR_ARCHITEW6432=AMD64</info>
+<info>Environment PROCESSOR_IDENTIFIER=AMD64 Family 16 Model 8 Stepping 0, AuthenticAMD</info>
+<info>Environment PROCESSOR_LEVEL=16</info>
+<info>Environment PROCESSOR_REVISION=0800</info>
+<info>Environment PROGRAMFILES=C:\Program Files (x86)</info>
+<info>Environment PROGRAMFILES(X86)=C:\Program Files (x86)</info>
+<info>Environment PROGRAMW6432=C:\Program Files</info>
+<info>Environment PROMPT=$P$G</info>
+<info>Environment PSMODULEPATH=C:\ETPWIN\system32\WindowsPowerShell\v1.0\Modules\</info>
+<info>Environment PYTHONPATH=C:\apps\sbs\win32\python264</info>
+<info>Environment PYTHONVERSION=2.6</info>
+<info>Environment RVCT22BIN=C:\APPS\rvct22_686\bin</info>
+<info>Environment RVCT22INC=C:\APPS\rvct22_686\include</info>
+<info>Environment RVCT22LIB=C:\APPS\rvct22_686\lib</info>
+<info>Environment RVCT22_ASMOPT=--licretry --fastlicense --sitelicense</info>
+<info>Environment RVCT22_CCOPT=--licretry --fastlicense --sitelicense</info>
+<info>Environment RVCT22_LINKOPT=--licretry --fastlicense --sitelicense</info>
+<info>Environment SBS_CLEAN_LOG_FILE=G:\output\logs\compile/92_7952_201006_32_dfs_build_export.log.clean.log</info>
+<info>Environment SBS_HOME=C:\apps\sbs</info>
+<info>Environment SBS_PYTHON=C:\APPS\actpython\python.exe</info>
+<info>Environment SYMSEE_VERSION=11.2.0</info>
+<info>Environment SYSTEMDRIVE=C:</info>
+<info>Environment SYSTEMROOT=C:\ETPWIN</info>
+<info>Environment TEAM=helium_tampere64.92</info>
+<info>Environment TEMP=e:\ec_temp</info>
+<info>Environment TESTED_ANT=C:\APPS\ant_1.7</info>
+<info>Environment TESTED_JAVA=C:\APPS\jdk_1.6.0_11</info>
+<info>Environment TMP=e:\ec_temp</info>
+<info>Environment TMPDIR=e:\ec_tmpdir</info>
+<info>Environment WINDIR=C:\ETPWIN</info>
+<info>Environment WORKSPACE=E:\build_e\user\hudson\workspace\TB92-64bit</info>
+<info>Environment _JAVACMD=C:\APPS\jdk_1.6.0_11\bin\java.exe</info>
+<info>Environment _USE_CLASSPATH=no</info>
+<info>Environment __CYGWIN__=C:\apps\sbs\win32\cygwin</info>
+<info>Environment __MINGW__=C:\apps\sbs\win32\mingw</info>
+<info>Environment __PYTHON__=C:\APPS\actpython\python.exe</info>
+<info>Duplicate alias 'make' (the one from 'G:/unexisting_sdk/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/apps/sbs/lib/config\make.xml')</info>
+<info>Duplicate alias 'emake' (the one from 'G:/unexisting_sdk/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/apps/sbs/lib/config\make.xml')</info>
+<info>Buildable configuration 'armv5_urel'</info>
+<info>Buildable configuration 'armv5_udeb'</info>
+<info>Buildable configuration 'winscw_udeb'</info>
+<info>Buildable configuration 'winscw_urel'</info>
+<info>System Definition file G:/unexisting_sdk/output/build/canonical_system_definition_dfs_build_export.xml</info>
+<info>Found 372 bld.inf references in G:/unexisting_sdk/output/build/canonical_system_definition_dfs_build_export.xml within 10 layers:</info>
+<info>	ncp_layer, mw_layer, os_layer, bldfirst_mw_layer, bldfirst_app_layer, app_layer, tools_layer, addon_layer, unit_test_layer, complementary_layer</info>
+<info>Found 95 bld.inf references in layer "ncp_layer"</info>
+<info>Found 112 bld.inf references in layer "mw_layer"</info>
+<info>Found 25 bld.inf references in layer "os_layer"</info>
+<info>Found 2 bld.inf references in layer "bldfirst_mw_layer"</info>
+<info>Found 1 bld.inf references in layer "bldfirst_app_layer"</info>
+<info>Found 98 bld.inf references in layer "app_layer"</info>
+<info>Found 3 bld.inf references in layer "tools_layer"</info>
+<info>Found 30 bld.inf references in layer "addon_layer"</info>
+<info>Found 0 bld.inf references in layer "unit_test_layer"</info>
+<info>Found 6 bld.inf references in layer "complementary_layer"</info>
+<info>Toolcheck cache G:/unexisting_sdk/epoc32/build/toolcheck_cache_.tmp ignored - environment changed
+</info>
+<info>OS version "vtb92sf" determined from file "G:/unexisting_sdk/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "armv5_urel".</info>
+<info>'armv5_urel' uses variant hrh file 'G:/unexisting_sdk/epoc32/include/feature_settings.hrh'</info>
+<info>OS version "vtb92sf" determined from file "G:/unexisting_sdk/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "armv5_udeb".</info>
+<info>'armv5_udeb' uses variant hrh file 'G:/unexisting_sdk/epoc32/include/feature_settings.hrh'</info>
+<info>OS version "vtb92sf" determined from file "G:/unexisting_sdk/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "winscw_udeb".</info>
+<info>'winscw_udeb' uses variant hrh file 'G:/unexisting_sdk/epoc32/include/feature_settings.hrh'</info>
+<info>OS version "vtb92sf" determined from file "G:/unexisting_sdk/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "winscw_urel".</info>
+<info>'winscw_urel' uses variant hrh file 'G:/unexisting_sdk/epoc32/include/feature_settings.hrh'</info>
+<info>Processing G:/unexisting_sdk/sf/mw/svgt/group/bld.inf</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGImageLoadingObserver.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGEngineInterfaceImpl.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SvgListener.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGListener.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGErrorImpl.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGErrorImpl.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h to G:/unexisting_sdk/epoc32/include/platform/mw/SvgJavaInterfaceImpl.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGHyperlinkListener.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGHyperlinkListener.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGAnimationListener.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGAnimationListener.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGRequestObserver.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGRequestObserver.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGRendererId.h to G:/unexisting_sdk/epoc32/include/platform/mw/SVGRendererId.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/nvg_api/inc/nvg.h to G:/unexisting_sdk/epoc32/include/platform/mw/nvg.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/nvg_api/inc/MVGImageBinder.h to G:/unexisting_sdk/epoc32/include/platform/mw/MVGImageBinder.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgt_plat/nvg_api/inc/NVGIcon.h to G:/unexisting_sdk/epoc32/include/platform/mw/NVGIcon.h</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgtopt/rom/SVGEngine.iby to G:/unexisting_sdk/epoc32/rom/include/core/mw/SVGEngine.iby</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgtopt/rom/SvgtPluginEcom.iby to G:/unexisting_sdk/epoc32/rom/include/core/mw/SvgtPluginEcom.iby</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgtopt/rom/nvgdecoder.iby to G:/unexisting_sdk/epoc32/rom/include/core/mw/NVGDecoder.iby</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgtopt/rom/NVGDecoder_SW.iby to G:/unexisting_sdk/epoc32/rom/include/core/mw/NVGDecoder_SW.iby</info>
+<info>Copied G:/unexisting_sdk/sf/mw/svgt/svgtopt/rom/VGRenderer.iby to G:/unexisting_sdk/epoc32/rom/include/core/mw/VGRenderer.iby</info>
+<whatlog bldinf='G:/unexisting_sdk/sf/mw/svgt/group/bld.inf' mmp='' config=''>
+<export destination='G:/unexisting_sdk/epoc32/include/platform/mw/SVGImageLoadingObserver.h' source='G:/unexisting_sdk/sf/mw/svgt/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h'/>
+<resource>G:/unexisting_sdk/epoc32/include/hrv_gain_mappings.rsg</resource>
+<build>G:/unexisting_sdk/epoc32/release/armv5/urel/ekeyb.dll</build>
+</whatlog>
+<clean bldinf='G:/unexisting_sdk/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
+<zipmarker>G:/unexisting_sdk/epoc32/build/G__sf_os_deviceplatformrelease_locfiles_data_65.zipG__epoc32_include_platform_loc.unzipped</zipmarker>
+</clean>
+<whatlog bldinf='G:/unexisting_sdk/sf/os/deviceplatformrelease/locfiles/group/set14/bld.inf' mmp='' config=''>
+<archive zipfile='G:/unexisting_sdk/sf/os/deviceplatformrelease/locfiles/data/65.zip'>
+<member>G:/unexisting_sdk/epoc32/include/platform/loc/65/101f6dd6_65.loc</member>
+<member>G:/unexisting_sdk/epoc32/include/platform/loc/65/101f6dd7_65.loc</member>
+</archive>
+</whatlog>
+<info>The make-engine exited successfully.</info>
+<info>Run time 999 seconds</info>
+<info>Created/Updated toolcheck cache: G:/unexisting_sdk/epoc32/build/toolcheck_cache_.tmp
+</info>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/parsing_result.ini.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,32 @@
+<#--
+============================================================================ 
+Name        : whatlog_result.ini.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:
+
+============================================================================
+-->
+<#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "${dbPath}") >
+number.of.logs=${table_info['jpasingle']['select count(l.path) path from LogFile l'][0]}
+number.of.metadata.entries=${table_info['jpasingle']['select count(e) from MetadataEntry e'][0]}
+number.of.execution.times=${table_info['jpasingle']['select count(e) path from ExecutionTime e'][0]}
+number.of.component.times=${table_info['jpasingle']['select count(ct) from ComponentTime ct'][0]}
+number.of.components=${table_info['jpasingle']['select count(c) path from Component c'][0]}
+<#assign c = 0 />
+<#list table_info['jpa']['select e from ExecutionTime e'] as e>
+execution.time.${c}=${e.time}
+<#assign c = c + 1  />
+</#list>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/receipe_lengthy_warn.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,17 @@
+<?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>
+<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>
+<info>Environment ANT_OPTS=-Xmx896M -Dlog4j.configuration=com/nokia/log4j.xml -Dlog4j.cache.dir="e:\ec_temp\helium\username"  -Dpython.path=E:\Build_E\username\helium-bin\helium\external\python\lib\2.5\jython-2.5-py2.5.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto\zipnotsafe\Jinja2-2.2.1.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto\zipnotsafe\blockspackager-1.0.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto\zipnotsafe\dp-1.0.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\common\Sphinx-0.5.1-py2.5.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\common\docutils-0.5-py2.5.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\common\psyco-1.6-py2.5.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto\zipsafe\PyRTF-0.45.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto\zipsafe\iadnokia-1.0.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto\zipsafe\jython-2.5.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto\zipsafe\mocker-0.10.1.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto\zipsafe\path-2.2.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto\zipsafe\py_dom_xpath-0.1.py2.6.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto\zipsafe\pythoncore-1.0.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto\zipsafe\pythonnokia-1.0.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto\zipsafe\pyxml-0.8.4.py2.6.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto\zipsafe\setuptools-0.6c5.py2.5.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\common\Jinja-1.2-py2.5-win32.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\common\Pygments-0.10-py2.5.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\common\coverage-2.85-py2.5.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\common\epydoc-3.0beta1-py2.5.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\common\mocker-0.10.1-py2.5.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\common\nose-0.11.1-py2.6.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\common\setuptools-0.6c5-py2.5.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\common\simplejson-1.9.1-py2.5-win32.egg;;E:\Build_E\username\helium-bin\helium\external\python\lib\auto;E:\Build_E\username\helium-bin\helium\external\python\lib\2.6;E:\Build_E\username\helium-bin\helium\external\python\lib\common;E:\Build_E\username\helium-bin\helium\extensions\nokia\external\python\lib\2.6;C:\Apps\sbs\python</info>
+<recipe name='win32compile2object' target='x:/epoc32/build/opensrv/c_672cbe451a1cdf8d/libgabble-convenience_dll/winscw/urel/gabble-connection.o' host='fawec103' layer='sf' component='opensrv' bldinf='x:/sf/mw/opensrv/group/bld.inf' mmp='x:/sf/mw/opensrv/telepathygabble/group/libgabble-convenience.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='x:/sf/mw/opensrv/telepathygabble/src/gabble-connection.c'>
+<![CDATA[
+WARNING: Some very long warning..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
+]]><time start='1245768194.876303000' elapsed='1.140' />
++ 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/sbs/receipe_lengthy_whatlog.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,12 @@
+<?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>
+<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>
+<whatlog bldinf='x:/sf/mw/opensrv/group/bld.inf' mmp='x:/sf/mw/opensrv/telepathygabble/group/libgabble-convenience.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='x:/sf/mw/opensrv/telepathygabble/src/gabble-connection.c'>
+<build>/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path/very/long/path</build>
+</whatlog>
+
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/sbs_compile_emake_errors.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.12.1 [2010-01-29 symbian build system 4e477ddf2eed]" xmlns="http://symbian.com/xml/build/log" xmlns:progress="http://symbian.com/xml/build/log/progress" 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.12.1 [2010-01-29 symbian build system 4e477ddf2eed]
+</info>
+<info>SBS_HOME C:/APPS/sbs</info>
+<info>Set-up C:/APPS/sbs/sbs_init.xml</info>
+<info>Processing V:/sf/app/HelloWorldCons/group/HelloWorldCons.mmp for platform armv5_urel + armv5_udeb</info>
+<info>Processing V:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp for platform armv5_urel + armv5_udeb</info>
+<info>Running C:/APPS/sbs/win32/bin/talonctl.exe start</info>
+<info>Making V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.export</info>
+<info>Executing 'emake HAVE_ORDERONLY= -r -f  "V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.export"  -k -j 20   --emake-emulation=gmake  --emake-class=s60  --emake-annodetail=basic,history,waiting  --case-sensitive=0  '--emake-root=\;C:\apps;E:\hacs\helium_3\helium;C:\APPS\sbs'  --emake-maxagents=1  '--emake-historyfile=V:\output\logs/ec_history/raptor_clean.emake.data' TALON_DESCRAMBLE=0  2&gt;'V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.export.stderr' '</info>
+WARNING EC1003: Ignoring redundant EMAKE_ROOT value - C:/apps/sbs (It is already included by EMAKE_ROOT value - C:/apps)
+ERROR EC1128: History file path references non-existent or read-only directory: V:\output\logs/ec_history
+<info>Making V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.bitmap</info>
+<info>Executing 'emake HAVE_ORDERONLY= -r -f  "V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.bitmap"  -k -j 20   --emake-emulation=gmake  --emake-class=s60  --emake-annodetail=basic,history,waiting  --case-sensitive=0  '--emake-root=\;C:\apps;E:\hacs\helium_3\helium;C:\APPS\sbs'  --emake-maxagents=1  '--emake-historyfile=V:\output\logs/ec_history/raptor_clean.emake.data' TALON_DESCRAMBLE=0  2&gt;'V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.bitmap.stderr' '</info>
+WARNING EC1003: Ignoring redundant EMAKE_ROOT value - C:/apps/sbs (It is already included by EMAKE_ROOT value - C:/apps)
+ERROR EC1128: History file path references non-existent or read-only directory: V:\output\logs/ec_history
+<info>Making V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.resource_deps</info>
+<info>Executing 'emake HAVE_ORDERONLY= -r -f  "V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.resource_deps"  -k -j 20   --emake-emulation=gmake  --emake-class=s60  --emake-annodetail=basic,history,waiting  --case-sensitive=0  '--emake-root=\;C:\apps;E:\hacs\helium_3\helium;C:\APPS\sbs'  --emake-maxagents=1  '--emake-historyfile=V:\output\logs/ec_history/raptor_clean.emake.data' TALON_DESCRAMBLE=0  2&gt;'V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.resource_deps.stderr' '</info>
+WARNING EC1003: Ignoring redundant EMAKE_ROOT value - C:/apps/sbs (It is already included by EMAKE_ROOT value - C:/apps)
+ERROR EC1128: History file path references non-existent or read-only directory: V:\output\logs/ec_history
+<info>Making V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.resource</info>
+<info>Executing 'emake HAVE_ORDERONLY= -r -f  "V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.resource"  -k -j 20   --emake-emulation=gmake  --emake-class=s60  --emake-annodetail=basic,history,waiting  --case-sensitive=0  '--emake-root=\;C:\apps;E:\hacs\helium_3\helium;C:\APPS\sbs'  --emake-maxagents=1  '--emake-historyfile=V:\output\logs/ec_history/raptor_clean.emake.data' TALON_DESCRAMBLE=0  2&gt;'V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.resource.stderr' '</info>
+WARNING EC1003: Ignoring redundant EMAKE_ROOT value - C:/apps/sbs (It is already included by EMAKE_ROOT value - C:/apps)
+ERROR EC1128: History file path references non-existent or read-only directory: V:\output\logs/ec_history
+<info>Making V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.default</info>
+<info>Executing 'emake HAVE_ORDERONLY= -r -f  "V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.default"  -k -j 20   --emake-emulation=gmake  --emake-class=s60  --emake-annodetail=basic,history,waiting  --case-sensitive=0  '--emake-root=\;C:\apps;E:\hacs\helium_3\helium;C:\APPS\sbs'  --emake-maxagents=1  '--emake-historyfile=V:\output\logs/ec_history/raptor_clean.emake.data' TALON_DESCRAMBLE=0  2&gt;'V:/output/logs/compile/minibuild_ido_sbs_0.0.1_armv5_helium_minibuild_ido_all.default.stderr' '</info>
+WARNING EC1003: Ignoring redundant EMAKE_ROOT value - C:/apps/sbs (It is already included by EMAKE_ROOT value - C:/apps)
+ERROR EC1128: History file path references non-existent or read-only directory: V:\output\logs/ec_history
+<info>Running C:/APPS/sbs/win32/bin/talonctl.exe stop</info>
+<info>The make-engine exited successfully.</info>
+<info>Run time 3 seconds</info>
+<info>Created/Updated toolcheck cache: V:/epoc32/build/toolcheck_cache_.tmp
+</info>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/sysdef3.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : sysdef3.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:
+
+============================================================================
+-->
+<SystemDefinition schema="3.0.0" id-namespace="http://www.symbian.org/system-definition" xmlns:qt="http://www.nokia.com/qt">
+<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/" qt:proFile="helloworld.pro" />
+</component>
+</collection>
+</package>
+</layer>
+<layer id="mw" name="mw">
+<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/" qt:proFile="helloworldapi.pro" qt:qmakeArgs="-nomoc" />
+</component>
+</collection>
+</package>
+</layer>
+</systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/sysdef_data.ini.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,30 @@
+<#--
+============================================================================ 
+Name        : sysdef_data.ini.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:
+
+============================================================================
+-->
+<#setting number_format="0">
+<#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "${dbPath}") >
+component.count=${table_info['jpasingle']['select count(c.id) from Component c'][0]}
+<#assign counter=0>
+<#list table_info['jpa']['select c from Component c'] as component>
+component.${counter}.unit.id=${component.unitId}
+component.${counter}.unit.location=<#if component.sysdefUnit??>${component.sysdefUnit.location}</#if>
+<#assign counter=counter + 1>
+</#list>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/unit_categorization_compile.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.9.2 [2009-09-21 sf 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">
+<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='${epocroot}/sf/mw/helloworldapi/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp'>
+<![CDATA[
+ERROR: some fake error
+]]><time start='1253718692.38008' elapsed='1.094' />
+<status exit='failed' code='1' attempt='3' />
+</recipe>
+<recipe name='compile' target='X:/epoc32/build/organizer/c_aff6bae36b1df6c4/srchuiresviewplugin_dll/armv5/urel/srchuiresultview.o' host='' layer='app_layer' component='' bldinf='${epocroot}/sf/mw/helloworldapi/group/bld.inf' mmp='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/group/srchuiresviewplugin.mmp' config='armv5_urel.product' platform='armv5' phase='ALL' source='X:/sf/app/organizer/searchui/searchapp/plugins/resultviewerplugin/src/srchuiresultview.cpp'>
+<![CDATA[
+ERROR: second fake error
+]]><time start='1253718692.38008' elapsed='1.094' />
+<status exit='failed' code='1' attempt='3' />
+</recipe>
+<info>Run time 226 seconds</info>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sbs/whatlog_result.ini.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,26 @@
+<#--
+============================================================================ 
+Name        : whatlog_result.ini.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:
+
+============================================================================
+-->
+<#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "${dbPath}") >
+number.of.logs=${table_info['jpasingle']['select count(l.path) path from LogFile l'][0]}
+number.of.whatlog.entries=${table_info['jpasingle']['select count(e) from WhatLogEntry e'][0]}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sysdef/invalid_sysdef3.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : invalid_sysdef3.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:
+
+============================================================================
+-->
+<SystemDefinition schema="3.0.0" id-namespace="http://www.symbian.org/system-definition" xmlns:qt="http://www.nokia.com/qt">
+<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/" qt:proFile="helloworld.pro" />
+</component>
+</collection>
+</package>
+</layer>
+<layer id="mw" name="mw">
+<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/" qt:proFile="helloworldapi.pro" qt:qmakeArgs="-nomoc" />
+</component>
+</collection>
+</package>
+</layer>
+<!-- volontarly invalid xml format-->
+<systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sysdef/sysdef3.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : sysdef3.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:
+
+============================================================================
+-->
+<SystemDefinition schema="3.0.0" id-namespace="http://www.symbian.org/system-definition" xmlns:qt="http://www.nokia.com/qt">
+<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/" qt:proFile="helloworld.pro" />
+</component>
+</collection>
+</package>
+</layer>
+<layer id="mw" name="mw">
+<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/" qt:proFile="helloworldapi.pro" qt:qmakeArgs="-nomoc" />
+</component>
+</collection>
+</package>
+</layer>
+</systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/sysdef/sysdef_data.ini.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,27 @@
+<#--
+============================================================================ 
+Name        : sysdef_data.ini.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:
+
+============================================================================
+-->
+<#setting number_format="0">
+<#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "${dbPath}") >
+package.count=${table_info['jpasingle']['select count(p.id) from SysdefPackage p'][0]}
+collection.count=${table_info['jpasingle']['select count(p.id) from SysdefCollection p'][0]}
+component.count=${table_info['jpasingle']['select count(p.id) from SysdefComponent p'][0]}
+unit.count=${table_info['jpasingle']['select count(p.id) from SysdefUnit p'][0]}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/templates/component_categorization.txt.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,27 @@
+<#--
+============================================================================ 
+Name        : macro.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:
+
+============================================================================
+-->
+<#setting number_format="0">
+<#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "${dbPath}") >
+<#list table_info['native:java.lang.String']['select DISTINCT component.component from component INNER JOIN logfile ON logfile.logfile_id=component.logfile_id where logfile.path like \'%_compile%.log\' and logfile.path not like \'%_compile_clean%.log\''] as component>
+${component}:error:${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.logFile as l JOIN m.severity as p JOIN m.component as c where UPPER(p.severity) 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]}
+${component}:whatlog:${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 \'\\\''][0]}
+</#list>
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/tests/data/whatlog_result.ini.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-<#--
-============================================================================ 
-Name        : whatlog_result.ini.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:
-
-============================================================================
--->
-<#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "${dbPath}") >
-number.of.logs=${table_info['jpasingle']['select count(l.path) path from LogFile l'][0]}
-number.of.whatlog.entries=${table_info['jpasingle']['select count(e) from WhatLogEntry e'][0]}
-
-
--- a/buildframework/helium/sf/java/metadata/tests/functionality/func_add_test.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,352 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-============================================================================ 
-Name        : func_add_test.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>
-    
-    <dirname property="project.dir" file="${ant.file.test-metadata-regex}" />
-
-    <path id="lib.path">
-        <fileset dir="${project.dir}/../../../../bin" includes="*.jar"/>
-    </path>
-    
-    <taskdef resource="com/nokia/helium/metadata/ant/antlib.xml" classpathref="lib.path" uri="http://www.nokia.com/helium" />
-    <taskdef name="fmpp" classname="fmpp.tools.AntTask" classpathref="lib.path" onerror="report"/>
-
-
-    <hlm:metadatafilterset id="all-regex-filterfile">
-        <metadatafilterset filterfile="${project.dir}/../data/metadata_regex.csv" />
-    </hlm:metadatafilterset>
-
-    <target name="s60-clean-log">
-        <delete file="${project.dir}/../output/log_s60_filterfile.sqlite" failonerror="false"/>
-        <echo message="all regular expression validation" />
-        <echo message="database:${project.dir}/../output/log_s60_filterfile.sqlite" />
-        <hlm:metadatarecord database="${project.dir}/../output/log_s60_filterfile.sqlite">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="mcl_7952_200950_wk50_02_dfs_build_sf_armv5.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-filterfile" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-    </target>
-
-
-    <hlm:metadatafilterset id="text_log_metadata_input">
-        <metadatafilterset filterfile="${project.dir}/../data/common.csv" />
-    </hlm:metadatafilterset>
-
-
-    <target name="log-metadata-input">
-        <delete file="${project.dir}/../output/log_text_metadata_input.sqlite" failonerror="false" />
-        <echo message="text log metadata input validation" />
-        <echo message="database:${project.dir}/../output/log_text_metadata_input.sqlite" />
-        <parallel>
-            <hlm:metadatarecord database="${project.dir}/../output/log_text_metadata_input.sqlite">
-                <hlm:sbsmetadatainput>
-                    <fileset dir="${project.dir}/../data/">
-                        <include  name="mcl_7952_201002_wk02_010_dfs_build_sf_tools.log"/>
-                    </fileset>
-                    <metadatafilterset refid="text_log_metadata_input" />
-                </hlm:sbsmetadatainput>
-            </hlm:metadatarecord>
-            <!--
-            <hlm:metadatarecord database="${project.dir}/../output/log_text_metadata_input.sqlite">
-                <hlm:textmetadatainput>
-                    <fileset dir="${project.dir}/../data/">
-                        <include  name="pf_5250_2009_wk50_TUE.roms_part1.log"/>
-                    </fileset>
-                    <metadatafilterset refid="text_log_metadata_input" />
-                </hlm:textmetadatainput>
-            </hlm:metadatarecord>
-            -->
-        </parallel>
-    </target>
-
-    <target name="log-metadata-read">
-        <delete file="${project.dir}/../output/log_text_metadata_input.sqlite" failonerror="false" />
-        <echo message="text log metadata input validation" />
-        <echo message="database:${project.dir}/../output/log_text_metadata_input.sqlite" />
-        <parallel>
-            <hlm:metadataread database="${project.dir}/../output/log_text_metadata_input.sqlite">
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="pf_5250_2009_wk50_TUE.roms.log"/>
-                </fileset>
-            </hlm:metadataread>
-            
-            <hlm:metadataread database="${project.dir}/../output/log_text_metadata_input.sqlite">
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="pf_5250_2009_wk50_TUE.roms1.log"/>
-                </fileset>
-            </hlm:metadataread>
-        </parallel>
-    </target>
-
-    <target name="parallel-record_test">
-        <!-- <delete file="${project.dir}/../output/s60_parallel.sqlite" failonerror="false" /> -->
-        <!-- 
-        <parallel>
-            <sequential>
-                <echo message="sbs parallel input validation" />
-                <echo message="database:${project.dir}/../output/s60_parallel.db" />
-                <hlm:metadatarecord database="${project.dir}/../output/s60_parallel.sqlite">
-                    <hlm:sbsmetadatainput>
-                        <fileset dir="${project.dir}/../data/">
-                            <include  name="*s60_1.log"/>
-                        </fileset>
-                        <metadatafilterset refid="text_log_metadata_input" />
-                    </hlm:sbsmetadatainput>
-                </hlm:metadatarecord>
-            </sequential>
-            <sequential>
-                <echo message="sbs parallel input validation" />
-                <echo message="database:${project.dir}/../output/s60_parallel.sqlite" />
-                <hlm:metadatarecord database="${project.dir}/../output/s60_parallel.sqlite">
-                    <hlm:sbsmetadatainput>
-                        <fileset dir="${project.dir}/../data/">
-                            <include  name="*s60_2.log"/>
-                        </fileset>
-                        <metadatafilterset refid="text_log_metadata_input" />
-                    </hlm:sbsmetadatainput>
-                </hlm:metadatarecord>
-            </sequential>
-            <sequential>
-                <echo message="sbs parallel input validation" />
-                <echo message="database:${project.dir}/../output/s60_parallel.sqlite" />
-                <hlm:metadatarecord database="${project.dir}/../output/s60_parallel.sqlite">
-                    <hlm:sbsmetadatainput>
-                        <fileset dir="${project.dir}/../data/">
-                            <include  name="*s60_3.log"/>
-                        </fileset>
-                        <metadatafilterset refid="text_log_metadata_input" />
-                    </hlm:sbsmetadatainput>
-                </hlm:metadatarecord>
-            </sequential>
-        </parallel> -->
-        <fmpp sourceFile="${project.dir}/../../src/templates/scan2.html.ftl"
-                     outputfile="${project.dir}/../output/s60_scan2.html">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                dbPath: ${project.dir}/../output/s60_parallel.sqlite
-                doc: xml(${project.dir}/../data/s60_info.xml)
-                ant: antProperties()
-            </data>
-        </fmpp>
-        <hlm:generateBuildStatus dbfile="${project.dir}/../output/s60_parallel.sqlite" output-dir="${env.TEMP}" file="test-scanlog-metadata-1.log"/>
-    </target>
-
-
-    <target name="all-s60-logs">
-        <delete file="${project.dir}/../output/all_s60_logs_db" failonerror="false" />
-        <echo message="all s60 logs being processed" />
-        <hlm:metadatarecord database="${project.dir}/../output/all_s60_logs_db">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/s60_logs/logs/compile">
-                    <include  name="92_7952_RAPTOR_201004_wk04_02_dfs_build_export.log"/>
-                    <include  name="92_7952_RAPTOR_201004_wk04_02.qt_tools2_compile.log"/>
-                    <include  name="92_7952_RAPTOR_201004_wk04_02_dfs_build_ncp_dfs_variants.log"/>
-                    <include  name="92_7952_RAPTOR_201004_wk04_02_dfs_build_ncp_tools.log"/>
-                    <include  name="92_7952_RAPTOR_201004_wk04_02_dfs_build_sf_dfs_variants.log"/>
-                    <include  name="92_7952_RAPTOR_201004_wk04_02_dfs_build_sf_tools.log"/>
-                    <include  name="92_7952_RAPTOR_201004_wk04_02_s60_bldmelast_arm9e.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-filterfile" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-    </target>
-
-    <target name="all-ido-logs">
-        <delete file="${project.dir}/../output/all_ido_logs.sqlite" failonerror="false" />
-        <echo message="text log metadata input validation" />
-        <hlm:metadatarecord database="${project.dir}/../output/all_ido_logs.sqlite">
-            <hlm:textmetadatainput>
-                <fileset dir="${project.dir}/../data/ido_logs">
-                    <include  name="*.log"/>
-                    <exclude name="*_ant_*.log"/>
-                </fileset>
-                <metadatafilterset refid="text_log_metadata_input" />
-            </hlm:textmetadatainput>
-            <hlm:antmetadatainput>
-                <fileset dir="${project.dir}/../data/ido_logs">
-                    <include  name="*_ant_*.log"/>
-                </fileset>
-                <metadatafilterset refid="text_log_metadata_input" />
-            </hlm:antmetadatainput>
-        </hlm:metadatarecord>
-    </target>
-
-    <target name="abld-ido-logs">
-        <delete file="${project.dir}/../output/abld_ido_logs.sqlite" failonerror="false" />
-        <echo message="text log metadata input validation" />
-        <hlm:metadatarecord database="${project.dir}/../output/abld_ido_logs.sqlite">
-            <hlm:abldmetadatainput>
-                <fileset dir="${project.dir}/../data/ido_abld_logs">
-                    <include  name="*_compile*.log"/>
-                </fileset>
-                <metadatafilterset refid="text_log_metadata_input" />
-            </hlm:abldmetadatainput>
-        </hlm:metadatarecord>
-    </target>
-
-    <target name="test-old-schema">
-        <copy file="${project.dir}/../output/old_schema_log.sqlite" 
-            tofile="${project.dir}/../output/old_schema_log.sqlite_bak" />
-        <echo message="text log metadata input validation" />
-        <hlm:metadatarecord database="${project.dir}/../output/old_schema_log.sqlite">
-            <hlm:abldmetadatainput>
-                <fileset dir="${project.dir}/../data">
-                    <include  name="sample_abld.log"/>
-                </fileset>
-                <metadatafilterset refid="text_log_metadata_input" />
-            </hlm:abldmetadatainput>
-        </hlm:metadatarecord>
-
-        <delete file="${project.dir}/../output/old_schema_log.sqlite" />
-        <copy file="${project.dir}/../output/old_schema_log.sqlite_bak" 
-            tofile="${project.dir}/../output/old_schema_log.sqlite"
-            failonerror="false" />
-        
-    </target>
-
-    <target name="ant-ido-logs">
-        <delete file="${project.dir}/../output/ant_ido_logs.sqlite" failonerror="false" />
-        <echo message="text log metadata input validation" />
-        <hlm:metadatarecord database="${project.dir}/../output/ant_ido_logs.sqlite">
-            <hlm:antmetadatainput>
-                <fileset dir="${project.dir}/../data/ido_logs">
-                    <include  name="*_ant_*.log"/>
-                </fileset>
-                <metadatafilterset refid="text_log_metadata_input" />
-            </hlm:antmetadatainput>
-        </hlm:metadatarecord>
-    </target>
-
-    <target name="readdata">
-        <delete file="${project.dir}/../output/readdata.html" failonerror="false" />
-        <fmpp sourceFile="${project.dir}/../../src/templates/readdata.xml.ftl"
-                     outputfile="${project.dir}/../output/readdata.html">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                dbPath: ${project.dir}/../output/log_text_metadata_input.sqlite
-                ant: antProperties()
-            </data>
-        </fmpp>
-    </target>
-
-    <target name="readormdata">
-        <delete file="${project.dir}/../output/readdata.html" failonerror="false" />
-        <fmpp sourceFile="${project.dir}/../../src/templates/readormdata.xml.ftl"
-                     outputfile="${project.dir}/../output/readdata.html">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                dbPath: ${project.dir}/../output/log_text_metadata_input.sqlite
-                logFile: mcl_7952_201002_wk02_010_dfs_build_sf_tools.log
-                ant: antProperties()
-            </data>
-        </fmpp>
-    </target>
-
-    <target name="generatescanlog">
-        <delete file="${project.dir}/../output/scan2.html" failonerror="false" />
-        <fmpp sourceFile="${project.dir}/../../src/templates/scan2.html.ftl"
-                     outputfile="${project.dir}/../output/scan2.html">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                dbPath: ${project.dir}/../output/ido_gsdo_tb92-release_9.0.2735_metadata.sqlite
-                doc: xml(${project.dir}/../output/ido_gsdo_tb92-release_9.0.2735_tools_dfs_build_clean.log.info.xml)
-                ant: antProperties()
-            </data>
-        </fmpp>
-    </target>
-
-    <target name="generatebuildstatus">
-        <delete file="${project.dir}/../output/build_status.xml" failonerror="false" />
-        <fmpp sourceFile="${project.dir}/../../src/templates/build_status.xml.ftl"
-                     outputfile="${project.dir}/../output/build_status.xml">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                dbPath: ${project.dir}/../output/all_s60_logs_db
-                doc: xml(${project.dir}/../output/log_text_metadata_input.xml)
-                ant: antProperties()
-            </data>
-        </fmpp>
-    </target>
-
-
-    <target name="generate-diamond-faults">
-        <delete file="${project.dir}/../output/diamonds_faults.xml" failonerror="false" />
-        <fmpp sourceFile="${project.dir}/../../src/templates/diamonds_faults.ftl"
-                     outputfile="${project.dir}/../output/diamonds_faults.xml">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                dbPath: ${project.dir}/../output/all_s60_logs_db
-                doc: xml(${project.dir}/../output/log_text_metadata_input.xml)
-                ant: antProperties()
-            </data>
-        </fmpp>
-    </target>
-
-
-    <target name="generate-summary">
-        <delete file="${project.dir}/../output/summary.html" failonerror="false" />
-        <fmpp sourceFile="${project.dir}/../../src/templates/summary_metadata.html.ftl"
-                     outputfile="${project.dir}/../output/summary.html">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates/macro
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                dbPath: ${project.dir}/../output/all_s60_logs_db
-                loginfo: xml(${project.dir}/../output/log_text_metadata_input.xml)
-                ant: antProperties()
-            </data>
-        </fmpp>
-    </target>
-
-    <target name="generate-cc-summary">
-        <property name="build.id" value="100.test" />
-        <delete file="${project.dir}/../output/cc-summary.html" failonerror="false" />
-        <fmpp sourceFile="${project.dir}/../../src/templates/cc_summary.html.ftl"
-                     outputfile="${project.dir}/../output/cc-summary.html">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates/macro
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                dbPath: ${project.dir}/../output/all_ido_logs.sqlite
-                loginfo: xml(${project.dir}/../data/ido_logs/IDO_lcdo_tb92-ci_MCL.92.64_info.log.xml)
-                ant: antProperties()
-            </data>
-        </fmpp>
-    </target>
-</project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/tests/src/com/nokia/helium/metadata/tests/TestIMakerLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/tests/src/com/nokia/helium/metadata/tests/TestIMakerLogMetaDataInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,13 +18,11 @@
 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;
 
 /**
@@ -48,14 +46,14 @@
         imakerInput.add(fileset);
         
         // Iterate through the entries
-        Iterator<Metadata.LogEntry> inputIterator = imakerInput.iterator();
+        /**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);
+        }*/
+        //assert (componentTotal == IMAGES_WITH_ERRORS_TOTAL);
     }
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/src/com/nokia/helium/metadata/tests/TestORMFMPPLoader.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,164 @@
+/*
+ * 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.io.IOException;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.log4j.Logger;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.nokia.helium.metadata.FactoryManager;
+import com.nokia.helium.metadata.MetadataException;
+import com.nokia.helium.metadata.fmpp.ORMQueryModeModel;
+import com.nokia.helium.metadata.model.metadata.LogFile;
+
+import fmpp.ProgressListener;
+import freemarker.ext.beans.BeanModel;
+import freemarker.template.SimpleScalar;
+import freemarker.template.TemplateCollectionModel;
+import freemarker.template.TemplateHashModel;
+import freemarker.template.TemplateModel;
+import freemarker.template.TemplateModelIterator;
+import freemarker.template.TemplateSequenceModel;
+
+/**
+ * Testing the ORMFMPPLoader loader. 
+ * 
+ */
+public class TestORMFMPPLoader {
+    private File database;
+    private static Logger log = Logger.getLogger(TestORMFMPPLoader.class);
+    
+    /**
+     * Populates the LogFile table with basic data.
+     * @throws MetadataException
+     * @throws IOException
+     */
+    @Before
+    public void populateDatabase() throws MetadataException, IOException {
+        File tempdir = new File(System.getProperty("test.temp.dir"));
+        tempdir.mkdirs();
+        database = new File(tempdir, "test_db");
+        if (database.exists()) {
+            FileUtils.forceDelete(database);
+        }
+        EntityManagerFactory factory = FactoryManager.getFactoryManager().getEntityManagerFactory(database);
+        EntityManager em = factory.createEntityManager();
+        try {
+            em.getTransaction().begin();
+            for (int i = 0 ; i < 2000 ; i++) {
+                LogFile lf = new LogFile();
+                lf.setPath("log" + String.format("%04d", i));
+                em.persist(lf);
+            }
+        } finally {
+            if (em.getTransaction().isActive()) {
+                em.getTransaction().commit();
+            }
+            em.close();
+            factory.close();
+        }
+    }
+
+    /**
+     * Delete the database after test completion.
+     * @throws IOException
+     */
+    @After
+    public void cleanupDatabase() throws IOException {
+        FileUtils.forceDelete(database);
+    }
+    
+    /**
+     * Run a JPA query.
+     * @throws Exception
+     */
+    @Test
+    public void testJpaSingleQuery() throws Exception {
+        ORMQueryModeModel modeModel = new ORMQueryModeModel(database);
+        try {
+            TemplateHashModel model = modeModel.get("jpasingle");
+            TemplateModel data = model.get("select l from LogFile l order by l.path");
+            Assert.assertTrue(data instanceof TemplateSequenceModel);
+            TemplateSequenceModel seq = (TemplateSequenceModel)data;
+            Assert.assertTrue(seq.size() == 2000);
+
+            // Let's make sure we get null if out of bounds
+            Assert.assertNotNull(seq.get(0));
+            Assert.assertNotNull(seq.get(750));
+            Assert.assertNotNull(seq.get(749));
+            Assert.assertNotNull(seq.get(1999));
+            Assert.assertNotNull(seq.get(0));
+            Assert.assertNull(seq.get(2000));
+            Assert.assertNull(seq.get(2001));
+            Assert.assertNull(seq.get(2000));
+        
+            // Check index 0
+            LogFile lf = (LogFile)((BeanModel)seq.get(0)).getWrappedObject();
+            log.info("seq.get(0): " + lf.getPath());
+            Assert.assertTrue("log0000".equals(lf.getPath()));
+        
+            // Check index 999
+            lf = (LogFile)((BeanModel)seq.get(999)).getWrappedObject();
+            log.info("seq.get(999): " + lf.getPath());
+            Assert.assertTrue("log0999".equals(lf.getPath()));
+
+            // Check index 1999
+            lf = (LogFile)((BeanModel)seq.get(1999)).getWrappedObject();
+            log.info("seq.get(1999): " + lf.getPath());
+            Assert.assertTrue("log1999".equals(lf.getPath()));
+        } finally {
+            modeModel.notifyProgressEvent(null, ProgressListener.EVENT_END_PROCESSING_SESSION, null, 0, null, null);
+        }
+    }
+
+    /**
+     * Run a native query.
+     * @throws Exception
+     */
+    @Test
+    public void testNativeStringQuery() throws Exception {
+        ORMQueryModeModel modeModel = new ORMQueryModeModel(database);
+        try {
+            TemplateHashModel model = modeModel.get("native:java.lang.String");
+            TemplateModel data = model.get("select l.path from LogFile l order by l.path");
+            Assert.assertTrue(data instanceof TemplateCollectionModel);
+            TemplateCollectionModel collection = (TemplateCollectionModel)data;
+            TemplateModelIterator iterator = collection.iterator();
+            
+            int i = 0;
+            while (iterator.hasNext()) {
+                TemplateModel next = iterator.next();
+                SimpleScalar scalar = (SimpleScalar)next;
+                Assert.assertTrue(scalar.getAsString().equals("log" + String.format("%04d", i++)));
+            }
+            Assert.assertFalse(iterator.hasNext());
+            Assert.assertNull(iterator.next());
+        } finally {
+            modeModel.notifyProgressEvent(null, ProgressListener.EVENT_END_PROCESSING_SESSION, null, 0, null, null);
+        }
+    }
+}
--- a/buildframework/helium/sf/java/quality/coverity.rst	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-.. index::
-  module: Coverity Prevent Tool.
-
-========================
-Coverity Prevent Tool
-========================
-
-.. contents::
-
-This document describes requirements and how to run coverity prevent tool with sbs builds using helium. 
-
-Introduction
------------------
-- Coverity Prevent analyzes source code to find defects early in the development cycle, reducing the risks associated with coding. Included with Prevent are workflow tools that track and manage defects from initial discovery through final resolution.
-- With high precision, Coverity Prevent analyzes source code and detects critical software defects in the following categories:
-
-    * Quality
-    
-        Coverity Prevent detects bugs at compile-time that can cause run-time crashes. For example: memory leaks, use-after-free errors, and illegal pointer accesses.
-        
-    * Security 
-    
-        Early during development, Coverity Prevent can detect the security vulnerabilities that hackers can exploit and help you eliminate serious problems, such as denial of service, data or memory corruption, and privilege escalation. Vulnerabilities detected can include buffer overruns, integer overflows, format string errors, and SQL injection attacks.
-        
-    * Concurrency 
-    
-        Coverity Prevent can detect errors in multi-threaded programs that, given the complexity of concurrent programming, can be extremely difficult to track down or reproduce. Detected defects include potential deadlocks or misuse of locks.
-        
-Implmentation
------------------
-
-- Coverity command can be run using the <hlm:coverity> task.
-- Coverity task will validate is the command passed to task is starts with "cov-" and then it will run the command.
-- Coverity command options can passed through the datatypes "<hlm:coverityoptions>" or "<hlm:arg>".
-- Below example shows how parameters can be passed to coverity command.
-
-   
-.. code-block:: xml
-        
-        <hlm:coverity command="cov-link" dir="${build.drive}/">
-            <hlm:arg name="--dir" value="${coverity.inter.dir}"/>
-            <hlm:arg name="--collect" value=""/>
-            <hlm:arg name="-of" value="${coverity.link.dir}/all.link"/>
-        </hlm:coverity >
-        
-.. code-block:: xml
-        
-        <hlm:coverityoptions id="coverity.analyze.options">
-            <hlm:arg name="--dir" value="${coverity.analyze.dir}"/>
-            <hlm:arg name="--all" value=""/>
-            <hlm:arg name="--symbian" value=""/>
-            <hlm:arg name="--append" value=""/>
-            <hlm:arg name="--enable-callgraph-metrics" value=""/>
-        </hlm:coverityoptions>
-        
-        <hlm:coverity command="cov-analyze" dir="${build.drive}/">
-            <hlm:coverityoptions refid="coverity.analyze.options"/>
-        </hlm:coverity >
-
-
-
-
-
-
--- a/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/antlib.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -26,6 +26,7 @@
     <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"/>
+    <taskdef name="casummary" classname="com.nokia.helium.quality.ant.taskdefs.CASummaryTask" onerror="ignore"/>
 
     <!-- Type definition -->
     <typedef name="coverityoptions" classname="com.nokia.helium.core.ant.types.VariableSet"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CASummaryTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,329 @@
+/*
+ * 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.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import java.io.FileReader;
+import javax.xml.xpath.XPath;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Document;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.xpath.XPathFactory;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import org.xml.sax.SAXException;
+
+
+/**
+ * This Task searches the bc_header.xml and bc_library.xml files created by Binary Comparison and 
+ * looks for the typeIds and counts them up. It then prints them in order to write the number of each 
+ * typeID that was found to the diamonds output file for display by diamonds.
+ * 
+ * <pre>
+ * &lt;hlm:casummarytask   
+ *             header="true"
+ *             diamondsHeaderFileName="C:\diamonds_header.xml" 
+ *             diamondsFooterFileName="C:\diamonds_footer.xml"
+ *             outptuFile="Z:\output\diamonds/ca_summary_header.xml" 
+ *             inputFile="Z:\output\logs/headers_report_minibuild_ido_0.0.03_.xml/&gt;
+ * </pre>
+ * 
+ * @ant.task name="casummarytask" category="Quality"
+ */
+
+public class CASummaryTask extends Task {
+
+    /** String used to look for the tag values in the header xml file **/
+    private static String headerExpression = "//issuelist/headerfile/issue/typeid/text()";
+
+    /** String used to look for the tag values in the library xml file **/
+    private static String libraryExpression = "//issuelist/library/issue/typeid/text()";
+
+    /** The file containing the CA summary data */
+    private String inputFile;
+    /** Name of file to write the output to */
+    private String outputFile;
+    /** Whether we are dealng with a header or library */
+    private boolean header;
+
+    /** Each line of the input file is read into this */
+    private String line;
+
+    /** 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
+
+    /**
+     * 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;
+    }
+    
+    /**
+     * @param header set whether we are dealing with a headers or libraries
+     * @ant.required
+     */
+    public void setheader(boolean header) {
+        this.header = header;
+    }
+
+    /**
+     * @return the fileType whether we are dealing with headers or libraries
+     */
+    public boolean getheader() {
+        return header;
+    }
+
+    /** the main part of the code - the method that is called */
+    public void execute() {
+        log("CASummaryTask execute method with input file : " + inputFile, Project.MSG_ERR);
+        boolean inputFileFound = true;
+        BufferedReader diamondsHeaderFile;
+        BufferedReader diamondsFooterFile;
+
+        log("output File is " + getoutputFile(), Project.MSG_ERR);
+
+        try {
+            // open the file with the CA 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();
+                    boolean tempheader = getheader();
+                    if (tempheader) {
+                        output.write("    <quality aspect=\"compatibility-headers\"> \r\n");
+                        // process each line
+                        findTextAndOutput(headerExpression); // read input file and write the output
+                    } else {
+                        output.write("    <quality aspect=\"compatibility-libs\"> \r\n");
+                        // process each line
+                        findTextAndOutput(libraryExpression); // read input file and write the output
+                    }
+
+                    // write the end of file text
+                    output.write("    </quality>");
+                    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 of occurances
+     * of each typeID to the output xml file
+     */
+    private void findTextAndOutput(String expression) {
+        String value;
+        Integer count;
+        /** place to store the number of typeids found */
+        Hashtable<Integer, Integer> typeIds = new Hashtable<Integer, Integer>();
+        int tempKey;
+        int tempVal;
+        
+        try {
+            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder builder = docFactory.newDocumentBuilder();
+            Document doc = builder.parse(getinputFile());
+    
+            //creating an XPathFactory:
+            XPathFactory factory = XPathFactory.newInstance();
+            //using this factory to create an XPath object: 
+            XPath xpath = factory.newXPath();
+            //XPath object created compiles the XPath expression: 
+            XPathExpression expr = xpath.compile(expression);
+    
+            //expression is evaluated with respect to a certain context node which is doc.
+            Object result = expr.evaluate(doc, XPathConstants.NODESET);
+            NodeList nodeList = (NodeList) result;
+            for (int i = 0; i < nodeList.getLength(); i++) {
+                value = nodeList.item(i).getNodeValue();    //get the value as a string from the xml file
+                tempKey = Integer.parseInt(value);          //convert it to an integer so they can be sorted
+                if (!typeIds.containsKey(tempKey)) {        //see if the typeID is already present in the hashtable
+                    typeIds.put(tempKey, 0);                //it's not so create it (stops null pointer exceptions)
+                }
+                count = typeIds.get(tempKey);               //get the current count of this typeID
+                count++;                                    //inc the count
+                typeIds.put(tempKey, count);                //write it back to the hashtable
+            }
+            
+            //now sort and write to xml file
+            SortedSet<Integer> sortedset = new TreeSet<Integer>(typeIds.keySet());
+            Iterator<Integer> sorted = sortedset.iterator();
+            while (sorted.hasNext()) {      //go through each one on the file and write to xml output file
+                tempVal = sorted.next();
+                output.write("        <summary message=\"type ID " + tempVal + " occurs \" value=\"" + typeIds.get(tempVal) + "\"/> \r\n");
+            }
+        } catch (ParserConfigurationException err) {
+            log("Error: ParserConfigurationException: trying to parse xml file ", Project.MSG_ERR);
+        } catch (SAXException err) {
+            log("Error: SAXException: trying to parse xml file ", Project.MSG_ERR);
+        } catch (XPathExpressionException err) {
+            log("Error: XPathExpressionException: trying to parse xml file ", Project.MSG_ERR);
+        } catch (IOException err) {
+            log("Error: IOException: trying to parse xml file ", Project.MSG_ERR);
+        }
+    }
+
+}
--- a/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CMTSummaryTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CMTSummaryTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,101 +17,97 @@
 
 package com.nokia.helium.quality.ant.taskdefs;
 
-import java.io.*;
-import java.util.*;
-import org.apache.log4j.Logger;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 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.
- *
+
+/**
+ * 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;
+ *             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**/
+    // 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**/
+    /** 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)**/
+    /**
+     * 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"}
-    };
+        // 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
+    /** always accesses the 1st group of the matcher */
+    private static int matcherGroupNum; // default init is 0
 
-    /**indexes to the SEARCH_TERMS_ARRAY**/
+    /** 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**/
+    /** the file containing the CMT summary data */
     private String inputFile;
-    /**name of file to write the output to**/
+    /** 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**/
+
+    /** 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**/
+    /** 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
+    /** 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
+    /** 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**/
+    /**
+     * 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**/
+    /**
+     * 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
+     * @param outputFile set the output file name
      * @ant.required
      */
     public void setOutputFile(String outputFile) {
@@ -119,14 +115,12 @@
     }
 
     /**
-     * @return the outputFile
-     *          the output file name
+     * @return the outputFile the output file name
      */
     public String getOutputFile() {
         return outputFile;
     }
 
-
     /**
      * @return the inputFile
      */
@@ -135,8 +129,7 @@
     }
 
     /**
-     * @param inputFile
-     *            the name of file to scan and extract data from
+     * @param inputFile the name of file to scan and extract data from
      * @ant.required
      */
     public void setinputFile(String inputFile) {
@@ -144,8 +137,7 @@
     }
 
     /**
-     * @param diamondsFooterFileName
-     *            set the diamonds footer file name
+     * @param diamondsFooterFileName set the diamonds footer file name
      * @ant.required
      */
     public void setdiamondsFooterFileName(String diamondsFooterFileName) {
@@ -153,16 +145,14 @@
     }
 
     /**
-     * @return the diamondsFooterFileName
-     *          the diamonds footer file name 
+     * @return the diamondsFooterFileName the diamonds footer file name
      */
     public String getdiamondsFooterFileName() {
         return diamondsFooterFileName;
     }
 
     /**
-     * @param diamondsHeaderFileName
-     *            set the diamonds header file name
+     * @param diamondsHeaderFileName set the diamonds header file name
      * @ant.required
      */
     public void setdiamondsHeaderFileName(String diamondsHeaderFileName) {
@@ -170,197 +160,216 @@
     }
 
     /**
-     * @return the diamondsFooterFileName
-     *          the diamonds footer file name 
+     * @return the diamondsFooterFileName the diamonds footer file name
      */
     public String getdiamondsHeaderFileName() {
         return diamondsHeaderFileName;
     }
 
-
-    /**the main part of the code - the method that is called**/
+    /** 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
+            // 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.
+        }
+        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
+                // 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) {
+            }
+            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); 
+                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
+                // managed to open the output file
                 try {
-                    //write the initial XML text to the file
+                    // 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();
+                        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
+                    // 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
+
+                    // 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.write(tempLine);
+                        output.newLine();
                     }
-                    output.close();     //close the output file
+                    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) {
+                }
+                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) {
+                    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); 
+                    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 output File available ", Project.MSG_ERR);
             }
-        } else {
-            log("Error: no input 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()
-    {
+     * 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
+                // 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
+                    // 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
+                        // Skip over the digits so can get the next searchterm near start 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
+                        // Decrease line length for the while loop
+                        lineLen = lineLen - (buffLen + serchTermTextLen + spacesLen);
+                    }
+                    else {
+                        // Didn't find the digits so probably at the end of the line and the digits
+                        // are on the next line
+                        // 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
+                        // 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
+                            // found the '=' so read the next line in
                             lineStartsWithDigits = true;
                             lineLen = 0;
-                        } else {
+                        }
+                        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
+                }
+                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
+                    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 {
+                        // decrease line length for the while loop
+                        lineLen = lineLen - (buffLen + spacesLen);
+                    }
+                    else {
                         lineLen = 0;
-                        log("can't find the digits at beg of line ", Project.MSG_ERR); 
+                        log("can't find the digits at beg of line ", Project.MSG_ERR);
                     }
-                } else {
+                }
+                else {
                     lineLen = 0;
                 }
             }
-        } catch (IOException exc) {
+        }
+        catch (IOException exc) {
             log("IOException Error searching : " + exc.getMessage(), Project.MSG_ERR);
         }
-        return;
     }
 
-    private int writeToOutput() throws IOException
-    {
+    private int writeToOutput() throws IOException {
         String buffer;
         int buffLen;
 
         Matcher componentMatch = digitPattern.matcher(line);
         if (componentMatch.find()) {
-            //found the digits after the search term
+            // 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)
+            // 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 {
+        }
+        else {
             buffLen = 0;
-            log("can't find digits may be '=' at end of line ", Project.MSG_ERR); 
+            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
+        // 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 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
+            // Remove 1 space at front of line
+            line = line.substring(1);
             len--;
         }
         return num;
     }
-}
\ No newline at end of file
+}
--- a/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CMTToolTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CMTToolTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -183,8 +183,8 @@
      */
     private ExecTask getExecTask(String taskName, String cmd, File outDir) {
         ExecTask task = new ExecTask();
+        task.bindToOwner(this);
         task.setDir(outDir);
-        task.setTaskName(this.getTaskName());
         task.setExecutable(cmd);
         return task;
     }
@@ -211,19 +211,22 @@
             dirScanner.scan();
             String[] filelist = dirScanner.getIncludedFiles();
             String lineSeparator = System.getProperty("line.separator");
+            String fileSeparator = System.getProperty("file.separator");
+            
             BufferedWriter outputFile = null;
             try {
                 outputFile = new BufferedWriter(new FileWriter(input));
                 for (String file : filelist) {
-                    outputFile.write(dirScanner.getBasedir().toString() + file
+                    outputFile.write(dirScanner.getBasedir().toString() + fileSeparator + file
                             + lineSeparator);
                 }
             } catch (IOException e) {
                 throw new BuildException("Not able to generate file list for 'cmt'. ", e);
             } finally {
                 try {
-                    if (outputFile != null)
+                    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/CodeScannerTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CodeScannerTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,30 +17,30 @@
 
 package com.nokia.helium.quality.ant.taskdefs;
 
-import java.io.*;
+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.BuildException;
+import org.apache.tools.ant.taskdefs.ExecTask;
 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.
- *
+ * 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"
@@ -64,8 +64,7 @@
     private boolean failonerror;
 
     /**
-     * This defines if the task should fails in case of error while 
-     * executing codescanner.
+     * 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.
@@ -163,11 +162,6 @@
     @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());
@@ -179,18 +173,18 @@
         }
         if (configuration != null) {
             if (!configuration.exists()) {
-                throw new BuildException("Could not find the file "
-                        + configuration);
-            } else {
+                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");
+        }
+        else {
+            throw new BuildException("'configuration' attribute must be defined");
         }
         if (!format.contains("xml")) {
-           setFormat("xml," + format);
+            setFormat("xml," + format);
         }
         this.log("Output format: " + format);
         // -t off
@@ -224,7 +218,8 @@
             if (i != srcs.size() - 1) {
                 task.createArg().setValue("-i");
                 task.createArg().setValue(srcs.elementAt(i));
-            } else {
+            }
+            else {
                 task.createArg().setValue(srcs.elementAt(i));
                 task.createArg().setValue(dest.toString());
             }
--- a/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CoverityTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CoverityTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,6 +18,7 @@
 
 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;
@@ -48,6 +49,8 @@
     private String command;
     private boolean failOnError;
     private boolean execute = true;
+    private boolean append;
+    private File error;
     private String dir;
     private Vector<VariableSet> coverityOptions = new Vector<VariableSet>();
     private Vector<VariableImpl> coverityArgs = new Vector<VariableImpl>();
@@ -77,6 +80,8 @@
         task.setProject(getProject());
         task.setTaskName(this.getTaskName());
         task.setFailonerror(failOnError);
+        task.setError(this.error);
+        task.setAppend(isAppend());
         task.setExecutable(command);
         task.setDir(new File(this.dir));
 
@@ -164,6 +169,34 @@
     }
 
     /**
+     * @return the errorFile
+     */
+    public File getError() {
+        return error;
+    }
+
+    /**
+     * @param errorFile the errorFile to set
+     */
+    public void setError(File errorFile) {
+        this.error = errorFile;
+    }
+
+    /**
+     * @param append the append to set
+     */
+    public void setAppend(boolean append) {
+        this.append = append;
+    }
+
+    /**
+     * @return the append
+     */
+    public boolean isAppend() {
+        return append;
+    }
+
+    /**
      * To read the coverity arguments for coverity commands.
      * 
      * @param variableArg
@@ -184,5 +217,6 @@
             coverityArgs.add(coverityArg);
         }
     }
+    
 
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/tests/antunit/test_ca.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_ca.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-ca" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium antlib Quality Compatibility Analyser 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="ca.output.dir" location="${test.temp.dir}/output"/>
+    <property name="test.data.src" location="./../data"/>
+    <property name="temp.diamonds.header.xml" location="${ca.output.dir}/ca/diamonds_header.xml" />
+    <property name="temp.diamonds.footer.xml" location="${ca.output.dir}/ca/diamonds_footer.xml" />
+    
+    <property name="diamonds.build.output.dir" location="${ca.output.dir}/ca" />
+    <property name="bc.config.dir.name" location="" />
+
+    <!-- is called prior to the test -->
+    <target name="setUp">
+        <delete dir="${ca.output.dir}/ca" failonerror="false" />
+        <mkdir dir="${ca.output.dir}/ca" />
+        
+        <!--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="${ca.output.dir}/ca" failonerror="false" />
+        <delete file="${temp.diamonds.header.xml}" failonerror="false" />
+        <delete file="${temp.diamonds.footer.xml}" failonerror="false" />
+    </target>
+
+
+    <!--
+     **************************************************************
+     ** test CMT for windows
+     **************************************************************
+    -->
+
+    <target name="test-ca-header-with-all-reqd-params-set" >
+        <echo> output file is ${diamonds.build.output.dir} </echo>
+        <hlm:casummary diamondsHeaderFileName="${temp.diamonds.header.xml}" diamondsFooterFileName="${temp.diamonds.footer.xml}"
+                    header="true"
+                    outputFile="${ca.output.dir}/ca/ca_summary_header_ok.xml"
+                    inputFile="${test.data.src}/headers_report_ok.xml" />
+        <au:assertLogContains text="CASummaryTask execute"/>
+        <au:assertFileExists file="${ca.output.dir}\ca\ca_summary_header_ok.xml"/>
+        <loadfile property="header.ok" srcfile="${ca.output.dir}/ca/ca_summary_header_ok.xml">
+            <filterchain>
+                <replaceregex pattern="\\(:|\\)" replace="\1" flags="g" />
+            </filterchain>
+        </loadfile>
+        <echo>${header.ok}</echo>
+        <au:assertTrue message="type ID 13 occurs ">
+            <contains string="${header.ok}" 
+                substring="value=" />
+        </au:assertTrue>
+    </target>
+
+    <target name="test-ca-header-no-typeids" >
+        <hlm:casummary diamondsHeaderFileName="${temp.diamonds.header.xml}" diamondsFooterFileName="${temp.diamonds.footer.xml}"
+                    header="true"
+                    outputFile="${ca.output.dir}/ca/ca_summary_header_notypeids.xml"
+                    inputFile="${test.data.src}/headers_report_notypeids.xml" />
+        <au:assertLogContains text="CASummaryTask execute"/>
+        <au:assertFileExists file="${ca.output.dir}\ca\ca_summary_header_notypeids.xml"/>
+        <loadfile property="header.notypeids" srcfile="${ca.output.dir}/ca/ca_summary_header_notypeids.xml">
+            <filterchain>
+                <replaceregex pattern="\\(:|\\)" replace="\1" flags="g" />
+            </filterchain>
+        </loadfile>
+        <echo>${header.notypeids}</echo>
+        <au:assertTrue message="compatibility-headers">
+            <not>
+                <contains string="${header.notypeids}" 
+                    substring="summary message" />
+            </not>
+        </au:assertTrue>
+    </target>
+
+    <target name="test-ca-library-ok" >
+        <hlm:casummary diamondsHeaderFileName="${temp.diamonds.header.xml}" diamondsFooterFileName="${temp.diamonds.footer.xml}"
+                    header="false"
+                    outputFile="${ca.output.dir}/ca/ca_summary_library_ok.xml"
+                    inputFile="${test.data.src}/libraries_report_ok.xml" />
+        <au:assertLogContains text="CASummaryTask execute"/>
+        <au:assertFileExists file="${ca.output.dir}\ca\ca_summary_library_ok.xml"/>
+        <loadfile property="libraries.ok" srcfile="${ca.output.dir}/ca/ca_summary_library_ok.xml">
+            <filterchain>
+                <replaceregex pattern="\\(:|\\)" replace="\1" flags="g" />
+            </filterchain>
+        </loadfile>
+        <echo>${libraries.ok}</echo>
+        <au:assertTrue message="compatibility-libs">
+            <contains string="${libraries.ok}" 
+                substring="type ID 14 occurs" />
+        </au:assertTrue>
+    </target>
+    
+    <target name="test-ca-library-fail" >
+            <hlm:casummary diamondsHeaderFileName="${temp.diamonds.header.xml}" diamondsFooterFileName="${temp.diamonds.footer.xml}"
+                    header="false"
+                    outputFile="${ca.output.dir}/ca/ca_summary_library_fail.xml"
+                    inputFile="${test.data.src}/libraries_report_fail.xml" />
+        <au:assertFileDoesntExist file="${ca.output.dir}\ca\ca_summary_library_fail.xml" />
+        <au:assertLogContains text="FileNotFoundException while getting the input file" />
+    </target>
+
+    <target name="test-ca-library-one_id" >
+        <hlm:casummary diamondsHeaderFileName="${temp.diamonds.header.xml}" diamondsFooterFileName="${temp.diamonds.footer.xml}"
+                    header="false"
+                    outputFile="${ca.output.dir}/ca/ca_summary_library_one_id.xml"
+                    inputFile="${test.data.src}/libraries_report_one_id.xml" />
+        <au:assertFileExists file="${ca.output.dir}\ca\ca_summary_library_one_id.xml" />
+        <loadfile property="libraries.one.id" srcfile="${ca.output.dir}/ca/ca_summary_library_one_id.xml">
+            <filterchain>
+                <replaceregex pattern="\\(:|\\)" replace="\1" flags="g" />
+            </filterchain>
+        </loadfile>
+        <echo>${libraries.one.id}</echo>
+        <au:assertTrue message="compatibility-libs">
+            <contains string="${libraries.one.id}" 
+                substring="type ID 7 occurs" />
+        </au:assertTrue>
+    </target>
+
+</project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/quality/tests/antunit/test_cmt.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/quality/tests/antunit/test_cmt.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -38,13 +38,12 @@
     <target name="setUp">
         <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"/>
+        <echo file="${temp.diamonds.header.xml}"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<diamonds-build>
+    <schema>23</schema>
+]]></echo>
+        <echo file="${temp.diamonds.footer.xml}"><![CDATA[</diamonds-build>
+]]></echo>
     </target>
 
     <!-- is called after the test, even if that caused an error -->
--- a/buildframework/helium/sf/java/quality/tests/data/cmt_summary_1.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/quality/tests/data/cmt_summary_1.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <diamonds-build>
-    <schema>21</schema>
+    <schema>23</schema>
     <cmt>
         <files>2</files>
         <locphy>101</locphy>
--- a/buildframework/helium/sf/java/quality/tests/data/cmt_summary_2.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/quality/tests/data/cmt_summary_2.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <diamonds-build>
-    <schema>21</schema>
+    <schema>23</schema>
     <cmt>
         <files>3578</files>
         <locphy>1449873</locphy>
--- a/buildframework/helium/sf/java/quality/tests/data/cmt_summary_3.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/quality/tests/data/cmt_summary_3.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <diamonds-build>
-    <schema>21</schema>
+    <schema>23</schema>
     <cmt>
     </cmt>
 </diamonds-build>
--- a/buildframework/helium/sf/java/quality/tests/data/cmt_summary_5.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/quality/tests/data/cmt_summary_5.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <diamonds-build>
-    <schema>21</schema>
+    <schema>23</schema>
     <cmt>
         <files>3578</files>
         <locphy>1449873</locphy>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/tests/data/headers_report_notypeids.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="ASCII" standalone="no" ?>
+<?xml-stylesheet type="text/xsl" href="BBCResults.xsl"?>
+<!-- 
+============================================================================ 
+Name        : headers_report_notypeids.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:
+
+============================================================================
+-->
+<bbcresults>
+
+  <issuelist>
+    <headerfile>
+      <filename>C:\Symbian\9.2\_sdpdefs.h</filename>
+      <api category="Unknown" name="Unknown"/>
+    </headerfile>
+    <headerfile>
+      <filename>C:\Symbian\9.2\_sipcodecdefs.h</filename>
+      <api category="Unknown" name="Unknown"/>
+    </headerfile>
+    <headerfile>
+      <filename>C:\Symbian\9.2\animationcmd.h</filename>
+      <api category="Unknown" name="Unknown"/>
+      <issue>
+        <issueid>5</issueid>
+        <severity>
+          <typeid>1</typeid>
+          <typestring>BBC Break</typestring>
+        </severity>
+        <scseverity>
+          <typeid>1</typeid>
+          <typestring>SC Break</typestring>
+        </scseverity>
+      </issue>
+    </headerfile>
+  </issuelist>
+</bbcresults>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/tests/data/headers_report_ok.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="ASCII" standalone="no" ?>
+<?xml-stylesheet type="text/xsl" href="BBCResults.xsl"?>
+<!-- 
+============================================================================ 
+Name        : headers_report_ok.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:
+
+============================================================================
+-->
+<bbcresults>
+
+  <issuelist>
+    <headerfile>
+      <filename>C:\Symbian\9.2\S60_3rd_FP1_2\epoc32\include\_sdpdefs.h</filename>
+      <api category="Unknown" name="Unknown"/>
+      <issue>
+        <issueid>60</issueid>
+        <typeid>13</typeid>
+        <identityid>13</identityid>
+        <severity>
+          <typeid>1</typeid>
+          <typestring>BBC Break</typestring>
+        </severity>
+        <scseverity>
+          <typeid>1</typeid>
+          <typestring>SC Break</typestring>
+        </scseverity>
+      </issue>
+    </headerfile>
+    <headerfile>
+      <filename>C:\Symbian\9.2\S60_3rd_FP1_2\epoc32\include\_sipcodecdefs.h</filename>
+      <api category="Unknown" name="Unknown"/>
+      <issue>
+        <issueid>62</issueid>
+        <typeid>13</typeid>
+        <identityid>13</identityid>
+        <identitydescription>File</identitydescription>
+        <severity>
+          <typeid>1</typeid>
+          <typestring>BBC Break</typestring>
+        </severity>
+        <scseverity>
+          <typeid>1</typeid>
+          <typestring>SC Break</typestring>
+        </scseverity>
+      </issue>
+    </headerfile>
+    <headerfile>
+      <filename>C:\Symbian\9.2\S60_3rd_FP1_2\epoc32\include\animationcmd.h</filename>
+      <api category="Unknown" name="Unknown"/>
+      <issue>
+        <issueid>5</issueid>
+        <typeid>0</typeid>
+        <identityid>13</identityid>
+        <severity>
+          <typeid>1</typeid>
+          <typestring>BBC Break</typestring>
+        </severity>
+        <scseverity>
+          <typeid>1</typeid>
+          <typestring>SC Break</typestring>
+        </scseverity>
+      </issue>
+    </headerfile>
+  </issuelist>
+</bbcresults>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/tests/data/libraries_report_ok.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="ASCII" standalone="no" ?>
+<?xml-stylesheet type="text/xsl" href="BBCResults.xsl"?>
+<!-- 
+============================================================================ 
+Name        : libraries_report_ok.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:
+
+============================================================================
+-->
+<bbcresults>
+    <issuelist>
+        <library>
+            <name>C:\Symbian\9.2\S60_3rd_FP1_2\aknicon.dso</name>
+            <currentplatform>armv5</currentplatform>
+            <issue>
+                <typeid>7</typeid>
+                <bc_severity>Informative</bc_severity>
+                <sc_severity>None</sc_severity>
+            </issue>
+            <issue>
+                <typeid>7</typeid>
+                <bc_severity>Informative</bc_severity>
+                <sc_severity>None</sc_severity>
+            </issue>
+        </library>
+        <library>
+            <name>C:\Symbian\9.2\S60_3rd_FP1_2\aknnotify.dso</name>
+            <issue>
+                <typeid>6</typeid>
+                <bc_severity>Possible BBC Break</bc_severity>
+                <sc_severity>SC Break</sc_severity>
+            </issue>
+            <issue>
+                <typeid>7</typeid>
+                <bc_severity>Informative</bc_severity>
+                <sc_severity>None</sc_severity>
+            </issue>
+        </library>
+        <library>
+            <name>C:\Symbian\9.2\S60_3rd_FP1_2\animation.dso</name>
+            <issue>
+                <typeid>7</typeid>
+                <bc_severity>Informative</bc_severity>
+                <sc_severity>None</sc_severity>
+            </issue>
+            <issue>
+                <typeid>14</typeid>
+                 <bc_severity>Informative</bc_severity>
+                <sc_severity>None</sc_severity>
+            </issue>
+        </library>
+        <library>
+            <name>C:\Symbian\9.2\S60_3rd_FP1_2\animationshared.dso</name>
+            <issue>
+                <typeid>14</typeid>
+                <bc_severity>Informative</bc_severity>
+                <sc_severity>None</sc_severity>
+            </issue>
+        </library>
+        <library>
+            <name>C:\Symbian\9.2\S60_3rd_FP1_2\apfile.dso</name>
+          <issue>
+              <typeid>4</typeid>
+              <bc_severity>BBC Break</bc_severity>
+              <sc_severity>SC Break</sc_severity>
+          </issue>
+      </library>
+    </issuelist>
+
+</bbcresults>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/tests/data/libraries_report_one_id.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ASCII" standalone="no" ?>
+<?xml-stylesheet type="text/xsl" href="BBCResults.xsl"?>
+<!-- 
+============================================================================ 
+Name        : libraries_report_one_id.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:
+
+============================================================================
+-->
+<bbcresults>
+    <issuelist>
+        <library>
+            <name>C:\Symbian\9.2\S60_3rd_FP1_2\aknicon.dso</name>
+            <currentplatform>armv5</currentplatform>
+            <issue>
+                <typeid>7</typeid>
+                <bc_severity>Informative</bc_severity>
+                <sc_severity>None</sc_severity>
+            </issue>
+            <issue>
+                <typeid>7</typeid>
+                <bc_severity>Informative</bc_severity>
+                <sc_severity>None</sc_severity>
+            </issue>
+        </library>
+    </issuelist>
+
+</bbcresults>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sbs/doc/sbs.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,254 @@
+.. index::
+  module: Configuring Raptor (SBS)
+
+========================
+Configuring Raptor (SBS)
+========================
+
+.. contents::
+
+This document describes requirements and how to run sbs builds using helium. Now it is 
+possible to pass directly pass all the raptor input directly and there are no mapping of
+raptor parameter specific to helium.
+
+
+SBS Requirements
+-----------------
+
+Before starting the build, SBS needs to be updated for s60 related changes, please follow the instructions from the link below,
+
+`How to Build Raptor <http://s60wiki.nokia.com/S60Wiki/How_To_Build_With_Raptor>`_
+
+1. SBS_HOME environment variable needs to be set
+2. PATH environment variable needs to be updated with SBS related exe::
+
+    path(SBS_HOME\\BIN;SBS_HOME\\win32\\mingw\\bin;SBS_HOME\\win32\\msys\\bin)
+
+3. RVCT requirement for raptor is 22_686 or higher, in IDO config / product config batch file the env variable needs to be set to `HLM_RVCT_VERSION=22_686`
+
+For Example: ::
+
+ set HELIUM_HOME=E:\Build_E\ec_test\helium-trunk\helium
+ set PATH=e:\svn\bin;E:\sbs\bin;c:\apps\actpython;%PATH%
+ set SBS_HOME=E:\sbs
+ set MWSym2Libraries=%MWSym2Libraries%;C:\APPS\carbide\x86Build\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs
+ set TEAM=site_name
+   
+(Note: For IDOs, these environment variables are set automatically, for S60 option is proposed).
+
+Required SBS input for Helium
+------------------------------
+
+SBS Input consists of SBSInput and SBSBuild types:
+
+1. SBSInput - SBS Input stores the list of raptor arguments both the sbs options and
+sbs make options. Nested sbs input option is also possible, for details please see the 
+antdoclet information for sbsInput.
+
+2. SBSBuild - SBS Build is the collection of SBSInput. Each SBSInput refering within
+SBSBuild corresponds to a single invocation of raptor with the corresponding sbs arguments
+refered within the sbsInput. Each sbsInput refered within SBSBuild roughly corresponds to
+the abld commands associated with corresponding abld configurations. <configuration> </configuration>
+is corresponds ot SBSBuild. This is there only for backward compatibility and will be removed
+once the mighration is completed for schema 3.0, in which case, abld mapping of configuration
+is not required and sbsInput could be directly used. Example is as below,
+
+.. code-block:: xml
+
+    <hlm:sbsbuild id="sbs.dfs_build_export">
+        <sbsInput refid="dfs_build_export_input" />
+    </hlm:sbsbuild> 
+
+
+1. To run using SBS mode (schema 1.4.0)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+List of SBSInput one to one mapping with corresponding abld commands mapped for a configuration.
+    
+example is below,
+
+.. code-block:: xml
+
+    <!-- tools common sbs options -->
+    <hlm:sbsoptions id="commonSBS">
+        <arg line="-k" />
+    </hlm:sbsoptions>
+
+    <hlm:sbsoptions id="exportSBS">
+        <argset refid="commonSBS" />
+        <arg line="--export-only" />
+    </hlm:sbsoptions>
+
+    <!-- sbs input for export -->
+    <hlm:sbsinput id="export-sbs">
+        <sbsoptions refid="exportSBS" />
+    </hlm:sbsinput>
+    
+    <hlm:sbsbuild id="sbs.dfs_build_export">
+        <sbsInput refid="dfs_build_export_input" />
+    </hlm:sbsbuild> 
+
+Assuming there is a dfs_build_export schema configuration 1.4.0 system definition file.
+Then there should be a corresponding <hlm:sbsbuild> type defined prefixing with sbs
+as sbs.dfs_build_export as above which contains a reference to sbsinput. The sbsInput
+contains actual raptor commands equivalent to abld commands to be executed for that
+configuration, in this case it is referring exportSBS, which in turn referring to commonsbs
+so finally the command generated would be 
+
+.. code-block:: xml
+
+    sbs -k --export-only
+
+This command is executed for all the components specified in the dfs_build_export
+configuration.
+
+No change from the configuration is required, except the new raptor input needs to be imported.
+
+2. To run using SBS mode (schema 3.0.0)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+For schema 3.0, required inputs are,
+ a. sbs arguments
+ b. package definition files
+ c. filters to filter the component (check sysdefFilterSet under Helium Antlib documentation)
+ d. patternset - specifying specific set of layers to be executed (deprecated, will be replaced by id filtering).
+ 
+As Raptor does not support yet schema 3.0 parsing, the system definition file
+should be downgraded before being passed to the tool. This feature is controlled by
+the ***sbs.downgrade.sysdef.enabled*** boolean property.
+
+Filtering can be configured by defining a hlm:sysdefFilterSet type with a specific reference id based on the following 
+naming convention: sbs.filters.<configuration_name>
+
+This example shows how to configure a filterset for the build_export configuration:
+
+.. code-block:: xml
+
+    <!-- sbs input for export -->
+    <hlm:sbsbuild id="sbs.build_export">
+        <sbsInput refid="dfs_build_export_input" />
+    </hlm:sbsbuild> 
+
+    <hlm:sysdefFilterSet id="sysdef.filters.build_export">
+        <filter filter="!test,os" type="has" />
+    </hlm:sysdefFilterSet> 
+
+With a similar configuration approach a set of layer can be selected or excluded, by defining a patternset following this naming convention:
+sbs.layers.<configuration_name>
+
+Example:
+
+.. code-block:: xml
+
+    <patternset id="sysdef.layers.build_export">
+        <include name="mw" />
+        <exclude name="os" />
+    </patternset> 
+
+
+Customizing raptor input
+------------------------
+
+Different scenario the user might need to provide the raptor inputs, (required to map raptor 
+commands for abld configuration which is not there in the default raptor input xml file, 
+want to override the default raptor input to pass additional parameters), below section covers
+how these can be customized.
+
+Mapping raptor commands for new configuration from system definition file (1.4.0)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+First step is to identify the abld commands executed by the new configuration. Correspondingly the
+raptor commands need to be identified for that. Then need to check from the common raptor input 
+is there any input which can be reused. If any raptor input could be re-usable, the just refering
+that input and adding additional arguments would provide the exact raptor command arguments to be
+executed.
+
+
+For example, if the new configuration for which the raptor command input is to be created is,
+os, which is not there in the default raptor input, then abld commands executed are 
+(to be simpoer - bldmake, export, tools_rel, winscw, armv5). The corresponding raptor input would
+be
+
+
+.. code-block:: xml
+
+    <hlm:sbsinput id="build_input_os_export">
+        <sbsInput refid="export-${build.system}" />
+        <sbsOptions>
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_export_os_build.log" />
+            <arg name="--makefile" value="${temp.build.dir}/${build.id}_export_os_build" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="build_input_os_tools">
+        <sbsInput refid="tools-${build.system}" />
+        <sbsOptions>
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_rel_os_build.log" />
+            <arg name="--makefile" value="${temp.build.dir}/${build.id}_tools_rel_os_build" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="build_input_os_winscw">
+        <sbsInput refid="winscw-${build.system}" />
+        <sbsOptions>
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_winscw_os_build.log" />
+            <arg name="--makefile" value="${temp.build.dir}/${build.id}_winscw_os_build" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+
+    <hlm:sbsinput id="build_input_os_armv5">
+        <sbsInput refid="armv5-${build.system}" />
+        <sbsOptions>
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_os_build.log" />
+            <arg name="--makefile" value="${temp.build.dir}/${build.id}_armv5_os_build" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+The default raptor input for each build target (tools, winscw, armv5) are reused here and just the
+log file names are changed.
+
+Next the sequence of command execution needs to be defined for the corresponding os confoguration as below.
+
+.. code-block:: xml
+
+    <hlm:sbsbuild id="sbs.os">
+        <sbsInput refid="build_input_os_export" />
+        <sbsInput refid="build_input_os_tools" />
+        <sbsInput refid="build_input_os_winscw" />
+        <sbsInput refid="build_input_os_armv5" />
+    </hlm:sbsbuild>
+
+For configuration name os in the system definition file, it will take the list of raptor input
+as defined with sbs.os, then it will execute each sbsinput as separate sbs calls with the arguments
+extracted from the corresponding reference id.
+
+Overriding default raptor arguments
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+In case the default argument is not enough for the user requirements, this could be overriden by
+redefining the reference of a particular sbsoptions will provide the user to change the arguments.
+
+For example, if the user just wants to pass debug flag for armv5 raptor inputs, the raptor input 
+
+.. code-block:: xml
+
+    <!-- Mainbuild common sbs options -->
+    <hlm:sbsoptions id="armv5CommonSBS">
+        <argset refid="commonSBS" />
+        <arg line="-c armv5" />
+    </hlm:sbsoptions>
+
+
+could be redefined as below in the user configuration,
+
+.. code-block:: xml
+
+    <!-- Mainbuild common sbs options -->
+    <hlm:sbsoptions id="armv5CommonSBS">
+        <argset refid="commonSBS" />
+        <arg line="-c armv5" />
+        <arg line="-d" />
+    </hlm:sbsoptions>
+
+This would add the debug flag in all the raptor configuration which is using armv5CommonSBS.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sbs/doc/sbscoverity.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,70 @@
+.. index::
+  module: Configuring Coverity Prevent Tool with SBS
+
+==========================================
+Configuring Coverity Prevent Tool with SBS
+==========================================
+
+.. contents::
+
+This document describes requirements and how to run coverity prevent tool with sbs builds using helium. 
+
+Requirements
+-----------------
+
+Please go through "Configuring Raptor (SBS)" before proceeding into this document.
+
+
+Implementation
+-----------------
+- Coverity prevent tool commands are integrated with SBS task. 
+- Before starting the build we need to setup the property coverity.enabled=true to enable the coverity prevent tool with build.
+- Coverity task extends the "sbstask", so what ever the arguments we pass for sbstask will remain same for coverity tool also.
+- For example 
+
+.. code-block:: xml
+        
+        <hlm:coveritybuild  sbsinput="@{sbs.input}" 
+                            sysdeffile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml"
+                            layerpatternsetref="${sbs.patternset}" 
+                            workingdir="${build.drive}/" 
+                            execute="true"
+                            failonerror="false"
+                            outputlog="${sbs.log.file}" 
+                            cleanlog = "${sbs.clean.log}"
+                            erroroutput="${sbs.log.file}.sbs_error.log"
+                            statslog="${sbs.log.file}.info.xml">
+                <hlm:coverityoptions refid="coverity.build.options"/>
+        </hlm:coveritybuild>
+     
+- In above example coverity prevent tool is integrated with sbs using task "coveritybuild".
+- This task is slightly difference from sbstask as it accepts the coverity tool parameters required while running coverity tool.
+- In the above example we have mentioned "coverity.build.options" which are required for cov-build command.
+- coverityoptions datatype will follow below syntax.
+
+.. code-block:: xml
+        
+        <hlm:coverityoptions id="coverity.build.options">
+            <arg name="--config" value="${coverity.config.dir}/coverity_config.xml"/>
+            <arg name="--dir" value="${coverity.inter.dir}"/>
+            <arg name="--auto-diff" value=""/>
+            <arg name="--preprocess-first" value=""/>
+            <arg name="--record-only" value=""/>
+        </hlm:coverityoptions>
+
+- Internally "coveritybuild" task will run the "cov-build" with parameters passed with "<hlm:coverityoptions>" datatype and sbs commands.
+- Above arguments are passed by default in helium. If it is required to remove/change the default parameters (by helium)into cov-build, we need to override the datatype "coverityoptions".
+
+- Command resulted for above example is shown below with "@{sbs.input} = dfs_build_input_armv5".
+
+    | cov-build.exe --auto-diff  --record-only  --config Y:/output/coverity/config/coverity_config.xml 
+    | --preprocess-first  --dir Y:/output/coverity/intermidiate sbs -s Y:/output/build/canonical_system_definition_dfs_build.xml 
+    | -c armv5 -k --logfile Y:/output/logs/compile/ido_helloworld_tb92_blr_ci_9.2.30_armv5_dfs_build.log 
+    | --makefile=Y:/output/logs/compile/ido_helloworld_tb92_blr_ci_9.2.30_armv5_dfs_build
+    
+Note: 
+--------------------
+- Helium also supports other coverity tool commands. Please refer to section to "Coverity Prevent Tool" section.
+- Coverity tool prevent tool can't run with emake. emake options are disabled with <hlm:coveritybuild> task if "build.system=sbs-ec".
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sbs/doc/sbsctc.rst	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,76 @@
+.. index::
+  module: Configuring CTC for SBS
+
+=======================
+Configuring CTC for SBS
+=======================
+
+The following commands will generate mon.sym files in the root of your build area which are sent to the ATS server to generate coverage information.
+
+Clean components:
+
+hlm compile-main -Dbuild.drive=z: -Dsysdef.configurations.list=build_ctc_clean -Dbuild.system=sbs
+
+Build for CTC:
+
+hlm compile-main -Dbuild.drive=z: -Dsysdef.configurations.list=build_ctc -Dctc.enabled=true -Dbuild.system=sbs
+
+Ant configuration:
+
+.. code-block:: xml
+        
+    <hlm:sbsoptions id="commonSBS">
+        <arg line="-k" />
+    
+    <hlm:sbsoptions id="armv5_CTC_SBS">
+            <argset refid="commonSBS" />
+            <arg line="-c armv5_udeb" />
+    </hlm:sbsoptions>
+    
+    <hlm:sbsinput id="armv5-ctc-sbs">
+        <sbsoptions refid="armv5_CTC_SBS" />
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="build_ctc_input_armv5">
+        <sbsInput refid="armv5-ctc-${build.system}" />
+        <sbsOptions>
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_build_ctc.log" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsbuild id="sbs.build_ctc">
+        <sbsInput refid="build_ctc_input_armv5" />
+    </hlm:sbsbuild>
+
+    <hlm:sbsoptions id="cleanCommon">
+            <arg line="REALLYCLEAN" />
+            <arg line="-c armv5" />
+    </hlm:sbsoptions>
+
+    <hlm:sbsoptions id="armv5Clean">
+        <argset refid="cleanCommon" />
+    </hlm:sbsoptions>
+
+    <hlm:sbsinput id="armv5-sbs-clean">
+        <sbsoptions refid="armv5Clean" />
+    </hlm:sbsinput>
+    
+    <hlm:sbsinput id="build_input_clean_armv5">
+        <sbsInput refid="armv5-${build.system}-clean" />
+        <sbsOptions>
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_build_clean.log" />
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_build_clean" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsbuild id="sbs.build_ctc_clean">
+        <sbsInput refid="build_input_clean_armv5" />
+    </hlm:sbsbuild>
+    
+Optional extra arguments:
+
+.. code-block:: xml
+    
+    <hlm:argSet id="ctc.build.options">
+        <arg line="-C OPT_ADD_COMPILE+-DCTC_NO_START_CTCMAN" />
+    </hlm:argSet>
\ No newline at end of file
--- a/buildframework/helium/sf/java/sbs/sbs.rst	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,249 +0,0 @@
-.. index::
-  module: Configuring Raptor (SBS)
-
-========================
-Configuring Raptor (SBS)
-========================
-
-.. contents::
-
-This document describes requirements and how to run sbs builds using helium. Now it is 
-possible to pass directly pass all the raptor input directly and there are no mapping of
-raptor parameter specific to helium.
-
-
-SBS Requirements
------------------
-
-Before starting the build, SBS needs to be updated for s60 related changes, please follow the instructions from the link below,
-
-`How to Build Raptor <http://s60wiki.nokia.com/S60Wiki/How_To_Build_With_Raptor>`_
-
-1. SBS_HOME environment variable needs to be set
-2. PATH environment variable needs to be updated with SBS related exe::
-
-    path(SBS_HOME\\BIN;SBS_HOME\\win32\\mingw\\bin;SBS_HOME\\win32\\msys\\bin)
-
-3. RVCT requirement for raptor is 22_686 or higher, in IDO config / product config batch file the env variable needs to be set to `HLM_RVCT_VERSION=22_686`
-
-For Example: ::
-
- set HELIUM_HOME=E:\Build_E\ec_test\helium-trunk\helium
- set PATH=e:\svn\bin;E:\sbs\bin;c:\apps\actpython;%PATH%
- set SBS_HOME=E:\sbs
- set MWSym2Libraries=%MWSym2Libraries%;C:\APPS\carbide\x86Build\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs
- set TEAM=site_name
-   
-(Note: For IDOs, these environment variables are set automatically, for S60 option is proposed).
-
-Required SBS input for Helium
-------------------------------
-
-SBS Input consists of SBSInput and SBSBuild types:
-
-1. SBSInput - SBS Input stores the list of raptor arguments both the sbs options and
-sbs make options. Nested sbs input option is also possible, for details please see the 
-antdoclet information for sbsInput.
-
-2. SBSBuild - SBS Build is the collection of SBSInput. Each SBSInput refering within
-SBSBuild corresponds to a single invocation of raptor with the corresponding sbs arguments
-refered within the sbsInput. Each sbsInput refered within SBSBuild roughly corresponds to
-the abld commands associated with corresponding abld configurations. <configuration> </configuration>
-is corresponds ot SBSBuild. This is there only for backward compatibility and will be removed
-once the mighration is completed for schema 3.0, in which case, abld mapping of configuration
-is not required and sbsInput could be directly used. Example is as below,
-
-.. code-block:: xml
-
-    <hlm:sbsbuild id="sbs.dfs_build_export">
-        <sbsInput refid="dfs_build_export_input" />
-    </hlm:sbsbuild> 
-
-
-1. To run using SBS mode (schema 1.4.0)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-List of SBSInput one to one mapping with corresponding abld commands mapped for a configuration.
-    
-example is below,
-
-.. code-block:: xml
-
-    <!-- tools common sbs options -->
-    <hlm:sbsoptions id="commonSBS">
-        <arg line="-k" />
-        <arg name="--filters" value="FilterMetadataLog"/>
-    </hlm:sbsoptions>
-
-    <hlm:sbsoptions id="exportSBS">
-        <argset refid="commonSBS" />
-        <arg line="--export-only" />
-    </hlm:sbsoptions>
-
-    <!-- sbs input for export -->
-    <hlm:sbsinput id="export-sbs">
-        <sbsoptions refid="exportSBS" />
-    </hlm:sbsinput>
-    
-    <hlm:sbsbuild id="sbs.dfs_build_export">
-        <sbsInput refid="dfs_build_export_input" />
-    </hlm:sbsbuild> 
-
-Assuming there is a dfs_build_export schema configuration 1.4.0 system definition file.
-Then there should be a corresponding <hlm:sbsbuild> type defined prefixing with sbs
-as sbs.dfs_build_export as above which contains a reference to sbsinput. The sbsInput
-contains actual raptor commands equivalent to abld commands to be executed for that
-configuration, in this case it is referring exportSBS, which in turn referring to commonsbs
-so finally the command generated would be 
-
-.. code-block:: xml
-
-    sbs -k --filters=FilterMetadataLog --export-only
-
-This command is executed for all the componentes specified in the dfs_build_export
-configuration.
-
-No change from the configuration is required, except the new raptor input needs to be imported.
-
-2. To run using SBS mode (schema 3.0.0) - partial support
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-For schema 3.0, required inputs are,
- a. sbs arguments
- b. package definition files
- c. filters to filter the component
- d. patternset - specifying specific set of layers to be executed.
-
-Note: Filters are not supported yet.
- 
-As raptor doesn't support schema 3.0 directly, the schema 3.0 is downgraded to
-2.0 schema, then it is joined / merged with symbian / nokia system definition.
-Finally calling raptor commands with the raptor input.
-
-The minimum required input for schema 3.0 is, sbsinput.
-
-.. code-block:: xml
-
-    <!-- sbs input for export -->
-    <hlm:sbsinput id="export-sbs">
-        <sbsoptions refid="exportSBS" />
-    </hlm:sbsinput>
-
-When building for raptor just the export-sbs needs to be passed as the argument to 
-compile-main target as below,
-
-.. code-block:: xml
-
-    <antcall target="compile-main" inheritRefs="true">
-        <param name="sbs.inputs.list" value="export-sbs,armv5-build"/>
-    </antcall>
-
-Which will execute each sbs input from the list as a separate sbs call and execute it. Schema 3.0
-is very basic and is only intended for internal testing / validation.
-
-Customizing raptor input
-------------------------
-
-Different scenario the user might need to provide the raptor inputs, (required to map raptor 
-commands for abld configuration which is not there in the default raptor input xml file, 
-want to override the default raptor input to pass additional parameters), below section covers
-how these can be customized.
-
-Mapping raptor commands for new configuration from system definition file (1.4.0)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-First step is to identify the abld commands executed by the new configuration. Correspondingly the
-raptor commands need to be identified for that. Then need to check from the common raptor input 
-is there any input which can be reused. If any raptor input could be re-usable, the just refering
-that input and adding additional arguments would provide the exact raptor command arguments to be
-executed.
-
-
-For example, if the new configuration for which the raptor command input is to be created is,
-os, which is not there in the default raptor input, then abld commands executed are 
-(to be simpoer - bldmake, export, tools_rel, winscw, armv5). The corresponding raptor input would
-be
-
-
-.. code-block:: xml
-
-    <hlm:sbsinput id="build_input_os_export">
-        <sbsInput refid="export-${build.system}" />
-        <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_export_os_build.log" />
-            <arg name="--makefile" value="${temp.build.dir}/${build.id}_export_os_build" />
-        </sbsOptions>
-    </hlm:sbsinput>
-
-    <hlm:sbsinput id="build_input_os_tools">
-        <sbsInput refid="tools-${build.system}" />
-        <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_rel_os_build.log" />
-            <arg name="--makefile" value="${temp.build.dir}/${build.id}_tools_rel_os_build" />
-        </sbsOptions>
-    </hlm:sbsinput>
-
-    <hlm:sbsinput id="build_input_os_winscw">
-        <sbsInput refid="winscw-${build.system}" />
-        <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_winscw_os_build.log" />
-            <arg name="--makefile" value="${temp.build.dir}/${build.id}_winscw_os_build" />
-        </sbsOptions>
-    </hlm:sbsinput>
-
-
-    <hlm:sbsinput id="build_input_os_armv5">
-        <sbsInput refid="armv5-${build.system}" />
-        <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_os_build.log" />
-            <arg name="--makefile" value="${temp.build.dir}/${build.id}_armv5_os_build" />
-        </sbsOptions>
-    </hlm:sbsinput>
-
-The default raptor input for each build target (tools, winscw, armv5) are reused here and just the
-log file names are changed.
-
-Next the sequence of command execution needs to be defined for the corresponding os confoguration as below.
-
-.. code-block:: xml
-
-    <hlm:sbsbuild id="sbs.os">
-        <sbsInput refid="build_input_os_export" />
-        <sbsInput refid="build_input_os_tools" />
-        <sbsInput refid="build_input_os_winscw" />
-        <sbsInput refid="build_input_os_armv5" />
-    </hlm:sbsbuild>
-
-For configuration name os in the system definition file, it will take the list of raptor input
-as defined with sbs.os, then it will execute each sbsinput as separate sbs calls with the arguments
-extracted from the corresponding reference id.
-
-Overriding default raptor arguments
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-In case the default argument is not enough for the user requirements, this could be overriden by
-redefining the reference of a particular sbsoptions will provide the user to change the arguments.
-
-For example, if the user just wants to pass debug flag for armv5 raptor inputs, the raptor input 
-
-.. code-block:: xml
-
-    <!-- Mainbuild common sbs options -->
-    <hlm:sbsoptions id="armv5CommonSBS">
-        <argset refid="commonSBS" />
-        <arg line="-c armv5" />
-    </hlm:sbsoptions>
-
-
-could be redefined as below in the user configuration,
-
-.. code-block:: xml
-
-    <!-- Mainbuild common sbs options -->
-    <hlm:sbsoptions id="armv5CommonSBS">
-        <argset refid="commonSBS" />
-        <arg line="-c armv5" />
-        <arg line="-d" />
-    </hlm:sbsoptions>
-
-This would add the debug flag in all the raptor configuration which is using armv5CommonSBS.
\ No newline at end of file
--- a/buildframework/helium/sf/java/sbs/sbscoverity.rst	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-.. index::
-  module: Configuring Coverity Prevent Tool with SBS
-
-==========================================
-Configuring Coverity Prevent Tool with SBS
-==========================================
-
-.. contents::
-
-This document describes requirements and how to run coverity prevent tool with sbs builds using helium. 
-
-Requirements
------------------
-
-Please go through "Configuring Raptor (SBS)" before proceeding into this document.
-
-
-Implementation
------------------
-- Coverity prevent tool commands are integrated with SBS task. 
-- Before starting the build we need to setup the property enabled.coverity=true to enable the coverity prevent tool with build.
-- Coverity task extends the "sbstask", so what ever the arguments we pass for sbstask will remain same for coverity tool also.
-- For example 
-
-.. code-block:: xml
-        
-        <hlm:coveritybuild  sbsinput="@{sbs.input}" 
-                            sysdeffile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml"
-                            layerpatternsetref="${sbs.patternset}" 
-                            workingdir="${build.drive}/" 
-                            execute="true"
-                            failonerror="false"
-                            outputlog="${sbs.log.file}" 
-                            cleanlog = "${sbs.clean.log}"
-                            erroroutput="${sbs.log.file}.sbs_error.log"
-                            statslog="${sbs.log.file}.info.xml">
-                <hlm:coverityoptions refid="coverity.build.options"/>
-        </hlm:coveritybuild>
-     
-- In above example coverity prevent tool is integrated with sbs using task "coveritybuild".
-- This task is slightly difference from sbstask as it accepts the coverity tool parameters required while running coverity tool.
-- In the above example we have mentioned "coverity.build.options" which are required for cov-build command.
-- coverityoptions datatype will follow below syntax.
-
-.. code-block:: xml
-        
-        <hlm:coverityoptions id="coverity.build.options">
-            <arg name="--config" value="${coverity.config.dir}/coverity_config.xml"/>
-            <arg name="--dir" value="${coverity.inter.dir}"/>
-            <arg name="--auto-diff" value=""/>
-            <arg name="--preprocess-first" value=""/>
-            <arg name="--record-only" value=""/>
-        </hlm:coverityoptions>
-
-- Internally "coveritybuild" task will run the "cov-build" with parameters passed with "<hlm:coverityoptions>" datatype and sbs commands.
-- Above arguments are passed by default in helium. If it is required to remove/change the default parameters (by helium)into cov-build, we need to override the datatype "coverityoptions".
-
-- Command resulted for above example is shown below with "@{sbs.input} = dfs_build_input_armv5".
-
-    | cov-build.exe --auto-diff  --record-only  --config Y:/output/coverity/config/coverity_config.xml 
-    | --preprocess-first  --dir Y:/output/coverity/intermidiate sbs -s Y:/output/build/canonical_system_definition_dfs_build.xml 
-    | -c armv5 --filters=FilterMetadataLog -k --logfile Y:/output/logs/compile/ido_helloworld_tb92_blr_ci_9.2.30_armv5_dfs_build.log 
-    | --makefile=Y:/output/logs/compile/ido_helloworld_tb92_blr_ci_9.2.30_armv5_dfs_build
-    
-Note: 
---------------------
-- Helium also supports other coverity tool commands. Please refer to section to "Coverity Prevent Tool" section.
-- Coverity tool prevent tool can't run with emake. emake options are disabled with <hlm:coveritybuild> task if "build.system=sbs-ec".
-
-
--- a/buildframework/helium/sf/java/sbs/sbsctc.rst	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-.. index::
-  module: Configuring CTC for SBS
-
-=======================
-Configuring CTC for SBS
-=======================
-
-The following commands will generate mon.sym files in the root of your build area which are sent to the ATS server to generate coverage information.
-
-Clean components:
-
-hlm compile-main -Dbuild.drive=z: -Dsysdef.configurations.list=build_ctc_clean -Dbuild.system=sbs
-
-Build for CTC:
-
-hlm compile-main -Dbuild.drive=z: -Dsysdef.configurations.list=build_ctc -Dsbs.build.ctc=true -Dbuild.system=sbs
-
-Ant configuration:
-
-.. code-block:: xml
-        
-    <hlm:sbsoptions id="commonSBS">
-        <arg line="-k" />
-        <arg name="--filters" value="FilterMetadataLog"/>
-    </hlm:sbsoptions>
-    
-    <hlm:sbsoptions id="armv5_CTC_SBS">
-            <argset refid="commonSBS" />
-            <arg line="-c armv5_udeb" />
-    </hlm:sbsoptions>
-    
-    <hlm:sbsinput id="armv5-ctc-sbs">
-        <sbsoptions refid="armv5_CTC_SBS" />
-    </hlm:sbsinput>
-
-    <hlm:sbsinput id="build_ctc_input_armv5">
-        <sbsInput refid="armv5-ctc-${build.system}" />
-        <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_build_ctc.log" />
-        </sbsOptions>
-    </hlm:sbsinput>
-
-    <hlm:sbsbuild id="sbs.build_ctc">
-        <sbsInput refid="build_ctc_input_armv5" />
-    </hlm:sbsbuild>
-
-    <hlm:sbsoptions id="cleanCommon">
-            <arg line="REALLYCLEAN" />
-            <arg line="-c armv5" />
-    </hlm:sbsoptions>
-
-    <hlm:sbsoptions id="armv5Clean">
-        <argset refid="cleanCommon" />
-    </hlm:sbsoptions>
-
-    <hlm:sbsinput id="armv5-sbs-clean">
-        <sbsoptions refid="armv5Clean" />
-    </hlm:sbsinput>
-    
-    <hlm:sbsinput id="build_input_clean_armv5">
-        <sbsInput refid="armv5-${build.system}-clean" />
-        <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_build_clean.log" />
-            <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_build_clean" />
-        </sbsOptions>
-    </hlm:sbsinput>
-
-    <hlm:sbsbuild id="sbs.build_ctc_clean">
-        <sbsInput refid="build_input_clean_armv5" />
-    </hlm:sbsbuild> 
\ No newline at end of file
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/SAXSysdefParser.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/SAXSysdefParser.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,32 +1,34 @@
 /*
-* 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: 
-*
-*/
- 
+ * 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;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 import org.apache.tools.ant.BuildException;
+import org.dom4j.Attribute;
+import org.dom4j.DocumentException;
 import org.dom4j.Element;
-import org.dom4j.Attribute;
-import org.dom4j.ElementPath;
 import org.dom4j.ElementHandler;
+import org.dom4j.ElementPath;
 import org.dom4j.io.SAXReader;
-import org.dom4j.DocumentException;
-
-import java.io.*;
-import java.util.*;
 
 /**
  * Parses the sysdef config file and extracts the available configurations
@@ -38,15 +40,16 @@
 
     /**
      * Constructor
+     * 
      * @param fileName - name of the sysdef file to parse
      */
     public SAXSysdefParser(File fileName) {
-        
+
         sysdefFile = fileName;
     }
-    
+
     public List<String> getLayers() {
-        if (!initialized ) {
+        if (!initialized) {
             initialized = true;
             parseConfig("layer");
             if (layers == null) {
@@ -58,33 +61,33 @@
 
     /**
      * Constructor
+     * 
      * @return list of available configurations that can be built.
-     */    
-     public void parseConfig(String nodeToGet) {
+     */
+    public void parseConfig(String nodeToGet) {
         layers = new ArrayList<String>();
         SAXReader reader = new SAXReader();
-            reader.addHandler( "/SystemDefinition/systemModel/" + nodeToGet,
-                new ElementHandler() {
-                    public void onStart(ElementPath path) {
-                    }
-                    public void onEnd(ElementPath path) {
-                        Element row = path.getCurrent();
-                        Iterator itr = row.attributeIterator();
-                        while (itr.hasNext())
-                        {
-                            Attribute child = (Attribute) itr.next();
-                            String attrName = child.getQualifiedName();
-                            if (attrName.equals("name")) {
-                                layers.add(child.getValue());
-                            }
-                        }
-                        row.detach();
+        reader.addHandler("/SystemDefinition/systemModel/" + nodeToGet, new ElementHandler() {
+            public void onStart(ElementPath path) {
+            }
+
+            public void onEnd(ElementPath path) {
+                Element row = path.getCurrent();
+                Iterator itr = row.attributeIterator();
+                while (itr.hasNext()) {
+                    Attribute child = (Attribute) itr.next();
+                    String attrName = child.getQualifiedName();
+                    if (attrName.equals("name")) {
+                        layers.add(child.getValue());
                     }
                 }
-            );
+                row.detach();
+            }
+        });
         try {
             reader.read(sysdefFile);
-        } catch (DocumentException e) {
+        }
+        catch (DocumentException e) {
             e.printStackTrace();
         }
     }
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/SBSBuildList.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/SBSBuildList.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,14 +17,16 @@
 
 package com.nokia.helium.sbs.ant;
 
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
+import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.List;
-import java.util.HashMap;
-import com.nokia.helium.sbs.ant.types.*;
-import com.nokia.helium.sbs.ant.taskdefs.*;
+
 import org.apache.log4j.Logger;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+
+import com.nokia.helium.sbs.ant.types.SBSBuild;
+import com.nokia.helium.sbs.ant.types.SBSInput;
 
 /**
  * This is the final class to store the sbs build list across the ant configurations.
@@ -34,7 +36,7 @@
     private static HashMap<Object, SBSBuild> sbsBuildMap;
 
     private static Logger log = Logger.getLogger(SBSBuildList.class);
-
+    
     private SBSBuildList() {
     }
     
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/GetSBSInputsTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/GetSBSInputsTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,10 +18,12 @@
 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.*;
+
+import com.nokia.helium.sbs.ant.SBSBuildList;
+import com.nokia.helium.sbs.ant.types.SBSInput;
 
 /**
  * This task provide a way to get the list of sbs command input for a particular
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/SBSTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/SBSTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,42 +17,32 @@
 
 package com.nokia.helium.sbs.ant.taskdefs;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Hashtable;
 import java.util.List;
-import org.w3c.dom.*;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.*;
-import javax.xml.transform.dom.*;
-import javax.xml.transform.stream.*;
-import java.io.FileWriter;
-import java.text.DecimalFormat;
-import java.util.Date;
-import com.nokia.helium.core.plexus.AntStreamConsumer;
-import java.io.File;
+
+import org.apache.log4j.Logger;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.PatternSet;
 
 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;
-import org.apache.tools.ant.types.PatternSet;
+import com.nokia.helium.core.plexus.AntStreamConsumer;
 import com.nokia.helium.sbs.SAXSysdefParser;
 import com.nokia.helium.sbs.SBSCommandBase;
 import com.nokia.helium.sbs.SBSException;
-import java.util.ArrayList;
-import java.util.Hashtable;
+import com.nokia.helium.sbs.ant.types.SBSInput;
+import com.nokia.helium.sbs.ant.types.SBSMakeOptions;
 import com.nokia.helium.sbs.plexus.SBSErrorStreamConsumer;
-import java.util.Collection;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.IOException;
 
 /**
- * This task is to execute the actual sbs commands 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.
+ * This task is to execute the actual sbs commands 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:
@@ -75,233 +65,237 @@
     private File errorFile;
     private String logSuffix;
     private File outputLogName;
-    private File statsLog;
     private boolean executeCmd = true;
     private boolean failOnError = true;
     private boolean addMakeOptions = true;
-    private Date startTime;
-    private Date endTime;
     private SBSCommandBase sbsCmd = new SBSCommandBase();;
     private String errorPattern;
-    
-    
-   
-    public SBSCommandBase getSbsCmd() { return sbsCmd; }
+
+    public SBSCommandBase getSbsCmd() {
+        return sbsCmd;
+    }
 
     /**
-     *  Helper function to set the clean log file. The cleanlog file captures the 
-     *  clean output from raptor and stores into a separate log. This is being used
-     *  to backtrace the error information to associate the components. The clean log 
-     *  contains the list of files has to be cleaned by the raptor command for a
-     *  specific components. An environment varialbe is set which is used by 
-     *  filterMetadata plugin to store the clean log file in python. 
+     * Helper function to set the clean log file. The cleanlog file captures the clean output from
+     * raptor and stores into a separate log. This is being used to backtrace the error information
+     * to associate the components. The clean log contains the list of files has to be cleaned by
+     * the raptor command for a specific components. An environment varialbe is set which is used by
+     * filterMetadata plugin to store the clean log file in python.
+     * 
      * @param logPath, path of the clean log file.
      * @deprecated
      */
     @Deprecated
     public void setCleanLog(String logPath) {
-        //cleanLog = logPath;
+        // cleanLog = logPath;
         log("The usage of the cleanLog attribute is deprecated.");
     }
 
     /**
-     *  Helper function to set the what log file. The what log file captures the 
-     *  what output from raptor and stores into a separate log. This is being used
-     *  to backtrace the error information to associate the components. The clean log 
-     *  contains the list of files has to be cleaned by the raptor command for a
-     *  specific components. An environment varialbe is set which is used by 
-     *  filterMetadata plugin to store the clean log file in python. 
+     * Helper function to set the what log file. The what log file captures the what output from
+     * raptor and stores into a separate log. This is being used to backtrace the error information
+     * to associate the components. The clean log contains the list of files has to be cleaned by
+     * the raptor command for a specific components. An environment varialbe is set which is used by
+     * filterMetadata plugin to store the clean log file in python.
+     * 
      * @param logPath, path of the clean log file.
      * @deprecated
      */
     @Deprecated
     public void setWhatLog(String logPath) {
-        //whatLog = logPath;
+        // whatLog = logPath;
         log("The usage of the whatLog attribute is deprecated.");
     }
 
     /**
-     *  Helper function to set the output log file name. Path of the output log
-     *  where the raptor command output to be stored. This would be obtained from
-     *  sbsinput, if the raptor argument --logfile set.
+     * Helper function to set the output log file name. Path of the output log where the raptor
+     * command output to be stored. This would be obtained from sbsinput, if the raptor argument
+     * --logfile set.
+     * 
      * @param logName, name of the logfile to store the raptor output.
      */
     public void setOutputLog(File logName) {
         outputLogName = logName;
     }
-    
+
     /**
      * To get the output log.
+     * 
      * @return
      */
     public File getOutputLog() {
-        return outputLogName ;
+        return outputLogName;
     }
-    
-    
 
     /**
-     *  Helper function to set the statistics info of the raptor command. The
-     *  stats file contains how long the build being executed, the log file for
-     *  which the stats is obtained. Used during scanlog generation from template file.
-     *  Once ORM is working an additional table could be created which stores the 
-     *  statistics information, in which case, there won't be the need for the
-     *  statistics file.
+     * Helper function to set the statistics info of the raptor command. The stats file contains how
+     * long the build being executed, the log file for which the stats is obtained. Used during
+     * scanlog generation from template file. Once ORM is working an additional table could be
+     * created which stores the statistics information, in which case, there won't be the need for
+     * the statistics file.
+     * 
      * @param log name of the logfile to store the raptor command statistics information.
      * @deprecated
      */
     @Deprecated
     public void setStatsLog(File log) {
-        statsLog = log;
+//        statsLog = log;
     }
-    
 
     /**
-     *  Helper function to set the sbsinput name for which the sbs to be executed.
-     *  The sbsinput contains the raptor parameter both the sbs options and sbs make options.
+     * Helper function to set the sbsinput name for which the sbs to be executed. The sbsinput
+     * contains the raptor parameter both the sbs options and sbs make options.
+     * 
      * @param inputName name of the sbs input which contains the list of sbs parameters.
      */
     public void setSBSInput(String inputName) {
         sbsInputName = inputName;
     }
-    
+
     /**
      * To get the sbs name.
+     * 
      * @return
      */
     public String getSBSInput() {
-        return sbsInputName ;
+        return sbsInputName;
     }
-    
-    
 
     /**
-     *  Helper function to set the sbs error log file path. The error log file contains
-     *  the errors captured from the raptor error stream and processed separately.
+     * Helper function to set the sbs error log file path. The error log file contains the errors
+     * captured from the raptor error stream and processed separately.
+     * 
      * @param file path of the error output to be stored for the raptor command execution.
      */
     public void setErrorOutput(File file) {
         errorFile = file;
     }
-    
+
     /**
      * To get the error output file.
+     * 
      * @return
      */
     public File getErrorOutput() {
-        return errorFile ;
+        return errorFile;
     }
 
     /**
-     *  Helper function to set the sysdef file path. System definition file contains
-     *  the full list of components to be build with the sbs input. For 1.4.0 schema
-     *  the sysdef file should be already filtered for the corresponding abld configuration
-     *  and the sysdef file associated here contains only layers for which the sbs command
-     *  needs to be executed with sbsinput arguments. 
+     * Helper function to set the sysdef file path. System definition file contains the full list of
+     * components to be build with the sbs input. For 1.4.0 schema the sysdef file should be already
+     * filtered for the corresponding abld configuration and the sysdef file associated here
+     * contains only layers for which the sbs command needs to be executed with sbsinput arguments.
+     * 
      * @param file sysdef file path.
      */
     public void setSysDefFile(File file) {
         sysDefFile = file;
     }
-    
+
     /**
      * To get the sysdef file.
+     * 
      * @return
      */
     public File getSysDefFile() {
-        return sysDefFile ;
+        return sysDefFile;
     }
-    
 
     /**
-     *  Helper function to set the log suffix.
-     *  @param suffix logfile suffix.
+     * Helper function to set the log suffix.
+     * 
+     * @param suffix logfile suffix.
      */
     public void setLogSuffix(String suffix) {
         logSuffix = suffix;
     }
-    
+
     /**
      * To get the logsuffix.
+     * 
      * @return
      */
     public String getLogSuffix() {
-        return logSuffix ;
+        return logSuffix;
     }
 
     /**
-     *  Patternset is used to filter the layers from the sysdef file for which the sbs
-     *  commands need to be executed instead of all the layers in the system definition files.
-     *  This is useful for example in order to execute only the test layer, a patter set could
-     *  contain test*, then all the layers begining with test are matched and passed as 
-     *  raptor input.
-     *  @param id patternset id, for which the patterns to be filtered.
+     * Patternset is used to filter the layers from the sysdef file for which the sbs commands need
+     * to be executed instead of all the layers in the system definition files. This is useful for
+     * example in order to execute only the test layer, a patter set could contain test*, then all
+     * the layers begining with test are matched and passed as raptor input.
+     * 
+     * @param id patternset id, for which the patterns to be filtered.
      */
     public void setLayerPatternSetRef(String id) {
         layerPatternSetRef = id;
     }
-    
+
     /**
      * 
-     * To get the layer pattern set. 
+     * To get the layer pattern set.
+     * 
      * @return
      */
     public String getLayerPatternSetRef() {
-        return layerPatternSetRef ;
+        return layerPatternSetRef;
     }
 
     /**
-     * Helper function to set the current working directory. This would be mostly the
-     * root of the build area.
-     *  @param dir root of the build area location from which to execute the raptor commands.
+     * Helper function to set the current working directory. This would be mostly the root of the
+     * build area.
+     * 
+     * @param dir root of the build area location from which to execute the raptor commands.
      */
     public void setWorkingDir(File dir) {
         workingDir = dir;
     }
-    
+
     /**
      * To get the working dir.
+     * 
      * @return
      */
     public File getWorkingDir() {
-        return workingDir ;
+        return workingDir;
     }
-    
-
 
     /**
-     * Helper function to execute the actual commands or just print the commands and 
-     * not execute the actual commands.
-     *  @param execute true / false if true print and execute the commands, otherwise just
-     *  print the commands.
+     * Helper function to execute the actual commands or just print the commands and not execute the
+     * actual commands.
+     * 
+     * @param execute true / false if true print and execute the commands, otherwise just print the
+     *        commands.
      */
     public void setExecute(boolean execute) {
         executeCmd = execute;
     }
-    
+
     /**
      * To get execute value.
+     * 
      * @return
      */
     public boolean getExecute() {
-        return executeCmd ;
+        return executeCmd;
     }
 
     /**
-     * Helper function to set whether to fail the build or not. 
-     *
+     * Helper function to set whether to fail the build or not.
+     * 
      * @param failBuild true / false - true to fail the build otherwise false.
      */
     public void setFailOnError(boolean failBuild) {
         failOnError = failBuild;
     }
-    
+
     /**
      * To get the failonError value.
+     * 
      * @return
      */
     public boolean getFailOnError() {
-        return failOnError ;
+        return failOnError;
     }
 
     /**
@@ -310,10 +304,10 @@
     protected void setAddMakeOptions(boolean addMakeOptions) {
         this.addMakeOptions = addMakeOptions;
     }
-    
-    
+
     /**
      * To get the error Pattern.
+     * 
      * @return
      */
     protected String getErrorStreamPattern() {
@@ -321,7 +315,8 @@
     }
 
     /**
-     *  Execute the sbs commands from sbsinput.  
+     * Execute the sbs commands from sbsinput.
+     * 
      * @throws BuildException
      */
     public void execute() {
@@ -334,20 +329,21 @@
             if (errorFile == null) {
                 log.debug("redirecting error to Antstream");
                 sbsCmd.addErrorLineHandler(new AntStreamConsumer(this));
-            } else {
+            }
+            else {
                 sbsErrorConsumer = new SBSErrorStreamConsumer(errorFile, getErrorStreamPattern());
                 log.debug("redirecting error to file stream");
                 sbsCmd.addErrorLineHandler(sbsErrorConsumer);
             }
-        } catch (java.io.FileNotFoundException ex) {
-            log("file path: " + errorFile + "Not valid" );
         }
-        
-        startTime = new Date();
+        catch (java.io.FileNotFoundException ex) {
+            log("file path: " + errorFile + "Not valid");
+        }
+
         try {
             String cmdLine = getSBSCmdLine();
             if (cmdLine == null) {
-                // this happens in case there is nothing to be done, let's just run
+                // this happens in case there is nothing to be built, let's just run
                 // sbs anyway so the output log is generated
                 cmdLine = " --logfile " + getOutputLog().getAbsolutePath();
             }
@@ -355,43 +351,41 @@
             if (executeCmd) {
                 sbsCmd.execute(cmdLine);
             }
-        } catch (SBSException sex) {
+        }
+        catch (SBSException sex) {
             log.debug("SBS exception occured during sbs execution", sex);
             if (failOnError) {
                 throw new BuildException("exception during SBS execution", sex);
             }
-        } finally {
-            //Called to update the error stream, better would be the commandbase
-            //handling the closing of streams in case of exceptions.
+        }
+        finally {
+            // Called to update the error stream, better would be the commandbase
+            // handling the closing of streams in case of exceptions.
             if (sbsErrorConsumer != null) {
                 sbsErrorConsumer.close();
             }
         }
-        endTime = new Date();
-        /*if (statsLog != null) {
-            updateSBSLogStatistics(statsLog, outputLogName, startTime, endTime);
-        }*/
     }
 
     /**
-     * Internal function to get the filtered layers by
-     * processing the system definition file with list of matched layers. 
+     * Internal function to get the filtered layers by processing the system definition file with
+     * list of matched layers.
      * 
-     * @return list of filtered layers from the sysdef file for which
-     * the raptor commands to be executed.
+     * @return list of filtered layers from the sysdef file for which the raptor commands to be
+     *         executed.
      */
     private List<String> getFilteredLayers() {
         List<String> filteredLayers = null;
         if (layerPatternSetRef != null) {
             Hashtable references = getProject().getReferences();
-            Object layerPatternSetObject = references.get(layerPatternSetRef); 
-            if ( layerPatternSetObject != null && ! (layerPatternSetObject instanceof PatternSet)) {
+            Object layerPatternSetObject = references.get(layerPatternSetRef);
+            if (layerPatternSetObject != null && !(layerPatternSetObject instanceof PatternSet)) {
                 throw new BuildException("Layer Pattern set is not of type PatternSet");
             }
             if (layerPatternSetObject != null) {
                 PatternSet layerPatternSet = (PatternSet) layerPatternSetObject;
                 SAXSysdefParser sysDefParser = new SAXSysdefParser(sysDefFile);
-                List<String> fullLayerList = sysDefParser.getLayers(); 
+                List<String> fullLayerList = sysDefParser.getLayers();
                 filteredLayers = new ArrayList<String>();
                 String[] includes = layerPatternSet.getIncludePatterns(getProject());
                 String[] excludes = layerPatternSet.getExcludePatterns(getProject());
@@ -412,62 +406,8 @@
     }
 
     /**
-     * Update the raptor build statistics by generating an xml file containing
-     * the build time and the log file name, used to generate the scanlog. 
-     * @param infoFileName
-     * @param logFileName
-     * @param startTime
-     * @param endTime
-     */
-    protected void updateSBSLogStatistics(File infoFileName, String logFileName, Date startTime, Date endTime) {
-
-        try {
-            DocumentBuilderFactory sbsInfo = DocumentBuilderFactory.newInstance();
-            DocumentBuilder docBuilder = sbsInfo.newDocumentBuilder();
-            Document doc = docBuilder.newDocument();
-            Element root = doc.createElement("sbsinfo");
-            doc.appendChild(root);
-            Element child = doc.createElement("logfile");
-            child.setAttribute("name", logFileName);
-            root.appendChild(child);
-
-            long timeDiff = (endTime.getTime() - startTime.getTime()) / 1000;
-            child = doc.createElement("durationlong");
-            child.setAttribute("time", "" + timeDiff);
-            root.appendChild(child);
-            child = doc.createElement("duration");
-            int hours = (int) (timeDiff / 3600);
-            int minutesSeconds = (int)(timeDiff % 3600);
-            int minutes = minutesSeconds / 60;
-            int seconds = minutesSeconds % 60;
-            DecimalFormat decimalFormat =  new DecimalFormat();
-            decimalFormat.setMinimumIntegerDigits(2);
-            String duration = decimalFormat.format(hours) + "H:" +  
-                    decimalFormat.format(minutes) +  "M:"  + decimalFormat.format(seconds) + "S";
-            //Todo: handle if the time difference is greater than 24 hours
-            child.setAttribute("time", duration);
-            root.appendChild(child);
-            Transformer transformer = TransformerFactory.newInstance().newTransformer();
-            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
-            FileWriter sbsWriter = new FileWriter(infoFileName);
-            StreamResult result = new StreamResult(sbsWriter);
-            DOMSource sbsSource = new DOMSource(doc);
-            transformer.transform(sbsSource, result);
-        } catch (ParserConfigurationException ex) {
-            log.debug("ParserConfigurationException while xml writing sbs log info", ex);
-        } catch (TransformerConfigurationException ex) {
-            log.debug("TransformerConfigurationException while xml writing sbs log info", ex);
-        } catch (IOException ex) {
-            log.debug("IOException while xml writing sbs log info", ex);
-        } catch (TransformerException ex) {
-            log.debug("TransformerException while xml writing sbs log info", ex);
-        }
-    }
-
-
-    /**
-     * Internal function to find the included layer patterns. 
-     *
+     * Internal function to find the included layer patterns.
+     * 
      * @param text - layer name to be compared with
      * @param includes - compare the layer name with the includes list.
      * @return true if the text containing layer name to be included.
@@ -475,7 +415,8 @@
     private boolean isIncluded(String text, String[] includes) {
         if (includes == null) {
             return true;
-        } else {
+        }
+        else {
             for (String pattern : includes) {
                 if (text.matches(pattern)) {
                     return true;
@@ -486,8 +427,8 @@
     }
 
     /**
-     * Internal function to find the excluded layer patterns. 
-     *
+     * Internal function to find the excluded layer patterns.
+     * 
      * @param text - layer name to be compared with
      * @param excludes - compare the layer name with the excludes list.
      * @return true if the text containing layer name to be excluded.
@@ -502,13 +443,12 @@
         }
         return false;
     }
-    
-    
+
     /**
      * To Validate the parameters passed.
      */
     protected void validateParameter() {
-        
+
         if (getSBSInput() == null) {
             throw new BuildException("'sbsInputName' is not defined");
         }
@@ -521,39 +461,42 @@
         if (getOutputLog() == null) {
             throw new BuildException("'OutputLog' must be set");
         }
-        
+
     }
-    
+
     /**
      * To get the SBS command line parameters.
+     * 
      * @return
      */
     protected String getSBSCmdLine() {
-        
-        List <String> filteredLayers = getFilteredLayers();
-        
+
+        List<String> filteredLayers = getFilteredLayers();
+
         Object refObject = getProject().getReferences().get(sbsInputName);
         if (refObject == null) {
             throw new BuildException("invalid sbs input reference: " + sbsInputName);
         }
-        if ( refObject != null && ! (refObject instanceof SBSInput)) {
+        if (refObject != null && !(refObject instanceof SBSInput)) {
             throw new BuildException("sbs input name " + sbsInputName + "is not valid");
         }
-        SBSInput sbsInput = (SBSInput)refObject;
+        SBSInput sbsInput = (SBSInput) refObject;
         StringBuffer cmdOptions = new StringBuffer();
         VariableSet sbsOptions = sbsInput.getFullSBSOptions();
         cmdOptions.append(" -s " + sysDefFile);
-        Collection<MappedVariable> variableList = sbsOptions.getVariables(); 
-        if (sbsOptions != null ) {
-           if (variableList.isEmpty()) {
-               throw new BuildException("sbsoptions cannot be empty for input: " + sbsInputName);
-           }
+        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 (MappedVariable variable : variableList) {
             if (variable.getParameter().startsWith("--logfile")) {
-                this.log("The following command line argument will be ignored: " + variable.getParameter(), Project.MSG_WARN);
-            } else {
+                this.log("The following command line argument will be ignored: "
+                    + variable.getParameter(), Project.MSG_WARN);
+            }
+            else {
                 cmdOptions.append(" " + variable.getParameter());
             }
         }
@@ -565,7 +508,7 @@
             if (ppThreads != null) {
                 cmdOptions.append(" -j " + ppThreads);
             }
-            variableList = sbsMakeOptions.getVariables(); 
+            variableList = sbsMakeOptions.getVariables();
             for (MappedVariable variable : variableList) {
                 cmdOptions.append(" --mo=");
                 cmdOptions.append(variable.getParameter());
@@ -575,14 +518,15 @@
             if (filteredLayers.isEmpty()) {
                 log("Warning: No matching layers to build from system definition file, skipped");
                 return null;
-            } else {
+            }
+            else {
                 for (String layer : filteredLayers) {
                     cmdOptions.append(" -l " + layer);
                 }
             }
         }
         return cmdOptions.toString();
-        
+
     }
-    
+
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSBuild.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSBuild.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,13 +17,13 @@
  
 package com.nokia.helium.sbs.ant.types;
 
-import org.apache.tools.ant.types.DataType;
-import org.apache.tools.ant.BuildException;
-import java.util.Vector;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.ArrayList;
+import java.util.Vector;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.types.DataType;
 import org.apache.tools.ant.types.Reference;
-import org.apache.log4j.Logger;
 
 
 /**
@@ -49,15 +49,9 @@
  */
 public class SBSBuild extends DataType
 {
-    private static Logger log = Logger.getLogger(SBSBuild.class);
-
     private String name;
 
     private Vector<SBSInput> sbsInputList = new Vector<SBSInput>();
-
-
-    public SBSBuild() {
-    }
     
     /**
      * Set the name of the variable.
@@ -99,7 +93,6 @@
             try {
                 sbsInputObject = refId.getReferencedObject();
             } catch ( BuildException ex) {
-                //log.info("Reference id of sbsinput list is not valid");
                 throw new BuildException("Reference id (" + refId.getRefId() + ") of sbsinput list is not valid");
             }
             if (sbsInputObject != null && sbsInputObject instanceof SBSInput) {
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSInput.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,87 +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: 
-*
-*/
- 
+ * 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.types;
 
-import com.nokia.helium.core.ant.types.VariableSet;
-import com.nokia.helium.core.ant.MappedVariable;
-import com.nokia.helium.core.ant.VariableMap;
 import java.util.Collection;
-import org.apache.tools.ant.BuildException;
 import java.util.Vector;
 
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.DataType;
 import org.apache.tools.ant.types.Reference;
 
+import com.nokia.helium.core.ant.MappedVariable;
+import com.nokia.helium.core.ant.VariableMap;
+import com.nokia.helium.core.ant.types.VariableSet;
+
 /**
- * Helper class to store the variable set (list of variables
- * with name / value pair)
- *
- *   &lt;hlm:sbsinput id=&quot;export-sbs-ec&quot;&gt;
- *       &lt;sbsoptions refid=&quot;exportSBS&quot; /&gt;
- *       &lt;sbsmakeoptions refid=&quot;exportSBSEC&quot; /&gt;
- *   &lt;/hlm:sbsinput&gt;
+ * Helper class to store the variable set (list of variables with name / value pair)
+ * 
+ * &lt;hlm:sbsinput id=&quot;export-sbs-ec&quot;&gt; &lt;sbsoptions refid=&quot;exportSBS&quot;
+ * /&gt; &lt;sbsmakeoptions refid=&quot;exportSBSEC&quot; /&gt; &lt;/hlm:sbsinput&gt;
  * 
  * @ant.type name="sbsinput" category="SBS"
  */
 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>();
 
     /**
-     * Creates an empty variable element and adds 
-     * it to the variables list
+     * Creates an empty variable element and adds it to the variables list
+     * 
      * @return empty Variable pair
      */
     public VariableSet createSBSOptions() {
         SBSInput sbsInput = new SBSInput();
-        VariableSet varSet =  new VariableSet();
+        VariableSet varSet = new VariableSet();
         sbsInput.addSBSOptions(varSet);
         sbsInputList.add(sbsInput);
         return varSet;
     }
 
     /**
-     * Adds sbs options to variableset. Called by ant
-     * whenever the varSet is added to current sbs options. 
+     * Adds sbs options to variableset. Called by ant whenever the varSet is added to current sbs
+     * options.
+     * 
      * @param varSet, variable set to be added to current sbs options.
      */
     public void addSBSOptions(VariableSet varSet) {
         sbsOptions.add(varSet);
     }
-    
+
     /**
-     * Creates an empty sbs make options and add it
-     * sbs make options list
+     * Creates an empty sbs make options and add it sbs make options list
+     * 
      * @return empty Variable pair
      */
     public VariableSet createSBSMakeOptions() {
         SBSInput sbsInput = new SBSInput();
-        SBSMakeOptions varSet =  new SBSMakeOptions();
+        SBSMakeOptions varSet = new SBSMakeOptions();
         sbsInput.addSBSMakeOptions(varSet);
         sbsInputList.add(sbsInput);
         return varSet;
     }
 
     /**
-     * Adds sbs make options to variableset. Called by ant
-     * whenever the make option is added to current sbs options. 
+     * Adds sbs make options to variableset. Called by ant whenever the make option is added to
+     * current sbs options.
+     * 
      * @param varSet, variable set to be added to current sbs options.
      */
     public void addSBSMakeOptions(SBSMakeOptions varSet) {
@@ -89,8 +89,9 @@
     }
 
     /**
-     * Creates a new sbsinput type for the current, and the created
-     * sbs input is only containing refid of sbs options / sbs makeoptions.
+     * Creates a new sbsinput type for the current, and the created sbs input is only containing
+     * refid of sbs options / sbs makeoptions.
+     * 
      * @return empty sbsinput type.
      */
     public SBSInput createSBSInput() {
@@ -100,8 +101,8 @@
     }
 
     /**
-     * Helper function to provide the sbs options associated with this
-     * sbsinput.
+     * Helper function to provide the sbs options associated with this sbsinput.
+     * 
      * @return sbs options associated with this sbs input.
      */
     public Vector<VariableSet> getSBSOptions() {
@@ -109,8 +110,8 @@
     }
 
     /**
-     * Helper function to provide the sbs make options associated with this
-     * sbsinput.
+     * Helper function to provide the sbs make options associated with this sbsinput.
+     * 
      * @return sbs make options associated with this sbs input.
      */
     public Vector<SBSMakeOptions> getSBSMakeOptions() {
@@ -118,8 +119,7 @@
     }
 
     /**
-     * Internal function to validate the sbsinput and throw exception
-     * if the input is not valid.
+     * Internal function to validate the sbsinput and throw exception if the input is not valid.
      */
     private void validateInput() {
         if (getRefid() != null && (!sbsMakeOptions.isEmpty() || !sbsOptions.isEmpty())) {
@@ -128,9 +128,9 @@
     }
 
     /**
-     * Internal function to recursively gothrough the sbs options refered by
-     * this sbsinput and provides the complete list of variables associated with
-     * this input.
+     * Internal function to recursively gothrough the sbs options refered by this sbsinput and
+     * provides the complete list of variables associated with this input.
+     * 
      * @return collection of variableset associatied with this sbsinput.
      */
     private Vector<VariableSet> getSBSOptions(SBSInput sbsInput) {
@@ -141,13 +141,15 @@
         if (refId != null) {
             try {
                 sbsInputObject = refId.getReferencedObject();
-            } catch ( BuildException ex) {
-                //log.info("Reference id of sbsinput list is not valid");
-                throw new BuildException("Reference id (" + refId.getRefId() + ") of sbsinput list is not valid");
+            }
+            catch (BuildException ex) {
+                // log.info("Reference id of sbsinput list is not valid");
+                throw new BuildException("Reference id (" + refId.getRefId()
+                    + ") of sbsinput list is not valid");
             }
             if (sbsInputObject != null && sbsInputObject instanceof SBSInput) {
-                VariableSet options = ((SBSInput)sbsInputObject).getFullSBSOptions();
-                if (options != null ) {
+                VariableSet options = ((SBSInput) sbsInputObject).getFullSBSOptions();
+                if (options != null) {
                     if (fullList == null) {
                         fullList = new Vector<VariableSet>();
                     }
@@ -156,7 +158,7 @@
             }
         }
         Vector<VariableSet> optionsList = sbsInput.getSBSOptions();
-        if (optionsList != null ) {
+        if (optionsList != null) {
             if (fullList == null) {
                 fullList = new Vector<VariableSet>();
             }
@@ -166,9 +168,9 @@
     }
 
     /**
-     * Internal function to recursively gothrough the sbs make options refered by
-     * this sbsinput and provides the complete list of sbs make options associated 
-     * with this input.
+     * Internal function to recursively gothrough the sbs make options refered by this sbsinput and
+     * provides the complete list of sbs make options associated with this input.
+     * 
      * @return collection of sbs make options associatied with this sbsinput.
      */
     private Vector<SBSMakeOptions> getSBSMakeOptions(SBSInput sbsInput) {
@@ -178,12 +180,14 @@
         if (refId != null) {
             try {
                 sbsInputObject = refId.getReferencedObject();
-            } catch ( BuildException ex) {
-               throw new BuildException("Reference id (" + refId.getRefId() + ") of sbsinput list is not valid");
+            }
+            catch (BuildException ex) {
+                throw new BuildException("Reference id (" + refId.getRefId()
+                    + ") of sbsinput list is not valid");
             }
             if (sbsInputObject != null && sbsInputObject instanceof SBSInput) {
-                SBSMakeOptions options = ((SBSInput)sbsInputObject).getFullSBSMakeOptions(); 
-                if (options != null ) {
+                SBSMakeOptions options = ((SBSInput) sbsInputObject).getFullSBSMakeOptions();
+                if (options != null) {
                     if (sbsMakeOptionsList == null) {
                         sbsMakeOptionsList = new Vector<SBSMakeOptions>();
                     }
@@ -202,9 +206,9 @@
     }
 
     /**
-     * Internal function to recursively gothrough the sbs make options refered by
-     * this sbsinput and provides the complete list of sbs make options associated 
-     * with this input.
+     * Internal function to recursively gothrough the sbs make options refered by this sbsinput and
+     * provides the complete list of sbs make options associated with this input.
+     * 
      * @return collection of sbs make options associatied with this sbsinput.
      */
     public VariableSet getFullSBSOptions() {
@@ -212,7 +216,7 @@
         VariableSet resultSet = null;
         Vector<VariableSet> currentOptions = getSBSOptions(this);
         if (currentOptions != null && !currentOptions.isEmpty()) {
-            if (fullList == null ) {
+            if (fullList == null) {
                 fullList = new Vector<VariableSet>();
             }
             fullList.addAll(currentOptions);
@@ -220,7 +224,7 @@
         for (SBSInput sbsInput : sbsInputList) {
             Vector<VariableSet> options = getSBSOptions(sbsInput);
             if (options != null && !options.isEmpty()) {
-                if (fullList == null ) {
+                if (fullList == null) {
                     fullList = new Vector<VariableSet>();
                 }
                 fullList.addAll(options);
@@ -240,9 +244,9 @@
     }
 
     /**
-     * Internal function to recursively gothrough the sbs make options refered by
-     * this sbsinput and provides the complete list of sbs make options associated 
-     * with this input.
+     * Internal function to recursively gothrough the sbs make options refered by this sbsinput and
+     * provides the complete list of sbs make options associated with this input.
+     * 
      * @return collection of sbs make options associatied with this sbsinput.
      */
     public SBSMakeOptions getFullSBSMakeOptions() {
@@ -250,7 +254,7 @@
         SBSMakeOptions resultSet = null;
         Vector<SBSMakeOptions> currentOptions = getSBSMakeOptions(this);
         if (currentOptions != null && !currentOptions.isEmpty()) {
-            if (sbsMakeOptionsList == null ) {
+            if (sbsMakeOptionsList == null) {
                 sbsMakeOptionsList = new Vector<SBSMakeOptions>();
             }
             sbsMakeOptionsList.addAll(currentOptions);
@@ -258,13 +262,13 @@
         for (SBSInput sbsInput : sbsInputList) {
             Vector<SBSMakeOptions> options = getSBSMakeOptions(sbsInput);
             if (options != null && !options.isEmpty()) {
-                if (sbsMakeOptionsList == null ) {
+                if (sbsMakeOptionsList == null) {
                     sbsMakeOptionsList = new Vector<SBSMakeOptions>();
                 }
                 sbsMakeOptionsList.addAll(options);
             }
         }
-        if (sbsMakeOptionsList != null ) {
+        if (sbsMakeOptionsList != null) {
             String engine = null;
             String ppThreads = null;
             for (SBSMakeOptions varSet : sbsMakeOptionsList) {
@@ -273,17 +277,19 @@
                 if (currentEngine != null) {
                     if (engine == null) {
                         engine = currentEngine;
-                        if (resultSet == null ) {
+                        if (resultSet == null) {
                             resultSet = new SBSMakeOptions();
                         }
                         resultSet.setEngine(currentEngine);
-                    } else {
-                        if (!engine.equals(currentEngine) ) {
-                            throw new BuildException("inheriting engine types mismatch: " + engine + " != " + currentEngine);
+                    }
+                    else {
+                        if (!engine.equals(currentEngine)) {
+                            throw new BuildException("inheriting engine types mismatch: " + engine
+                                + " != " + currentEngine);
                         }
                     }
                 }
-                if (resultSet == null ) {
+                if (resultSet == null) {
                     resultSet = new SBSMakeOptions();
                 }
                 if (ppThreads == null && currentThread != null) {
@@ -297,14 +303,15 @@
         }
         return resultSet;
     }
-    
+
     /**
      * Helper function to return the collection of variabes associated with this
+     * 
      * @return collection of sbs options associatied with this sbsinput.
      */
     public Collection<MappedVariable> getVariables() {
         Collection<MappedVariable> varList = null;
-        VariableSet  options = getFullSBSOptions();
+        VariableSet options = getFullSBSOptions();
         if (options != null) {
             varList = options.getVariables();
         }
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSMakeOptions.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSMakeOptions.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,10 +17,12 @@
  
 package com.nokia.helium.sbs.ant.types;
 
-import com.nokia.helium.core.ant.types.VariableSet;
+import java.util.List;
+
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.BuildException;
-import java.util.List;
+
+import com.nokia.helium.core.ant.types.VariableSet;
 
 /**
  * Helper class to store the variable set (list of variables
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/plexus/SBSErrorStreamConsumer.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/plexus/SBSErrorStreamConsumer.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,14 +16,15 @@
 */
 package com.nokia.helium.sbs.plexus;
 
+import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.io.BufferedWriter;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.log4j.Logger;
+
 import com.nokia.helium.core.plexus.FileStreamConsumer;
 
 /**
--- a/buildframework/helium/sf/java/sbs/tests/antunit/sbs_default_config.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/tests/antunit/sbs_default_config.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -37,8 +37,11 @@
     </hlm:sbsbuild>
     
     <hlm:sbsbuild id="sf_build">
+        <sbsInput refid="mainbuild-sbs" />
+    </hlm:sbsbuild>
+    
+    <hlm:sbsbuild id="sf_build2">
         <sbsInput refid="tools-sbs" />
-        <sbsInput refid="mainbuild-sbs" />
     </hlm:sbsbuild>
     
     <!-- In future migrationg to 3.0 schema <sbsbuild> would also to handle layers and filters 
--- a/buildframework/helium/sf/java/sbs/tests/antunit/test_sbs_input.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/tests/antunit/test_sbs_input.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -76,32 +76,45 @@
     <import file="${project.dir}/sbs_default_config.ant.xml" />
 
     <target name="test-7952">
+        <echo message="-----------test-7952-----------" />
         <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
         <hlm:sbstask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
             workingDir="${working.dir}" execute="false"/>
+        <au:assertLogContains text="-e emake" />
     </target>
 
     <target name="test-without-sysdef">
         <property name="build.system" value="sbs" />
-        <au:expectfailure>
-            <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
+        <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
+       <au:expectfailure expectedMessage="'System Definition' file is missing" >
             <hlm:sbstask outputLog="tmp" sbsinput="pf_7952" workingDir="${working.dir}" execute="false"/>
         </au:expectfailure>
     </target>
 
     <target name="test-without-working-dir">
         <property name="build.system" value="sbs" />
-        <au:expectfailure>
-            <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
+        <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
+        <au:expectfailure expectedMessage="'workingDir' must be set" >
             <hlm:sbstask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" execute="false" />
         </au:expectfailure>
     </target>
 
     <target name="test-sbs">
         <property name="build.system" value="sbs" />
-        <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
+        <hlm:getsbsinputs config="sf_build" outputProperty="sbs-inputs"/>
         <hlm:sbstask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
             workingDir="${working.dir}" execute="false"/>
+        <au:expectfailure>
+            <au:assertLogContains text="-e emake" />
+        </au:expectfailure>    
+    </target>
+    
+    <target name="test-tools-sbs">
+        <property name="build.system" value="sbs" />
+        <hlm:getsbsinputs config="sf_build2" outputProperty="sbs-inputs"/>
+        <hlm:sbstask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
+            workingDir="${working.dir}" execute="false"/>
+        <au:assertLogContains text="-c tools" />
     </target>
 
     <target name="test-sbs-ec">
@@ -109,6 +122,7 @@
         <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
         <hlm:sbstask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
             workingDir="${working.dir}" execute="false"/>
+        <au:assertLogContains text="-e emake" />
     </target>
 
     <target name="test-all-layers">
@@ -116,15 +130,17 @@
         <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
         <hlm:sbstask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
             workingDir="${working.dir}" execute="false"/>
+        <au:assertLogContains text="test.sysdef.xml" />
     </target>
 
     <target name="test-include-layers">
         <property name="build.system" value="sbs" />
         <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
         <hlm:sbstask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
-            layerPatternSetRef="includeLayerPatternSet" workingDir="${working.dir}"
+            layerPatternSetRef="includeLayerPatternSet" workingDir="${working.dir}" 
             execute="false"/>
         <au:assertLogContains text="sbs" />
+        <au:assertLogContains text="-l include_layer_set" />
         <au:expectfailure>
             <au:assertLogContains text="-l exclude_layer_set" />
         </au:expectfailure>
@@ -142,6 +158,9 @@
         <hlm:sbstask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
             layerPatternSetRef="excludeLayerPatternSet" 
             workingDir="${working.dir}" execute="false"/>
+        <au:expectfailure>
+            <au:assertLogContains text="-l exclude_layer_set" />
+        </au:expectfailure>
         <au:assertLogContains text="-l include_layer_set" />
         <au:assertLogContains text="-l include_exclude_matcher" />
         <au:assertLogContains text="-l include_exclude_non-matcher" />
@@ -185,15 +204,15 @@
         <property name="build.system" value="sbs" />
         <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
         <hlm:sbstask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
-            layerPatternSetRef="incExcludeLayerPatternSet" 
+            layerPatternSetRef="incExcludeLayerPatternSet"
             workingDir="${working.dir}" execute="false"/>
         <au:assertLogContains text="-l include_exclude_matcher" />
     </target>
 
     <target name="test-empty-pattern-set">
         <property name="build.system" value="sbs-ec" />
-        <au:expectfailure>
-            <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
+        <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
+	    <au:expectfailure expectedMessage="sbstask doesn't support" > 
             <hlm:sbstask outputLog="tmp" config="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
                 layerPatternSetRef="emptySet" 
                 workingDir="${working.dir}" execute="false"/>
@@ -202,8 +221,8 @@
 
     <target name="test-engine-inheritence1">
         <property name="build.system" value="sbs-ec" />
-        <au:expectfailure>
-            <hlm:getsbsinputs config="inherit1" outputProperty="sbs-inputs"/>
+        <hlm:getsbsinputs config="inherit1" outputProperty="sbs-inputs"/>
+	    <au:expectfailure expectedMessage="engine should not be null" > 
             <hlm:sbstask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
                 workingDir="${working.dir}" execute="false"/>
         </au:expectfailure>
@@ -218,8 +237,8 @@
 
     <target name="test-engine-inheritence3">
         <property name="build.system" value="sbs-ec" />
-        <au:expectfailure>
-            <hlm:getsbsinputs config="inherit3" outputProperty="sbs-inputs"/>
+        <hlm:getsbsinputs config="inherit3" outputProperty="sbs-inputs"/>
+        <au:expectfailure expectedMessage="Config's engine type ec-helium not matching" >
             <hlm:sbstask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
                 workingDir="${working.dir}" execute="false"/>
         </au:expectfailure>
@@ -241,6 +260,7 @@
             <hlm:sbsinput refid="${sbs-inputs}" />
         </hlm:getVariableValue>
         <echo message="${sbs-inputs}" />
+        <au:assertLogContains text="inherit3_sbs_input" />
     </target>
 
     <target name="test-include-def-layer">
@@ -250,6 +270,7 @@
             layerPatternSetRef="includeDefLayerPatternSet" workingDir="${working.dir}"
             execute="false"/>
         <au:assertLogContains text="sbs" />
+        <au:assertLogContains text="-l use_layer_real_Def_layer" />
     </target>
 
     <target name="test-include-error-layer">
@@ -261,7 +282,6 @@
         <au:assertLogContains text="-l use_no_name_layer" />
     </target>
 
-    
     <target name="test-include-no-layer">
         <property name="build.system" value="sbs" />
         <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/AntScmLogger.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,167 @@
+/*
+ * 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;
+
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+
+/**
+ * This class provides an implementation of 
+ * an ScmLogger using Ant logging for
+ * reporting issues.
+ *
+ */
+public class AntScmLogger implements ScmLogger {
+
+    private Task task;
+    
+    /**
+     * Creating an AntScmLogger instance using
+     * a task to log messages.
+     * @param task
+     */
+    public AntScmLogger(Task task) {
+        this.task = task;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void debug(String message) {
+        task.log(message, Project.MSG_DEBUG);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void debug(Throwable cause) {
+        task.log(cause.toString(), Project.MSG_DEBUG);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void debug(String message, Throwable cause) {
+        task.log(message + " " + cause.toString(), Project.MSG_DEBUG);        
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void error(String message) {
+        task.log(message, Project.MSG_ERR);        
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void error(Throwable cause) {
+        task.log(cause.toString(), Project.MSG_ERR);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void error(String message, Throwable cause) {
+        task.log(message + " " + cause.toString(), Project.MSG_ERR);        
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void info(String message) {
+        task.log(message, Project.MSG_INFO);        
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void info(Throwable cause) {
+        task.log(cause.toString(), Project.MSG_INFO);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void info(String message, Throwable cause) {
+        task.log(message + " " + cause.toString(), Project.MSG_INFO);        
+    }
+
+    @Override
+    public boolean isDebugEnabled() {
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isErrorEnabled() {
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isInfoEnabled() {
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isWarnEnabled() {
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void warn(String message) {
+        task.log(message, Project.MSG_WARN);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void warn(Throwable cause) {
+        task.log(cause.toString(), Project.MSG_WARN);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void warn(String message, Throwable cause) {
+        task.log(message + " " + cause.toString(), Project.MSG_WARN);
+    }
+
+}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/BranchAction.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/BranchAction.java	Fri Aug 13 14:59:05 2010 +0300
@@ -55,9 +55,10 @@
     @Override
     public void execute(ScmRepository repository) {
 
-        if (name == null)
+        if (name == null) {
             throw new BuildException("'name' attribute is not defined.");
-
+        }
+        
         ScmManager scmManager = getTask().getScmManager();
         BranchScmResult result;
 
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/ChangelogAction.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/ChangelogAction.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,35 +17,33 @@
 
 package com.nokia.helium.scm.ant.actions;
 
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 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.ChangeSet;
 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;
-
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
 
 /**
- * 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
+ * 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;
@@ -53,7 +51,7 @@
  *     &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 {
@@ -65,7 +63,7 @@
     private String datePattern;
 
     private String logOutput;
-    
+
     private int numDays;
 
     private String startVersion;
@@ -73,7 +71,6 @@
     private String endVersion;
     private File xmlbom;
 
-
     /**
      * Start version
      * 
@@ -132,19 +129,17 @@
      * Output pattern default is log output, to get xml output set logoutput=xml
      * 
      * @ant.not-required
-     */    
-    public void setLogOutput(String logOutput)
-    {
+     */
+    public void setLogOutput(String logOutput) {
         this.logOutput = logOutput;
     }
-    
+
     /**
      * File for xml output of changeset list
      * 
      * @ant.not-required
-     */ 
-    public void setXmlbom(File xmlbom)
-    {
+     */
+    public void setXmlbom(File xmlbom) {
         this.xmlbom = xmlbom;
     }
 
@@ -153,8 +148,7 @@
      */
     @SuppressWarnings("unchecked")
     @Override
-    public void execute(ScmRepository repository) throws ScmException
-    {
+    public void execute(ScmRepository repository) throws ScmException {
         ScmManager scmManager = getTask().getScmManager();
         ScmRevision startRevision = new ScmRevision(startVersion);
         ScmRevision endRevision = new ScmRevision(endVersion);
@@ -163,28 +157,28 @@
         Date start = null;
         Date end = null;
 
-        if (numDays == 0 && (startDate != null || endDate != 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) {
+            }
+            catch (ParseException e) {
                 throw new ScmException("Date Format not supported:" + e.getMessage());
             }
         }
-        else 
-        {
+        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) {
+        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()) {
@@ -192,62 +186,64 @@
         }
         // Output changelog information
         ChangeLogSet changelogSet = result.getChangeLog();
-        if (logOutput != null && logOutput.equals("xml"))
-        {
+        if (logOutput != null && logOutput.equals("xml")) {
             getTask().log(changelogSet.toXML());
         }
-        else if (xmlbom != null)
-        {
+        else if (xmlbom != null) {
             String output = "";
-            for (Object object : changelogSet.getChangeSets())
-            {
+            for (Object object : changelogSet.getChangeSets()) {
                 String revision = "";
-                ChangeSet changeSet = (ChangeSet)object;
-                for (String line : changeSet.toString().split("\n"))
-                {
-                    if (line.contains("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>";
+
+                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";
+            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())
-                {
+                if (xmlbom.exists()) {
                     SAXReader xmlReader = new SAXReader();
                     Document antDoc = xmlReader.read(xmlbom);
-                    for (Iterator iterator = antDoc.selectNodes("//project").iterator(); iterator.hasNext();)
-                    {
+                    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;
+                        for (Iterator iterator2 = antDoc.selectNodes("//baseline").iterator(); iterator2.hasNext();) {
+                            Element e2 = (Element) iterator2.next();
+                            if (e2.getText().equals(getTask().getScmUrl())) {
+                                equal = true;
+                            }
                         }
-                        if (!equal)
+                        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(); }
+            } catch (DocumentException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
         }
-        else
-        {
+        else {
             Iterator iterator = changelogSet.getChangeSets().iterator();
-            while (iterator.hasNext())
-            {
+            while (iterator.hasNext()) {
                 getTask().log(iterator.next().toString());
             }
         }
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/CheckinAction.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/CheckinAction.java	Fri Aug 13 14:59:05 2010 +0300
@@ -60,9 +60,10 @@
     public void execute(ScmRepository repository) throws ScmException {
         ScmManager scmManager = getTask().getScmManager();
 
-        if (message == null)
+        if (message == null) {
             throw new BuildException(
                     "'message attribute has not been defined.'");
+        }
 
         CheckInScmResult result;
         try {
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/CheckoutAction.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/CheckoutAction.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,19 +17,19 @@
 
 package com.nokia.helium.scm.ant.actions;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmRevision;
+import org.apache.maven.scm.ScmTag;
 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.Revision;
 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
@@ -72,13 +72,15 @@
     public void execute(ScmRepository repository) throws ScmException {
         ScmManager scmManager = getTask().getScmManager();
 
-        if (tags.size() > 1)
+        if (tags.size() > 1) {
             throw new ScmException(
                     "You can only specify one tag nested element.");
+        }
 
-        if (revisions.size() > 1)
+        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(
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/ExportAction.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/ExportAction.java	Fri Aug 13 14:59:05 2010 +0300
@@ -71,13 +71,15 @@
     public void execute(ScmRepository repository) throws ScmException {
         ScmManager scmManager = getTask().getScmManager();
 
-        if (getDestPath() == null)
+        if (getDestPath() == null) {
             throw new ScmException("destPath attribute has not been provided.");
-
-        if (tags.size() > 1)
+        }
+        
+        if (tags.size() > 1) {
             throw new ScmException(
                     "You can only specify one tag nested element.");
-
+        }
+        
         ExportScmResult result;
         try {
             if (tags.size() == 0) {
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/RemoveAction.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/RemoveAction.java	Fri Aug 13 14:59:05 2010 +0300
@@ -57,8 +57,9 @@
 
     @Override
     public void execute(ScmRepository repository) throws ScmException {
-        if (message == null)
+        if (message == null) {
             throw new BuildException("message attribute has not been defined.");
+        }
         // if (getBasedir() == null)
         // throw new BuildException("basedir attribute has not been defined.");
 
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/TagAction.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/TagAction.java	Fri Aug 13 14:59:05 2010 +0300
@@ -68,11 +68,13 @@
     public void execute(ScmRepository repository) throws ScmException {
         TagScmResult result;
 
-        if (name == null)
+        if (name == null) {
             throw new BuildException("'name' attribute is not defined.");
+        }
 
-        if (getBasedir() == null)
+        if (getBasedir() == null) {
             throw new BuildException("'basedir' attribute is not defined.");
+        }
 
         try {
             ExtendedScmManager scmManager = (ExtendedScmManager) getTask()
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/UpdateAction.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/UpdateAction.java	Fri Aug 13 14:59:05 2010 +0300
@@ -21,15 +21,15 @@
 
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmRevision;
 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.Revision;
 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.
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/ScmTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/ScmTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -19,14 +19,16 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
+import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.manager.NoSuchScmProviderException;
 import org.apache.maven.scm.manager.ScmManager;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.apache.maven.scm.repository.ScmRepositoryException;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Task;
-import org.apache.maven.scm.ScmException;
 
+import com.nokia.helium.scm.ant.AntScmLogger;
 import com.nokia.helium.scm.ant.actions.AddAction;
 import com.nokia.helium.scm.ant.actions.BranchAction;
 import com.nokia.helium.scm.ant.actions.ChangelogAction;
@@ -76,8 +78,6 @@
 
     private String scmUrl;
 
-    private String basedir;
-
     private List<ScmAction> actions = new ArrayList<ScmAction>();
 
     private boolean verbose;
@@ -88,10 +88,13 @@
     public ScmTask() {
         setTaskName("scm");
 
-        scmManager = new BasicExtendedScmManager();
-
+        BasicExtendedScmManager scmManager = new BasicExtendedScmManager();
+        scmManager.addListener(new AntScmLogger(this));
+        this.scmManager = scmManager;
+        HgScmProviderExt provider = new HgScmProviderExt();
+        
         // Add all SCM providers we want to use
-        scmManager.setScmProvider("hg", new HgScmProviderExt());
+        scmManager.setScmProvider("hg", provider);
     }
 
     public ScmManager getScmManager() {
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/types/LatestTag.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/types/LatestTag.java	Fri Aug 13 14:59:05 2010 +0300
@@ -67,14 +67,16 @@
      */
     @Override
     public String getName() {
-        if (pattern == null)
+        if (pattern == null) {
             throw new BuildException("'pattern' attribute has not been defined.");
+        }
 
         List<Tag> tags = getCleanedList();
         Collections.sort(tags, new TagComparator<Tag>(getPattern()));
         
-        if (tags.isEmpty())
+        if (tags.isEmpty()) {
             throw new BuildException("No tag found.");
+        }
 
         getProject().log("Latest tag: " + tags.get(0).getName());
         return tags.get(0).getName();
@@ -162,8 +164,9 @@
         public int compare(T o1, T o2) {
             getProject().log("Comparing: " + o1.getName() + ">" + o2.getName(), Project.MSG_DEBUG);
             
-            if (o1.getName().equals(o2.getName()))
+            if (o1.getName().equals(o2.getName())) {
                 return 0;
+            }
             Matcher m1 = pVer.matcher(o1.getName());
             Matcher m2 = pVer.matcher(o2.getName());
             m1.matches();
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/info/AbstractInfoCommand.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/info/AbstractInfoCommand.java	Fri Aug 13 14:59:05 2010 +0300
@@ -24,6 +24,7 @@
 import org.apache.maven.scm.command.AbstractCommand;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 
+
 /**
  * The 'hg info' command.
  */
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/info/InfoScmResult.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/info/InfoScmResult.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,46 +1,44 @@
 /*
-* 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:  
-*
-*/
-
+ * 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.maven.scm.command.info;
 
 import org.apache.maven.scm.ScmResult;
 
+
 /**
  * A result provided by the 'hg info' command.
  */
 public class InfoScmResult extends ScmResult {
     private String scmRevision = new String();
-    
-    public InfoScmResult(String commandLine, String providerMessage,
-            String commandOutput, boolean success) {
+
+    public InfoScmResult(String commandLine, String providerMessage, String commandOutput,
+        boolean success) {
         super(commandLine, providerMessage, commandOutput, success);
     }
 
-    public InfoScmResult(String commandLine, String providerMessage,
-            String commandOutput, boolean success,
-            String scmRevision) {
-        super(commandLine, providerMessage, commandOutput, success);        
+    public InfoScmResult(String commandLine, String providerMessage, String commandOutput,
+        boolean success, String scmRevision) {
+        super(commandLine, providerMessage, commandOutput, success);
         this.scmRevision = scmRevision;
-        }
-    
+    }
+
     public String getRevision() {
         return scmRevision;
     }
 
 }
-
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/pull/AbstractPullCommand.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/pull/AbstractPullCommand.java	Fri Aug 13 14:59:05 2010 +0300
@@ -28,6 +28,7 @@
 import org.apache.maven.scm.command.AbstractCommand;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 
+
 /**
  * Abstract class to representing a pull command.
  * This functionality is mainly targeted for distributed 
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/pull/PullScmResult.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/pull/PullScmResult.java	Fri Aug 13 14:59:05 2010 +0300
@@ -20,6 +20,7 @@
 
 import org.apache.maven.scm.ScmResult;
 
+
 /**
  * 
  *
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/tags/AbstractTagsCommand.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/command/tags/AbstractTagsCommand.java	Fri Aug 13 14:59:05 2010 +0300
@@ -24,6 +24,7 @@
 import org.apache.maven.scm.command.AbstractCommand;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 
+
 /**
  * Abstract class representing a tags command. 
  * Tags consist in retrieving existing tags for a particular repository.
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/manager/BasicExtendedScmManager.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/manager/BasicExtendedScmManager.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,20 +1,19 @@
 /*
-* 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:  
-*
-*/
-
+ * 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.maven.scm.manager;
 
@@ -23,35 +22,38 @@
 import org.apache.maven.scm.CommandParameters;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.log.ScmLogDispatcher;
+import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.manager.BasicScmManager;
 import org.apache.maven.scm.repository.ScmRepository;
 
+import com.nokia.maven.scm.command.info.InfoScmResult;
 import com.nokia.maven.scm.command.pull.PullScmResult;
 import com.nokia.maven.scm.command.tags.TagsScmResult;
-import com.nokia.maven.scm.command.info.InfoScmResult;
 import com.nokia.maven.scm.provider.ScmProviderExt;
 
 /**
- * Extended SCM manager which implements the additional functionalities
- * defined by the ExtendedScmManager.
- *
+ * Extended SCM manager which implements the additional functionalities defined by the
+ * ExtendedScmManager.
+ * 
  */
-public class BasicExtendedScmManager extends BasicScmManager implements
-        ExtendedScmManager {
+public class BasicExtendedScmManager extends BasicScmManager implements ExtendedScmManager {
 
+    // Use dispatcher rather than DefaultLog.
+    private ScmLogDispatcher logDispatcher = new ScmLogDispatcher();
+    
     /**
      * {@inheritDoc}
      */
     @Override
-    public PullScmResult pull(ScmRepository repository, File path)
-            throws ScmException {
+    public PullScmResult pull(ScmRepository repository, File path) throws ScmException {
         try {
-            ScmProviderExt provider = (ScmProviderExt) this
-                    .getProviderByRepository(repository);
+            ScmProviderExt provider = (ScmProviderExt) this.getProviderByRepository(repository);
             return provider.pull(repository, path);
-        } catch (ClassCastException exc) {
+        }
+        catch (ClassCastException exc) {
             throw new ScmException("The " + repository.getProvider().toString()
-                    + " does not support extended functionalities.");
+                + " does not support extended functionalities.");
         }
     }
 
@@ -61,12 +63,27 @@
     @Override
     public TagsScmResult tags(ScmRepository repository, File path) throws ScmException {
         try {
-            ScmProviderExt provider = (ScmProviderExt) this
-                    .getProviderByRepository(repository);
+            ScmProviderExt provider = (ScmProviderExt) this.getProviderByRepository(repository);
             return provider.tags(repository, new ScmFileSet(path), new CommandParameters());
-        } catch (ClassCastException exc) {
+        }
+        catch (ClassCastException exc) {
             throw new ScmException("The " + repository.getProvider().toString()
-                    + " does not support extended functionalities.");
+                + " does not support extended functionalities.");
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public InfoScmResult info(ScmRepository repository, File path) throws ScmException {
+        try {
+            ScmProviderExt provider = (ScmProviderExt) this.getProviderByRepository(repository);
+            return provider.info(repository, new ScmFileSet(path), new CommandParameters());
+        }
+        catch (ClassCastException exc) {
+            throw new ScmException("The " + repository.getProvider().toString()
+                + " does not support extended functionalities.");
         }
     }
     
@@ -74,15 +91,15 @@
      * {@inheritDoc}
      */
     @Override
-    public InfoScmResult info(ScmRepository repository, File path) throws ScmException {
-        try {
-            ScmProviderExt provider = (ScmProviderExt) this
-                    .getProviderByRepository(repository);
-            return provider.info(repository, new ScmFileSet(path), new CommandParameters());
-        } catch (ClassCastException exc) {
-            throw new ScmException("The " + repository.getProvider().toString()
-                    + " does not support extended functionalities.");
-        }
+    protected ScmLogger getScmLogger() {
+        return logDispatcher;
+    }   
+    
+    /**
+     * Add a custom ScmLogger for message reporting. 
+     * @param logger
+     */
+    public void addListener(ScmLogger logger) {
+        logDispatcher.addListener(logger);
     }
-
 }
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/manager/ExtendedScmManager.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/manager/ExtendedScmManager.java	Fri Aug 13 14:59:05 2010 +0300
@@ -24,9 +24,9 @@
 import org.apache.maven.scm.manager.ScmManager;
 import org.apache.maven.scm.repository.ScmRepository;
 
+import com.nokia.maven.scm.command.info.InfoScmResult;
 import com.nokia.maven.scm.command.pull.PullScmResult;
 import com.nokia.maven.scm.command.tags.TagsScmResult;
-import com.nokia.maven.scm.command.info.InfoScmResult;
 
 /**
  * Extended verison of the Maven ScmManager
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/ScmProviderExt.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/ScmProviderExt.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,20 +1,19 @@
 /*
-* 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:  
-*
-*/
-
+ * 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.maven.scm.provider;
 
@@ -26,19 +25,20 @@
 import org.apache.maven.scm.ScmResult;
 import org.apache.maven.scm.repository.ScmRepository;
 
+import com.nokia.maven.scm.command.info.InfoScmResult;
 import com.nokia.maven.scm.command.pull.PullScmResult;
 import com.nokia.maven.scm.command.tags.TagsScmResult;
-import com.nokia.maven.scm.command.info.InfoScmResult;
 
 /**
- * This interface describe additional functionalities provider could implement 
- * compare to the default ScmProvider interface
- *  
+ * This interface describe additional functionalities provider could implement compare to the
+ * default ScmProvider interface
+ * 
  */
 public interface ScmProviderExt {
 
     /**
      * Create a new repository.
+     * 
      * @param repository the repository to create.
      * @return ScmResult result.
      * @throws ScmException
@@ -47,16 +47,17 @@
 
     /**
      * Pull changes, this function is target for distributed SCM file Hg or Git.
+     * 
      * @param repository
      * @param path the location of the checkout.
      * @return a PullScmResult result object.
      * @throws ScmException
      */
-    PullScmResult pull(ScmRepository repository, File path)
-            throws ScmException;
+    PullScmResult pull(ScmRepository repository, File path) throws ScmException;
 
     /**
      * Get a list of tags from a repository.
+     * 
      * @param repository the repository
      * @param fileSet
      * @param parameters
@@ -64,10 +65,11 @@
      * @throws ScmException
      */
     TagsScmResult tags(ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters)
-            throws ScmException;
+        throws ScmException;
 
     /**
      * Get information about current revision.
+     * 
      * @param repository
      * @param fileSet
      * @param parameters
@@ -75,5 +77,5 @@
      * @throws ScmException
      */
     InfoScmResult info(ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters)
-            throws ScmException;
+        throws ScmException;
 }
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/HgScmProviderExt.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/HgScmProviderExt.java	Fri Aug 13 14:59:05 2010 +0300
@@ -23,39 +23,38 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import com.nokia.maven.scm.provider.hg.command.log.HgChangeLogCommand;
-import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
-
 import org.apache.log4j.Logger;
 import org.apache.maven.scm.CommandParameters;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.command.export.ExportScmResult;
 import org.apache.maven.scm.command.remove.RemoveScmResult;
-import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.command.tag.TagScmResult;
 import org.apache.maven.scm.command.update.UpdateScmResult;
-import org.apache.maven.scm.command.tag.TagScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.hg.HgScmProvider;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.apache.maven.scm.repository.ScmRepositoryException;
 
+import com.nokia.maven.scm.command.info.InfoScmResult;
 import com.nokia.maven.scm.command.pull.PullScmResult;
 import com.nokia.maven.scm.command.tags.TagsScmResult;
-import com.nokia.maven.scm.command.info.InfoScmResult;
 import com.nokia.maven.scm.provider.ScmProviderExt;
+import com.nokia.maven.scm.provider.hg.command.branch.HgBranchCommand;
+import com.nokia.maven.scm.provider.hg.command.checkout.HgCheckOutCommand;
+import com.nokia.maven.scm.provider.hg.command.export.HgExportCommand;
+import com.nokia.maven.scm.provider.hg.command.info.HgInfoCommand;
 import com.nokia.maven.scm.provider.hg.command.init.HgInitCommand;
+import com.nokia.maven.scm.provider.hg.command.log.HgChangeLogCommand;
 import com.nokia.maven.scm.provider.hg.command.pull.HgPullCommand;
 import com.nokia.maven.scm.provider.hg.command.remove.HgRemoveCommand;
+import com.nokia.maven.scm.provider.hg.command.tag.HgTagCommand;
 import com.nokia.maven.scm.provider.hg.command.tags.HgTagsCommand;
-import com.nokia.maven.scm.provider.hg.command.info.HgInfoCommand;
 import com.nokia.maven.scm.provider.hg.command.update.HgUpdateCommand;
-import com.nokia.maven.scm.provider.hg.command.checkout.HgCheckOutCommand;
-import com.nokia.maven.scm.provider.hg.command.export.HgExportCommand;
-import com.nokia.maven.scm.provider.hg.command.branch.HgBranchCommand;
-import com.nokia.maven.scm.provider.hg.command.tag.HgTagCommand;
 import com.nokia.maven.scm.provider.hg.repository.HgScmProviderRepository;
 
 /**
@@ -64,7 +63,7 @@
 public class HgScmProviderExt extends HgScmProvider implements ScmProviderExt {
 
     private static Logger log = Logger.getLogger(HgScmProviderExt.class);
-    
+
     public ScmResult init(ScmRepository repository) throws ScmException {
         log.info("HgScmProviderExt.init()");
 
@@ -74,94 +73,76 @@
     }
 
     @Override
-    public CheckOutScmResult checkout(ScmProviderRepository repository,
-            ScmFileSet fileSet, CommandParameters parameters)
-        throws ScmException {
+    public CheckOutScmResult checkout(ScmProviderRepository repository, ScmFileSet fileSet,
+        CommandParameters parameters) throws ScmException {
 
         HgCheckOutCommand command = new HgCheckOutCommand();
         command.setLogger(getLogger());
-        return (CheckOutScmResult) command.executeCommand(repository, fileSet,
-                parameters);
+        return (CheckOutScmResult) command.executeCommand(repository, fileSet, parameters);
     }
 
     @Override
-    public ChangeLogScmResult changelog(ScmProviderRepository repository,
-            ScmFileSet fileSet, CommandParameters parameters)
-        throws ScmException {
+    public ChangeLogScmResult changelog(ScmProviderRepository repository, ScmFileSet fileSet,
+        CommandParameters parameters) throws ScmException {
 
         HgChangeLogCommand command = new HgChangeLogCommand();
         command.setLogger(getLogger());
-        return (ChangeLogScmResult) command.executeCommand(repository, fileSet,
-                parameters);
+        return (ChangeLogScmResult) command.executeCommand(repository, fileSet, parameters);
     }
 
-    public PullScmResult pull(ScmRepository repository, File path)
-        throws ScmException {
+    public PullScmResult pull(ScmRepository repository, File path) throws ScmException {
         HgPullCommand command = new HgPullCommand();
         command.setLogger(getLogger());
-        return (PullScmResult) command.executeCommand(repository
-                .getProviderRepository(), new ScmFileSet(path),
-                new CommandParameters());
+        return (PullScmResult) command.executeCommand(repository.getProviderRepository(), new ScmFileSet(path), new CommandParameters());
     }
 
     @Override
-    public UpdateScmResult update(ScmProviderRepository repository,
-            ScmFileSet fileSet, CommandParameters parameters)
-        throws ScmException {
+    public UpdateScmResult update(ScmProviderRepository repository, ScmFileSet fileSet,
+        CommandParameters parameters) throws ScmException {
         HgUpdateCommand command = new HgUpdateCommand();
         command.setLogger(getLogger());
-        return (UpdateScmResult) command.executeCommand(repository, fileSet,
-                parameters);
+        return (UpdateScmResult) command.executeCommand(repository, fileSet, parameters);
     }
 
     public TagsScmResult tags(ScmRepository repository, ScmFileSet fileSet,
-            CommandParameters parameters) throws ScmException {
+        CommandParameters parameters) throws ScmException {
         HgTagsCommand command = new HgTagsCommand();
         command.setLogger(getLogger());
-        return (TagsScmResult) command.executeCommand(repository
-                .getProviderRepository(), fileSet, parameters);
+        return (TagsScmResult) command.executeCommand(repository.getProviderRepository(), fileSet, parameters);
     }
-    
+
     public InfoScmResult info(ScmRepository repository, ScmFileSet fileSet,
-            CommandParameters parameters) throws ScmException {
+        CommandParameters parameters) throws ScmException {
         HgInfoCommand command = new HgInfoCommand();
         command.setLogger(getLogger());
-        return (InfoScmResult) command.executeCommand(repository
-                .getProviderRepository(), fileSet, parameters);
+        return (InfoScmResult) command.executeCommand(repository.getProviderRepository(), fileSet, parameters);
     }
 
     @Override
-    public RemoveScmResult remove(ScmProviderRepository repository,
-            ScmFileSet fileSet, CommandParameters parameters)
-        throws ScmException {
+    public RemoveScmResult remove(ScmProviderRepository repository, ScmFileSet fileSet,
+        CommandParameters parameters) throws ScmException {
         HgRemoveCommand command = new HgRemoveCommand();
         command.setLogger(getLogger());
-        return (RemoveScmResult) command.execute(repository, fileSet,
-                parameters);
+        return (RemoveScmResult) command.execute(repository, fileSet, parameters);
     }
 
-    protected BranchScmResult branch(ScmProviderRepository repository,
-            ScmFileSet fileSet, CommandParameters parameters)
-        throws ScmException {
+    protected BranchScmResult branch(ScmProviderRepository repository, ScmFileSet fileSet,
+        CommandParameters parameters) throws ScmException {
         HgBranchCommand command = new HgBranchCommand();
         command.setLogger(getLogger());
-        return (BranchScmResult) command.execute(repository, fileSet,
-                parameters);
+        return (BranchScmResult) command.execute(repository, fileSet, parameters);
     }
 
-    protected ExportScmResult export(ScmProviderRepository repository,
-            ScmFileSet fileSet, CommandParameters parameters)
-        throws ScmException {
+    protected ExportScmResult export(ScmProviderRepository repository, ScmFileSet fileSet,
+        CommandParameters parameters) throws ScmException {
         HgExportCommand command = new HgExportCommand();
         command.setLogger(getLogger());
-        return (ExportScmResult) command.execute(repository, fileSet,
-                parameters);
+        return (ExportScmResult) command.execute(repository, fileSet, parameters);
     }
 
     @Override
-    public TagScmResult tag(ScmProviderRepository repository,
-            ScmFileSet fileSet, CommandParameters parameters)
-        throws ScmException {
+    public TagScmResult tag(ScmProviderRepository repository, ScmFileSet fileSet,
+        CommandParameters parameters) throws ScmException {
         HgTagCommand command = new HgTagCommand();
         command.setLogger(getLogger());
         return (TagScmResult) command.execute(repository, fileSet, parameters);
@@ -171,23 +152,23 @@
     private final class HgUrlParserResult {
         private List<String> messages = new ArrayList<String>();
         private ScmProviderRepository repository;
-        
+
         public List<String> getMessages() {
             return messages;
         }
-        
+
         public void setMessages(List<String> messages) {
             this.messages = messages;
         }
-        
+
         public ScmProviderRepository getRepository() {
             return repository;
         }
-        
+
         public void setRepository(ScmProviderRepository repository) {
             this.repository = repository;
         }
-        
+
     }
 
     private HgUrlParserResult parseScmUrl(String scmSpecificUrl) {
@@ -198,23 +179,20 @@
         // try if it is an URL
         try {
             url = new URL(scmSpecificUrl);
-            HgScmProviderRepository repo = new HgScmProviderRepository(
-                    "file://localhost/");
+            HgScmProviderRepository repo = new HgScmProviderRepository("file://localhost/");
             repo.configure(url);
             result.repository = repo;
-        } catch (MalformedURLException e) {
-            log.debug("HgScmProviderExt:parseScmUrl:MalformedURLException:"
-                    + e.getMessage());
-            // if the url is invalid then try a simple file. 
-            //try {
-                result.setRepository(new HgScmProviderRepository(scmSpecificUrl));
-            /**} catch (Throwable et) {
-                log.debug("HgScmProviderExt:parseScmUrl:Throwable:"
-                        + et.getMessage());
-                result.getMessages().add("The filename provided is not valid: "
-                        + et.getMessage());
-                return result;
-            }**/
+        }
+        catch (MalformedURLException e) {
+            log.debug("HgScmProviderExt:parseScmUrl:MalformedURLException:" + e.getMessage());
+            // if the url is invalid then try a simple file.
+            // try {
+            result.setRepository(new HgScmProviderRepository(scmSpecificUrl));
+            /**
+             * } catch (Throwable et) { log.debug("HgScmProviderExt:parseScmUrl:Throwable:" +
+             * et.getMessage()); result.getMessages().add("The filename provided is not valid: " +
+             * et.getMessage()); return result; }
+             **/
         }
         return result;
     }
@@ -230,14 +208,12 @@
     /**
      * Overriding default implementation.
      */
-    public ScmProviderRepository makeProviderScmRepository(
-            String scmSpecificUrl, char delimiter)
-            throws ScmRepositoryException {
+    public ScmProviderRepository makeProviderScmRepository(String scmSpecificUrl, char delimiter)
+        throws ScmRepositoryException {
         HgUrlParserResult result = parseScmUrl(scmSpecificUrl);
 
         if (result.messages.size() > 0) {
-            throw new ScmRepositoryException("The scm url is invalid.",
-                    result.messages);
+            throw new ScmRepositoryException("The scm url is invalid.", result.messages);
         }
         return result.repository;
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/HgUtilsInternal.java	Fri Aug 13 14:59:05 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.maven.scm.provider.hg;
+
+import java.io.File;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.hg.HgUtils;
+import org.apache.maven.scm.provider.hg.command.HgCommandConstants;
+import org.apache.maven.scm.provider.hg.command.HgConsumer;
+
+/**
+ * Custom version of the HgUtils helper
+ * class.
+ * It currently implement a fix function
+ * to get the current revision 
+ * number.
+ *
+ */
+public final class HgUtilsInternal {
+    
+    private HgUtilsInternal() {
+    }
+
+    public static long getCurrentRevisionNumber(ScmLogger logger, File workingDir)
+        throws ScmException {
+
+        String[] revCmd = new String[] { HgCommandConstants.REVNO_CMD };
+        HgRevNoConsumer consumer = new HgRevNoConsumer(logger);
+        HgUtils.execute(consumer, logger, workingDir, revCmd);
+
+        return consumer.getCurrentRevisionNumber();
+    }
+
+    /**
+     * Get current (working) revision.
+     * <p/>
+     * Resolve revision to the last integer found in the command output.
+     */
+    private static class HgRevNoConsumer extends HgConsumer {
+
+        private long revNo;
+
+        HgRevNoConsumer(ScmLogger logger) {
+            super(logger);
+        }
+
+        /**
+         * {@inheritDoc}
+         * Parse the output of the ID command
+         * line will be split by space and first parameter
+         */
+        @Override
+        public void doConsume(ScmFileStatus status, String line) {
+            String[] elements = line.split("\\s+");
+            if (elements.length > 0) {
+                // If the clone is modified then the id contains the character '+'
+                String strId = elements[0].trim().replace("+", "");
+                if (this.getLogger().isDebugEnabled()) {
+                    this.getLogger().debug("Parsing: " + strId);
+                }
+                try {
+                    revNo = Long.parseLong(strId, 16);
+                } catch (NumberFormatException e) {
+                    this.getLogger().error(e);
+                }
+            }
+        }
+
+        long getCurrentRevisionNumber() {
+            return revNo;
+        }
+    }
+
+}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/VersionChangeSet.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/VersionChangeSet.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,14 +18,14 @@
 package com.nokia.maven.scm.provider.hg;
 
 
-import org.apache.maven.scm.ChangeSet;
-import org.apache.maven.scm.ScmVersion;
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.ChangeFile;
-
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.maven.scm.ChangeFile;
+import org.apache.maven.scm.ChangeSet;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmVersion;
+
 /**
  * A version changeset.
  */
@@ -74,26 +74,26 @@
     {
         String result = "";
         for (ScmVersion versions : getScmVersion()) {
-            if (!versions.getName().equals("")) 
-            {
+            if (!versions.getName().equals("")) {
                 result += versions.getType().toLowerCase() + ":" + versions.getName() + "\n";
             }
         }
-        if (getAuthor() != null)
+        if (getAuthor() != null) {
             result += "user:" + getAuthor() + "\n";
-        if (getDate() != null)
+        }
+        if (getDate() != null) {
             result += "date:" + getDate() + "\n";
+        }
         List<ChangeFile> files = getFiles();
-        if ( files.size() != 0 )
-        {
+        if ( files.size() != 0 ) {
             result += "files:";
-            for ( ChangeFile changeFile : files )
-            {
+            for ( ChangeFile changeFile : files ) {
                 result += changeFile.getName() + " ";
             }
         }
-        if (!getComment().equals(""))
+        if (!getComment().equals("")) {
             result += "\ndescription:" + getComment() + "\n";
+        }
         return result;
     }
     
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/branch/HgBranchCommand.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/branch/HgBranchCommand.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,6 +17,10 @@
 
 package com.nokia.maven.scm.provider.hg.command.branch;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmResult;
@@ -25,10 +29,6 @@
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.hg.HgUtils;
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * Branch command to create a new branch
  */
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/checkout/HgCheckOutCommand.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/checkout/HgCheckOutCommand.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,46 +1,44 @@
 /*
-* 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:  
-*
-*/
-
+ * 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.maven.scm.provider.hg.command.checkout;
 
-import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
-import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.ScmResult;
 import org.apache.maven.scm.ScmVersion;
-import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+
 
 /**
  */
-public class HgCheckOutCommand
-    extends org.apache.maven.scm.provider.hg.command.checkout.HgCheckOutCommand
-{
+public class HgCheckOutCommand extends
+    org.apache.maven.scm.provider.hg.command.checkout.HgCheckOutCommand {
     /** {@inheritDoc} */
-    protected CheckOutScmResult executeCheckOutCommand( ScmProviderRepository repo, ScmFileSet fileSet,
-                                                        ScmVersion scmVersion )
-        throws ScmException
-    {
-           CheckOutScmResult result = super.executeCheckOutCommand(repo, fileSet, scmVersion);
-           if (result.getCheckedOutFiles().size() == 0 && !result.isSuccess() && result.getProviderMessage().contains("locate failed with exit code: 1.")) {
-               getLogger().info("Fixing locate calls which returns 1 when no files are found.");
-               result = new CheckOutScmResult(result.getCheckedOutFiles(), new ScmResult(result.getCommandLine(), result.getProviderMessage(), result.getCommandOutput(), true));
-           }
-           return result;
+    protected CheckOutScmResult executeCheckOutCommand(ScmProviderRepository repo,
+        ScmFileSet fileSet, ScmVersion scmVersion) throws ScmException {
+        CheckOutScmResult result = super.executeCheckOutCommand(repo, fileSet, scmVersion);
+        if (result.getCheckedOutFiles().size() == 0 && !result.isSuccess()
+            && result.getProviderMessage().contains("locate failed with exit code: 1.")) {
+            getLogger().info("Fixing locate calls which returns 1 when no files are found.");
+            result = new CheckOutScmResult(result.getCheckedOutFiles(), new ScmResult(result.getCommandLine(), result.getProviderMessage(), result.getCommandOutput(), true));
+        }
+        return result;
     }
-       
+
 }
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/info/HgInfoCommand.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/info/HgInfoCommand.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,20 +1,19 @@
 /*
-* 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:  
-*
-*/
-
+ * 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.maven.scm.provider.hg.command.info;
 
@@ -34,30 +33,25 @@
 /**
  * 'hg info' command implementation.
  */
-public class HgInfoCommand extends AbstractInfoCommand
-{
+public class HgInfoCommand extends AbstractInfoCommand {
     @Override
-    protected InfoScmResult executeInfoCommand(ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters) throws ScmException {
+    protected InfoScmResult executeInfoCommand(ScmProviderRepository repository,
+        ScmFileSet fileSet, CommandParameters parameters) throws ScmException {
 
         File workingDir = fileSet.getBasedir();
         // Update branch
-        String[] updateCmd = new String[] {
-            HgCommandConstants.REVNO_CMD
-        };
-        
-        HgInfoConsumer consumer = new HgInfoConsumer( getLogger() );
-        
-        ScmResult infoResult = HgUtils.execute(consumer , getLogger(), workingDir, updateCmd );
+        String[] updateCmd = new String[] { HgCommandConstants.REVNO_CMD };
+
+        HgInfoConsumer consumer = new HgInfoConsumer(getLogger());
 
-        if ( !infoResult.isSuccess() )
-        {
-            return new InfoScmResult(infoResult.getCommandLine(), infoResult.getProviderMessage(), infoResult.getCommandOutput(), infoResult.isSuccess() );
+        ScmResult infoResult = HgUtils.execute(consumer, getLogger(), workingDir, updateCmd);
+
+        if (!infoResult.isSuccess()) {
+            return new InfoScmResult(infoResult.getCommandLine(), infoResult.getProviderMessage(), infoResult.getCommandOutput(), infoResult.isSuccess());
         }
-        
+
         this.getLogger().info(infoResult.getCommandOutput());
         return new InfoScmResult(infoResult.getCommandLine(), infoResult.getProviderMessage(), infoResult.getCommandOutput(), infoResult.isSuccess(), consumer.getRevision());
-        
+
     }
 }
-
-
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/info/HgInfoConsumer.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/info/HgInfoConsumer.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,49 +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:  
-*
-*/
+ * 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.maven.scm.provider.hg.command.info;
 
-import org.apache.maven.scm.provider.hg.command.HgConsumer;
+import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.log.ScmLogger;
-import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.provider.hg.command.HgConsumer;
+
 
 /**
  * Consumer of 'hg info' command output.
  */
-public class HgInfoConsumer
-    extends HgConsumer
-{
+public class HgInfoConsumer extends HgConsumer {
     private String scmRevision = new String();
-    public HgInfoConsumer( ScmLogger logger )
-    {
-        super( logger );
+
+    public HgInfoConsumer(ScmLogger logger) {
+        super(logger);
     }
 
     /** {@inheritDoc} */
-    public void doConsume( ScmFileStatus status, String trimmedLine )
-    {
+    public void doConsume(ScmFileStatus status, String trimmedLine) {
         String[] tagging = trimmedLine.split(" ");
         if (tagging.length == 2) {
-            this.scmRevision = tagging[0];            
-            }
+            this.scmRevision = tagging[0];
+        }
     }
-    
-    public String getRevision()
-    {
+
+    public String getRevision() {
         return scmRevision;
     }
 }
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/init/HgInitCommand.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/init/HgInitCommand.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,20 +1,19 @@
 /*
-* 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:  
-*
-*/
-
+ * 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.maven.scm.provider.hg.command.init;
 
@@ -30,25 +29,24 @@
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.hg.HgUtils;
 import org.apache.maven.scm.provider.hg.command.HgCommandConstants;
-import com.nokia.maven.scm.provider.hg.repository.HgScmProviderRepository;
 
 import com.nokia.maven.scm.command.init.InitScmResult;
+import com.nokia.maven.scm.provider.hg.repository.HgScmProviderRepository;
 
 /**
  * 'hg init' command implementation.
  */
 public class HgInitCommand extends AbstractCommand implements Command {
-    
+
     private static Logger log = Logger.getLogger(HgInitCommand.class);
 
     @Override
-    protected ScmResult executeCommand(ScmProviderRepository repository,
-            ScmFileSet basedir, CommandParameters args) throws ScmException {
+    protected ScmResult executeCommand(ScmProviderRepository repository, ScmFileSet basedir,
+        CommandParameters args) throws ScmException {
         return executeInitCommand(repository);
     }
 
-    public InitScmResult executeInitCommand(ScmProviderRepository repository)
-            throws ScmException {
+    public InitScmResult executeInitCommand(ScmProviderRepository repository) throws ScmException {
         // Get the directory in which to create a new repository. Only local
         // filesystems supported.
         log.info("executeInitCommand: " + repository);
@@ -61,17 +59,13 @@
         if (!hgRepoRootDir.exists()) {
             boolean workingDirReady = hgRepoRootDir.mkdirs();
             if (!workingDirReady) {
-                throw new ScmException("Could not initiate test branch at: "
-                        + hgRepoRootDir);
+                throw new ScmException("Could not initiate test branch at: " + hgRepoRootDir);
             }
         }
 
         // Create and run the command
-        String[] initCmd = new String[] { HgCommandConstants.INIT_CMD, hgRepoDir.getName()};
+        String[] initCmd = new String[] { HgCommandConstants.INIT_CMD, hgRepoDir.getName() };
         ScmResult result = HgUtils.execute(hgRepoRootDir, initCmd);
-        return new InitScmResult(result.getCommandLine(),
-                result.getProviderMessage(),
-                result.getCommandOutput(),
-                result.isSuccess());
+        return new InitScmResult(result.getCommandLine(), result.getProviderMessage(), result.getCommandOutput(), result.isSuccess());
     }
 }
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/log/HgChangeLogCommand.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/log/HgChangeLogCommand.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,13 +18,15 @@
 package com.nokia.maven.scm.provider.hg.command.log;
 
 
-import com.nokia.maven.scm.provider.hg.VersionChangeSet;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 import org.apache.maven.scm.ScmBranch;
-import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.Command;
 import org.apache.maven.scm.command.changelog.AbstractChangeLogCommand;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
@@ -33,9 +35,7 @@
 import org.apache.maven.scm.provider.hg.HgUtils;
 import org.apache.maven.scm.provider.hg.command.HgCommandConstants;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import com.nokia.maven.scm.provider.hg.VersionChangeSet;
 
 /**
  * 'hg changelog' command.
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/log/HgChangeLogConsumer.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/log/HgChangeLogConsumer.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,22 +17,22 @@
 
 package com.nokia.maven.scm.provider.hg.command.log;
 
-import com.nokia.maven.scm.provider.hg.VersionChangeSet;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
+import org.apache.maven.scm.ChangeFile;
+import org.apache.maven.scm.ScmBranch;
 import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmRevision;
 import org.apache.maven.scm.ScmTag;
-import org.apache.maven.scm.ScmBranch;
-import org.apache.maven.scm.ScmRevision;
-import org.apache.maven.scm.ChangeFile;
-import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.provider.hg.command.HgConsumer;
 
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.text.SimpleDateFormat;
+import com.nokia.maven.scm.provider.hg.VersionChangeSet;
 
 /**
  * Consumer of 'hg changelog' command output.
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/remove/HgRemoveCommand.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/remove/HgRemoveCommand.java	Fri Aug 13 14:59:05 2010 +0300
@@ -21,6 +21,8 @@
 
 package com.nokia.maven.scm.provider.hg.command.remove;
 
+import java.io.File;
+
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmResult;
@@ -32,8 +34,6 @@
 import org.apache.maven.scm.provider.hg.command.HgCommandConstants;
 import org.apache.maven.scm.provider.hg.command.remove.HgRemoveConsumer;
 
-import java.io.File;
-
 /**
  * Branch version of the remove command, to fix the command line generation.
  */
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/tag/HgTagCommand.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/tag/HgTagCommand.java	Fri Aug 13 14:59:05 2010 +0300
@@ -39,9 +39,10 @@
 import org.apache.maven.scm.provider.hg.command.HgConsumer;
 import org.apache.maven.scm.provider.hg.command.inventory.HgListConsumer;
 import org.apache.maven.scm.provider.hg.command.tag.HgTagConsumer;
-import org.apache.maven.scm.provider.hg.repository.HgScmProviderRepository;
 import org.codehaus.plexus.util.StringUtils;
 
+import com.nokia.maven.scm.provider.hg.repository.HgScmProviderRepository;
+
 /**
  * Tag
  * 
@@ -51,16 +52,14 @@
 public class HgTagCommand extends AbstractTagCommand implements Command {
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
-    protected ScmResult executeTagCommand(
-            ScmProviderRepository scmProviderRepository, ScmFileSet fileSet,
-            String tag, String level) throws ScmException {
+    protected ScmResult executeTagCommand(ScmProviderRepository scmProviderRepository,
+        ScmFileSet fileSet, String tag, String level) throws ScmException {
         if (tag == null || StringUtils.isEmpty(tag.trim())) {
             throw new ScmException("tag must be specified");
         }
 
         if (fileSet.getFileList().size() != 0) {
-            throw new ScmException(
-                    "This provider doesn't support tagging subsets of a directory");
+            throw new ScmException("This provider doesn't support tagging subsets of a directory");
         }
 
         File workingDir = fileSet.getBasedir();
@@ -69,55 +68,48 @@
         String[] tagCmd;
         if (level.equals(new String("local"))) {
             tagCmd = new String[] { HgCommandConstants.TAG_CMD, "--local",
-                    HgCommandConstants.MESSAGE_OPTION,
-                    "[maven-scm] copy for tag " + tag, tag };
-        } else {
-            tagCmd = new String[] { HgCommandConstants.TAG_CMD,
-                    HgCommandConstants.MESSAGE_OPTION,
-                    "[maven-scm] copy for tag " + tag, tag };
+                HgCommandConstants.MESSAGE_OPTION, "[maven-scm] copy for tag " + tag, tag };
+        }
+        else {
+            tagCmd = new String[] { HgCommandConstants.TAG_CMD, HgCommandConstants.MESSAGE_OPTION,
+                "[maven-scm] copy for tag " + tag, tag };
         }
         // keep the command about in string form for reporting
         StringBuffer cmd = joinCmd(tagCmd);
 
         HgTagConsumer consumer = new HgTagConsumer(getLogger());
-        ScmResult result = HgUtils.execute(consumer, getLogger(), workingDir,
-                tagCmd);
+        ScmResult result = HgUtils.execute(consumer, getLogger(), workingDir, tagCmd);
         HgScmProviderRepository repository = (HgScmProviderRepository) scmProviderRepository;
         if (result.isSuccess()) {
             // now push
             // Push to parent branch if any
-            if (!repository.getURI().equals(
-                    fileSet.getBasedir().getAbsolutePath())) {
-                String[] pushCmd = new String[] { HgCommandConstants.PUSH_CMD,
-                        repository.getURI() };
-                result = HgUtils.execute(new HgConsumer(getLogger()),
-                        getLogger(), fileSet.getBasedir(), pushCmd);
+            if (!repository.getURI().equals(fileSet.getBasedir().getAbsolutePath())) {
+                String[] pushCmd = new String[] { HgCommandConstants.PUSH_CMD, repository.getURI() };
+                result = HgUtils.execute(new HgConsumer(getLogger()), getLogger(), fileSet.getBasedir(), pushCmd);
             }
-        } else {
-            throw new ScmException("Error while executing command "
-                    + cmd.toString());
+        }
+        else {
+            throw new ScmException("Error while executing command " + cmd.toString());
         }
 
         // do an inventory to return the files tagged (all of them)
         String[] listCmd = new String[] { HgCommandConstants.INVENTORY_CMD };
         HgListConsumer listconsumer = new HgListConsumer(getLogger());
-        result = HgUtils.execute(listconsumer, getLogger(), fileSet
-                .getBasedir(), listCmd);
+        result = HgUtils.execute(listconsumer, getLogger(), fileSet.getBasedir(), listCmd);
         if (result.isSuccess()) {
             List<ScmFile> files = listconsumer.getFiles();
             ArrayList<ScmFile> fileList = new ArrayList<ScmFile>();
             for (ScmFile scmFile : files) {
-                
+
                 if (!scmFile.getPath().endsWith(".hgtags")) {
-                    fileList
-                            .add(new ScmFile(scmFile.getPath(), ScmFileStatus.TAGGED));
+                    fileList.add(new ScmFile(scmFile.getPath(), ScmFileStatus.TAGGED));
                 }
             }
 
             return new TagScmResult(fileList, result);
-        } else {
-            throw new ScmException("Error while executing command "
-                    + cmd.toString());
+        }
+        else {
+            throw new ScmException("Error while executing command " + cmd.toString());
         }
     }
 
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/tags/HgTagsConsumer.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/tags/HgTagsConsumer.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,14 +17,14 @@
 
 package com.nokia.maven.scm.provider.hg.command.tags;
 
-import org.apache.maven.scm.provider.hg.command.HgConsumer;
-import org.apache.maven.scm.log.ScmLogger;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
 import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.ScmRevision;
 import org.apache.maven.scm.ScmTag;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.hg.command.HgConsumer;
 
 /**
  */
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/update/HgUpdateCommand.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/update/HgUpdateCommand.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,72 +17,74 @@
 
 package com.nokia.maven.scm.provider.hg.command.update;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.ScmVersion;
+import org.apache.maven.scm.command.update.UpdateScmResult;
+import org.apache.maven.scm.command.update.UpdateScmResultWithRevision;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.hg.HgUtils;
 import org.apache.maven.scm.provider.hg.command.HgCommandConstants;
 import org.apache.maven.scm.provider.hg.command.HgConsumer;
 import org.apache.maven.scm.provider.hg.command.diff.HgDiffConsumer;
-import org.apache.maven.scm.ScmFileSet;
-import org.apache.maven.scm.command.update.UpdateScmResult;
-import org.apache.maven.scm.command.update.UpdateScmResultWithRevision;
-import org.apache.maven.scm.ScmFile;
-import org.apache.maven.scm.ScmFileStatus;
-import org.apache.maven.scm.ScmResult;
-import org.apache.maven.scm.ScmVersion;
-import org.apache.maven.scm.ScmException;
 import org.codehaus.plexus.util.StringUtils;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import java.io.File;
+import com.nokia.maven.scm.provider.hg.HgUtilsInternal;
 
 /**
  */
 public class HgUpdateCommand extends
-        org.apache.maven.scm.provider.hg.command.update.HgUpdateCommand {
+    org.apache.maven.scm.provider.hg.command.update.HgUpdateCommand {
 
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
-    protected UpdateScmResult executeUpdateCommand(ScmProviderRepository repo,
-            ScmFileSet fileSet, ScmVersion tag) throws ScmException {
+    protected UpdateScmResult executeUpdateCommand(ScmProviderRepository repo, ScmFileSet fileSet,
+        ScmVersion tag) throws ScmException {
         File workingDir = fileSet.getBasedir();
 
         // Find changes from last revision
-        int previousRevision = HgUtils.getCurrentRevisionNumber(getLogger(),
-                workingDir);
+        long previousRevision = HgUtilsInternal.getCurrentRevisionNumber(getLogger(), workingDir);
         // Update branch
-        String[] updateCmd = new String[] {
-                "update",
-                HgCommandConstants.REVISION_OPTION,
-                tag != null && !StringUtils.isEmpty(tag.getName()) ? tag
-                        .getName() : "tip" };
-        ScmResult updateResult = HgUtils.execute(new HgConsumer(getLogger()),
-                getLogger(), workingDir, updateCmd);
+        String[] updateCmd = new String[] { "update", HgCommandConstants.REVISION_OPTION,
+            tag != null && !StringUtils.isEmpty(tag.getName()) ? tag.getName() : "tip" };
+        ScmResult updateResult = HgUtils.execute(new HgConsumer(getLogger()), getLogger(), workingDir, updateCmd);
 
         if (!updateResult.isSuccess()) {
             return new UpdateScmResult(null, null, updateResult);
         }
 
         // Find changes from last revision
-        int currentRevision = HgUtils.getCurrentRevisionNumber(getLogger(),
+        long currentRevision = HgUtilsInternal.getCurrentRevisionNumber(getLogger(),
                 workingDir);
+                
+        // No point of calculating a delta if nothing has been updated.
+        getLogger().debug("Changeset before update: " + String.format("%012x", previousRevision));
+        getLogger().debug("Changeset after update: " + String.format("%012x", currentRevision));
+        if (previousRevision == currentRevision) {
+            return new UpdateScmResultWithRevision(new ArrayList<ScmFile>(), new ArrayList(), String
+                    .valueOf(currentRevision), updateResult);            
+        }
+        
         List<ScmFile> updatedFiles = new ArrayList<ScmFile>();
         List changes = new ArrayList();
         String[] diffCmd = null;
         if (currentRevision == 0) {
-            diffCmd = new String[] { HgCommandConstants.DIFF_CMD,
-                    "-c", "" + currentRevision};
+            diffCmd = new String[] { HgCommandConstants.DIFF_CMD, "-c", "" + String.format("%012x", currentRevision)};
         } else {
             diffCmd = new String[] { HgCommandConstants.DIFF_CMD,
-                    HgCommandConstants.REVISION_OPTION, "" + previousRevision,
-                    HgCommandConstants.REVISION_OPTION, "" + currentRevision};
+                HgCommandConstants.REVISION_OPTION, "" + String.format("%012x", previousRevision),
+                HgCommandConstants.REVISION_OPTION, "" + String.format("%012x", currentRevision)};
         }
-        HgDiffConsumer diffConsumer = new HgDiffConsumer(getLogger(),
-                    workingDir);
-        updateResult = HgUtils.execute(diffConsumer, getLogger(),
-                workingDir, diffCmd);
+        HgDiffConsumer diffConsumer = new HgDiffConsumer(getLogger(), workingDir);
+        updateResult = HgUtils.execute(diffConsumer, getLogger(), workingDir, diffCmd);
 
         // Now translate between diff and update file status
         List<ScmFile> diffFiles = diffConsumer.getChangedFiles();
@@ -95,8 +97,10 @@
                 updatedFiles.add(diffFile);
             }
         }
+
         return new UpdateScmResultWithRevision(updatedFiles, changes, String
-                .valueOf(currentRevision), updateResult);
+                .valueOf(currentRevision), new ScmResult(updateResult.getCommandLine(),
+                        updateResult.getCommandOutput(), updateResult.getProviderMessage(), true));
     }
 
 }
--- a/buildframework/helium/sf/java/scm/tests/antunit/abstract_unittest_scmtask.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/scm/tests/antunit/abstract_unittest_scmtask.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -289,6 +289,22 @@
     </target>
         
     <target name="test-update-basedir-tag" depends="test-checkin">
+        <echo file="${repo.dir}/test1/not_in_repo.txt">Not in repo</echo>
+        <hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1">
+            <hlm:add>
+                <fileset dir="${repo.dir}/test1">
+                    <include name="**" />
+                    <exclude name="**/.${repo.type}/**" />
+                </fileset>
+            </hlm:add>
+            <hlm:checkin message="Adding not_in_repo.txt...">
+                <fileset dir="${repo.dir}/test1">
+                    <include name="not_in_repo.txt" />
+                </fileset>
+            </hlm:checkin>
+            <hlm:tag baseDir="${repo.dir}/test1" name="tag_0.1" />
+            <hlm:tags baseDir="${repo.dir}/test1" />
+        </hlm:scm>
         <echo file="${repo.dir}/test1/not_in_repo2.txt">Not in repo2</echo>
         <hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1">
             <hlm:add>
@@ -297,20 +313,35 @@
                     <exclude name="**/.${repo.type}/**" />
                 </fileset>
             </hlm:add>
-        </hlm:scm>
-        <hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1">
             <hlm:checkin message="Adding not_in_repo2.txt...">
                 <fileset dir="${repo.dir}/test1">
                     <include name="not_in_repo2.txt" />
                 </fileset>
             </hlm:checkin>
+            <hlm:tag baseDir="${repo.dir}/test1" name="tag_0.2" />
+            <hlm:tags baseDir="${repo.dir}/test1" />
         </hlm:scm>
+        <au:assertLogContains text=" * tag_0.1" />
+        <au:assertLogContains text=" * tag_0.2" />
+        <!-- Updating to first tag, only not_in_repo.txt file should be present -->
         <hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1">
             <hlm:update basedir="${repo.dir}/test1">
-                <hlm:tag name="0" />
+                <hlm:tag name="tag_0.1" />
             </hlm:update>
         </hlm:scm>
+        <au:assertLogContains text="not_in_repo2.txt:patched" /> <!-- The file is removed so patched -->
+        <au:assertFileExists file="${repo.dir}/test1/not_in_repo.txt" />
         <au:assertFileDoesntExist file="${repo.dir}/test1/not_in_repo2.txt" />
+
+    	<!-- Updating to first tag, only not_in_repo.txt file should be present -->
+        <hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1">
+            <hlm:update basedir="${repo.dir}/test1">
+                <hlm:tag name="tag_0.2" />
+            </hlm:update>
+        </hlm:scm>
+        <au:assertLogContains text="not_in_repo2.txt:patched" /> <!-- The file is added so patched -->
+        <au:assertFileExists file="${repo.dir}/test1/not_in_repo.txt" />
+        <au:assertFileExists file="${repo.dir}/test1/not_in_repo2.txt" />
     </target>
 
     <target name="test-update-basedir-revision" depends="test-checkin">
@@ -354,6 +385,8 @@
         <au:assertFileDoesntExist file="${repo.dir}/test1/not_in_repo3.txt" />
     </target>
 
+	
+	
     <!--
      **************************************************************
      ** EXPORT
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/Notifier.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/Notifier.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,8 +18,8 @@
 
 package com.nokia.helium.signal;
 
-import java.util.List;
 import org.apache.tools.ant.Project;
+
 import com.nokia.helium.signal.ant.types.NotifierInput;
 
 /**
@@ -46,11 +46,4 @@
     void sendData(String signalName, boolean failStatus,
             NotifierInput notifierInput, String message );
 
-    /**
-     * Sends the data to the requested sender list with specified notifier
-     * 
-     * @deprecated
-     */    
-    void sendData(String signalName, boolean failStatus,
-            List<String> fileList);
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/SignalExceptionMessage.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/SignalExceptionMessage.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,26 +1,27 @@
 /*
-* 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:To print the message on the shell in case of build fails for deffered Signals. 
-*
-*/
- 
+ * 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:To print the message on the shell in case of build fails for deffered Signals. 
+ *
+ */
+
 package com.nokia.helium.signal;
 
-
+import org.apache.log4j.Logger;
 import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.DataType;
+
 import com.nokia.helium.core.ant.HlmExceptionHandler;
-import org.apache.log4j.Logger;
 
 /**
  * Class to check the signal is present in the deferred and now signal list.
@@ -28,21 +29,23 @@
  * 
  */
 
-public class SignalExceptionMessage implements HlmExceptionHandler {
+public class SignalExceptionMessage extends DataType implements
+        HlmExceptionHandler {
     private Logger log = Logger.getLogger(SignalExceptionMessage.class);
-    
+
     /**
      * Implements the Exception method to print the build completed message.
+     * 
      * @param project
      * @param module
      * @param e
      */
-    public void handleException(Project project, String module, Exception e) {
-        
+    public void handleException(Project project, Exception e) {
+
         if (SignalStatusList.getDeferredSignalList().hasSignalInList()) {
             log.info("Build completed with errors and warnings.");
         }
-        
+
         if (SignalStatusList.getNowSignalList().hasSignalInList()) {
             log.info("Build completed with errors and warnings.");
         }
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/SignalNeverFailMessage.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/SignalNeverFailMessage.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,49 +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: To print the message on the shell in case of build has errors
-* is user sets failbuild status to never in signal configuration file.
-*
-*/
- 
+ * 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: To print the message on the shell in case of build has errors
+ * is user sets failbuild status to never in signal configuration file.
+ *
+ */
+
 package com.nokia.helium.signal;
 
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.DataType;
 
-import org.apache.tools.ant.Project;
-import com.nokia.helium.core.ant.types.*;
-import org.apache.log4j.Logger;
+import com.nokia.helium.core.ant.PostBuildAction;
 
 /**
- * Class to check the signal is present in the never signal list.
- * Print the message on the shell "Build completed with errors and warnings".
+ * Class to check the signal is present in the never signal list. Print the
+ * message on the shell "Build completed with errors and warnings".
  * 
  */
-public class SignalNeverFailMessage extends HlmPostDefImpl
-{
-    private Logger log = Logger.getLogger(SignalNeverFailMessage.class); 
-    
+public class SignalNeverFailMessage extends DataType implements PostBuildAction {
+
     /**
      * Override execute method to print build completed message.
+     * 
      * @param prj
      * @param module
      * @param targetNames
      */
-    
-    public void execute(Project prj, String module, String[] targetNames) {
-        
+    public void executeOnPostBuild(Project project, String[] targetNames) {
         if (SignalStatusList.getNeverSignalList().hasSignalInList()) {
-            log.info("Build completed with errors and warnings.");
+            project.log(SignalStatusList.getNeverSignalList().getErrorMsg());
         }
-        
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/SignalStatusList.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/SignalStatusList.java	Fri Aug 13 14:59:05 2010 +0300
@@ -43,7 +43,7 @@
      * Get the list of stored SignalStatus object.
      * @return a Vector of SignalStatus instances.
      */
-    public Vector<SignalStatus>getSignalStatusList() {
+    public Vector<SignalStatus> getSignalStatusList() {
         return new Vector<SignalStatus>(signals);
     }
     
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/SignalList.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/SignalList.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,29 +17,30 @@
 
 package com.nokia.helium.signal.ant;
 
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Vector;
+
+import org.apache.log4j.Logger;
 import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.condition.Condition;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Target;
+import org.apache.tools.ant.taskdefs.condition.Condition;
+
 import com.nokia.helium.signal.Notifier;
 import com.nokia.helium.signal.SignalStatus;
 import com.nokia.helium.signal.SignalStatusList;
-import com.nokia.helium.signal.ant.types.SignalListenerConfig;
+import com.nokia.helium.signal.ant.types.NotifierInput;
 import com.nokia.helium.signal.ant.types.SignalInput;
+import com.nokia.helium.signal.ant.types.SignalListenerConfig;
 import com.nokia.helium.signal.ant.types.SignalNotifierInput;
-import com.nokia.helium.signal.ant.types.NotifierInput;
 import com.nokia.helium.signal.ant.types.SignalNotifierList;
 import com.nokia.helium.signal.ant.types.TargetCondition;
 
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Vector;
-import java.util.HashMap;
-import java.util.Date;
-import java.util.Enumeration;
-import org.apache.log4j.Logger;
-
 /**
  * Helper class to store the list of notifiers.
  */
@@ -229,43 +230,6 @@
         return retCondition;
     }
 
-    /**
-     * Send signal notification by running configured notifiers.
-     * 
-     * @param targetName
-     */
-    public void sendSignal(String signalName, boolean failStatus)
-    {
-        log.debug("Sending signal for:" + signalName);
-        if (project.getReference(DEFAULT_NOTIFIER_LIST_REFID) != null) {
-            // sending using default settings
-            sendNotify(((SignalInput) project
-                    .getReference(DEFAULT_NOTIFIER_LIST_REFID))
-                    .getSignalNotifierList(), signalName, failStatus,null);
-        }
-    }
-
-    protected void sendNotify(Vector<Notifier> notifierList, String signalName) {
-        sendNotify(notifierList, signalName, false, null);
-    }
-
-    /**
-     * Send notification using the notification list.
-     * 
-     * @param notifierList
-     */
-    @SuppressWarnings("deprecation")
-    protected void sendNotify(Vector<Notifier> notifierList, String signalName,
-            boolean failStatus, List<String> fileList) {
-        if (notifierList == null) {
-            return;
-        }
-        for (Notifier notifier : notifierList) {
-            if (notifier != null) {
-                notifier.sendData(signalName, failStatus, fileList);
-            }
-        }
-    }
 
     /**
      * Handle the signal, either fail now, or defer the failure.
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/SignalListener.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/SignalListener.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,11 +18,10 @@
 
 package com.nokia.helium.signal.ant;
 
-import org.apache.tools.ant.BuildListener;
-
+import org.apache.log4j.Logger;
 import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildListener;
 import org.apache.tools.ant.Project;
-import org.apache.log4j.Logger;
 
 /**
  * Listener class that can connect to Ant and log information regarding to build
@@ -39,8 +38,6 @@
  * 
  */
 public class SignalListener implements BuildListener {
-
-    public static final String MODULE_NAME = "signaling";
     
     private boolean initialized;
 
@@ -81,10 +78,7 @@
             initialized = true;
         }
         log.debug("Signaling:targetFinished:sendsignal: " + event.getTarget());
-        //boolean status = signalList1.checkAndNotifyFailure(event.getTarget(),event.getProject());
-        //if (!status) {
-        signalList.checkAndNotifyFailure(event.getTarget(),event.getProject());
-        //}
+        signalList.checkAndNotifyFailure(event.getTarget(), event.getProject());
     }
 
     /**
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/conditions/DeferredFailureCondition.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/conditions/DeferredFailureCondition.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,12 +18,12 @@
 
 package com.nokia.helium.signal.ant.conditions;
 
+import org.apache.tools.ant.ProjectComponent;
 import org.apache.tools.ant.taskdefs.condition.Condition;
+
 import com.nokia.helium.signal.SignalStatus;
 import com.nokia.helium.signal.SignalStatusList;
 
-import org.apache.tools.ant.ProjectComponent;
-
 /**
  * The hasDeferredFailure condition allows you to know if any diferred failure are pending,
  * or simply if a specific kind of failure has been deferred.
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/ClearDeferredFailuresTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/ClearDeferredFailuresTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -19,6 +19,7 @@
 package com.nokia.helium.signal.ant.taskdefs;
 
 import org.apache.tools.ant.Task;
+
 import com.nokia.helium.signal.SignalStatusList;
 
 /**
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/SignalTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/SignalTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,10 +17,12 @@
 
 package com.nokia.helium.signal.ant.taskdefs;
 
+import java.util.Vector;
+
 import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Target;
 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;
 
@@ -115,8 +117,9 @@
 
     @Override
     public void execute() {
-        if (name == null)
+        if (name == null) {
             throw new BuildException("'name' attribute is not defined.");
+        }
         if (result == null) {
             result = new Integer(0);
         }
@@ -148,7 +151,9 @@
             if (config == null) {
                 throw new BuildException("Could not find signal config for signal name: " + name);
             }
-            signalList.sendSignal(getName(), result.intValue() != 0);
+            signalList.processForSignal(getProject(), this.getSignalNotifierInput(), this.name, 
+                    this.getOwningTarget().getName(), message, result.intValue() != 0);
+
             if (result.intValue() != 0) {
                 // keep same message as earlier.
                 log(name
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/EMAILNotifier.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/EMAILNotifier.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,21 +18,20 @@
 package com.nokia.helium.signal.ant.types;
 
 import com.nokia.helium.core.EmailDataSender;
-import java.util.Iterator;
+
+import com.nokia.helium.core.EmailSendException;
 import com.nokia.helium.core.PropertiesSource;
 import com.nokia.helium.core.TemplateInputSource;
-import com.nokia.helium.core.XMLTemplateSource;
 import com.nokia.helium.signal.Notifier;
-import com.nokia.helium.signal.ant.SignalListener;
 import com.nokia.helium.core.TemplateProcessor;
-import com.nokia.helium.core.HlmAntLibException;
 import java.util.List;
 import java.util.Hashtable;
 import java.util.ArrayList;
 import java.io.IOException;
+
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.types.DataType;
-import org.apache.log4j.Logger;
 import java.io.File;
 
 /**
@@ -43,10 +42,8 @@
  */
 public class EMAILNotifier extends DataType implements Notifier {
 
-    private Logger log = Logger.getLogger(EmailDataSender.class);
     private TemplateProcessor templateProcessor = new TemplateProcessor();
     private File defaultTemplate;
-    private File templateSrc; // Deprecated    
     private String title;
     private String smtp;
     private String ldap;
@@ -57,208 +54,156 @@
 
     /**
      * Rendering the template, and sending the result through email.
-     * @deprecated
+     * 
      * @param signalName
-     *            - Name of the signal that has been raised.
-     */
-    @SuppressWarnings("unchecked")
-    public void sendData(String signalName, boolean failStatus,
-            List<String> fileList) {
-        if (notifyWhen != null
-                && (notifyWhen.equals("always") || (notifyWhen.equals("fail") && failStatus)
-                        || (notifyWhen.equals("pass") && !failStatus))) {
-            if (templateSrc == null) {
-                throw new HlmAntLibException(SignalListener.MODULE_NAME,
-                        "templateSrc attribute has not been defined.");
-            }
-
-            if (title == null) {
-                throw new HlmAntLibException(SignalListener.MODULE_NAME,
-                        "title attribute has not been defined.");
-            }
-
-            if (smtp == null) {
-                throw new HlmAntLibException(SignalListener.MODULE_NAME,
-                        "smtp attribute has not been defined.");
-            }
-
-            if (ldap == null) {
-                throw new HlmAntLibException(SignalListener.MODULE_NAME,
-                        "ldap attribute has not been defined.");
-            }
-
-            log.debug("Sending data by e-mail.");
-            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()));
-                Iterator iter = fileList.iterator();
-                String sourceBaseName = "doc";
-                int count = 0;
-                while (iter.hasNext()) {
-                    String srcFile = (String) iter.next();
-                    sourceList.add(new XMLTemplateSource(sourceBaseName + count, 
-                            new File(srcFile)));
-                    count++;
-                }
-                Hashtable<String, String> signalProperties = new Hashtable<String, String>();
-                signalProperties.put("signal.name", signalName);
-                signalProperties.put("signal.status", "" + failStatus);
-                sourceList.add(new PropertiesSource("signaling",
-                        signalProperties));
-
-                templateProcessor.convertTemplate(templateSrc, emailOutputFile,
-                        sourceList);
-                EmailDataSender emailSender;
-                if (rootdn != null)
-                {
-                    String[] to = null;
-                    if (additionalRecipients != null)
-                    {
-                        to = additionalRecipients.split(",");
-                    }
-                    emailSender = new EmailDataSender(to, smtp, ldap, rootdn);
-                }
-                else
-                {
-                    emailSender = new EmailDataSender(
-                        additionalRecipients, smtp, ldap);
-                }
-                if (from != null)
-                {
-                    emailSender.setFrom(from);
-                }
-                log.debug("EmailNotifier:arlist: " + additionalRecipients);
-                Project subProject = getProject().createSubProject();
-                subProject.setProperty("signal.name", signalName);
-                subProject.setProperty("signal.status", "" + failStatus);
-                emailSender.addCurrentUserToAddressList();
-                emailSender.sendData("signaling", emailOutputFile
-                        .getAbsolutePath(), "application/html", subProject
-                        .replaceProperties(title), null);
-            } catch (IOException e) {
-                log.debug("EmailNotifier:IOexception: ", e);
-            }
-        }
-    }
-            
-    
-    /**
-     * Rendering the template, and sending the result through email.
-     * 
-     * @param signalName - is the name of the signal that has been raised.
-     * @param failStatus - indicates whether to fail the build or not
-     * @param notifierInput - contains signal notifier info
-     * @param message - is the message from the signal that has been raised. 
+     *            - is the name of the signal that has been raised.
+     * @param failStatus
+     *            - indicates whether to fail the build or not
+     * @param notifierInput
+     *            - contains signal notifier info
+     * @param message
+     *            - is the message from the signal that has been raised.
      */
 
     @SuppressWarnings("unchecked")
     public void sendData(String signalName, boolean failStatus,
-            NotifierInput notifierInput, String message ) {
+            NotifierInput notifierInput, String message) {
         if (notifyWhen != null
-                && (notifyWhen.equals("always") || (notifyWhen.equals("fail") && failStatus)
-                        || (notifyWhen.equals("pass") && !failStatus))) {
+                && (notifyWhen.equals("always")
+                        || (notifyWhen.equals("fail") && failStatus) || (notifyWhen
+                        .equals("pass") && !failStatus))) {
             if (title == null) {
-                throw new HlmAntLibException(SignalListener.MODULE_NAME,
-                        "title attribute has not been defined.");
+                throw new BuildException(
+                        "The 'title' attribute has not been defined.");
             }
 
             if (smtp == null) {
-                throw new HlmAntLibException(SignalListener.MODULE_NAME,
-                        "smtp attribute has not been defined.");
+                throw new BuildException(
+                        "The 'smtp' attribute has not been defined.");
             }
 
-            if (ldap == null) {
-                throw new HlmAntLibException(SignalListener.MODULE_NAME,
-                        "ldap attribute has not been defined.");
+            if (ldap == null && from == null) {
+                throw new BuildException(
+                        "The 'ldap' attribute has not been defined.");
             }
-            
-            String smtpUpdated = getProject().replaceProperties(smtp);
-            String ldapUpdated = getProject().replaceProperties(ldap);
-            String rootdnUpdated = getProject().replaceProperties(rootdn);
-            String additionalRecipientsUpdated = getProject().replaceProperties(additionalRecipients);
+            EmailDataSender emailSender = createEmailDataSender();
 
-            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
-            {
-                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();
+            try {
+                
+                File fileToSend = null;
+                if (notifierInput != null) {
+                    fileToSend = notifierInput.getFile(".*.html");
                 }
-                
-            } 
-            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) {
+                    if (defaultTemplate != null && defaultTemplate.exists()) {
+                        File emailOutputFile;
+                        try {
+                            emailOutputFile = File.createTempFile("helium_",
+                                    "email.html");
+                            emailOutputFile.deleteOnExit();
+                            log("sending data by e-mail:outputDir: "
+                                    + emailOutputFile.getAbsolutePath(), Project.MSG_DEBUG);
 
-                    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);
+                            fileToSend = emailOutputFile;
+                        } catch (IOException e) {
+                            log("EmailNotifier: IOexception: " + e.getMessage(), Project.MSG_DEBUG);
+                        }
+                    } else {
+                        if (defaultTemplate == null) {
+                            log("The 'defaultTemplate' has not been defined.",
+                                    Project.MSG_WARN);
+                        } else if (!defaultTemplate.exists()) {
+                            log("Could not find default template: "
+                                    + defaultTemplate.getAbsolutePath(),
+                                    Project.MSG_WARN);
+                        }
+                    }
                 }
+                emailSender.sendData("signaling", fileToSend, "application/html",
+                        subProject.replaceProperties(title), null);
+            } catch (EmailSendException ese) {
+                log(this.getDataTypeName() + " Warning: " + ese.getMessage(), Project.MSG_WARN);
             }
-            emailSender.sendData("signaling", filePath, 
-                    "application/html", subProject
-                    .replaceProperties(title), null);
         }
     }
 
     /**
-     * Set when the notifier should emit the massage. Possible values are: never, always, fail, pass.
+     * Create an EmailDataSender base on this type settings.
+     * @return
+     */
+    private EmailDataSender createEmailDataSender() {
+        String smtpUpdated = getProject().replaceProperties(smtp);
+        String ldapUpdated = getProject().replaceProperties(ldap);
+        String additionalRecipientsUpdated = getProject()
+                .replaceProperties(additionalRecipients);
+
+        log("Sending data by e-mail.", Project.MSG_DEBUG);
+        EmailDataSender emailSender;
+        if (additionalRecipientsUpdated == null) { 
+            additionalRecipientsUpdated = from;
+        } else {
+            additionalRecipientsUpdated += (from != null) ? (additionalRecipientsUpdated.length() > 0 ? "," : "") + from : "";
+        }
+        if (rootdn != null) {
+            String[] to = null;
+            if (additionalRecipientsUpdated != null) {
+                to = additionalRecipientsUpdated.split(",");
+            }
+            emailSender = new EmailDataSender(to, smtpUpdated, ldapUpdated,
+                    getProject().replaceProperties(rootdn));
+        } else {
+            emailSender = new EmailDataSender(additionalRecipientsUpdated,
+                    smtpUpdated, ldapUpdated);
+        }
+        if (from == null) {
+            try {
+                emailSender.addCurrentUserToAddressList();
+            } catch (EmailSendException ex) {
+                // Consider the error as a warning, let's try to send the email anyway
+                log(this.getDataTypeName() + " Warning: " + ex.getMessage(), Project.MSG_WARN);
+            }
+        }
+        if (from != null) {
+            log("Setting from: " + from);
+            emailSender.setFrom(from);
+        }
+        log("EmailNotifier:arlist: " + additionalRecipientsUpdated, Project.MSG_DEBUG);
+        return emailSender;
+    }
+    
+    /**
+     * Set when the notifier should emit the massage. Possible values are:
+     * never, always, fail, pass.
+     * 
      * @ant.not-required Default is never.
      */
-    public void setNotifyWhen(String ntfyWhen) {
-        notifyWhen = ntfyWhen;
+    public void setNotifyWhen(NotifyWhenEnum notifyWhen) {
+        this.notifyWhen = notifyWhen.getValue();
     }
 
+    /**
+     * When do we need to notify the user?
+     * 
+     * @return
+     */
     public String getNotifyWhen() {
         return notifyWhen;
     }
@@ -274,13 +219,19 @@
 
     /**
      * Define the template source file to use while rendering the message.
+     * 
      * @deprecated
      * @ant.required
      */
+    @Deprecated
     public void setTemplateSrc(File template) {
-        this.templateSrc = template;
+        log(
+                "The usage of the templateSrc attribute is deprecated,"
+                        + " please consider using the defaultTemplate attribute instead.",
+                Project.MSG_ERR);
+        this.defaultTemplate = template;
     }
-    
+
     /**
      * The title of the email.
      * 
@@ -298,7 +249,7 @@
     public void setSmtp(String smtp) {
         this.smtp = smtp;
     }
-    
+
     /**
      * Who the email is sent from.
      * 
@@ -320,12 +271,17 @@
     /**
      * The LDAP server URL.
      * 
-     * @ant.required
+     * @ant.required (or from attribute can be used)
      */
     public void setLdap(String ldap) {
         this.ldap = ldap;
     }
-    
+
+    /**
+     * The LDAP rootdn.
+     * @param rootdn
+     * @ant.required
+     */
     public void setRootdn(String rootdn) {
         this.rootdn = rootdn;
     }
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/ExecuteTaskNotifier.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/ExecuteTaskNotifier.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,6 +18,7 @@
 
 package com.nokia.helium.signal.ant.types;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Vector;
@@ -25,7 +26,9 @@
 import org.apache.log4j.Logger;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.MagicNames;
 import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectHelper;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.TaskContainer;
 import org.apache.tools.ant.types.DataType;
@@ -75,12 +78,17 @@
         try {
             // Configure the project
             Project prj = getProject().createSubProject();
+            getProject().initSubProject(prj);
             prj.initProperties();
             prj.setInputHandler(getProject().getInputHandler());
             for (BuildListener bl : (Vector<BuildListener>)getProject().getBuildListeners()) {
                 prj.addBuildListener(bl);
             }
             getProject().copyUserProperties(prj);
+            getProject().copyInheritedProperties(prj);
+            // We need to autoconfigure the project - target and tasks-...
+            ProjectHelper.configureProject(prj, new File(getProject().getProperty(MagicNames.ANT_FILE)));
+            prj.inheritIDReferences(getProject());
             
             
             prj.setProperty("signal.name", signalName);
@@ -113,10 +121,6 @@
         tasks.add(task);
     }
 
-    @Override
-    public void sendData(String signalName, boolean failStatus, List fileList) {        
-    }
-
     /**
      * Defines if an error happens while executing 
      * @param failonerror
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/InfoNotifier.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/InfoNotifier.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,11 +17,12 @@
 
 package com.nokia.helium.signal.ant.types;
 
-import com.nokia.helium.signal.Notifier;
-import org.apache.tools.ant.types.DataType;
+import java.io.File;
+
 import org.apache.log4j.Logger;
-import java.util.List;
-import java.io.File;
+import org.apache.tools.ant.types.DataType;
+
+import com.nokia.helium.signal.Notifier;
 
 /**
  * The InfoNotifier provides you an easy way to inform the
@@ -31,16 +32,6 @@
 public class InfoNotifier extends DataType implements Notifier {
 
     private Logger log = Logger.getLogger(InfoNotifier.class);
-    /**
-     * Rendering the template, and sending the result through email.
-     * @deprecated
-     * @param signalName
-     *            - Name of the signal that has been raised.
-     */
-    @SuppressWarnings("unchecked")
-    public void sendData(String signalName, boolean failStatus,
-            List<String> fileList) {
-    }
     
     /**
      * Rendering the template, and sending the result through email.
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/NotifierInput.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/NotifierInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -20,13 +20,14 @@
 
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.ArrayList;
 import java.util.Vector;
+
+import org.apache.log4j.Logger;
+import org.apache.tools.ant.DirectoryScanner;
 import org.apache.tools.ant.types.DataType;
 import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.log4j.Logger;
 
 /**
  * Helper class to store the signal notifier info.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/NotifyWhenEnum.java	Fri Aug 13 14:59:05 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.signal.ant.types;
+
+import org.apache.tools.ant.types.EnumeratedAttribute;
+
+/**
+ * Enum class for the notifyWhen attribute.
+ */
+public class NotifyWhenEnum extends EnumeratedAttribute {
+
+    /**
+     * @return the list of allowed values.
+     */
+    @Override
+    public String[] getValues() {
+        String[] values = new String[3];
+        values[0] = "always";
+        values[1] = "fail";
+        values[2] = "pass";
+        return values;
+    }
+}
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SMSNotifier.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SMSNotifier.java	Fri Aug 13 14:59:05 2010 +0300
@@ -20,16 +20,14 @@
 
 
 import org.apache.tools.ant.types.DataType;
+
 import com.nokia.helium.signal.Notifier;
-import java.util.List;
 
 /**
  * Defines a signal notification via SMS.
  */
 public class SMSNotifier extends DataType implements Notifier {
 
-    public SMSNotifier() {
-    }
     /**
      * Sends the data to the requested sender list with specified notifier
      * 
@@ -42,13 +40,4 @@
             NotifierInput notifierInput, String message ) {
     }
 
-    /**
-     * Sends the data to the requested sender list with specified notifier
-     * 
-     * @deprecated
-     *    sends the data to the list of requested user.
-     */
-    public void sendData(String signalName, boolean failStatus,
-            List<String> fileList) {
-    }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalExceptionConfigHandler.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalExceptionConfigHandler.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,44 +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:  
-*
-*/
+ * 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.types;
 
 import java.util.Hashtable;
+
 import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.DataType;
+
 import com.nokia.helium.core.ant.HlmExceptionHandler;
 
-
 /**
- * This HlmExceptionHandler will provide execution support for the 
- * SignalExceptionConfig configurable elements. User can now reuse.
- * existing notifier to notify the user in case of build failure.
+ * This HlmExceptionHandler will provide execution support for the
+ * SignalExceptionConfig configurable elements. User can now reuse. existing
+ * notifier to notify the user in case of build failure.
  * 
  */
-public class SignalExceptionConfigHandler implements HlmExceptionHandler {
-    
+public class SignalExceptionConfigHandler extends DataType implements
+        HlmExceptionHandler {
+
     /**
-     * Looks for all SignalExceptionConfig reference and notify them. 
+     * Looks for all SignalExceptionConfig reference and notify them.
      */
     @SuppressWarnings("unchecked")
-    public void handleException(Project project, String module,
-            Exception exception) {
+    public void handleException(Project project, Exception exception) {
         Hashtable<String, Object> references = project.getReferences();
-        for (Object obj :  references.values()) {
+        for (Object obj : references.values()) {
             if (obj instanceof SignalExceptionConfig) {
-                SignalExceptionConfig config = (SignalExceptionConfig)obj;
+                SignalExceptionConfig config = (SignalExceptionConfig) obj;
                 config.notify(project, exception);
             }
         }
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalInput.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -21,21 +21,29 @@
 
 import java.util.Vector;
 
+import org.apache.log4j.Logger;
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.DataType;
-import com.nokia.helium.core.ant.types.ReferenceType;
-import org.apache.log4j.Logger;
 
+import com.nokia.helium.core.ant.types.ReferenceType;
 import com.nokia.helium.signal.Notifier;
 
-import org.apache.tools.ant.BuildException;
-
 /**
  * SignalInput class which is a type to store input for signals
  * Signals..
- * &lt;targetCondition&gt;
- *    &lt;hasSeverity severity="error" file="${build.cache.log.dir}/signals/prep_work_status.xml" /&gt;
- * &lt;/targetCondition&gt;
+ *   
+ * <pre>
+ *   &lt;hlm:signalInput id=&quot;testDeferredSignalInput&quot;&gt;
+ *      &lt;/hlm:notifierList refid=&quot;defaultNotiferList&quot; &gt;
+ *   &lt;/hlm:signalInput&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;
+ * </pre>
  * 
+ * @ant.type name="signalInput" category="Signaling"
  */
 public class SignalInput extends DataType
 {
@@ -50,8 +58,11 @@
 
     
     /**
-     * Helper function called by ant to set the failbuild type
+     * Defines how the signal framework should handle the error, either
+     * fail "now", at the end of the build "defer", or ignore the failure
+     * with "never".
      * @param failBuild type of failure for this input.
+     * @ant.not-required Default is now.
      */
     public void setFailBuild(FailBuildEnum failInput) {
         failBuild = failInput.getValue();
@@ -115,7 +126,6 @@
      * Gets the NotifierList associated with this input. If the
      * notifier list reference is empty then it throws exception. 
      * @return List of notifier associated with this input.
-     * @throws HlmAntLibException
      */    
     public Vector<Notifier> getSignalNotifierList() {
         Vector<Notifier> notifierList = null;
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalListenerConfig.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalListenerConfig.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,8 +18,9 @@
  
 package com.nokia.helium.signal.ant.types;
 
+import java.util.Vector;
+
 import org.apache.tools.ant.types.DataType;
-import java.util.Vector;
 
 /**
  * This Ant type defines a signal input for listener based signals.
@@ -154,29 +155,4 @@
         }
         return signalNotifierInputs.get(0);
     }
-
-    /**
-     * Helper function to return the complete target name set of the config.
-     * @return Set, full set of target names referred by this config.
-     * @throws HlmAntLibException
-     */    
-    //public Set<String> getTargetNameSet() {
-    //    if (targetConditionsMap.isEmpty()) {
-    //        initializeTargetConditionsMap();
-    //    }
-    //    return targetConditionsMap.keySet();
-    //}
-
-    /**
-     * Initializes the TargetConditionsMap, mapping target name with corresponding targetcondition
-     * for fast lookup. 
-     */    
-    //private void initializeTargetConditionsMap() {
-    //    for (TargetCondition condition : targetConditions) {
-    //        String name = condition.getName();
-    //        if (name != null) {
-    //            targetConditionsMap.put(name, condition);
-    //        }
-    //    }
-    //}
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalNotifierInput.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalNotifierInput.java	Fri Aug 13 14:59:05 2010 +0300
@@ -21,10 +21,9 @@
 
 import java.util.Vector;
 
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.DataType;
 
-import org.apache.tools.ant.BuildException;
-
 
 /**
  * SignalInput class which is a type to store input for signals
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalNotifierList.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalNotifierList.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,11 +18,11 @@
  
 package com.nokia.helium.signal.ant.types;
 
-import org.apache.tools.ant.types.DataType;
-import com.nokia.helium.signal.Notifier;
+import java.util.Vector;
 
+import org.apache.tools.ant.types.DataType;
 
-import java.util.Vector;
+import com.nokia.helium.signal.Notifier;
 
     
 /**
@@ -53,7 +53,6 @@
     /**
      * Returns the list of variables available in the VariableSet 
      * @return variable list
-     * @throws HlmAntLibException
      */
     public Vector<Notifier> getNotifierList() {
         return notifierlist;
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalStatusDef.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalStatusDef.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,45 +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:  
-*
-*/
+ * 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.types;
 
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
-import com.nokia.helium.core.ant.types.*;
-import org.apache.tools.ant.BuildException;
-import com.nokia.helium.signal.*;
-import com.nokia.helium.signal.ant.SignalListener;
-import org.apache.log4j.Logger;
+import org.apache.tools.ant.types.DataType;
 
+import com.nokia.helium.core.ant.PostBuildAction;
+import com.nokia.helium.signal.SignalStatusList;
 
 /**
  * Class to store the status of the signal of a particular target.
  */
-public class SignalStatusDef extends HlmPostDefImpl
-{
-    private Logger log = Logger.getLogger(SignalListener.class);
+public class SignalStatusDef extends DataType implements PostBuildAction {
     
     /**
-     * This post action will fail the build if any pending failure exists. 
+     * This post action will fail the build if any pending failure exists.
+     * 
      * @throws BuildException
      */
-    public void execute(Project prj, String module, String[] targetNames) {
+    public void executeOnPostBuild(Project project, String[] targetNames) {
         if (SignalStatusList.getDeferredSignalList().hasSignalInList()) {
             throw new BuildException(SignalStatusList.getDeferredSignalList().getErrorMsg());
         }
     }
-}
\ No newline at end of file
+}
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/TargetCondition.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/TargetCondition.java	Fri Aug 13 14:59:05 2010 +0300
@@ -1,67 +1,61 @@
 /*
-* 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:  
-*
-*/
+ * 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.types;
 
+import java.util.Vector;
+
+import org.apache.tools.ant.taskdefs.condition.Condition;
 import org.apache.tools.ant.types.DataType;
-import java.util.Vector;
-import org.apache.tools.ant.taskdefs.condition.Condition;
 
 /**
- * TargetCondition class which is a type to store the condition for generating
- * Signals..
- * &lt;targetCondition&gt;
- *    &lt;hasSeverity severity="error" file="${build.cache.log.dir}/signals/prep_work_status.xml" /&gt;
- * &lt;/targetCondition&gt;
+ * TargetCondition class which is a type to store the condition for generating Signals..
+ * &lt;targetCondition&gt; &lt;hasSeverity severity="error"
+ * file="${build.cache.log.dir}/signals/prep_work_status.xml" /&gt; &lt;/targetCondition&gt;
  */
 public class TargetCondition extends DataType {
 
     private String name;
-    
+
     private String errMsg;
-    
+
     private Vector<Condition> conditionList = new Vector<Condition>();
-    
-    /**
-     * Constructor
-     */
-    public TargetCondition() {
-    }
 
     /**
-     * Helper function to store the Name of the target for which
-     * the signal to be processed. 
+     * Helper function to store the Name of the target for which the signal to be processed.
+     * 
      * @param targetName to be stored.
-     */    
+     */
     public void setName(String targetName) {
         name = targetName;
     }
 
     /**
      * Helper function to store the error message of
+     * 
      * @param errorMessage to be displayed after failure.
-     */        
+     */
     public void setMessage(String errorMessage) {
         errMsg = errorMessage;
     }
-    
+
     /**
-     * Add a given variable to the list 
+     * Add a given variable to the list
+     * 
      * @param condition variable to add
      */
     public void add(Condition condition) {
@@ -69,28 +63,31 @@
     }
 
     /**
-     * Gets the list of conditions to be checked for the signal config. 
+     * Gets the list of conditions to be checked for the signal config.
+     * 
      * @return conditions variable for this configuration.
      */
     public Vector<Condition> getConditions() {
         return conditionList;
-    }    
+    }
+
     /**
-     * Helper function to return the Name of the target for which
-     * the signal to be processed. 
+     * Helper function to return the Name of the target for which the signal to be processed.
+     * 
      * @return name of the target of this targetcondition.
      * @deprecated
-     */        
+     */
     public String getName() {
-        return name;
+        return name;        
     }
 
     /**
      * Helper function to return the error message of this target condition.
+     * 
      * @return error message of this target condition.
      * @deprecated
-     */        
+     */
     public String getMessage() {
         return errMsg;
     }
-}
\ No newline at end of file
+}
--- a/buildframework/helium/sf/java/signaling/tests/antunit/run-scenario.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/tests/antunit/run-scenario.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -37,14 +37,14 @@
         <attribute name="scenario" />
         <attribute name="target" />
         <sequential>
-            <exec osfamily="windows" executable="cmd" dir="${file.run-scenario}/../../scenarii/@{scenario}" failonerror="true">
+            <exec osfamily="windows" executable="cmd" dir="${ant.file.run-scenario}/../../scenarii/@{scenario}" failonerror="true">
                 <env key="ANT_ARGS" value="${env.ANT_ARGS}" />
                 <arg line="/c ..\build.bat" />
                 <arg value="@{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="${ant.file.run-scenario}/../../scenarii/@{scenario}" failonerror="true">
                 <env key="ANT_ARGS" value="${env.ANT_ARGS}" />
                 <arg line="@{target}" />
                 <arg value="-Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/signaling/tests/antunit/test_executetasknotifier.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_executetasknotifier.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_executetasknotifier" xmlns:au="antlib:org.apache.ant.antunit" xmlns:ac="antlib:net.sf.antcontrib" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib Signal unittests.</description>
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef resource="com/nokia/helium/signal/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <property environment="env" />
+    <property name="build.summary.file" location="../data/ido_tedo_mcl_devlon52_ec_MCL.52.105_summary.log.xml" />
+
+    <!-- Deferred signal -->
+    <hlm:notifierList id="testSignalNotifiers">
+        <hlm:executeTaskNotifier>
+            <echo>Signal: ${signal.name}</echo>
+        </hlm:executeTaskNotifier>
+    </hlm:notifierList>
+
+    <hlm:notifierList id="testSignalNotifiersRuntarget">
+        <hlm:executeTaskNotifier>
+            <ac:runtarget target="some-custom-target" />    
+        </hlm:executeTaskNotifier>
+    </hlm:notifierList>
+
+    <hlm:signalInput id="testNeverSignalInput" failBuild="never">
+        <hlm:notifierListRef refid="testSignalNotifiers" />
+    </hlm:signalInput>
+    
+    <hlm:signalInput id="testNeverSignalInputRuntarget" failBuild="never">
+        <hlm:notifierListRef refid="testSignalNotifiersRuntarget" />
+    </hlm:signalInput>
+
+    <!-- is called prior to the test -->
+    <target name="setUp">
+        <!-- cleaning deferred pending failures. -->
+        <hlm:clearDeferredFailures />
+    </target>
+
+    <!-- is called after the test, even if that caused an error -->
+    <target name="tearDown">
+        <!-- cleaning deferred pending failures. -->
+        <hlm:clearDeferredFailures />
+    </target>
+
+    <target name="some-custom-target">
+        <echo>Signal: ${signal.name}</echo>
+    </target>
+
+    <target name="test-notifier-is-called">
+        <hlm:signal name="testSignal" result="0" message="message">
+            <signalNotifierInput>
+                <hlm:signalInput refid="testNeverSignalInput" />
+            </signalNotifierInput>
+        </hlm:signal>
+        <au:assertLogContains text="Signal: testSignal" />
+    </target>
+
+    <target name="test-notifier-with-runtarget-works">
+        <hlm:signal name="testSignal" result="0" message="message">
+            <signalNotifierInput>
+                <hlm:signalInput refid="testNeverSignalInputRuntarget" />
+            </signalNotifierInput>
+        </hlm:signal>
+        <au:assertLogContains text="Signal: testSignal" />
+    </target>
+</project>
--- a/buildframework/helium/sf/java/signaling/tests/antunit/test_signalexception_config.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/tests/antunit/test_signalexception_config.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -29,7 +29,7 @@
             <runScenario scenario="failing-build" target="build" />
         </au:expectfailure>
         <au:assertLogContains text="Signal: buildFailedSignal" />
-        <au:assertLogContains text="Message: Failing the build." />
+        <au:assertLogContains text="Failing the build." />
     </target>
    
     <target name="test-failing-build-with-failure-in-notifier">
@@ -37,7 +37,7 @@
             <runScenario scenario="failing-build-failing-notifier" target="build" />
         </au:expectfailure>
         <au:assertLogContains text="Signal: buildFailedSignal" />
-        <au:assertLogContains text="Message: Failing the build." />
+        <au:assertLogContains text="Failing the build." />
     </target>
    
 </project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/signaling/tests/build.bat	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/tests/build.bat	Fri Aug 13 14:59:05 2010 +0300
@@ -21,7 +21,7 @@
 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 -Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor -Dskip.diamonds=true %*
+call ant -Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor -Ddiamonds.enabled=false %*
 if "%ERRORLEVEL%" neq "0" (goto error)
 endlocal
 goto :eof
--- a/buildframework/helium/sf/java/signaling/tests/src/com/nokia/helium/signaling/tests/TestEmailSender.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/tests/src/com/nokia/helium/signaling/tests/TestEmailSender.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,12 +17,16 @@
 
 package com.nokia.helium.signaling.tests;
 
-import org.junit.*;
-import static org.junit.Assert.*;
-import java.io.*;
-import java.util.*;
-import com.nokia.helium.signal.ant.types.*;
+import java.io.File;
+
 import org.apache.tools.ant.Project;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.nokia.helium.signal.ant.types.EMAILNotifier;
+import com.nokia.helium.signal.ant.types.NotifierInput;
+import com.nokia.helium.signal.ant.types.NotifyWhenEnum;
 
 public class TestEmailSender {
     
@@ -38,12 +42,12 @@
      * @throws Exception
      */
     @Test
-    public void test_simpleMergeNode() throws Exception {
+    public void test_simpleEmailNotification() throws Exception {
         EMAILNotifier en = new EMAILNotifier();
         Project p = new Project();
         p.setNewProperty("user.name", "test");
         en.setProject(p);
-        en.setNotifyWhen("always");
+        en.setNotifyWhen((NotifyWhenEnum)NotifyWhenEnum.getInstance(NotifyWhenEnum.class, "always"));
         en.setTitle("test");
         en.setSmtp("test");
         en.setLdap("test");
@@ -52,6 +56,22 @@
         en.sendData("test", true, input, "Test Message");
     }
 
-   
+    /**
+     * This test should not fail the build, when no log are found, or default template 
+     * is missing just skip the notification and log an error.
+     * @throws Exception
+     */
+    public void test_emailNotificationWithoutNotifyFileAndTemplate() throws Exception {
+        EMAILNotifier en = new EMAILNotifier();
+        Project p = new Project();
+        p.setNewProperty("user.name", "test");
+        en.setProject(p);
+        en.setNotifyWhen((NotifyWhenEnum)NotifyWhenEnum.getInstance(NotifyWhenEnum.class, "always"));
+        en.setTitle("test");
+        en.setSmtp("test");
+        en.setLdap("test");
+        NotifierInput input = new NotifierInput();
+        en.sendData("test", true, input, "Test Message");
+    }   
 
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/synergy/src/com/nokia/helium/synergy/ant/taskdefs/AbstractScmBaseTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/synergy/src/com/nokia/helium/synergy/ant/taskdefs/AbstractScmBaseTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,11 +16,11 @@
  */
 package com.nokia.helium.synergy.ant.taskdefs;
 
+import java.io.File;
+import java.io.IOException;
 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;
--- a/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/filter-module.xsl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common"  exclude-result-prefixes="exslt">
-<!--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 "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:
-	XSLT module which contains the logic to process the filter attribute in the system definition
--->
-	<xsl:output method="xml" indent="yes"/>
-
-
-<!-- filters can only return hide or show -->
-
-<!-- filter-only =  item's @filter can only have items from the list
-	anything with no filters passes
--->
-<xsl:template match="filter-only" mode="filter"><xsl:param name="item"/>
-	<xsl:if test="$item[@filter]">
-		<xsl:variable name="this" select="."/>
-		<xsl:variable name="my-filters">
-			<xsl:call-template name="filter-list">
-				<xsl:with-param name="f" select="$item/parent::component/@filter"/>
-			</xsl:call-template>
-			<xsl:call-template name="filter-list">
-				<xsl:with-param name="f" select="$item/@filter"/>
-			</xsl:call-template>
-		</xsl:variable>
-		<xsl:variable name="match">
-			<xsl:for-each select="exslt:node-set($my-filters)/*">
-				<xsl:if test="not($this/*[name()=name(current())  and @v=current()/@v])">x</xsl:if>
-			</xsl:for-each>
-		</xsl:variable>
-		<xsl:if test="$match!=''">hide</xsl:if>
-	</xsl:if>
-</xsl:template>
-
-
-
-<!-- filter-has =  item's @filter must have all filters in the list. ie it can have any other filters, but these must all be present	
--->
-<xsl:template match="filter-has" mode="filter"><xsl:param name="item"/>
-	<xsl:if test="$item[(self::component or self::unit)  and not(unit/@filter or self::unit[not(../unit[@filter])])]">
-		<xsl:variable name="my-filters">
-			<xsl:call-template name="filter-list">
-				<xsl:with-param name="f" select="$item/parent::component/@filter"/>
-			</xsl:call-template>
-			<xsl:call-template name="filter-list">
-				<xsl:with-param name="f" select="$item/@filter"/>
-			</xsl:call-template>
-		</xsl:variable>
-		<xsl:variable name="match">
-			<xsl:for-each select="*">
-				<!-- 	if(f in this) {return true}  else if(!f in this) {return false} else {return !(f is positive)} -->
-				<xsl:choose>
-					<xsl:when test="exslt:node-set($my-filters)/*[name()=name(current()) and @v=current()/@v]"/> <!-- filter in item -->
-					<xsl:when test="exslt:node-set($my-filters)/*[name()!=name(current()) and @v=current()/@v]">x</xsl:when> <!-- !filter in item -->
-					<xsl:when test="self::filter">x</xsl:when> <!-- !(filter is positive) -->
-				</xsl:choose>
-			</xsl:for-each>
-		</xsl:variable>
-		<xsl:if test="$match!=''">hide</xsl:if>
-	</xsl:if>
-</xsl:template>
-
-<xsl:template match="filter-with" mode="filter"><xsl:param name="item"/>
-	<xsl:if test="$item[(self::component or self::unit)  and not(unit/@filter or self::unit[not(../unit[@filter])])]">
-		<xsl:variable name="my-filters">
-			<xsl:call-template name="filter-list">
-				<xsl:with-param name="f" select="$item/parent::component/@filter"/>
-			</xsl:call-template>
-			<xsl:call-template name="filter-list">
-				<xsl:with-param name="f" select="$item/@filter"/>
-			</xsl:call-template>
-		</xsl:variable>
-		<xsl:variable name="match">
-			<xsl:for-each select="*">
-				<xsl:if test="exslt:node-set($my-filters)/*[name()!=name(current()) and @v=current()/@v]">x</xsl:if> <!-- !filter in item -->
-			</xsl:for-each>
-		</xsl:variable>
-		<xsl:if test="$match!=''">hide</xsl:if>
-	</xsl:if>
-</xsl:template>
-
-
-
-<xsl:template name="filter-item"> <xsl:param name="f"/>
-	<!-- create an element for a given filter. If the filter's empty make nothing -->
-	<xsl:choose>
-		<xsl:when test="$f=''"/>
-		<xsl:when test="starts-with($f,'!')">
-				<not v="{substring($f,2)}"/>
-		</xsl:when>
-		<xsl:otherwise>
-				<filter v="{$f}"/>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-<xsl:template name="filter-list"><xsl:param name="f"/>
-	<!-- turn a filter list into a set of elements (<filter> or <not>) with the attribute "v" containing the "absolute value" of the filter
-		filter="A,B,!C" becomes  <filter v="A"/><filter v="B"/><not v="C"/> 
-	  -->
-	<xsl:choose>
-		<xsl:when test="contains($f,',')">
-			<xsl:call-template name="filter-item"><xsl:with-param name="f" select="normalize-space(substring-before($f,','))"/></xsl:call-template>
-			<xsl:call-template name="filter-list">
-				<xsl:with-param name="f" select="substring-after($f,',')"/>
-			</xsl:call-template>
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:call-template name="filter-item"><xsl:with-param name="f" select="normalize-space($f)"/></xsl:call-template>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet> 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/filtering.bat	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,21 @@
+@rem Copyright (c) 2010 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 .%1==. goto use
+@ java -jar %~dp0xalanj\xalan.jar -xsl %~dpn0.xsl %* 
+@goto end
+:use
+@ java -jar %~dp0xalanj\xalan.jar -in %~dpn0.xsl -xsl %~dp0lib\usage.xsl -param usage "%~n0"
+:end
\ No newline at end of file
--- a/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/filtering.xsl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/filtering.xsl	Fri Aug 13 14:59:05 2010 +0300
@@ -3,7 +3,7 @@
 <!--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 "Eclipse Public License v1.0"
+	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".
 
@@ -12,15 +12,69 @@
 	Contributors:
 	Description:
 	Filter a sysdef in the 2.0 or 3.0 syntax
+	The functionality of these filters is not supported outside of this tool. 
+	The filtering concepts here may not be carried forward in future system definition processing tools
 -->
+<!--Description:This filters a sysdef in either the 2.0 or 3.0 syntax
+If using the 3.0 syntax, specific IDs optionally be included verbatim
+-->
+
+<!--Input:<sysdef> - (required) The system definition XML file to process.
+		Can be in the 2.0 or 3.0 format, and can be a fragment or
+		stand-alone.-->
+<!--Output:<sysdef> - (optional) The system definition XML file to save the
+		output as. If not present it will write to stdout.-->
+
 <xsl:output method="xml" indent="yes"/>
 
-<xsl:param name="filter-type">only</xsl:param> <!-- only, has or with -->
+<xsl:param name="filter-type">only</xsl:param>
+<!-- <type> - The method of filtering. Legal values are:
+		"only" = every component/unit can only have zero or more of
+			these specified filters. ie, it can only have filters
+			from this list, no other filters are allowed. This
+			covers the common use case of "I want anything with gt
+			and or techview, but no other filters" that was the
+			first step in all old symbian.com builds. 
+
+		"has" =  every component/unit must have all of these filters.
+			ie it can have any other filters, but all specified
+			filters must all be present. This covers the case where
+			filter="test" identifies tests and there is no special
+			filter to identify things that are not tests. So a
+			filter for "!test" will strip out anything with
+			filter="test" (plus any other filters) for a production
+			build, and a filter of "test" will strip out everything
+			that does not have filter="test" (plus any other
+			filters) for a test build. Opposite filters will
+			generate sets that are exactly opposite to each other.
 
-<xsl:param name="filter"/> <!-- comma-separated list -->
+		"with" =  components/units that have the opposite filter are
+			removed. This covers the old symbian.com case of
+			java, !java and "don't care" components. In other words
+			we have a global feature that every item can be built
+			only when the feature is set, only when the feature is
+			not set, or it does not care and will always be built.
+			So for a !java build only items containing filter="java"
+			are stripped out. For a java build, only items with
+			filter="!java" are stripped out. Anything which does not
+			explicitly mention java are always unaffected. Opposite
+			filters will generate sets which overlap.
+-->
+
 
-<xsl:param name="addbuild" select="0"/> <!-- add a system build section that accepts everything -->
+<xsl:param name="filter"/> <!-- <list> - (required) A comma-separated list of filters
+		used to process the sysdef.-->
+
+<xsl:param name="addbuild" select="0"/> <!--1 - (optional) If present, it will add a system build
+		section that accepts everything. This is needed for genxml
+		processing -->
 
+<xsl:param name="verbatim"/> <!-- <list> - (optional) A comma-separated list of system
+		model IDs to include unfiltered. IDs must take the form as in
+		the document they appear (ie using the same namespace prefix).
+		This does not work on 2.0 syntax sysdefs. -->
+
+<xsl:variable name="ID-list" select="concat(',',translate(normalize-space($verbatim),' ',''),',')"/> <!-- remove all spaces from $idlist and add surrounding commas for easier processing-->
 
 <xsl:template match="node()|@*"><xsl:copy-of select="."/></xsl:template>
 <xsl:template match="*"><xsl:param name="data"/>
@@ -38,8 +92,8 @@
 			<xsl:with-param name="item" select="current()"/>
 		</xsl:apply-templates>
 	 </xsl:variable>
-	 
-	 <xsl:if test="$display != 'hide' "> <!-- if hide, remove completely from the output-->
+	 <xsl:if test="$display != 'hide' or ($verbatim != '' and ancestor-or-self::*[contains($ID-list,concat(',',@id,','))])"> 
+		<!-- if 'hide', remove completely from the output, but always include any ID listed as a $ID-list item-->
 		<xsl:copy>
 			<xsl:copy-of select="@*"/>
 			<xsl:apply-templates select="node()">
@@ -95,7 +149,7 @@
 </xsl:template>
 
 
-<xsl:include href="filter-module.xsl"/>
+<xsl:include href="lib/filter-module.xsl"/>
 
 <xsl:template name="DTD-bld">
 <xsl:text disable-output-escaping="yes"><![CDATA[<!DOCTYPE SystemDefinition [
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinandparesysdef.bat	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,21 @@
+@rem Copyright (c) 2010 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 .%1==. goto use
+@ java -jar %~dp0xalanj\xalan.jar -xsl %~dpn0.xsl %* 
+@goto end
+:use
+@ java -jar %~dp0xalanj\xalan.jar -in %~dpn0.xsl -xsl %~dp0lib\usage.xsl -param usage "%~n0"
+:end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinandparesysdef.xsl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!--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:
+	Create a stand-alone sysdef from a linked set of fragments, paring down to just a set of items of the desired rank.
+-->
+ 	<xsl:output method="xml" indent="yes"/>
+
+<!--Description:This pares the generated sysdef down to just a set of items of the desired
+rank. In other words, you provide a list of IDs to keep and a system model
+rank (layer, package, collection, component). 
+Every item of that rank in the sysdef will be removed except those in the list
+of IDs.
+Primary use cases of this would be to extract a single layer, or to select a
+specific set of packages.
+
+-->
+<xsl:param name="pare"/>		
+	<!--<list> - (required) A comma-separated list of IDs in the literal from as the document they appear in (ie same namespace prefix) -->
+
+<xsl:param name="rank">package</xsl:param>
+	<!--<rank> = the rank item to pare down. This will remove any item of that rank EXCEPT those in $pare -->
+
+<xsl:variable name="pare-list" select="concat(',',translate(normalize-space($pare),' ',','),',')"/> <!-- accept spaces in pare. Pad with commas to make computing easier -->
+
+<xsl:include href="joinsysdef.xsl"/>  
+
+<xsl:template match="/SystemDefinition[systemModel]">
+	<xsl:apply-templates select="." mode="join">
+		<xsl:with-param name="filename" select="$path"/>
+		<xsl:with-param name="data" select="current()"/> <!-- just has to be non-empty -->
+	</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="*" mode="filter"> <!-- use this to strip out the unwanted items -->
+	<xsl:param name="item" />
+	<xsl:if test="$rank=name($item) and not(contains($pare-list,concat(',',$item/@id,',')))">hide</xsl:if>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinsysdef	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,19 @@
+#!/bin/bash
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "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:
+#
+# find out the directory of the script file
+SCRIPT=$(readlink -f $0)
+SCRIPT_DIR=$(dirname $SCRIPT)
+python $SCRIPT_DIR/joinsysdef_mock.py $*
--- a/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinsysdef-module.xsl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,511 +0,0 @@
-<?xml version="1.0"?>
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
- 	xmlns:exslt="http://exslt.org/common" exclude-result-prefixes="exslt">
-<!--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 "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:
-	XSLT module which contains the logic to join a system definition file
--->
-	<!-- save SF namespace as a constant to avoid the risk of typos-->
- <xsl:variable name="defaultns">http://www.symbian.org/system-definition</xsl:variable>
- 
-<!-- create a stand-alone sysdef from a linked set of fragments -->
-
-<xsl:template match="/*" mode="join">
-	<xsl:message terminate="yes">ERROR: Cannot process this document</xsl:message>
-</xsl:template>
-
-
-<xsl:template match="/SystemDefinition[@schema='3.0.0' and count(*)=1]" mode="join">
-	<xsl:param name="origin" select="/.."/>
-	<xsl:param name="root"/>
-	<xsl:param name="filename"/>
-	<xsl:param name="namespaces"/>
-	<xsl:param name="data" select="/.."/>
-	<xsl:choose>
-		<xsl:when test="$origin">	<!-- this sysdef fragment was linked from a parent sysdef -->
-			<xsl:for-each select="*"> <!-- can be only one -->
-				<xsl:variable name="upid"><xsl:apply-templates select="$origin/@id" mode="my-id"/></xsl:variable>		<!-- namespaceless ID of this in parent doc -->
-				<xsl:variable name="id"><xsl:apply-templates select="@id" mode="my-id"/></xsl:variable>						<!-- namespaceless ID of this here -->
-				<xsl:variable name="upns"><xsl:apply-templates select="$origin/@id" mode="my-namespace"/></xsl:variable>	<!-- ID's namespace in parent doc -->
-				<xsl:variable name="ns"><xsl:apply-templates select="@id" mode="my-namespace"/></xsl:variable>	<!-- ID's namespace -->
-				<xsl:if test="$id!=$upid or $ns!=$upns">
-					<xsl:message terminate="yes">ERROR: Linked ID "<xsl:value-of select="$id"/>" (<xsl:value-of select="$ns"/>) must match linking document "<xsl:value-of select="$upid"/>" (<xsl:value-of select="$upns"/>)</xsl:message>
-				</xsl:if>
-				<!-- copy any attributes not already defined (parent doc overrides child doc)-->
-				<xsl:for-each select="@*">
-					<xsl:variable name="n" select="name()"/>
-					<xsl:choose>
-						<xsl:when test="$n='id'"/> <!-- never copy this, always set -->
-						<xsl:when test="$origin/@*[name()=$n]"> <!-- don't copy if already set -->
-							<xsl:message>Cannot set "<xsl:value-of select="$n"/>", already set</xsl:message>
-						</xsl:when>
-						<xsl:when test="$n='before'">
-							<!-- ensure ns is correct (if any future attribtues will ever use an ID, process it here too)-->
-							<xsl:apply-templates select="." mode="join">
-								<xsl:with-param name="namespaces" select="$namespaces"/>
-							</xsl:apply-templates>
-						</xsl:when> 
-						<xsl:otherwise><xsl:copy-of select="."/></xsl:otherwise> <!-- just copy anything else -->
-					</xsl:choose>
-				</xsl:for-each>
-				<xsl:copy-of select="../namespace::*[not(.=$namespaces)]"/> <!-- set any namespaces not already set (they should all alreayd be, but some XSLT processors are quirky) -->
-			 	<xsl:apply-templates select="$data" mode="overlay-attributes">
-					<xsl:with-param name="item" select="current()"/>
-				</xsl:apply-templates>
-				<xsl:variable name="content">									
-					<xsl:apply-templates select="*|comment()" mode="join">
-						<xsl:with-param name="root" select="$root"/>
-						<xsl:with-param name="filename" select="$filename"/>
-						<xsl:with-param name="data" select="$data"/>
-						<xsl:with-param name="namespaces" select="$namespaces | ../namespace::*[not(.=$namespaces)]"/>
-					</xsl:apply-templates>
-				</xsl:variable>
-				<xsl:apply-templates select="." mode="is-content-filtered"> <!-- optionally add filtered="yes" if some content has been removed -->
-					<xsl:with-param name="content" select="$content"/>
-				</xsl:apply-templates>
-			 	<xsl:apply-templates select="$data" mode="overlay-meta">
-					<xsl:with-param name="item" select="current()"/>
-				</xsl:apply-templates>
-				<xsl:copy-of select="$content"/>
-			</xsl:for-each>
-		</xsl:when>
-		<xsl:when test="function-available('exslt:node-set')"> <!-- this is the root element of a root sysdef -->
-			<!--try to put all namespaces in root element -->
-			<xsl:variable name="nss">
-				<!-- contains node set of namespaces to add to root element.
-					May panic if there are too many single-letter namespaces and this can't create a new one -->
-				<xsl:call-template name="needed-namespaces">
-					<xsl:with-param name="foundns">
-						<xsl:apply-templates select="//*[(self::component or self::collection or self::package or self::layer) and @href]" mode="scan-for-namespaces"/>
-					</xsl:with-param>
-				</xsl:call-template>
-			</xsl:variable>
-			<xsl:variable name="ns" select="@id-namespace | namespace::* | exslt:node-set($nss)/*"/>
-			<xsl:copy><xsl:copy-of select="@*"/>
-				<xsl:apply-templates select="self::*[not(@id-namespace)]" mode="add-id-ns"/>
-				<xsl:for-each select="exslt:node-set($nss)/*"> <!-- add namespace definitions -->
-					<xsl:attribute name="xmlns:{name()}">
-						<xsl:value-of select="."/>
-					</xsl:attribute>
-				</xsl:for-each>
-				<!-- no need to call is-content-filtered, it never will be from this element --> 
-				<xsl:apply-templates select="*|comment()" mode="join">
-					<xsl:with-param name="namespaces" select="$ns"/>
-					<xsl:with-param name="root" select="$root"/>
-					<xsl:with-param name="data" select="$data"/>
-					<xsl:with-param name="filename" select="$filename"/>
-				</xsl:apply-templates>
-			</xsl:copy>
-		</xsl:when>
-		<xsl:otherwise> <!-- can't handle node-set() so put the namespaces in the document instead of the root element-->
-			<xsl:variable name="ns" select="@id-namespace | namespace::*"/>
-			<xsl:copy><xsl:copy-of select="@*"/>
-				<!-- no need to call is-content-filtered, it never will be from this element -->
-				<xsl:apply-templates select="*|comment()" mode="join">
-					<xsl:with-param name="namespaces" select="$ns"/>
-					<xsl:with-param name="root" select="$root"/>
-					<xsl:with-param name="data" select="$data"/>
-					<xsl:with-param name="filename" select="$filename"/>
-				</xsl:apply-templates>
-			</xsl:copy>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-<xsl:template match="*" mode="scan-for-namespaces"/> <!-- just in case of errors, consider replacing by terminate -->
-<xsl:template match="*[@href and not(self::meta)]" mode="scan-for-namespaces">
-	<!-- produce a list of namespace-prefix namespace pairs separated by newlines, in reverse order found in documents 
-		reverse order so we can try to use the first namespace prefix defined if it's available-->
-	<xsl:for-each select="document(@href,.)/*">
-		<xsl:apply-templates select="//*[(self::component or self::collection or self::package or self::layer) and @href]" mode="scan-for-namespaces"/>
-		<xsl:for-each select="//namespace::* | @id-namespace">
-			<xsl:value-of select="concat(name(),' ',.,'&#xa;')"/>
-		</xsl:for-each>
-	</xsl:for-each>			
-</xsl:template>
-
-<xsl:template name="needed-namespaces">
-	<xsl:param name="foundns"/>
-	<xsl:param name="usedpre"/>
-	
-	<xsl:if test="foundns!=''">
-		<xsl:variable name="line" select="substring-before($foundns,'&#xa;')"/> <!-- always has trailing newline -->
-		<xsl:variable name="name" select="substring-after($line,' ')"/> <!-- namespace prefix -->
-		<xsl:variable name="remainder" select="substring-after($foundns,'&#xa;')"/>
-		<xsl:variable name="newprefix">
-			<xsl:if test="not(contains(concat('&#xa;',$remainder),concat('&#xa;',$line,'&#xa;'))) and
-				not(//namespace::*[.=$name] or @id-namespace[.=$name] or (not(@id-namespace) and $defaultns=$name))">
-						<xsl:apply-templates select="." mode="ns-prefix">
-							<xsl:with-param name="ns" select="$name"/>
-							<xsl:with-param name="pre" select="substring-before($line,' ')"/>
-							<xsl:with-param name="dontuse" select="$usedpre"/>
-						</xsl:apply-templates>
-			</xsl:if>
-		</xsl:variable>
-		<xsl:if test="$newprefix!=''">
-			<!-- can treat this as if it were a namespace node -->
-			<xsl:element name="{$newprefix}">
-				<xsl:value-of select="$name"/>
-			</xsl:element>
-		</xsl:if>
-		<xsl:if test="$remainder!=''">
-			<xsl:call-template name="needed-namespaces">
-				<xsl:with-param name="foundns" select="$remainder"/>
-				<xsl:with-param name="usedpre" select="concat($usedpre,' ',$newprefix,' ')"/>
-			</xsl:call-template>
-		</xsl:if>
-	</xsl:if>
-</xsl:template>
-
-<xsl:template match="/SystemDefinition" mode="ns-prefix">
-	<!-- should be able to replace this with mechanism that uses the XSLT processor's own ability to generate namespaces -->
-	<xsl:param name="ns"/>
-	<xsl:param name="pre"/>
-	<xsl:param name="dontuse"/>
-	<xsl:param name="chars">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</xsl:param>
-	<xsl:variable name="name" select="substring(substring-after($ns,'http://www.'),1,1)"/>
-	<xsl:choose>
-		<xsl:when test="$pre!='' and $pre!='id-namespace' and not(//namespace::*[name()=$pre]) and not(contains($dontuse,concat(' ',$pre,' ')))">
-			<xsl:value-of select="$pre"/>
-		</xsl:when>
-		<xsl:when test="$ns='' and $chars=''">
-			<xsl:message terminate="yes">ERROR: Cannot create namespace prefix for downstream default namespace in <xsl:value-of select="*/@id"/></xsl:message>
-		</xsl:when>
-		<xsl:when test="$name!='' and not(contains($dontuse,concat(' ',$name,' ')))"><xsl:value-of select="$name"/></xsl:when>
-		<xsl:when test="namespace::*[name()=substring($chars,1,1)] or contains($dontuse,concat(' ',substring($chars,1,1),' '))">
-			<xsl:apply-templates mode="ns-prefix">
-				<xsl:with-param name="chars" select="substring($chars,2)"/>
-			</xsl:apply-templates>
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:value-of select="substring($chars,1,1)"/>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-
-<xsl:template match="unit" mode="join">	<xsl:param name="root"/><xsl:param name="filename"/><xsl:param name="data"/>
-	 <xsl:variable name="display">
-	 	<xsl:apply-templates select="$data" mode="filter">
-			<xsl:with-param name="item" select="current()"/>
-		</xsl:apply-templates>
-	 </xsl:variable>
-	 
-	 <xsl:if test="$display != 'hide' "> <!-- if hide, remove completely from the output-->	 
-		<xsl:element name="{name()}">
-			<xsl:apply-templates select="@*" mode="join">
-				<xsl:with-param name="root" select="$root"/>
-				<xsl:with-param name="filename" select="$filename"/>
-			</xsl:apply-templates>
-		</xsl:element>
-	</xsl:if>
-</xsl:template>
-
-<!-- override mode="meta" to translate metadata sections. By default, include -->
-<xsl:template match="meta" priority="2"><xsl:param name="data"/>
-	 <xsl:variable name="display">
-	 	<xsl:apply-templates select="$data" mode="filter">
-			<xsl:with-param name="item" select="current()"/>
-		</xsl:apply-templates>
-	 </xsl:variable>
-	 
-	<xsl:if test="$display != 'hide' "> <!-- if hide, remove completely from the output-->	
-		<xsl:apply-templates select="." mode="meta"> 
-			<xsl:with-param name="display" select="$display"/>
-			<xsl:with-param name="data" select="$data"/>
-		</xsl:apply-templates>
-	</xsl:if>
-</xsl:template>
-
-
-<xsl:template match="*" mode="join">
-	<xsl:param name="root"/><xsl:param name="filename"/><xsl:param name="namespaces"/><xsl:param name="data"/>
-	<!-- get attribtues from overlay -->
-	<!-- test for presence, if filtered out, just return -->
-	<!-- test for children, if it has some, but they're filtered out, either return or leave as empty, dependening on filter rule
-		if had items and now has none, options:
-			still has meta: keep / delete
-			still has comments: keep / delete 
-	 -->
-	 
-	 <xsl:variable name="display">
-	 	<xsl:apply-templates select="$data" mode="filter">
-			<xsl:with-param name="item" select="current()"/>
-		</xsl:apply-templates>
-	 </xsl:variable>
-	 
-	 <xsl:if test="$display != 'hide' "> <!-- if hide, remove completely from the output-->
-	 
-		 <xsl:variable name="href">
-		 	<xsl:apply-templates select="." mode="link">
-				<xsl:with-param name="data" select="$data"/>
-			</xsl:apply-templates>
-		 </xsl:variable>
-		 	 
-		 
-		<xsl:element name="{name()}"> <!-- use this instead of <copy> so xalan doesn't add extra wrong namespaces -->
-			<xsl:apply-templates select="@*" mode="join">
-				<xsl:with-param name="namespaces" select="$namespaces"/>
-			</xsl:apply-templates>
-			<xsl:if test="$display != '' ">
-				<!-- custom attribute to indicate how this is to be represented. Blank indicates normal, hide removes from the output (see above), anything else is put in the attribute --> 
-				<xsl:attribute name="display"><xsl:value-of select="$display"/></xsl:attribute>
-			</xsl:if>
-		 	<xsl:apply-templates select="$data" mode="overlay-attributes">
-				<xsl:with-param name="item" select="current()"/>
-			</xsl:apply-templates>			
-			<xsl:choose>
-				<xsl:when test="$href !='' ">
-					<xsl:variable name="origin" select="."/>
-					<xsl:apply-templates select="document($href,.)/*" mode="join">
-						<xsl:with-param name="origin" select="$origin"/>
-						<xsl:with-param name="data" select="$data"/>
-						<xsl:with-param name="namespaces" select="$namespaces"/>
-						<xsl:with-param name="filename">
-							<xsl:call-template name="joinpath">
-								<xsl:with-param name="file" select="$filename"/>
-								<xsl:with-param name="rel" select="$href"/>
-							</xsl:call-template>					
-						</xsl:with-param>
-						<xsl:with-param name="root">
-								<xsl:value-of select="$root"/>/<xsl:call-template name="lastbefore">
-								<xsl:with-param name="string" select="$href"/>
-							</xsl:call-template>
-						</xsl:with-param>
-					</xsl:apply-templates> 
-				</xsl:when>
-				<xsl:otherwise>
-					<xsl:variable name="content">
-						<xsl:apply-templates select="*|comment()" mode="join">
-							<xsl:with-param name="root" select="$root"/>
-							<xsl:with-param name="filename" select="$filename"/>
-							<xsl:with-param name="namespaces" select="$namespaces"/>
-							<xsl:with-param name="data" select="$data"/>
-						</xsl:apply-templates>
-					</xsl:variable>
-					<xsl:apply-templates select="." mode="is-content-filtered"> <!-- add filtered="yes" if some content has been removed -->
-						<xsl:with-param name="content" select="$content"/>
-					</xsl:apply-templates>
-				 	<xsl:apply-templates select="$data" mode="overlay-meta">
-						<xsl:with-param name="item" select="current()"/>
-					</xsl:apply-templates>
-					<xsl:copy-of select="$content"/>
-				</xsl:otherwise>
-			</xsl:choose>
-		</xsl:element>
-	</xsl:if>
-</xsl:template>
-
-<!-- By default, do nothing. Can override template to add filtered="yes" if need to track what's a placeholder and what's been filtered 
-	implement with param name="content"
--->
-<xsl:template mode="is-content-filtered" match="*" priority="-2"/>
-
-
-<xsl:template match="@mrp[starts-with(.,'/')] | @bldFile[starts-with(.,'/')] | @base[starts-with(.,'/')]" mode="join">
-	<xsl:copy-of select="."/>
-</xsl:template>
-
-<xsl:template match="@mrp|@bldFile|@base" mode="join">	<xsl:param name="root"/><xsl:param name="filename"/>
-	<xsl:attribute name="{name()}">
-		<xsl:call-template name="joinpath">
-			<xsl:with-param name="file" select="$filename"/>
-			<xsl:with-param name="rel" select="."/>
-		</xsl:call-template>	
-	</xsl:attribute>	
-</xsl:template>
-
-
-<xsl:template match="@href" mode="join"/> <!--never copy this into the generated doc, that's the whole point of this module -->
-
-<xsl:template match="@*" mode="my-namespace"> <!-- the namespace of an ID -->
-	<xsl:choose>
-		<xsl:when test="contains(.,':')">
-			<xsl:value-of select="ancestor::*/namespace::*[name()=substring-before(current(),':')]"/>
-		</xsl:when>
-		<xsl:when test="/SystemDefinition/@id-namespace">
-			<xsl:value-of select="/SystemDefinition/@id-namespace"/>
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:value-of select="$defaultns"/>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-
-<xsl:template match="@*" mode="my-id"> <!-- the ID with namespace prefix removed -->
-	<xsl:choose>
-		<xsl:when test="contains(.,':')">
-			<xsl:value-of select="substring-after(.,':')"/>
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:value-of select="."/>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-<xsl:template match="*" mode="err-path">
-<xsl:if test="../@id">
-	<xsl:apply-templates select=".." mode="err-path"/>/</xsl:if>
-<xsl:value-of select="@id"/>
-</xsl:template>
-
-
-<xsl:template match="@id|@before" mode="join">
-	<xsl:param name="namespaces"/>
-	<!-- this will change the namespace prefixes for all IDs to match the root document -->
-	<xsl:variable name="ns">
-		<xsl:apply-templates select="." mode="my-namespace"/>
-	</xsl:variable>
-	<xsl:if test="$ns=''">
-		<xsl:message terminate="yes">ERROR: Could not find namespace for <xsl:value-of select="name()"/> "<xsl:value-of select="."/>" in <xsl:apply-templates select="../.." mode="err-path"/>
-		<xsl:text>&#xa;</xsl:text>
-		</xsl:message>
-	</xsl:if>
-	<xsl:variable name="prefix" select="name($namespaces[.=$ns])"/>
-	<xsl:attribute name="{name()}">
-	<xsl:choose>
-		<xsl:when test="$prefix = 'id-namespace' or  (not($namespaces[name()='id-prefix']) and $ns=$defaultns)"/> <!-- it's the default namespace, no prefix -->
-		<xsl:when test="$prefix='' and contains(.,':')">
-			<!-- complex: copy id and copy namespace (namespace should be copied already)-->
-			<xsl:value-of select="."/>
-		</xsl:when>
-		<xsl:when test="$prefix='' and $ns=$defaultns"/> <!-- no prefix and it's the default --> 
-		<xsl:when test="$prefix!=''">			<!-- just change the prefix -->
-			<xsl:value-of select="concat($prefix,':')"/>
-		</xsl:when>
-		<xsl:otherwise>
-		<xsl:message terminate="yes">ERROR: Joining error in resolving namespace for <xsl:value-of select="name()"/> "<xsl:value-of select="."/>" in <xsl:apply-templates select="../.." mode="err-path"/>
-		<xsl:text>&#xa;</xsl:text></xsl:message>
-		</xsl:otherwise>
-	</xsl:choose>
-		<xsl:apply-templates select="." mode="my-id"/>
-	</xsl:attribute>
-</xsl:template>
-
-
-
-<xsl:template match="@*|comment()" mode="join"><xsl:copy-of select="."/></xsl:template>
-
-
-<!-- path handling follows -->
-
- <xsl:template name="lastbefore"><xsl:param name="string"/><xsl:param name="substr" select="'/'"/>
-        <xsl:if test="contains($string,$substr)">
-                <xsl:value-of select="substring-before($string,$substr)"/>
-                <xsl:if test="contains(substring-after($string,$substr),$substr)">
-	                <xsl:value-of select="$substr"/>
-	              </xsl:if>
-        <xsl:call-template name="lastbefore">
-                <xsl:with-param name="string" select="substring-after($string,$substr)"/>
-                <xsl:with-param name="substr" select="$substr"/>
-        </xsl:call-template>
-        </xsl:if>
-</xsl:template>
-
- <xsl:template name="joinpath"><xsl:param name="file"/><xsl:param name="rel"/>
-        <xsl:call-template name="reducepath">
-        <xsl:with-param name="file">
-	        <xsl:call-template name="lastbefore">
-	                <xsl:with-param name="string" select="$file"/>
-	        </xsl:call-template>
-	        <xsl:text>/</xsl:text>
-	        <xsl:value-of select="$rel"/>
-	       </xsl:with-param>
-	      </xsl:call-template>
- </xsl:template>
-
-<xsl:template name="reducepath"><xsl:param name="file"/>
-	<xsl:call-template name="reducedotdotpath">
-    	<xsl:with-param name="file">
-			<xsl:call-template name="reducedotpath">
-		    	<xsl:with-param name="file" select="$file"/>
-		    </xsl:call-template>
-		</xsl:with-param>
-	</xsl:call-template>
-</xsl:template>
-
-<xsl:template name="reducedotdotpath"><xsl:param name="file"/>
-	<xsl:choose>
-		<xsl:when test="starts-with($file,'../')">
-			<xsl:text>../</xsl:text>
-			<xsl:call-template name="reducedotdotpath">
-        		<xsl:with-param name="file" select="substring($file,4)"/>
-			</xsl:call-template>
-		</xsl:when>
-		<xsl:when test="contains($file,'/../')">							
-			<xsl:call-template name="reducepath">
-        		<xsl:with-param name="file">
-			        <xsl:call-template name="lastbefore">
-			                <xsl:with-param name="string" select="substring-before($file,'/../')"/>
-			        </xsl:call-template>
-			        <xsl:text>/</xsl:text>
-					<xsl:value-of select="substring-after($file,'/../')"/>
-				</xsl:with-param>
-			</xsl:call-template>
-		</xsl:when>
-		<xsl:otherwise><xsl:value-of select="$file"/></xsl:otherwise>
-	</xsl:choose>
- </xsl:template>
-
-<xsl:template name="reducedotpath"><xsl:param name="file"/>
-	<xsl:choose>	
-		<xsl:when test="starts-with($file,'./')">
-			<xsl:call-template name="reducedotpath">
-        		<xsl:with-param name="file" select="substring($file,3)"/>
-			</xsl:call-template>
-		</xsl:when>
-		<xsl:when test="contains($file,'/./')">
-			<xsl:call-template name="reducepath">
-        		<xsl:with-param name="file">
-	                <xsl:value-of select="substring-before($file,'/./')"/>
-			        <xsl:text>/</xsl:text>
-					<xsl:value-of select="substring-after($file,'/./')"/>
-				</xsl:with-param>
-			</xsl:call-template>
-		</xsl:when>
-		<xsl:otherwise><xsl:value-of select="$file"/></xsl:otherwise>
-	</xsl:choose>
- </xsl:template>
-
-<!-- overridable templates follow -->
-
-
-<xsl:template match="*" mode="filter" priority="-9"/> <!-- by default show --> 
-<xsl:template match="*" mode="overlay-attributes" priority="-9"/> <!-- by default do nothing --> 
-<xsl:template match="*" mode="overlay-meta" priority="-9"/> <!-- by default do nothing --> 
-<xsl:template match="/SystemDefinition" mode="add-id-ns" priority="-9"/> <!-- some tools may have an easier job if this were always present, but, by default, assume it can just stay implied -->
-
-<xsl:template match="*" mode="link" priority="-1"> <!-- can be overriden to allow custom changes to href values --> 
-<xsl:value-of select="@href"/>
-</xsl:template>
-
-
-<xsl:template match="*" mode="meta" priority="-9"><xsl:param name="data"/><xsl:param name="display"/>
-	<xsl:element name="{name()}">
-		<xsl:copy-of select="@*[name()!='href']"/> <!-- copy all attributes as is, always drop href -->
-		<xsl:choose>
-			<xsl:when test="$display='local' and @href and contains(@href,':') and not(starts-with(@href,'file:'))">
-				<!-- non-local URL: only want local URLs, so keep href as is-->
-				<xsl:copy-of select="@href"/> 
-			</xsl:when>
-			<xsl:when test="@href">
-				<xsl:copy-of select="document(@href,.)/*"/> 
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:copy-of select="*|comment()"/>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:element>
-</xsl:template>
-
-</xsl:stylesheet>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinsysdef.bat	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,16 @@
+@rem Copyright (c) 2010 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
+@python %~dp0joinsysdef_mock.py %*
--- a/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinsysdef.xsl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinsysdef.xsl	Fri Aug 13 14:59:05 2010 +0300
@@ -1,9 +1,9 @@
 <?xml version="1.0"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <!--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 "Eclipse Public License v1.0"
+	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".
 
@@ -14,8 +14,17 @@
 	Create a stand-alone sysdef from a linked set of fragments
 -->
  	<xsl:output method="xml" indent="yes"/>
+<!--Description:This creates a stand-alone sysdef from a linked set of fragments.
+All API metadata will be removed
+-->
+<!--Input:<sysdef> - (required) The 3.0 formatsystem definition XML file to
+		process. This can be a fragment or stand-alone. 
+		If there are no linked fragments, this will just convert all
+		relative unit paths into absolute paths and embed any linked
+		metadata-->
 
 <xsl:param name="path">/os/deviceplatformrelease/foundation_system/system_model/system_definition.xml</xsl:param>
+<!-- <path> - The full system model path for this file. Use forward slashes.-->
 
 <xsl:template match="/*">
 	<xsl:apply-templates select="." mode="join"/>
@@ -29,8 +38,9 @@
 </xsl:template>
 
 
+<xsl:template match="meta[@rel='Api']" priority="2" mode="meta"/> <!-- ignore these, not needed in system build -->
 
 
-<xsl:include href="joinsysdef-module.xsl"/>
+<xsl:include href="lib/joinsysdef-module.xsl"/>
 
 </xsl:stylesheet>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/joinsysdef_mock.py	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,34 @@
+#============================================================================ 
+#Name        : joinsysdef_mock.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 shutil
+
+print "Command run:"
+print " ".join(sys.argv)
+
+includes = []
+if '-config' in sys.argv:
+    config = sys.argv[sys.argv.index('-config') + 1]
+    src = sys.argv[-1]
+    
+    if '-output' in sys.argv:
+        dst = sys.argv[sys.argv.index('-output') + 1]
+        shutil.copyfile(src, dst)
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/filter-module.xsl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,123 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common"  exclude-result-prefixes="exslt">
+<!--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:
+	XSLT module which contains the logic to process the filter attribute in the system definition
+-->
+	<xsl:output method="xml" indent="yes"/>
+
+
+<!-- filters can only return hide or show -->
+
+<!-- filter-only =  item's @filter can only have items from the list
+	anything with no filters passes
+-->
+<xsl:template match="filter-only" mode="filter"><xsl:param name="item"/>
+	<xsl:if test="$item[@filter]">
+		<xsl:variable name="this" select="."/>
+		<xsl:variable name="my-filters">
+			<xsl:call-template name="filter-list">
+				<xsl:with-param name="f" select="$item/parent::component/@filter"/>
+			</xsl:call-template>
+			<xsl:call-template name="filter-list">
+				<xsl:with-param name="f" select="$item/@filter"/>
+			</xsl:call-template>
+		</xsl:variable>
+		<xsl:variable name="match">
+			<xsl:for-each select="exslt:node-set($my-filters)/*">
+				<xsl:if test="not($this/*[name()=name(current())  and @v=current()/@v])">x</xsl:if>
+			</xsl:for-each>
+		</xsl:variable>
+		<xsl:if test="$match!=''">hide</xsl:if>
+	</xsl:if>
+</xsl:template>
+
+
+
+<!-- filter-has =  item's @filter must have all filters in the list. ie it can have any other filters, but these must all be present	
+-->
+<xsl:template match="filter-has" mode="filter"><xsl:param name="item"/>
+	<xsl:if test="$item[self::component and not(unit/@filter)] or $item[self::unit and ../unit/@filter]">
+		<xsl:variable name="my-filters">
+			<xsl:call-template name="filter-list">
+				<xsl:with-param name="f" select="$item/parent::component/@filter"/>
+			</xsl:call-template>
+			<xsl:call-template name="filter-list">
+				<xsl:with-param name="f" select="$item/@filter"/>
+			</xsl:call-template>
+		</xsl:variable>
+		<xsl:variable name="match">
+			<xsl:for-each select="*">
+				<!-- 	if(f in this) {return true}  else if(!f in this) {return false} else {return !(f is positive)} -->
+				<xsl:choose>
+					<xsl:when test="exslt:node-set($my-filters)/*[name()=name(current()) and @v=current()/@v]"/> <!-- filter in item -->
+					<xsl:when test="exslt:node-set($my-filters)/*[name()!=name(current()) and @v=current()/@v]">x</xsl:when> <!-- !filter in item -->
+					<xsl:when test="self::filter">x</xsl:when> <!-- !(filter is positive) -->
+				</xsl:choose>
+			</xsl:for-each>
+		</xsl:variable>
+		<xsl:if test="$match!=''">hide</xsl:if>
+	</xsl:if>
+</xsl:template>
+
+<xsl:template match="filter-with" mode="filter"><xsl:param name="item"/>
+	<xsl:if test="$item[(self::component or self::unit)  and not(unit/@filter or self::unit[not(../unit[@filter])])]">
+		<xsl:variable name="my-filters">
+			<xsl:call-template name="filter-list">
+				<xsl:with-param name="f" select="$item/parent::component/@filter"/>
+			</xsl:call-template>
+			<xsl:call-template name="filter-list">
+				<xsl:with-param name="f" select="$item/@filter"/>
+			</xsl:call-template>
+		</xsl:variable>
+		<xsl:variable name="match">
+			<xsl:for-each select="*">
+				<xsl:if test="exslt:node-set($my-filters)/*[name()!=name(current()) and @v=current()/@v]">x</xsl:if> <!-- !filter in item -->
+			</xsl:for-each>
+		</xsl:variable>
+		<xsl:if test="$match!=''">hide</xsl:if>
+	</xsl:if>
+</xsl:template>
+
+
+
+<xsl:template name="filter-item"> <xsl:param name="f"/>
+	<!-- create an element for a given filter. If the filter's empty make nothing -->
+	<xsl:choose>
+		<xsl:when test="$f=''"/>
+		<xsl:when test="starts-with($f,'!')">
+				<not v="{substring($f,2)}"/>
+		</xsl:when>
+		<xsl:otherwise>
+				<filter v="{$f}"/>
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+<xsl:template name="filter-list"><xsl:param name="f"/>
+	<!-- turn a filter list into a set of elements (<filter> or <not>) with the attribute "v" containing the "absolute value" of the filter
+		filter="A,B,!C" becomes  <filter v="A"/><filter v="B"/><not v="C"/> 
+	  -->
+	<xsl:choose>
+		<xsl:when test="contains($f,',')">
+			<xsl:call-template name="filter-item"><xsl:with-param name="f" select="normalize-space(substring-before($f,','))"/></xsl:call-template>
+			<xsl:call-template name="filter-list">
+				<xsl:with-param name="f" select="substring-after($f,',')"/>
+			</xsl:call-template>
+		</xsl:when>
+		<xsl:otherwise>
+			<xsl:call-template name="filter-item"><xsl:with-param name="f" select="normalize-space($f)"/></xsl:call-template>
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet> 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/joinsysdef-module.xsl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,525 @@
+<?xml version="1.0"?>
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
+ 	xmlns:exslt="http://exslt.org/common" exclude-result-prefixes="exslt">
+<!--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:
+	XSLT module which contains the logic to join a system definition file
+-->
+	<!-- save SF namespace as a constant to avoid the risk of typos-->
+ <xsl:variable name="defaultns">http://www.symbian.org/system-definition</xsl:variable>
+ 
+<!-- create a stand-alone sysdef from a linked set of fragments -->
+
+<xsl:template match="/*" mode="join">
+	<xsl:param name="filename"/>
+	<xsl:message terminate="yes">ERROR: Cannot process this document<xsl:if test="$filename !=''"> (<xsl:value-of select="$filename"/>)</xsl:if>
+		<xsl:choose>
+			<xsl:when test="self::SystemDefinition/@schema">. Unrecognised syntax schema="<xsl:value-of select="@schema"/>"</xsl:when>
+			<xsl:when test="self::SystemDefinition">. Missing schema</xsl:when>
+			<xsl:otherwise>. Invalid file type: <xsl:value-of select="name()"/></xsl:otherwise>
+		</xsl:choose>
+	</xsl:message>
+</xsl:template>
+
+<!-- anything in schemas 3.0.x won't add new functional attributes that need processing here, just blindly copy them-->
+
+<xsl:template match="/SystemDefinition[starts-with(@schema,'3.0.') and count(*)=1]" mode="join">
+	<xsl:param name="origin" select="/.."/>
+	<xsl:param name="root"/>
+	<xsl:param name="filename"/>
+	<xsl:param name="namespaces"/>
+	<xsl:param name="data" select="/.."/>
+	<xsl:choose>
+		<xsl:when test="$origin">	<!-- this sysdef fragment was linked from a parent sysdef -->
+			<xsl:for-each select="*"> <!-- can be only one -->
+				<xsl:variable name="upid"><xsl:apply-templates select="$origin/@id" mode="my-id"/></xsl:variable>		<!-- namespaceless ID of this in parent doc -->
+				<xsl:variable name="id"><xsl:apply-templates select="@id" mode="my-id"/></xsl:variable>						<!-- namespaceless ID of this here -->
+				<xsl:variable name="upns"><xsl:apply-templates select="$origin/@id" mode="my-namespace"/></xsl:variable>	<!-- ID's namespace in parent doc -->
+				<xsl:variable name="ns"><xsl:apply-templates select="@id" mode="my-namespace"/></xsl:variable>	<!-- ID's namespace -->
+				<xsl:if test="$id!=$upid or $ns!=$upns">
+					<xsl:message terminate="yes">ERROR: Linked ID "<xsl:value-of select="$id"/>" (<xsl:value-of select="$ns"/>) must match linking document "<xsl:value-of select="$upid"/>" (<xsl:value-of select="$upns"/>)</xsl:message>
+				</xsl:if>
+				<!-- copy any attributes not already defined (parent doc overrides child doc)-->
+				<xsl:for-each select="@*">
+					<xsl:variable name="n" select="name()"/>
+					<xsl:choose>
+						<xsl:when test="$n='id'"/> <!-- never copy this, always set -->
+						<xsl:when test="$origin/@*[name()=$n]"> <!-- don't copy if already set -->
+							<xsl:message>Note: Cannot set "<xsl:value-of select="$n"/>", already set on <xsl:value-of select="$origin/@id"/>. Ignoring linked value</xsl:message>
+						</xsl:when>
+						<xsl:when test="$n='before' or $n='replace'">
+							<!-- ensure ns is correct (if any future attribtues will ever use an ID, process it here too)-->
+							<xsl:apply-templates select="." mode="join">
+								<xsl:with-param name="namespaces" select="$namespaces"/>
+							</xsl:apply-templates>
+						</xsl:when> 
+						<xsl:otherwise><xsl:copy-of select="."/></xsl:otherwise> <!-- just copy anything else -->
+					</xsl:choose>
+				</xsl:for-each>
+				<xsl:copy-of select="../namespace::*[not(.=$namespaces)]"/> <!-- set any namespaces not already set (they should all alreayd be, but some XSLT processors are quirky) -->
+			 	<xsl:apply-templates select="$data" mode="overlay-attributes">
+					<xsl:with-param name="item" select="current()"/>
+				</xsl:apply-templates>
+				<xsl:variable name="content">									
+					<xsl:apply-templates select="*|comment()" mode="join">
+						<xsl:with-param name="root" select="$root"/>
+						<xsl:with-param name="filename" select="$filename"/>
+						<xsl:with-param name="data" select="$data"/>
+						<xsl:with-param name="namespaces" select="$namespaces | ../namespace::*[not(.=$namespaces)]"/>
+					</xsl:apply-templates>
+				</xsl:variable>
+				<xsl:apply-templates select="." mode="is-content-filtered"> <!-- optionally add filtered="yes" if some content has been removed -->
+					<xsl:with-param name="content" select="$content"/>
+				</xsl:apply-templates>
+			 	<xsl:apply-templates select="$data" mode="overlay-meta">
+					<xsl:with-param name="item" select="current()"/>
+				</xsl:apply-templates>
+				<xsl:copy-of select="$content"/>
+			</xsl:for-each>
+		</xsl:when>
+		<xsl:when test="function-available('exslt:node-set')"> <!-- this is the root element of a root sysdef -->
+			<!--try to put all namespaces in root element -->
+			<xsl:variable name="nss">
+				<!-- contains node set of namespaces to add to root element.
+					May panic if there are too many single-letter namespaces and this can't create a new one -->
+				<xsl:call-template name="needed-namespaces">
+					<xsl:with-param name="foundns">
+						<xsl:apply-templates select="//*[(self::component or self::collection or self::package or self::layer) and @href]" mode="scan-for-namespaces"/>
+					</xsl:with-param>
+				</xsl:call-template>
+			</xsl:variable>
+			<xsl:variable name="ns" select="@id-namespace | namespace::* | exslt:node-set($nss)/*"/>
+			<xsl:copy><xsl:copy-of select="@*[name()!='schema']"/><xsl:call-template name="set-schema"/>
+				<xsl:apply-templates select="self::*[not(@id-namespace)]" mode="add-id-ns"/>
+				<xsl:for-each select="exslt:node-set($nss)/*"> <!-- add namespace definitions -->
+					<xsl:attribute name="xmlns:{name()}">
+						<xsl:value-of select="."/>
+					</xsl:attribute>
+				</xsl:for-each>
+				<!-- no need to call is-content-filtered, it never will be from this element --> 
+				<xsl:apply-templates select="*|comment()" mode="join">
+					<xsl:with-param name="namespaces" select="$ns"/>
+					<xsl:with-param name="root" select="$root"/>
+					<xsl:with-param name="data" select="$data"/>
+					<xsl:with-param name="filename" select="$filename"/>
+				</xsl:apply-templates>
+			</xsl:copy>
+		</xsl:when>
+		<xsl:otherwise> <!-- can't handle node-set() so put the namespaces in the document instead of the root element-->
+			<xsl:variable name="ns" select="@id-namespace | namespace::*"/>
+			<xsl:copy><xsl:copy-of select="@*[name()!='schema']"/><xsl:call-template name="set-schema"/>
+				<!-- no need to call is-content-filtered, it never will be from this element -->
+				<xsl:apply-templates select="*|comment()" mode="join">
+					<xsl:with-param name="namespaces" select="$ns"/>
+					<xsl:with-param name="root" select="$root"/>
+					<xsl:with-param name="data" select="$data"/>
+					<xsl:with-param name="filename" select="$filename"/>
+				</xsl:apply-templates>
+			</xsl:copy>
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+<xsl:template match="*" mode="scan-for-namespaces"/> <!-- just in case of errors, consider replacing by terminate -->
+<xsl:template match="*[@href and not(self::meta)]" mode="scan-for-namespaces">
+	<!-- produce a list of namespace-prefix namespace pairs separated by newlines, in reverse order found in documents 
+		reverse order so we can try to use the first namespace prefix defined if it's available-->
+	<xsl:variable name="linked" select="document(@href,.)/*"/>
+	<xsl:for-each select="$linked">
+		<xsl:apply-templates select="//*[(self::component or self::collection or self::package or self::layer) and @href]" mode="scan-for-namespaces"/>
+		<xsl:for-each select="//namespace::* | @id-namespace">
+			<xsl:value-of select="concat(name(),' ',.,'&#xa;')"/>
+		</xsl:for-each>
+	</xsl:for-each>
+	<xsl:if test="not($linked)">
+	<xsl:message>Note: The link to <xsl:value-of select="@href"/> from <xsl:value-of select="concat(name(),' ',@id)"/> could not be resolved. Perhaps there's an error in the XML?</xsl:message>
+	</xsl:if>
+</xsl:template>
+
+<xsl:template name="needed-namespaces">
+	<xsl:param name="foundns"/>
+	<xsl:param name="usedpre"/>
+
+	<xsl:if test="$foundns!=''">
+		<xsl:variable name="line" select="substring-before($foundns,'&#xa;')"/> <!-- always has trailing newline -->
+		<xsl:variable name="name" select="substring-after($line,' ')"/> <!-- namespace prefix -->
+		<xsl:variable name="remainder" select="substring-after($foundns,'&#xa;')"/>
+		<xsl:variable name="newprefix">
+			<xsl:if test="not(contains(concat('&#xa;',$remainder),concat('&#xa;',$line,'&#xa;'))) and
+				not(//namespace::*[.=$name] or @id-namespace[.=$name] or (not(@id-namespace) and $defaultns=$name))">
+						<xsl:apply-templates select="." mode="ns-prefix">
+							<xsl:with-param name="ns" select="$name"/>
+							<xsl:with-param name="pre" select="substring-before($line,' ')"/>
+							<xsl:with-param name="dontuse" select="$usedpre"/>
+						</xsl:apply-templates>
+			</xsl:if>
+		</xsl:variable>
+		<xsl:if test="$newprefix!=''">
+			<!-- can treat this as if it were a namespace node -->
+			<xsl:element name="{$newprefix}">
+				<xsl:value-of select="$name"/>
+			</xsl:element>
+		</xsl:if>
+		<xsl:if test="$remainder!=''">
+			<xsl:call-template name="needed-namespaces">
+				<xsl:with-param name="foundns" select="$remainder"/>
+				<xsl:with-param name="usedpre" select="concat($usedpre,' ',$newprefix,' ')"/>
+			</xsl:call-template>
+		</xsl:if>
+	</xsl:if>
+</xsl:template>
+
+<xsl:template match="/SystemDefinition" mode="ns-prefix">
+	<!-- should be able to replace this with mechanism that uses the XSLT processor's own ability to generate namespaces -->
+	<xsl:param name="ns"/>
+	<xsl:param name="pre"/>
+	<xsl:param name="dontuse"/>
+	<xsl:param name="chars">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</xsl:param>
+	<xsl:variable name="name" select="substring(substring-after($ns,'http://www.'),1,1)"/>
+	<xsl:choose>
+		<xsl:when test="$pre!='' and $pre!='id-namespace' and not(//namespace::*[name()=$pre]) and not(contains($dontuse,concat(' ',$pre,' ')))">
+			<xsl:value-of select="$pre"/>
+		</xsl:when>
+		<xsl:when test="$ns='' and $chars=''">
+			<xsl:message terminate="yes">ERROR: Cannot create namespace prefix for downstream default namespace in <xsl:value-of select="*/@id"/></xsl:message>
+		</xsl:when>
+		<xsl:when test="$name!='' and not(contains($dontuse,concat(' ',$name,' ')))"><xsl:value-of select="$name"/></xsl:when>
+		<xsl:when test="namespace::*[name()=substring($chars,1,1)] or contains($dontuse,concat(' ',substring($chars,1,1),' '))">
+			<xsl:apply-templates mode="ns-prefix">
+				<xsl:with-param name="chars" select="substring($chars,2)"/>
+			</xsl:apply-templates>
+		</xsl:when>
+		<xsl:otherwise>
+			<xsl:value-of select="substring($chars,1,1)"/>
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+
+<!-- schema handling -->
+
+<xsl:template name="set-schema">
+<xsl:attribute name="schema">
+	<xsl:apply-templates mode="my-schema" select="/SystemDefinition"/>
+</xsl:attribute>
+</xsl:template>
+
+<xsl:template name="compare-versions"><xsl:param name="v1"/><xsl:param name="v2"/>
+			<xsl:choose>
+				<xsl:when test="$v1=$v2"><xsl:value-of select="$v1"/></xsl:when>
+				<xsl:when test="substring-before($v1,'.') &gt; substring-before($v2,'.')"><xsl:value-of select="$v1"/></xsl:when>
+				<xsl:when test="substring-before($v1,'.') &lt; substring-before($v2,'.')"><xsl:value-of select="$v2"/></xsl:when>
+				<xsl:when test="substring-before(substring-after($v1,'.'),'.') &gt; substring-before(substring-after($v2,'.'),'.')"><xsl:value-of select="$v1"/></xsl:when>
+				<xsl:when test="substring-before(substring-after($v1,'.'),'.') &lt; substring-before(substring-after($v2,'.'),'.')"><xsl:value-of select="$v2"/></xsl:when>
+				<xsl:when test="substring-after(substring-after($v1,'.'),'.') &gt; substring-after(substring-after($v2,'.'),'.')"><xsl:value-of select="$v1"/></xsl:when>
+				<xsl:when test="substring-after(substring-after($v1,'.'),'.') &lt; substring-after(substring-after($v2,'.'),'.')"><xsl:value-of select="$v2"/></xsl:when>
+				<xsl:otherwise><xsl:value-of select="$v1"/></xsl:otherwise>
+			</xsl:choose>
+</xsl:template>
+
+<xsl:template name="compare-version-list"><xsl:param name="list"/>
+	<xsl:variable name="cur" select="substring-before($list,' ')"/>
+	<xsl:variable name="remaining" select="substring-after($list,' ')"/>
+	<xsl:choose>
+		<xsl:when test="$remaining=''"><xsl:value-of select="$cur"/></xsl:when>
+		<xsl:otherwise>
+			<xsl:variable name="nextbig">
+				<xsl:call-template name="compare-version-list">
+					<xsl:with-param name="list" select="$remaining"/>
+				</xsl:call-template>
+			</xsl:variable>
+			<xsl:call-template name="compare-versions">
+				<xsl:with-param name="v1" select="$cur"/>
+				<xsl:with-param name="v2" select="$nextbig"/>
+			</xsl:call-template>
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+<xsl:template match="/SystemDefinition" mode="my-schema"><xsl:param name="biggest" select="@schema"/>
+	<xsl:variable name="linked" select="//*[(self::component or self::collection or self::package or self::layer) and @href]"/>
+	<xsl:choose>
+		<xsl:when test="not($linked)"> <!-- no need to go further -->
+			<xsl:call-template name="compare-versions">
+				<xsl:with-param name="v1" select="@schema"/>
+				<xsl:with-param name="v2" select="$biggest"/>
+			</xsl:call-template>
+		</xsl:when>
+		<xsl:otherwise>
+				<xsl:call-template name="compare-version-list">
+					<xsl:with-param name="list">
+						<xsl:for-each select="$linked">
+						<xsl:call-template name="compare-versions">
+							<xsl:with-param name="v1">
+								<xsl:apply-templates mode="my-schema" select="document(@href,.)/*"/>
+							</xsl:with-param>
+							<xsl:with-param name="v2" select="$biggest"/>
+						</xsl:call-template>
+						<xsl:text> </xsl:text>
+					</xsl:for-each>
+				</xsl:with-param>
+				</xsl:call-template>
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="unit" mode="join">	<xsl:param name="root"/><xsl:param name="filename"/><xsl:param name="data"/>
+	 <xsl:variable name="display">
+	 	<xsl:apply-templates select="$data" mode="filter">
+			<xsl:with-param name="item" select="current()"/>
+		</xsl:apply-templates>
+	 </xsl:variable>
+	 
+	 <xsl:if test="$display != 'hide' "> <!-- if hide, remove completely from the output-->	 
+		<xsl:element name="{name()}">
+			<xsl:apply-templates select="@*" mode="join">
+				<xsl:with-param name="root" select="$root"/>
+				<xsl:with-param name="filename" select="$filename"/>
+			</xsl:apply-templates>
+		</xsl:element>
+	</xsl:if>
+</xsl:template>
+
+<!-- override mode="meta" to translate metadata sections. By default, include -->
+<xsl:template match="meta" priority="2" mode="join"><xsl:param name="data"/>
+	 <xsl:variable name="display">
+	 	<xsl:apply-templates select="$data" mode="filter">
+			<xsl:with-param name="item" select="current()"/>
+		</xsl:apply-templates>
+	 </xsl:variable>
+	 
+	<xsl:if test="$display != 'hide' "> <!-- if hide, remove completely from the output-->	
+		<xsl:apply-templates select="." mode="meta"> 
+			<xsl:with-param name="display" select="$display"/>
+			<xsl:with-param name="data" select="$data"/>
+		</xsl:apply-templates>
+	</xsl:if>
+</xsl:template>
+
+<xsl:template match="meta[@rel='link-mapping']" priority="3" mode="join"/> <!--these are only used in the joining process, so remove from output -->
+
+
+<xsl:template match="*" mode="join">
+	<xsl:param name="root"/><xsl:param name="filename"/><xsl:param name="namespaces"/><xsl:param name="data"/>
+	<!-- get attribtues from overlay -->
+	<!-- test for presence, if filtered out, just return -->
+	<!-- test for children, if it has some, but they're filtered out, either return or leave as empty, dependening on filter rule
+		if had items and now has none, options:
+			still has meta: keep / delete
+			still has comments: keep / delete 
+	 -->
+	 <xsl:variable name="display">
+	 	<xsl:apply-templates select="$data" mode="filter">
+			<xsl:with-param name="item" select="current()"/>
+		</xsl:apply-templates>
+	 </xsl:variable>
+	 
+	 <xsl:if test="$display != 'hide' "> <!-- if hide, remove completely from the output-->
+		 <xsl:variable name="href">
+		 	<xsl:apply-templates select="." mode="link">
+				<xsl:with-param name="data" select="$data"/>
+			</xsl:apply-templates>
+		 </xsl:variable>
+	 		 
+		<xsl:element name="{name()}"> <!-- use this instead of <copy> so xalan doesn't add extra wrong namespaces -->
+			<xsl:apply-templates select="@*" mode="join">
+				<xsl:with-param name="namespaces" select="$namespaces"/>
+			</xsl:apply-templates>
+			<xsl:if test="$display != '' ">
+				<!-- custom attribute to indicate how this is to be represented. Blank indicates normal, hide removes from the output (see above), anything else is put in the attribute --> 
+				<xsl:attribute name="display"><xsl:value-of select="$display"/></xsl:attribute>
+			</xsl:if>
+		 	<xsl:apply-templates select="$data" mode="overlay-attributes">
+				<xsl:with-param name="item" select="current()"/>
+			</xsl:apply-templates>			
+			<xsl:choose>
+				<xsl:when test="$href !='' ">
+					<xsl:variable name="prefixmap" select="ancestor::SystemDefinition/*/meta[@rel='link-mapping']/map-prefix[starts-with($href,@link)]"/>
+					<xsl:variable name="origin" select="."/>
+					<xsl:apply-templates select="document($href,.)/*" mode="join">
+						<xsl:with-param name="origin" select="$origin"/>
+						<xsl:with-param name="data" select="$data"/>
+						<xsl:with-param name="namespaces" select="$namespaces"/>
+						<xsl:with-param name="filename">
+							<xsl:call-template name="joinpath">
+								<xsl:with-param name="file" select="$filename"/>
+								<xsl:with-param name="rel">
+									<xsl:choose>
+										<xsl:when test="$prefixmap">
+											<xsl:value-of select="$prefixmap/@to"/>
+											<xsl:value-of select="substring-after($href,$prefixmap/@link)"/>
+										</xsl:when>
+										<xsl:otherwise>
+											<xsl:value-of select="$href"/>
+										</xsl:otherwise>
+									</xsl:choose>								
+								 </xsl:with-param>
+							</xsl:call-template>					
+						</xsl:with-param>
+						<xsl:with-param name="root">
+							<xsl:value-of select="$root"/>/<xsl:call-template name="lastbefore">
+								<xsl:with-param name="string" select="$href"/>
+							</xsl:call-template>
+						</xsl:with-param>
+					</xsl:apply-templates> 
+				</xsl:when>
+				<xsl:otherwise>
+					<xsl:variable name="content">
+						<xsl:apply-templates select="*|comment()" mode="join">
+							<xsl:with-param name="root" select="$root"/>
+							<xsl:with-param name="filename" select="$filename"/>
+							<xsl:with-param name="namespaces" select="$namespaces"/>
+							<xsl:with-param name="data" select="$data"/>
+						</xsl:apply-templates>
+					</xsl:variable>
+					<xsl:apply-templates select="." mode="is-content-filtered"> <!-- add filtered="yes" if some content has been removed -->
+						<xsl:with-param name="content" select="$content"/>
+					</xsl:apply-templates>
+				 	<xsl:apply-templates select="$data" mode="overlay-meta">
+						<xsl:with-param name="item" select="current()"/>
+					</xsl:apply-templates>
+					<xsl:copy-of select="$content"/>
+				</xsl:otherwise>
+			</xsl:choose>
+		</xsl:element>
+	</xsl:if>
+</xsl:template>
+
+<!-- By default, do nothing. Can override template to add filtered="yes" if need to track what's a placeholder and what's been filtered 
+	implement with param name="content"
+-->
+<xsl:template mode="is-content-filtered" match="*" priority="-2"/>
+
+
+<xsl:template match="@mrp[starts-with(.,'/')] | @bldFile[starts-with(.,'/')] | @base[starts-with(.,'/')]" mode="join">
+	<xsl:copy-of select="."/>
+</xsl:template>
+
+
+<xsl:template match="@mrp|@bldFile|@base" mode="join">	<xsl:param name="root"/><xsl:param name="filename"/>
+	<xsl:attribute name="{name()}">
+		<xsl:call-template name="joinpath">
+			<xsl:with-param name="file" select="$filename"/>
+			<xsl:with-param name="rel" select="."/>
+		</xsl:call-template>	
+	</xsl:attribute>	
+</xsl:template>
+
+
+<xsl:template match="@href" mode="join"/> <!--never copy this into the generated doc, that's the whole point of this module -->
+
+<xsl:template match="@*" mode="my-namespace"> <!-- the namespace of an ID -->
+	<xsl:choose>
+		<xsl:when test="contains(.,':')">
+			<xsl:value-of select="ancestor::*/namespace::*[name()=substring-before(current(),':')]"/>
+		</xsl:when>
+		<xsl:when test="/SystemDefinition/@id-namespace">
+			<xsl:value-of select="/SystemDefinition/@id-namespace"/>
+		</xsl:when>
+		<xsl:otherwise>
+			<xsl:value-of select="$defaultns"/>
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="@*" mode="my-id"> <!-- the ID with namespace prefix removed -->
+	<xsl:choose>
+		<xsl:when test="contains(.,':')">
+			<xsl:value-of select="substring-after(.,':')"/>
+		</xsl:when>
+		<xsl:otherwise>
+			<xsl:value-of select="."/>
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+<xsl:template match="*" mode="err-path">
+<xsl:if test="../@id">
+	<xsl:apply-templates select=".." mode="err-path"/>/</xsl:if>
+<xsl:value-of select="@id"/>
+</xsl:template>
+
+
+<xsl:template match="@id|@before|@replace" mode="join">
+	<xsl:param name="namespaces"/>
+	<!-- this will change the namespace prefixes for all IDs to match the root document -->
+	<xsl:variable name="ns">
+		<xsl:apply-templates select="." mode="my-namespace"/>
+	</xsl:variable>
+	<xsl:if test="$ns=''">
+		<xsl:message terminate="yes">ERROR: Could not find namespace for <xsl:value-of select="name()"/> "<xsl:value-of select="."/>" in <xsl:apply-templates select="../.." mode="err-path"/>
+		<xsl:text>&#xa;</xsl:text>
+		</xsl:message>
+	</xsl:if>
+	<xsl:variable name="prefix" select="name($namespaces[.=$ns])"/>
+	<xsl:attribute name="{name()}">
+	<xsl:choose>
+		<xsl:when test="$prefix = 'id-namespace' or  (not($namespaces[name()='id-namespace']) and $ns=$defaultns)"/> <!-- it's the default namespace, no prefix -->
+		<xsl:when test="$prefix='' and contains(.,':')">
+			<!-- complex: copy id and copy namespace (namespace should be copied already)-->
+			<xsl:value-of select="."/>
+		</xsl:when>
+		<xsl:when test="$prefix='' and $ns=$defaultns"/> <!-- no prefix and it's the default --> 
+		<xsl:when test="$prefix!=''">			<!-- just change the prefix -->
+			<xsl:value-of select="concat($prefix,':')"/>
+		</xsl:when>
+		<xsl:otherwise>
+		<xsl:message terminate="yes">ERROR: Joining error in resolving namespace for <xsl:value-of select="name()"/> "<xsl:value-of select="."/>" in <xsl:apply-templates select="../.." mode="err-path"/>
+		<xsl:text>&#xa;</xsl:text></xsl:message>
+		</xsl:otherwise>
+	</xsl:choose>
+		<xsl:apply-templates select="." mode="my-id"/>
+	</xsl:attribute>
+</xsl:template>
+
+
+
+<xsl:template match="@*|comment()" mode="join"><xsl:copy-of select="."/></xsl:template>
+
+
+<xsl:include href="path-module.xsl"/>
+
+<!-- overridable templates follow -->
+
+
+<xsl:template match="*" mode="filter" priority="-9"/> <!-- by default show --> 
+<xsl:template match="*" mode="overlay-attributes" priority="-9"/> <!-- by default do nothing --> 
+<xsl:template match="*" mode="overlay-meta" priority="-9"/> <!-- by default do nothing --> 
+<xsl:template match="/SystemDefinition" mode="add-id-ns" priority="-9"/> <!-- some tools may have an easier job if this were always present, but, by default, assume it can just stay implied -->
+
+<xsl:template match="*" mode="link" priority="-1"> <!-- can be overriden to allow custom changes to href values --> 
+<xsl:value-of select="@href"/>
+</xsl:template>
+
+
+<xsl:template match="*" mode="meta" priority="-9"><xsl:param name="data"/><xsl:param name="display"/>
+	<xsl:element name="{name()}">
+		<xsl:copy-of select="@*[name()!='href']"/> <!-- copy all attributes as is, always drop href -->
+		<xsl:choose>
+			<xsl:when test="$display='local' and @href and contains(@href,':') and not(starts-with(@href,'file:'))">
+				<!-- non-local URL: only want local URLs, so keep href as is-->
+				<xsl:copy-of select="@href"/> 
+			</xsl:when>
+			<xsl:when test="@href">
+				<xsl:copy-of select="document(@href,.)/*"/> 
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:copy-of select="*|comment()"/>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:element>
+</xsl:template>
+
+
+</xsl:stylesheet>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/mergesysdef-module.xsl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,653 @@
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common"  exclude-result-prefixes="exslt">
+<!--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:
+	XSLT module for merging only two sysdef files according to the 3.0.1 rules. 
+		2.x and older syntax not supported and must be converetd before calling.
+
+		Requires the including XSLT to also include path-module.xsl
+-->
+	
+<xsl:variable name="defaultnamespace">http://www.symbian.org/system-definition</xsl:variable>
+
+<xsl:template match="/SystemDefinition[starts-with(@schema,'2.') or starts-with(@schema,'1.')]" priority="2" mode="merge-models">
+	<xsl:message terminate="yes">ERROR: Syntax <xsl:value-of select="@schema"/> not supported</xsl:message>
+</xsl:template>
+<!--<xsl:template match="/SystemDefinition[not(systemModel)]" priority="2" mode="merge-models">
+	<xsl:message terminate="yes">ERROR: Can only merge stand-alone system models</xsl:message>
+</xsl:template>-->
+
+<!-- stuff for dealing with namespaces -->
+
+
+<xsl:template match="node()|@*" mode="translate-namespaces"><xsl:copy-of select="."/></xsl:template>
+<!-- don't translate meta or unit tags, just copy verbatim -->
+<xsl:template match="meta|unit" mode="translate-namespaces" priority="2">
+<xsl:element name="{name()}">
+<xsl:copy-of select="@*|*|comment()"/>
+</xsl:element>
+</xsl:template>
+
+<xsl:template match="*" mode="translate-namespaces"><xsl:param name="nsdoc"/>
+<xsl:element name="{name()}">
+<xsl:apply-templates select="@*|node()" mode="translate-namespaces">
+	<xsl:with-param name="nsdoc" select="$nsdoc"/>
+</xsl:apply-templates>
+</xsl:element>
+</xsl:template>
+
+
+<xsl:template match="@id|@before|@replace" mode="translate-namespaces"><xsl:param name="nsdoc"/>
+	<xsl:attribute name="{name()}">
+		<xsl:variable name="id">
+			<xsl:choose>
+				<xsl:when test="contains(.,':')">
+					<xsl:value-of select="substring-after(.,':')"/>
+				</xsl:when>
+				<xsl:otherwise>
+					<xsl:value-of select="."/>
+				</xsl:otherwise>
+			</xsl:choose>
+		</xsl:variable>
+		<xsl:variable name="ns">
+			<xsl:choose>
+				<xsl:when test="contains(.,':')">
+					<xsl:value-of select="ancestor-or-self::*/namespace::*[name()=substring-before(current()/.,':')]"/>
+				</xsl:when>
+				<xsl:when test="ancestor::SystemDefinition/@id-namespace">
+					<xsl:value-of select="ancestor::SystemDefinition/@id-namespace"/>
+				</xsl:when>
+				<xsl:otherwise>
+					<xsl:value-of select="$defaultnamespace"/>
+				</xsl:otherwise>
+			</xsl:choose>
+		</xsl:variable>
+		<xsl:choose>
+			<xsl:when test="not($nsdoc/@id-namespace) and $defaultnamespace=$ns">
+				<xsl:value-of select="$id"/>
+			</xsl:when>
+			<xsl:when test="$nsdoc/@id-namespace=$ns">
+				<xsl:value-of select="$id"/>
+			</xsl:when>
+			<xsl:when test="$nsdoc/namespace::*[.=$ns]">
+				<xsl:value-of select="concat(name($nsdoc/namespace::*[.=$ns]),':',$id)"/>
+			</xsl:when>
+			<xsl:when test="ancestor::SystemDefinition/@id-namespace=$ns">
+				<xsl:variable name="myns">
+					<xsl:apply-templates mode="ns-prefix" select="$nsdoc">
+						<xsl:with-param name="ns" select="$ns"/>
+					</xsl:apply-templates>
+				</xsl:variable>			
+				<xsl:value-of select="concat($myns,':',$id)"/>
+			</xsl:when>
+			<xsl:otherwise> <!-- some namespace that needed to be defined --> 
+			<xsl:message>Warning: need definition for namespace "<xsl:value-of select="$ns"/>" for <xsl:value-of select="$id"/></xsl:message>
+				<xsl:value-of select="."/>					
+			</xsl:otherwise>
+		</xsl:choose>		
+	</xsl:attribute>
+</xsl:template>
+
+<xsl:template match="SystemDefinition" mode="ns-prefix">
+	<xsl:param name="ns"/> <!-- the namespace URI -->
+	<xsl:param name="pre"/> <!-- the preferred prefix to use if possbile -->
+	<xsl:param name="dontuse"/> <!-- space prefixed, separated and terminated list of namespace prefixes to not use -->
+	<xsl:param name="chars">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</xsl:param> <!-- single letter namespace prefixes to try -->
+	<xsl:variable name="name" select="substring(substring-after($ns,'http://www.'),1,1)"/>
+	<xsl:choose>
+		<xsl:when test="$pre!='' and $pre!='id-namespace' and not(//namespace::*[name()=$pre]) and not(contains($dontuse,concat(' ',$pre,' ')))">
+			<xsl:value-of select="$pre"/>
+		</xsl:when>
+		<xsl:when test="$ns='' and $chars=''">
+			<xsl:message terminate="yes">ERROR: Cannot create namespace prefix for downstream default namespace in <xsl:value-of select="*/@id"/></xsl:message>
+		</xsl:when>
+		<xsl:when test="$name!='' and not(contains($dontuse,concat(' ',$name,' ')))"><xsl:value-of select="$name"/></xsl:when>
+		<xsl:when test="namespace::*[name()=substring($chars,1,1)] or contains($dontuse,concat(' ',substring($chars,1,1),' '))">
+			<xsl:apply-templates mode="ns-prefix">
+				<xsl:with-param name="chars" select="substring($chars,2)"/>
+			</xsl:apply-templates>
+		</xsl:when>
+		<xsl:otherwise>
+			<xsl:value-of select="substring($chars,1,1)"/>
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+
+<!--  need to make sure this handles <meta> correctly -->
+
+<xsl:template match="SystemDefinition" mode="merge-models">
+	<xsl:param name="other"/>	<!-- the downstream SystemDefinition this is merged with -->
+	<xsl:param name="up" select="systemModel"/>	<!-- the element containing the origin @name used for any component from "this" model. -->
+	<xsl:param name="down" select="$other/systemModel"/> <!-- the element containing origin @name used for any component from $other model. -->
+	
+	<!-- do some testing -->
+ 	<xsl:if test="$other[starts-with(@schema,'2.') or starts-with(@schema,'1.')]">
+		<xsl:message terminate="yes">ERROR: Syntax <xsl:value-of select="$other/@schema"/> not supported</xsl:message>
+	</xsl:if>
+	<xsl:if test="name(*) != name($other/*)">
+		<xsl:message terminate="yes">ERROR: Can only merge system models of the same rank</xsl:message>
+	</xsl:if>
+	 
+	<xsl:copy>
+		<xsl:attribute name="schema">
+			<xsl:call-template name="compare-versions">
+				<xsl:with-param name="v1" select="@schema"/>
+				<xsl:with-param name="v2" select="$other/@schema"/>
+			</xsl:call-template>
+		</xsl:attribute>
+		<xsl:copy-of  select="@*[name()!='schema']"/> <!--  use attributes from origin model -->
+		<xsl:variable name="namespaces">
+			<xsl:copy> <!-- needs <copy> so the processor doesn't lose the namespaces -->
+				<!--copy namespaces as needed -->
+				
+				<xsl:copy-of select="namespace::*[name()!='xml']"/> <!-- all upstream namespaces -->
+
+				<xsl:variable name="cur" select="."/>
+				<xsl:for-each select="$other/namespace::*"> <!-- all namespaces in downstream not already in upstream -->
+					<xsl:if test="not((. = $cur/@id-namespace) or (not($cur/@id-namespace) and .= $defaultnamespace) or  $cur/namespace::*[.=current()])">
+							<!-- namespace in downstream not in upstream doc -->
+							<xsl:variable name="newprefix">
+								 <!-- test to see if the ns prefix already exists -->
+								<xsl:apply-templates select="$cur" mode="ns-prefix">
+									<xsl:with-param name="ns" select="."/>
+									<xsl:with-param name="pre" select="name()"/>
+								</xsl:apply-templates>
+							</xsl:variable>
+							<xsl:copy/>
+					</xsl:if>   
+				</xsl:for-each>
+				
+					<xsl:if test="not(($other/@id-namespace = @id-namespace) or (not($other/@id-namespace) and not(@id-namespace)) or (not(@id-namespace) and $other/@id-namespace = $defaultnamespace) or namespace::*[.=$other/@id-namespace])">  
+						<!-- default namespace in downstream not in upstream doc -->
+						<!-- need to make created ns a bit more intelligent -->
+						<xsl:attribute name="bar" namespace="{$other/@id-namespace}">
+							<xsl:value-of select="$other/@id-namespace"/>
+						</xsl:attribute>
+				</xsl:if>
+			</xsl:copy>
+		</xsl:variable>
+
+		
+		<!-- copy the namespaces to currently open element (the root one) -->
+		<xsl:copy-of select="namespace::*"/>
+		<xsl:for-each select="$other/namespace::*[.!=current()/namespace::*]"><xsl:copy/></xsl:for-each>
+		<xsl:for-each select="exslt:node-set($namespaces)/*/namespace::*"><xsl:copy/></xsl:for-each>
+	<!-- translate all IDs in downstream doc to use namespaces from upstream doc  
+		This is so much easier than having to propigate this info around while creating the doc-->
+	<xsl:variable name="otherdoc">
+		<xsl:apply-templates mode="translate-namespaces" select="$other">
+			<xsl:with-param name="nsdoc" select="exslt:node-set($namespaces)/* | ."/>
+		</xsl:apply-templates>
+	</xsl:variable>
+		<xsl:apply-templates mode="merge-models">
+			<xsl:with-param name="other" select="exslt:node-set($otherdoc)/*"/>
+			<xsl:with-param name="up" select="$up"/>
+			<xsl:with-param name="down" select="$down"/>
+			<xsl:with-param name="replaces" select="exslt:node-set($otherdoc)//*[self::component or self::collection or self::package or self::layer]/@replace"/>
+		</xsl:apply-templates>
+	
+	</xsl:copy>
+</xsl:template>
+
+<xsl:template match="systemModel" mode="merge-models">
+	<xsl:param name="other"/>	<!-- the parent of the downstream systemModel this is merged with -->
+	<xsl:param name="up"/>
+	<xsl:param name="down"/>
+	<xsl:param name="replaces"/>
+	<xsl:copy><xsl:copy-of  select="@*"/>
+		<!--  copy metas and comments in between meta. Do not try to merge metadata between models -->
+			<xsl:copy-of select="meta | $other/systemModel/meta | comment()[following-sibling::meta]"/>	
+		<xsl:apply-templates mode="merge-models">
+			<xsl:with-param name="other" select="$other/systemModel"/>
+			<xsl:with-param name="up" select="$up"/>
+			<xsl:with-param name="down" select="$down"/>
+			<xsl:with-param name="replaces" select="$replaces"/>
+		</xsl:apply-templates>
+	</xsl:copy>
+</xsl:template>
+
+<xsl:template match="@*|*|comment()" mode="merge-models"><xsl:copy-of select="."/></xsl:template>
+
+
+<xsl:template match="meta|comment()[following-sibling::meta]" mode="merge-models"/>
+	<!-- copy elesewhere, not here so that metas always appear first-->
+
+
+
+<!-- merge levels attribute via std rules -->
+<xsl:template match="layer/@levels|package/@levels" mode="merge-models">
+	<xsl:param name="other"/><!-- the element contains the other @levels -->
+	<xsl:choose>
+		<!--  if they are the same, or not specified in the other,  just copy -->
+		<xsl:when test=".=$other/@levels or not($other/@levels)"><xsl:copy-of select="."/></xsl:when>
+		<xsl:when test="contains(concat(' ',normalize-space(.),' '),concat(' ',normalize-space($other/@levels),' '))">
+			<!--upstream completely contains downstream, just copy --> 
+			<xsl:copy-of select="."/>
+		</xsl:when>
+		<xsl:when test="contains(concat(' ',normalize-space($other/@levels),' '),concat(' ',normalize-space(.),' '))">
+			<!--  If this is contained is other, then use other-->
+			<xsl:copy-of select="$other/@levels"/>
+		</xsl:when>
+		<xsl:when test="contains(concat(' ',normalize-space($other/@levels),' '),' - ')">
+			<!-- if other uses - syntax, then pre/append -->
+			<xsl:variable name="lev">
+				<xsl:value-of select="substring-before(concat(' ',normalize-space($other/@levels),' '),' - ')"/>
+				<xsl:value-of select="concat(' ',.,' ')"/>
+				<xsl:value-of select="substring-after(concat(' ',normalize-space($other/@levels),' '),' - ')"/>
+			</xsl:variable>
+			<xsl:attribute name="levels"><xsl:value-of select="normalize-space($lev)"/></xsl:attribute>
+		</xsl:when>
+		<xsl:otherwise> <!--  if they differ, use the origin's levels -->
+			<xsl:message>Note: levels differ "<xsl:value-of select="."/>" vs "<xsl:value-of select="$other/@levels"/>" on <xsl:value-of select="../@id"/></xsl:message>
+			<xsl:copy-of select="."/>
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+<xsl:template name="copy-sorted-content">
+	<xsl:param name="base"/>
+	<xsl:param name="to-sort"/>
+	<xsl:param name="start"/>
+	<xsl:param name="end"/>
+	<xsl:param name="down"/>
+	<xsl:param name="remainder" select="/.."/>
+
+	<xsl:choose>
+		<xsl:when test="not($to-sort)"/>  <!-- nothing left to copy. stop -->
+		<xsl:when test="not($base)"/>  <!-- reached end. stop -->
+		<xsl:when test="$base[1]/@id=$end/following-sibling::*[1]/@id"/> <!-- passed $end. Stop -->
+		<xsl:when test="$base[1]/@id = $to-sort[1]/@id">  <!-- both lists start with same item -->
+			<xsl:if test="$base[1]/@id!=$end/@id"> <!-- not at end, so keep going -->
+				<xsl:call-template name="copy-sorted-content">
+					<xsl:with-param name="base" select="$base[position() != 1]"/>
+					<xsl:with-param name="to-sort" select="$to-sort[position() != 1]"/>
+					<xsl:with-param name="remainder" select="$remainder"/>
+					<xsl:with-param name="start" select="$start"/>
+					<xsl:with-param name="end" select="$end"/>
+					<xsl:with-param name="down" select="$down"/>
+				</xsl:call-template>		
+			</xsl:if>
+		</xsl:when>	
+		<xsl:when test="$remainder[@id = $base[1]/@id]"> <!-- left over item is in $base -->
+			<xsl:call-template name="copy-sorted-content">
+				<xsl:with-param name="base" select="$base[position() != 1]"/>
+				<xsl:with-param name="to-sort" select="$to-sort"/>
+				<xsl:with-param name="remainder" select="$remainder[@id != $base[1]/@id]"/>
+				<xsl:with-param name="start" select="$start"/>
+				<xsl:with-param name="end" select="$end"/>
+				<xsl:with-param name="down" select="$down"/>
+			</xsl:call-template>		
+		</xsl:when>
+		<xsl:when test="not($base[@id = $to-sort[1]/@id])"> <!-- in to-sort, but not base -->		
+			<xsl:if test="$base[1]/@id=$end/@id  and not($base[@id=$to-sort[1]/@before])">
+			 	<!-- if at end, then this needs to be copied
+					don't copy if the before ID is found in $base	-->
+				<xsl:apply-templates mode="merge-copy-of" select="$to-sort[1]">
+					<xsl:with-param name="origin" select="$down"/>
+					<xsl:with-param name="root" select="$end/ancestor::SystemDefinition"/>
+				</xsl:apply-templates>
+			</xsl:if>			
+		<xsl:call-template name="copy-sorted-content">
+			<xsl:with-param name="base" select="$base"/>
+			<xsl:with-param name="to-sort" select="$to-sort[position() != 1]"/>
+			<xsl:with-param name="remainder" select="$remainder"/>
+			<xsl:with-param name="start" select="$start"/>
+			<xsl:with-param name="end" select="$end"/>
+			<xsl:with-param name="down" select="$down"/>
+		</xsl:call-template>		
+		</xsl:when>	
+		<xsl:when test="not($to-sort[@id = $base[1]/@id])"> <!-- in base, but not to-sort -->		
+		<xsl:call-template name="copy-sorted-content">
+			<xsl:with-param name="base" select="$base[position() != 1]"/>
+			<xsl:with-param name="to-sort" select="$to-sort"/>
+			<xsl:with-param name="remainder" select="$remainder"/>
+			<xsl:with-param name="start" select="$start"/>
+			<xsl:with-param name="end" select="$end"/>
+			<xsl:with-param name="down" select="$down"/>
+		</xsl:call-template>		
+		</xsl:when>	
+		<xsl:when test="$base[@id = $to-sort[1]/@id]"> <!-- is in base, but not 1st one-->
+			<xsl:call-template name="copy-sorted-content">
+				<xsl:with-param name="base" select="$base"/>
+				<xsl:with-param name="to-sort" select="$to-sort[position() != 1] "/>
+				<xsl:with-param name="remainder" select="$remainder | $to-sort[1]"/>
+				<xsl:with-param name="start" select="$start"/>
+				<xsl:with-param name="end" select="$end"/>
+				<xsl:with-param name="down" select="$down"/>
+			</xsl:call-template>
+		</xsl:when>	
+	</xsl:choose>
+</xsl:template>
+
+<xsl:template match="node()" mode="merge-data">
+	<xsl:copy-of select="." />
+</xsl:template>
+
+<xsl:template match="meta" mode="merge-data">
+	<xsl:param name="metas" />
+	<!-- compare this meta against all metas in the  merged doc
+		if they are identical, then ignore this one.
+		identical is computed by translating to a string, normalising some known parts. This might be slow in some cases-->
+	<xsl:variable name="val"><xsl:apply-templates select="." mode="as-xml-text" /></xsl:variable>
+	<xsl:variable name="match">
+		<xsl:for-each select="$metas">
+			<xsl:variable name="cur"><xsl:apply-templates select="." mode="as-xml-text" /></xsl:variable>
+			<xsl:if test="$cur=$val">*</xsl:if>
+		</xsl:for-each>
+	</xsl:variable>
+	<xsl:if test="$match='' ">
+		<xsl:copy-of select="." />
+	</xsl:if>
+</xsl:template>
+
+<xsl:template match="text()[normalize-space(.)='']" mode="as-xml-text"/>
+<xsl:template match="node()" mode="as-xml-text"><xsl:value-of select="."/></xsl:template>
+<xsl:template match="comment()" mode="as-xml-text">&lt;--<xsl:value-of select="."/>--&gt;</xsl:template>
+<xsl:template match="@*" mode="as-xml-text">
+	<xsl:value-of select="concat(' ',name())"/>="<xsl:value-of select="."/>"</xsl:template>
+<xsl:template match="*" mode="as-xml-text">
+	<xsl:value-of select="concat('&lt;',name())"/>
+	<xsl:apply-templates select="@*" mode="as-xml-text"/>
+	<xsl:if test="self::meta and not(@rel)"> rel="Generic"</xsl:if>
+	<xsl:if test="self::meta and not(@type)"> type="auto"</xsl:if>
+	<xsl:text>&gt;</xsl:text>
+	<xsl:apply-templates select="node()" mode="as-xml-text"/>
+	<xsl:value-of select="concat('&lt;/',name(),'&gt;')"/>
+</xsl:template>
+
+
+<xsl:template match="layer | package | collection | component" mode="merge-models">
+	<xsl:param name="other"/>	<!-- the downstream item of the parent's rank that contains a potential items this is merged with -->
+	<xsl:param name="up"/>
+	<xsl:param name="down"/>
+	<xsl:param name="replaces"/>
+	<xsl:variable name="this" select="."/>	<!-- current item -->
+	<!-- match = this item in the downstream model -->	
+	<xsl:variable name="match" select="$other/*[@id=current()/@id]"/>
+
+	<xsl:choose>
+		<xsl:when test="$replaces[.=$this/@id] or (self::component and $match)">  <!-- replace the item instead of merge -->
+			<xsl:message>Note: <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" in "<xsl:value-of select="../@id"/>" <xsl:choose>
+				<xsl:when test="self::component and $match">overridden in downstream sysdef</xsl:when>
+				<xsl:otherwise><xsl:for-each select="$replaces[.=$this/@id]/..">replaced by <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" in "<xsl:value-of select="../@id"/>"</xsl:for-each></xsl:otherwise>
+			</xsl:choose>
+			</xsl:message>
+			<!-- if the removed item is in the downstream doc, just copy that and ignore the upstream contents -->
+			<xsl:apply-templates mode="merge-copy-of" select="$match">
+				<xsl:with-param name="origin" select="$down"/>
+				<xsl:with-param name="root" select="$this/ancestor::SystemDefinition"/>			
+				<xsl:with-param name="replaces" select="$replaces"/>
+			</xsl:apply-templates>		
+		</xsl:when>
+		<xsl:otherwise>
+			<!-- remove this if it's in the list of stuff to be replaced-->
+
+	<!-- prev = the previous item before the current one (no metas, only named items)-->
+	<xsl:variable name="prev" select="preceding-sibling::*[@id][1]"/> 
+
+	<!-- copy all items between this and prev  that are solely in the downstream model -->	 		
+
+	<xsl:choose>
+		<xsl:when test="$match and (not($prev) or $other/*[@id= $prev/@id] )">
+			<xsl:call-template name="copy-sorted-content">
+				<xsl:with-param name="base" select="../*[@id]"/>
+				<xsl:with-param name="to-sort" select="$other/*[@id]"/>
+				<xsl:with-param name="start" select="$prev"/>
+				<xsl:with-param name="end" select="."/>
+				<xsl:with-param name="down" select="$down"/>
+			</xsl:call-template>
+		</xsl:when>
+	<xsl:when test="not($match/preceding-sibling::*[@id=$this/../*/@id]) and $other/*[@id= current()/@id]/preceding-sibling::*[@id and not(@before)]">
+		<!-- if this is the first item in other that's also in this, then put all new items from other here -->
+		<xsl:apply-templates mode="merge-copy-of" select="$match/preceding-sibling::*[@id and not(@before)]">
+			<xsl:with-param name="origin" select="$down"/>
+			<xsl:with-param name="root" select="$this/ancestor::SystemDefinition"/>	
+			<xsl:with-param name="replaces" select="$replaces"/>
+		</xsl:apply-templates>
+	</xsl:when>
+	</xsl:choose>
+
+ 	<!-- just copy anything identified as being before this, assume they're all ok -->
+	<xsl:apply-templates mode="merge-copy-of" select="$other/*[@before=current()/@id]">
+		<xsl:with-param name="remove-before" select="1"/>
+		<xsl:with-param name="origin" select="$down"/>
+		<xsl:with-param name="root" select="$this/ancestor::SystemDefinition"/>	
+		<xsl:with-param name="replaces" select="$replaces"/>
+	</xsl:apply-templates>
+
+	
+	<xsl:copy>
+		<xsl:apply-templates select="@*" mode="merge-models"> <!-- copy upstream attributes -->
+			<xsl:with-param name="other" select="$match"/>
+		</xsl:apply-templates>
+		
+		<xsl:if test="self::component and not(@origin-model) and $up/@name">
+			<!-- insert origin-model and optional root for components only -->
+			<xsl:attribute name="origin-model">
+				<xsl:value-of select="$up/@name"/>
+			</xsl:attribute>
+			<xsl:if test="not(@root)">
+				<xsl:copy-of select="$up/@root"/>
+			</xsl:if>
+		</xsl:if>
+		
+		<xsl:for-each select="$match/@*[name()!='replace']">  <!-- copy downstream attributes, only if not set on upstream -->
+			<xsl:if test="not($this/@*[name()=name(current())])"><xsl:copy-of select="."/></xsl:if>
+		</xsl:for-each>
+
+		<xsl:if test="$match/@replace"> <!-- check replace separately -->
+			<xsl:if test="not($this/ancestor::SystemDefinition//*[(self::component or self::collection or self::package or self::layer) and $match/@replace=@id])">
+				<!-- only remove replace if it's been used -->
+				<xsl:copy-of select="$match/@replace"/>
+			</xsl:if>
+		</xsl:if>
+		
+		<xsl:choose>
+			<xsl:when test="self::component">
+				<!-- copy all units, metas and comments from this
+					copy all metas in the merged component
+					copy any new comments in the merged component (not duplicates)
+					if there are no units in the this, copy all units in the merged component
+					if there are units in this, copy only the versioned units in the merged component (only those versions not already specified) -->
+				<xsl:copy-of select="*|comment() | $match/meta |$match/unit[not($this/unit)] | $match/unit[$this/unit and @version[.!=$this/unit/@version]] | $match/comment()[.!=$this/comment()]"/>				
+			</xsl:when>
+			<xsl:otherwise>
+
+				<!--  copy metas and comments in between meta. Do not try to merge metadata between models -->
+				<xsl:apply-templates select="meta | $match/meta | comment()[following-sibling::meta]" mode="merge-data">
+					<xsl:with-param name="metas" select="$match/meta"/>
+				</xsl:apply-templates>
+				<xsl:copy-of select=" $match/meta | $match/comment()[following-sibling::meta]"/>
+				
+				<xsl:apply-templates mode="merge-models">
+					<xsl:with-param name="other" select="$match"/>
+					<xsl:with-param name="up" select="$up"/>
+					<xsl:with-param name="down" select="$down"/>
+					<xsl:with-param name="replaces" select="$replaces"/>
+				</xsl:apply-templates>
+				<!--  don't copy if explicitly or implicitly placed already-->
+				<xsl:for-each select="$match/*[not(@before) and not(following-sibling::*[@id=$this/*/@id])]">
+					<xsl:if test="not($this/*[@id=current()/@id])">
+						<xsl:apply-templates mode="merge-copy-of" select=".">
+							<xsl:with-param name="origin" select="$down"/>
+							<xsl:with-param name="root" select="$this/ancestor::SystemDefinition"/>			
+							<xsl:with-param name="replaces" select="$replaces"/>
+						</xsl:apply-templates>
+					</xsl:if>
+				</xsl:for-each>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:copy>
+
+		</xsl:otherwise>
+	</xsl:choose>
+	
+	<xsl:if test="self::layer and not(following-sibling::layer)">	
+		<!-- for the last layer, tack on any remaining layers -->
+		<xsl:apply-templates mode="merge-copy-of" select="$other/layer[not(@before) and not(following-sibling::*[@id=$this/../layer/@id]) and not(@id=$this/../layer/@id)]">
+			<xsl:with-param name="origin" select="$down"/>
+			<xsl:with-param name="root" select="$this/ancestor::SystemDefinition"/>			
+			<xsl:with-param name="replaces" select="$replaces"/>
+		</xsl:apply-templates>		
+	</xsl:if>
+</xsl:template>
+
+
+
+<xsl:template match="*" mode="merge-copy-of">
+	<xsl:param name="remove-before" select="0"/> <!-- set to true if any before attribute is to be removed -->
+	<xsl:param name="origin"/>	<!--the element containing the @name to use the origin-model attribute  -->
+	<xsl:param name="root"/> 	<!--the systemModel element in the upstream doc  -->
+	<xsl:param name="replaces" select="ancestor::SystemDefinition/descendant::*[(self::component or self::collection or self::package or self::layer) and not(ancestor::meta)]/@replace"/> <!-- recalculate this is necessarfy, but should just pass down as a param -->
+	<xsl:variable name="moved" select="$root/descendant::*[name()=name(current()/..) and @id!=current()/../@id]/*[@id=current()/@id]"/>
+	<xsl:choose>
+		<!-- this might slow things down, consider making optional -->
+		<xsl:when test="not(self::layer) and (count($moved) and not($moved[ancestor-or-self::*/@id=$replaces]) )">
+			<xsl:message>Warning: <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" moved in downstream model. Ignoring moved <xsl:value-of select="name()"/>
+				<xsl:text>&#xa;</xsl:text>
+			</xsl:message>
+		</xsl:when>
+		<xsl:otherwise>
+			<!-- save all content in a variable to test to see if it's got any problems (ie been removed due to errors)-->
+			<xsl:variable name="content">
+				<xsl:apply-templates select="*|comment()" mode="merge-copy-of">
+					<xsl:with-param name="origin" select="$origin"/>
+					<xsl:with-param name="root" select="$root"/>
+					<xsl:with-param name="replaces" select="$replaces"/>
+				</xsl:apply-templates>
+			</xsl:variable>
+			<xsl:choose>
+				<!-- if all elements in this have been deleted, throw out this element -->
+				<xsl:when test="not(exslt:node-set($content)/*) and *">
+					<xsl:message>Warning: All content in downstream <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" is invalid. Ignoring <xsl:value-of select="name()"/>
+						<xsl:text>&#xa;</xsl:text>
+					</xsl:message>
+				</xsl:when>
+				<xsl:otherwise>
+					<xsl:copy>
+						<xsl:call-template name="merge-copy-of-atts">
+							<xsl:with-param name="remove-before" select="$remove-before"/>
+							<xsl:with-param name="root" select="$root"/>
+						</xsl:call-template>
+						<xsl:copy-of select="exslt:node-set($content)"/>
+					</xsl:copy>
+				</xsl:otherwise>
+			</xsl:choose>					
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+<xsl:template match="comment()|@*" mode="merge-copy-of">
+	<xsl:copy-of select="."/>
+</xsl:template>
+
+
+<xsl:template name="merge-copy-of-atts">
+	<xsl:param name="remove-before" select="0"/> <!-- set to true if any before attribute is to be removed -->
+	<xsl:param name="root"/> 	<!--the systemModel element in the upstream doc  -->
+	
+	<xsl:choose>
+		<xsl:when test="$remove-before">
+			<xsl:copy-of select="@*[name()!='before' and name()!='replace']"/>
+		</xsl:when>
+		<xsl:otherwise><xsl:copy-of select="@*[name()!='replace']"/></xsl:otherwise>
+	</xsl:choose>
+	<xsl:if test="@replace and not($root/descendant::*[(self::component or self::collection or self::package or self::layer) and @id=current()/@replace])">
+		<!-- only include replace if it's not been used -->
+		<xsl:copy-of select="@replace"/>
+	</xsl:if>
+</xsl:template>
+
+<xsl:template match="component" mode="merge-copy-of">
+	<xsl:param name="remove-before" select="0"/> <!-- set to true if any before attribute is to be removed -->
+	<xsl:param name="origin"/>	<!--the element containing the @name to use the origin-model attribute  -->
+	<xsl:param name="root"/> 	<!--the systemModel element in the upstream doc  -->
+	<xsl:choose>
+		<!-- this might slow things down, consider making optional -->
+		<xsl:when test="$root/descendant::collection[@id!=current()/../@id]/component[@id=current()/@id]">
+			<xsl:message>Warning: <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" moved in downstream model. Ignoring moved <xsl:value-of select="name()"/>
+				<xsl:text>&#xa;</xsl:text>
+			</xsl:message>
+		</xsl:when>
+		<xsl:otherwise>
+			<xsl:copy>
+				<xsl:call-template name="merge-copy-of-atts">
+					<xsl:with-param name="remove-before" select="$remove-before"/>
+					<xsl:with-param name="root" select="$root"/>
+				</xsl:call-template>
+				<xsl:if test="not(@origin-model) and $origin/@name">
+					<xsl:attribute name="origin-model">
+						<xsl:value-of select="$origin/@name"/>
+					</xsl:attribute>
+					<xsl:if test="not(@root)">
+						<xsl:copy-of select="$origin/@root"/>
+					</xsl:if>
+				</xsl:if>
+				<xsl:apply-templates select="*|comment()" mode="merge-copy-of">
+					<xsl:with-param name="origin" select="$origin"/>
+					<xsl:with-param name="root" select="$root"/>
+				</xsl:apply-templates>
+			</xsl:copy>
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="unit" mode="merge-copy-of">
+	<xsl:param name="origin"/>	<!--the element containing the @name to use the origin-model attribute  -->
+	<xsl:param name="root"/> 	<!--the systemModel element in the upstream doc  -->
+	<xsl:copy>
+				<xsl:apply-templates select="@*" mode="merge-copy-of">
+					<xsl:with-param name="origin" select="$origin"/>
+					<xsl:with-param name="root" select="$root"/>
+				</xsl:apply-templates>
+	</xsl:copy>
+</xsl:template>
+
+
+
+
+<xsl:template match="meta" mode="merge-copy-of">
+	<xsl:param name="origin"/>	<!--the element containing the @name to use the origin-model attribute  -->
+	<xsl:param name="root"/> 	<!--the systemModel element in the upstream doc  -->
+	<xsl:copy>
+		<xsl:apply-templates select="@*" mode="merge-copy-of">
+			<xsl:with-param name="origin" select="$origin"/>
+			<xsl:with-param name="root" select="$root"/>
+		</xsl:apply-templates>
+		<xsl:copy-of select="node()"/>
+	</xsl:copy>
+</xsl:template>
+
+
+<xsl:template match="unit/@bldFile | unit/@mrp | unit/@base | meta/@href" mode="merge-copy-of">
+	<xsl:param name="origin" select="/.."/>	<!--the element containing the @name to use the origin-model attribute  -->
+
+	<xsl:attribute name="{name()}">
+		<xsl:choose>
+			<xsl:when test="not($origin/@pathto)"><xsl:value-of select="."/></xsl:when>
+			<xsl:when test="(contains(.,'://') and not(contains(substring-before(.,'://'),'/'))) or starts-with(.,'/')"> <!-- absolute URI or absolute path-->
+				<xsl:value-of select="."/>
+			</xsl:when>
+			<xsl:when test="contains($origin/@pathto,'://') and not(contains(substring-before($origin/@pathto,'://'),'/'))"> <!-- absolute URI for downstream sysdef not valif for unit paths, just copy and raise warning-->
+				<xsl:message>ERROR: Could not resolve relative path in downstream file: <xsl:value-of select="."/> relative to absolute URI <xsl:value-of select="$origin/@pathto"/></xsl:message>
+				<xsl:value-of select="."/>
+			</xsl:when>
+		<xsl:otherwise> <!-- relative link -->
+			<xsl:call-template name="joinpath">
+				<xsl:with-param name="file" select="$origin/@pathto"/>
+				<xsl:with-param name="rel" select="."/>
+			</xsl:call-template>
+		</xsl:otherwise>
+		</xsl:choose>
+	</xsl:attribute>
+</xsl:template>
+</xsl:stylesheet>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/modelcheck.xsl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,74 @@
+<xsl:stylesheet  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<!--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:
+	Validate a system definition file or files and output results in HTML
+-->
+	<xsl:output method="html"/>
+	<xsl:include href="test-model.xsl"/>
+	<xsl:param name="path-errors" select="/model/@path-errors='yes' "/>
+	 <!--1 - (optional) If present, it will check to see if unit paths follow the coding standards-->
+
+<xsl:template match="/model">
+	<html><head>
+		<title>Cross-Checking System Model</title>
+		<style>p {margin: 0px; padding: 0px} 
+			p.warn span {color: blue}
+			p.note span {color: green}
+			p.err span {font-weight: bold}
+			p.err {color: red; background: yellow}
+			p.note {font-size: 90%}
+			<xsl:if test="contains(concat(' ',normalize-space(/model/@supress-errors),' '),' note ')">
+				p.note {display: none}
+			</xsl:if>
+			<xsl:if test="contains(concat(' ',normalize-space(/model/@supress-errors),' '),' err ')">
+				p.err {display: none}
+			</xsl:if>
+			<xsl:if test="contains(concat(' ',normalize-space(/model/@supress-errors),' '),' warn ')">
+				p.warn {display: none}
+			</xsl:if>
+		</style>
+	</head><body>
+	<xsl:apply-templates select="." mode="check"/>
+	</body></html>
+</xsl:template>
+
+
+<xsl:template name="Section"><xsl:param name="text"/><xsl:param name="sub"/>
+<h2><xsl:value-of select="$text"/>
+<xsl:if test="$sub!=''"><xsl:text> </xsl:text> <small>(<xsl:value-of select="$sub"/>)</small></xsl:if></h2>
+</xsl:template>
+
+<xsl:template name="Note"><xsl:param name="text"/><xsl:param name="sub"/>
+<p class="note">
+	<span>Note:</span>
+	<xsl:text> </xsl:text>
+	<xsl:copy-of select="$text"/>
+<xsl:if test="$sub!=''"><xsl:text> </xsl:text> <small>(<xsl:value-of select="$sub"/>)</small></xsl:if></p>
+</xsl:template>
+
+<xsl:template name="Warning"><xsl:param name="text"/><xsl:param name="sub"/>
+<p class="warn">
+	<span>Warning:</span>
+	<xsl:text> </xsl:text>
+	<xsl:value-of select="$text"/>
+<xsl:if test="$sub!=''"><xsl:text> </xsl:text> <small>(<xsl:value-of select="$sub"/>)</small></xsl:if></p>
+</xsl:template>
+
+<xsl:template name="Error"><xsl:param name="text"/><xsl:param name="sub"/>
+<p class="err">
+	<span>Error:</span>
+	<xsl:text> </xsl:text>
+	<xsl:value-of select="$text"/>
+<xsl:if test="$sub!=''"><xsl:text> </xsl:text> <small>(<xsl:value-of select="$sub"/>)</small></xsl:if></p>
+</xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/path-module.xsl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,110 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!--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:
+	XSLT module which contains named templates which process file paths
+-->
+
+ <xsl:template name="lastbefore"><xsl:param name="string"/><xsl:param name="substr" select="'/'"/>
+        <xsl:if test="contains($string,$substr)">
+                <xsl:value-of select="substring-before($string,$substr)"/>
+                <xsl:if test="contains(substring-after($string,$substr),$substr)">
+	                <xsl:value-of select="$substr"/>
+	              </xsl:if>
+        <xsl:call-template name="lastbefore">
+                <xsl:with-param name="string" select="substring-after($string,$substr)"/>
+                <xsl:with-param name="substr" select="$substr"/>
+        </xsl:call-template>
+        </xsl:if>
+</xsl:template>
+
+ <xsl:template name="joinpath"><xsl:param name="file"/><xsl:param name="rel"/>
+	<xsl:choose>
+		<xsl:when test="(contains($rel,'://') and not(contains(substring-before($rel,'://'),'/'))) or starts-with($rel,'/')"> <!-- absolute URI or absolute path-->
+			<xsl:value-of select="$rel"/>
+		</xsl:when>
+		<xsl:otherwise> <!-- relative link -->
+			<xsl:call-template name="reducepath">
+				<xsl:with-param name="file">
+					<xsl:call-template name="lastbefore">
+						<xsl:with-param name="string" select="$file"/>
+					</xsl:call-template>
+					<xsl:text>/</xsl:text>
+					<xsl:value-of select="$rel"/>
+				</xsl:with-param>
+			</xsl:call-template>
+		</xsl:otherwise>
+	</xsl:choose>
+ </xsl:template>
+
+<xsl:template name="reducepath"><xsl:param name="file"/>
+	<xsl:call-template name="reducedotdotpath">
+    	<xsl:with-param name="file">
+			<xsl:call-template name="reducedotpath">
+		    	<xsl:with-param name="file" select="$file"/>
+		    </xsl:call-template>
+		</xsl:with-param>
+	</xsl:call-template>
+</xsl:template>
+
+<xsl:template name="reducedotdotpath"><xsl:param name="file"/>
+	<xsl:variable name="pre">
+		<xsl:call-template name="lastbefore">
+			    <xsl:with-param name="string" select="substring-before($file,'/../')"/>
+		</xsl:call-template>
+	</xsl:variable>
+	<xsl:choose>
+		<xsl:when test="starts-with($file,'../')">
+			<xsl:text>../</xsl:text>
+			<xsl:call-template name="reducedotdotpath">
+        		<xsl:with-param name="file" select="substring($file,4)"/>
+			</xsl:call-template>
+		</xsl:when>
+		<xsl:when test="contains($file,'/../') and $pre='' and not(starts-with($file,'/'))"> <!-- if file is a relative path and the dotdots go up to the top dir, don't start with a slash -->
+			<xsl:call-template name="reducepath">
+        		<xsl:with-param name="file" select="substring-after($file,'/../')"/>
+			</xsl:call-template>
+		</xsl:when>
+		<xsl:when test="contains($file,'/../')">
+			<xsl:call-template name="reducepath">
+        		<xsl:with-param name="file" select="concat($pre,'/',substring-after($file,'/../'))"/>
+			</xsl:call-template>
+		</xsl:when>
+		<xsl:otherwise><xsl:value-of select="$file"/></xsl:otherwise>
+	</xsl:choose>
+ </xsl:template>
+
+<xsl:template name="reducedotpath"><xsl:param name="file"/>
+	<xsl:choose>	
+		<xsl:when test="starts-with($file,'./')">
+			<xsl:call-template name="reducedotpath">
+        		<xsl:with-param name="file" select="substring($file,3)"/>
+			</xsl:call-template>
+		</xsl:when>
+
+		<xsl:when test="contains($file,'/./')">
+			<xsl:call-template name="reducepath">
+        		<xsl:with-param name="file">
+	                <xsl:value-of select="substring-before($file,'/./')"/>
+			        <xsl:text>/</xsl:text>
+					<xsl:value-of select="substring-after($file,'/./')"/>
+				</xsl:with-param>
+			</xsl:call-template>
+		</xsl:when>
+		<xsl:when test="substring($file,string-length($file) - 1) = '/.'">
+           <xsl:value-of select="substring($file,1,string-length($file) - 2)"/>
+		</xsl:when>
+		<xsl:otherwise><xsl:value-of select="$file"/></xsl:otherwise>
+	</xsl:choose>
+ </xsl:template>
+
+</xsl:stylesheet>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/test-model.xsl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,578 @@
+<xsl:stylesheet  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<!--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:
+	Module containing the validation logic for system definition 3.0.0 syntax
+-->
+	<xsl:key name="named" match="*[ancestor::systemModel]" use="@name"/>
+	<xsl:param name="Filename"/> <!--<Filename> - (optional) the full system model path to the current sysdef file. This is needed to determine non-standard path errors -->
+	<xsl:variable name="info" select="document(/model//info[@type='extra']/@href,/model)//c"/>
+
+	<xsl:variable name="all-ids">
+		<xsl:apply-templates select="document(/model/sysdef/@href)| SystemDefinition" mode="ids"/>
+	</xsl:variable>
+
+ 
+<xsl:template match="/model" priority="-1">
+	<xsl:apply-templates select="." mode="check"/>
+</xsl:template>
+
+<xsl:template match="/model" mode="check">
+	<xsl:for-each select="sysdef">
+		<xsl:apply-templates select="document (@href,. )/*">
+			<xsl:with-param name="filename">
+				<xsl:choose>
+					<xsl:when test="starts-with(current()/@href,current()/@rootpath)">
+						<xsl:value-of select="substring-after(current()/@href,current()/@rootpath)"/>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:value-of select="@href"/>
+					</xsl:otherwise>
+				</xsl:choose>
+			 </xsl:with-param>
+		</xsl:apply-templates>
+	</xsl:for-each>
+
+
+
+<xsl:apply-templates mode="x-check" select="document (//info[@type='vp']/@href)/*">
+	<xsl:with-param name="sysdef" select="document (sysdef/@href)/*"/>
+</xsl:apply-templates>
+
+<xsl:apply-templates mode="x-check" select="document (//info[@type='build']/@href)/*">
+	<xsl:with-param name="sysdef" select="document (sysdef/@href)/*"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="/SystemDefinition[starts-with(@schema,'3.0.')]" mode="ids">
+	<xsl:for-each select="//*[@id and not(@href)]"><xsl:value-of select="concat(' ',@id,' ')"/></xsl:for-each>
+	<xsl:apply-templates select="document(//layer/@href | //package/@href | //collection/@href | //component/@href,.)/*" mode="ids"/>
+</xsl:template>
+
+<xsl:template match="/SystemDefinition[starts-with(@schema,'3.0.')and systemModel]" priority="2">
+	<xsl:param name="filename" select="$Filename"/>
+<xsl:call-template name="Section">
+	<xsl:with-param name="text">System Definition: <xsl:value-of select="*/@name"/></xsl:with-param>
+	<xsl:with-param name="sub"><xsl:value-of select="(string-length($all-ids) - string-length(translate($all-ids,' ',''))) div 2 "/> items</xsl:with-param>
+</xsl:call-template>
+	<xsl:apply-templates select="*">
+		<xsl:with-param name="filename" select="$filename"/>
+	</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="/SystemDefinition[starts-with(@schema,'3.0.')] | systemModel">
+	<xsl:param name="filename"  select="$Filename"/>
+		
+<xsl:if test="//unit">
+<xsl:call-template name="Section">
+	<xsl:with-param name="text"><xsl:value-of select="translate(substring(name(*),1,1),'clp','CLP')"/><xsl:value-of select="substring(name(*),2)"/> Definition: <xsl:value-of select="*/@name"/></xsl:with-param>
+	<xsl:with-param name="sub"><xsl:value-of select="count(//unit)"/> unit<xsl:if test="count(//unit)!=1">s</xsl:if></xsl:with-param>
+</xsl:call-template>
+</xsl:if>
+<xsl:if test="self::systemModel and not(@name)">
+	<xsl:call-template name="Error"><xsl:with-param name="text">systemModel element should have a name</xsl:with-param></xsl:call-template>
+</xsl:if>
+	<xsl:apply-templates select="*">
+		<xsl:with-param name="filename" select="$filename"/>
+	</xsl:apply-templates>
+</xsl:template>
+
+
+<xsl:template match="@*" mode="valid">
+	<xsl:call-template name="Error"><xsl:with-param name="text">Attribute <xsl:value-of select="name()"/>="<xsl:value-of select="."/>" is not valid for <xsl:value-of select="name(..)"/></xsl:with-param></xsl:call-template>
+</xsl:template>
+
+<xsl:template match="@before|@id|package/@span|layer/@span|collection/@level|package/@level|package/@levels|layer/@levels" mode="valid"/> <!-- really should check syntax -->
+
+<xsl:template match="@name|@href|@filter|package/@version|unit/@version|unit/@prebuilt" mode="valid"/> 
+
+<xsl:template match="component/@introduced|component/@deprecated" mode="valid"/> 
+
+<xsl:template match="component/@origin-model" mode="valid"/>
+
+<xsl:template match="unit/@priority" mode="valid">
+	<xsl:call-template name="Note"><xsl:with-param name="text">Attribute <xsl:value-of select="name()"/> is deprecated</xsl:with-param></xsl:call-template>
+</xsl:template>
+
+
+<xsl:template match="@*[namespace-uri()!='']" mode="valid"> 
+	<xsl:call-template name="Note"><xsl:with-param name="text">Extension attribute <xsl:value-of select="local-name()"/>="<xsl:value-of select="."/>" in namespace <xsl:value-of select="namespace-uri()"/></xsl:with-param></xsl:call-template>
+</xsl:template>
+
+<xsl:template match="@*[namespace-uri()='http://www.nokia.com/qt' and local-name()='proFile']" mode="valid"/> 
+	
+
+<xsl:template match="@*[namespace-uri()='http://www.nokia.com/qt' and local-name()='qmakeArgs']" mode="valid"> 
+	<xsl:call-template name="Note"><xsl:with-param name="text">Should avoid using extension attribute <xsl:value-of select="local-name()"/>="<xsl:value-of select="."/>" in namespace <xsl:value-of select="namespace-uri()"/></xsl:with-param></xsl:call-template>
+</xsl:template>
+
+
+<xsl:template match="@replace" mode="valid">
+	<xsl:if test="/SystemDefinition[@schema='3.0.0']">
+		<xsl:call-template name="Error"><xsl:with-param name="text">Attribute <b><xsl:value-of select="name()"/></b>="<xsl:value-of select="."/>" not valid in schema <xsl:value-of select="/SystemDefinition/@schema"/>. Must use schema 3.0.1 or higher</xsl:with-param></xsl:call-template>
+	</xsl:if>
+</xsl:template>
+
+
+
+<xsl:template name="validate-class">
+	<ok>plugin</ok>
+	<ok>doc</ok>
+	<ok>tool</ok>
+	<ok>config</ok>
+	<ok>api</ok>
+	<w d="deprecated">test</w>
+</xsl:template>
+
+<xsl:template name="validate-purpose">
+	<ok>mandatory</ok>
+	<ok>optional</ok>
+	<ok>development</ok>
+</xsl:template>
+<xsl:template name="validate-target">
+	<ok>other</ok>
+	<ok>desktop</ok>
+	<ok>device</ok>
+</xsl:template>
+
+
+<xsl:template name="validate-tech-domain">
+	<ok>lo</ok>
+	<ok>hb</ok>
+	<ok>mm</ok>
+	<ok>ma</ok>
+	<ok>pr</ok>
+	<ok>vc</ok>
+	<ok>se</ok>
+	<ok>ui</ok>
+	<ok>dc</ok>
+	<ok>de</ok>
+	<ok>dm</ok>
+	<ok>rt</ok>
+	<ok>to</ok>
+	<w d="Non-standard">ocp</w>
+</xsl:template>
+
+<xsl:template match="component/@class" mode="valid">
+	<xsl:call-template name="checklist">
+		<xsl:with-param name="list" select="normalize-space(.)"/>
+		<xsl:with-param name="values" select="document('')/*/xsl:template[@name=concat('validate-',name(current()))]/*"/>
+	</xsl:call-template>
+</xsl:template> 
+
+<xsl:template name="checklist">
+	<xsl:param name="list" select="."/><xsl:param name="values"/><xsl:param name="sep" select="' '"/>
+	<xsl:variable name="item">
+		<xsl:choose>
+			<xsl:when test="contains($list,$sep)"><xsl:value-of select="substring-before($list,$sep)"/></xsl:when>
+			<xsl:otherwise><xsl:value-of select="$list"/></xsl:otherwise>
+		</xsl:choose>
+	</xsl:variable>
+	<xsl:variable name="v" select="$values[.=$item]"/>
+	<xsl:choose>
+		<xsl:when test="not($v)">
+			<xsl:call-template name="Error"><xsl:with-param name="text">Illegal <xsl:value-of select="name()"/> value <xsl:value-of select="name()"/>="<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
+		</xsl:when> 
+		<xsl:when test="name($v)='ok'"/> 
+		<xsl:when test="name($v)='w'">
+			<xsl:call-template name="Warning"><xsl:with-param name="text"><xsl:value-of select="$v/@d"/> value in <xsl:value-of select="name()"/>="<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
+		</xsl:when> 
+	</xsl:choose>	
+	<xsl:if test="contains($list,$sep)">
+		<xsl:call-template name="checklist">
+			<xsl:with-param name="list" select="substring-after($list,$sep)"/>
+			<xsl:with-param name="values" select="$values"/>
+			<xsl:with-param name="sep" select="$sep"/>			
+		</xsl:call-template>
+	</xsl:if>
+</xsl:template> 
+
+
+<xsl:template match="package/@tech-domain|component/@purpose|component/@target" mode="valid">
+	<xsl:variable name="v" select="document('')/*/xsl:template[@name=concat('validate-',name(current()))]/*[.=current()]"/>
+	<xsl:choose>
+		<xsl:when test="not($v)">
+			<xsl:call-template name="Error"><xsl:with-param name="text">Illegal <xsl:value-of select="name()"/> value <xsl:value-of select="name()"/>="<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
+		</xsl:when> 
+		<xsl:when test="name($v)='ok'"/> 
+		<xsl:when test="name($v)='w'">
+			<xsl:call-template name="Warning"><xsl:with-param name="text"><xsl:value-of select="$v/@d"/> value in <xsl:value-of select="name()"/>="<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
+		</xsl:when> 
+	</xsl:choose>
+</xsl:template> 
+
+
+
+
+
+<xsl:template match="*" priority="-2">
+	<xsl:call-template name="Error"><xsl:with-param name="text">Element "<xsl:value-of select="name()"/>" is not valid in the context of "<xsl:value-of select="name(..)"/>"</xsl:with-param></xsl:call-template>
+</xsl:template>
+
+<xsl:template match="component[not(parent::collection)] | collection[not(parent::package)] | package[not(parent::package or parent::layer or (parent::SystemDefinition and count(../*)=1))] | layer[not(parent::systemModel)] " priority="3">
+	<xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" has invalid parent <xsl:value-of select="name(..)"/> "<xsl:value-of select="../@id"/>"</xsl:with-param></xsl:call-template>
+</xsl:template>
+
+<xsl:template match="layer | package | collection | component">
+	<xsl:param name="filename"/>
+
+<xsl:apply-templates select="@*" mode="valid"/>
+<xsl:apply-templates select="@id"/>
+<xsl:if test="self::component">
+	<xsl:choose>
+		<xsl:when test="count(unit[not(@filter | @version)]) = 0 "/>
+		<xsl:when test="count(unit[not(@version)]) &gt; 1 and @filter='s60'">
+			<xsl:call-template name="Warning"><xsl:with-param name="text">S60 Component "<xsl:value-of select="@id"/>" has <xsl:value-of select="count(unit)"/> units.</xsl:with-param></xsl:call-template>
+		</xsl:when>
+		<xsl:when test="count(unit[not(@version)]) &gt; 1">
+			<xsl:call-template name="Error"><xsl:with-param name="text">Component "<xsl:value-of select="@id"/>" has <xsl:value-of select="count(unit)"/> units.</xsl:with-param></xsl:call-template>
+		</xsl:when>
+	</xsl:choose>
+	<xsl:choose>
+		<xsl:when test="unit"/>
+		<xsl:when test="contains(comment(),'PLACEHOLDER=')"/>
+		<xsl:when test="comment()">
+			<xsl:call-template name="Note"><xsl:with-param name="text">Component "<xsl:value-of select="@name"/>" is empty.</xsl:with-param></xsl:call-template>
+		</xsl:when>
+		<xsl:when test="not(comment())">
+			<xsl:call-template name="Warning"><xsl:with-param name="text">Component "<xsl:value-of select="@name"/>" is empty and has no comment</xsl:with-param></xsl:call-template>
+		</xsl:when>
+	</xsl:choose>
+</xsl:if>
+<xsl:if test="@href">
+	<xsl:variable name="child" select="document(@href,.)/SystemDefinition"/>
+	<xsl:if test="@id!=$child/@id">
+		<xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" must match ID in linked file "<xsl:value-of select="@href"/>"</xsl:with-param></xsl:call-template>
+	</xsl:if>
+	<xsl:if test="$child/@href">
+		<xsl:call-template name="Error"><xsl:with-param name="text">linked <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" cannot be a link</xsl:with-param></xsl:call-template>
+	</xsl:if>
+	<xsl:for-each select="@*[name()!='id']">
+		<xsl:if test="$child/@*[name()=name(current())]">
+			<xsl:call-template name="Warning"><xsl:with-param name="text">linked <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" has duplicate attribute to linking document. Duplicate ignored.</xsl:with-param></xsl:call-template>
+		</xsl:if>
+	</xsl:for-each>
+	<xsl:if test="*">
+		<xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" cannot have both link and content. Content ignored.</xsl:with-param></xsl:call-template>
+	</xsl:if>
+</xsl:if>
+<xsl:if test="@href and name()!=name(document(@href,.)/SystemDefinition/*)">
+		<xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" must match item in linked file "<xsl:value-of select="@href"/>"</xsl:with-param></xsl:call-template>
+</xsl:if>
+<xsl:if test="not(@href)">
+	<xsl:apply-templates select="*">
+		<xsl:with-param name="filename" select="$filename"/>
+	</xsl:apply-templates>
+</xsl:if>
+<xsl:if test="@href">
+	<xsl:apply-templates select="document(@href,.)/*">
+		<xsl:with-param name="filename">
+			<xsl:call-template name="normpath">
+				<xsl:with-param name="path">
+					<xsl:if test="not(starts-with(current()/@href,'/'))">
+						<xsl:call-template name="before">
+							<xsl:with-param name="text" select="$filename"/>
+						</xsl:call-template>
+					</xsl:if>
+					<xsl:value-of select="current()/@href"/>
+				 </xsl:with-param>
+			</xsl:call-template>
+		 </xsl:with-param>
+	</xsl:apply-templates>
+</xsl:if>
+</xsl:template>
+
+
+
+<xsl:template match="meta">	<xsl:param name="filename"/>
+	<xsl:apply-templates select="@*"/>
+</xsl:template>
+
+<xsl:template match="meta/@rel | meta/@type | meta/@href"/> <!-- anything is valid -->
+
+<xsl:template match="unit">	<xsl:param name="filename"/>
+	<xsl:apply-templates select="@*">
+		<xsl:with-param name="filename" select="$filename"/>
+	</xsl:apply-templates>
+</xsl:template>
+
+
+<xsl:template match="unit/@* | meta/@*" priority="-1">	
+	<xsl:apply-templates select="." mode="valid"/>
+</xsl:template>
+
+
+<xsl:template match="@id" mode="path">
+	<xsl:choose>
+		<xsl:when test="contains(.,':')"><xsl:value-of  select="substring-after(.,':')"/></xsl:when>
+		<xsl:otherwise><xsl:value-of  select="."/></xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="@id">
+<xsl:if test="contains(concat(' ',substring-after($all-ids,concat(' ',.,' '))),concat(' ',.,' '))">
+	<xsl:call-template name="Warning"><xsl:with-param name="text">Duplicate ID: <xsl:value-of select="name(..)"/> "<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
+</xsl:if>
+
+<xsl:if test="contains(.,':') and not(ancestor::*/namespace::*[name()=substring-before(current(),':')])">
+	<xsl:call-template name="Error"><xsl:with-param name="text">Undefined namespace for ID "<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
+</xsl:if>
+
+</xsl:template>
+
+
+<xsl:template mode="localid" match="*">
+	<xsl:choose>
+		<xsl:when test="contains(@id,':')">/<xsl:value-of select="substring-after(@id,':')"/></xsl:when>
+		<xsl:otherwise><xsl:value-of select="@id"/></xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+<xsl:template match="@bldFile|@mrp|@base"><xsl:param name="filename"/>
+<xsl:if test="substring(.,string-length(.))='/'">
+		<xsl:call-template name="Warning"><xsl:with-param name="text"><code><xsl:value-of select="name()"/></code> path "<xsl:value-of select="."/>" should not end in /</xsl:with-param></xsl:call-template>
+</xsl:if>
+<xsl:if test="contains(.,'\')">
+		<xsl:call-template name="Error"><xsl:with-param name="text"><code><xsl:value-of select="name()"/></code> path "<xsl:value-of select="."/>" must use only forward slashes</xsl:with-param></xsl:call-template>
+</xsl:if>
+
+<!-- this is a realtive path, so just check that it's the expected number of dirs down -->
+	<xsl:variable name="fullpath"><xsl:call-template name="normpath">
+				<xsl:with-param name="path">
+					<xsl:if test="not(starts-with(.,'/'))">
+						<xsl:call-template name="before">
+							<xsl:with-param name="text" select="$filename"/>
+						</xsl:call-template>
+					</xsl:if>
+					<xsl:value-of select="."/>
+				 </xsl:with-param>
+			</xsl:call-template>
+		</xsl:variable>
+		<xsl:variable name="path">
+			<xsl:choose>
+				<xsl:when test="not(contains($filename,':'))">/<xsl:for-each select="ancestor::*/@id"><xsl:apply-templates mode="path" select="."/>/</xsl:for-each></xsl:when>
+				<xsl:otherwise><xsl:for-each select="../../../@id|../../@id"><xsl:apply-templates mode="path" select="."/>/</xsl:for-each></xsl:otherwise>
+			</xsl:choose>
+		</xsl:variable>
+		<xsl:variable name="segment"> <!-- the part relative to the fragment directory -->
+			<xsl:choose>
+				<xsl:when test="ancestor::layer">
+					<xsl:apply-templates select="ancestor::package" mode="localid"/>/<xsl:apply-templates select="ancestor::collection" mode="localid"/>
+				</xsl:when>
+				<xsl:when test="ancestor::package">
+				<xsl:apply-templates select="ancestor::collection" mode="localid"/>
+				</xsl:when>
+				<xsl:when test="ancestor::collection"/>
+			</xsl:choose>/<xsl:apply-templates select="ancestor::component" mode="localid"/>/</xsl:variable>
+		<xsl:choose>
+			<xsl:when test="not(starts-with(concat(.,'/'),$segment) or starts-with(concat('/',.,'/'),$segment)) and $path-errors">
+				<xsl:call-template name="Note"><xsl:with-param name="text">Unexpected <code><xsl:value-of select="name()"/></code> path for <xsl:apply-templates mode="path" select="../../../@id"/> -&gt; <strong><xsl:apply-templates mode="path" select="../../@id"/></strong>: "<xsl:value-of select="$fullpath"/>"</xsl:with-param></xsl:call-template>
+			</xsl:when>
+		</xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="@bldFile[starts-with(.,'/') or contains(.,'../') or contains(.,':')] | @mrp[starts-with(.,'/') or contains(.,'../') or contains(.,':')] |@base[starts-with(.,'/') or contains(.,'../') or contains(.,':')]"><xsl:param name="filename"/>
+<xsl:if test="substring(.,string-length(.))='/'">
+		<xsl:call-template name="Warning"><xsl:with-param name="text"><code><xsl:value-of select="name()"/></code> path "<xsl:value-of select="."/>" should not end in /</xsl:with-param></xsl:call-template>
+</xsl:if>
+<xsl:if test="contains(.,'\')">
+		<xsl:call-template name="Error"><xsl:with-param name="text"><code><xsl:value-of select="name()"/></code> path "<xsl:value-of select="."/>" must use only forward slashes</xsl:with-param></xsl:call-template>
+</xsl:if>
+	<xsl:variable name="fullpath"><xsl:call-template name="normpath">
+				<xsl:with-param name="path">
+					<xsl:if test="not(starts-with(.,'/'))">
+						<xsl:call-template name="before">
+							<xsl:with-param name="text" select="$filename"/>
+						</xsl:call-template>
+					</xsl:if>
+					<xsl:value-of select="."/>
+				 </xsl:with-param>
+			</xsl:call-template>
+		</xsl:variable>
+		<xsl:variable name="path">
+			<xsl:choose>
+				<xsl:when test="not(contains($filename,':'))">/<xsl:for-each select="ancestor::*/@id"><xsl:apply-templates mode="path" select="."/>/</xsl:for-each></xsl:when>
+				<xsl:otherwise><xsl:for-each select="../../../@id|../../@id"><xsl:apply-templates mode="path" select="."/>/</xsl:for-each></xsl:otherwise>
+			</xsl:choose>
+		</xsl:variable>
+		<xsl:variable name="segment">
+			<xsl:choose>
+				<xsl:when test="ancestor::layer">
+					<xsl:value-of select="concat($fullpath,'/')"/>
+				</xsl:when>
+				<xsl:when test="ancestor::package">
+					<xsl:value-of select="concat('/',substring-after(substring-after($fullpath,'/'),'/'),'/')"/>
+				</xsl:when>
+				<xsl:when test="ancestor::collection">
+					<xsl:value-of select="concat('/',substring-after(substring-after(substring-after($fullpath,'/'),'/'),'/'),'/')"/>
+				</xsl:when>
+				<xsl:otherwise>
+					<xsl:value-of select="concat('/',substring-after(substring-after(substring-after(substring-after($fullpath,'/'),'/'),'/'),'/'),'/')"/>
+				</xsl:otherwise>
+			</xsl:choose>
+		</xsl:variable>
+<xsl:choose>
+	<xsl:when test="contains($filename,':')">
+		<xsl:choose>
+			<xsl:when test="not(starts-with(.,$path) or concat(.,'/')=$path) and $path-errors">
+				<xsl:call-template name="Note"><xsl:with-param name="text">Unexpected <code><xsl:value-of select="name()"/></code> path for <xsl:apply-templates mode="path" select="../../../@id"/> -&gt; <strong><xsl:apply-templates mode="path" select="../../@id"/></strong>: "<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
+			</xsl:when>
+		</xsl:choose>
+	</xsl:when>
+	<xsl:otherwise>
+		<xsl:choose>
+			<xsl:when test="not($path-errors)"/>
+			<xsl:when test="substring-before(substring($segment,2),'/') != substring-before(substring($path,2),'/') and (ancestor::SystemDefinition/@id-namespace!='http://www.symbian.org/system-definition' and not(contains(../../@id,':')))">
+				<xsl:call-template name="Warning"><xsl:with-param name="text">Unexpected <code><xsl:value-of select="name()"/></code> path for <xsl:apply-templates mode="path" select="../../../@id"/> -&gt; <strong><xsl:apply-templates mode="path" select="../../@id"/></strong>: "<xsl:value-of select="$fullpath"/>"</xsl:with-param></xsl:call-template>
+			</xsl:when>
+			<xsl:when test="substring-before(substring($segment,2),'/') != substring-before(substring($path,2),'/')">
+				<xsl:call-template name="Error"><xsl:with-param name="text">Unexpected <code><xsl:value-of select="name()"/></code> path for <xsl:apply-templates mode="path" select="../../../@id"/> -&gt; <strong><xsl:apply-templates mode="path" select="../../@id"/></strong>: "<xsl:value-of select="$fullpath"/>"</xsl:with-param></xsl:call-template>
+			</xsl:when>
+			<xsl:when test="not(starts-with($segment,$path))">
+				<xsl:call-template name="Note"><xsl:with-param name="text">Unexpected <code><xsl:value-of select="name()"/></code> path for <xsl:apply-templates mode="path" select="../../../@id"/> -&gt; <strong><xsl:apply-templates mode="path" select="../../@id"/></strong>: "<xsl:value-of select="$fullpath"/>"</xsl:with-param></xsl:call-template>
+			</xsl:when>
+		</xsl:choose>
+	</xsl:otherwise>
+</xsl:choose>
+</xsl:template>
+
+<xsl:template match="SystemDefinition" mode="check-matches">
+	<xsl:param name="which"/>
+	<xsl:param name="other"/>
+	<xsl:for-each select="//*[@mrp]">
+		<xsl:variable name="mrp" select="@mrp"/>
+		<xsl:if test="not($other//*[@mrp=$mrp])">
+			<xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="$mrp"/> has no match in <xsl:value-of select="$which"/>.</xsl:with-param></xsl:call-template>
+		</xsl:if>
+	</xsl:for-each>
+</xsl:template>
+
+<xsl:template match="*" mode="value">
+	<xsl:call-template name="Error"><xsl:with-param name="text">
+		<xsl:value-of select="name()"/>:<xsl:for-each select="@*"><xsl:value-of select="concat(name(),'=',.)"/></xsl:for-each>
+	</xsl:with-param></xsl:call-template>
+</xsl:template>
+
+<xsl:template match="*" mode="compare"><xsl:param name="base"/>
+<xsl:variable name="n" select="@id"/>
+<xsl:variable name="tag" select="name()"/>
+<xsl:variable name="v"><xsl:apply-templates select="." mode="value"/></xsl:variable>
+<xsl:variable name="v2"><xsl:apply-templates mode="value" select="$base//*[name()=$tag and @id=$n]"/></xsl:variable>
+<xsl:if  test="$v != $v2">
+	<xsl:call-template name="Error"><xsl:with-param name="text">
+		<xsl:value-of select="concat(name(),' ',@name)"/> not identical. [<xsl:value-of select="$v"/>|<xsl:value-of select="$v2"/>]</xsl:with-param></xsl:call-template>
+</xsl:if>	
+</xsl:template>
+
+
+
+<xsl:template match="unit" mode="compare" priority="1"><xsl:param name="base"/>
+<xsl:variable name="n" select="concat(@version,':',@mrp,'.',@prebuilt)"/>
+<xsl:variable name="v"><xsl:apply-templates select="." mode="value"/></xsl:variable>
+<xsl:variable name="v2"><xsl:apply-templates mode="value" select="$base//unit[concat(@version,':',@mrp,'.',@prebuilt)=$n]"/></xsl:variable>
+<xsl:if  test="$v != $v2">
+	<xsl:call-template name="Error"><xsl:with-param name="text">
+		<xsl:value-of select="concat('&#xa;',name(),' ',../@name,' v',@version)"/> not identical. [<xsl:value-of select="$v"/>|<xsl:value-of select="$v2"/>]</xsl:with-param></xsl:call-template>
+</xsl:if>
+</xsl:template>
+
+<xsl:template match="/variations/@module"> (<xsl:value-of select="."/>)</xsl:template>
+
+<xsl:template match="/variations" mode="x-check"><xsl:param name="sysdef"/>
+<xsl:call-template name="Section"><xsl:with-param name="text">vp cross-check <xsl:apply-templates select="@module"/></xsl:with-param></xsl:call-template>
+<xsl:for-each select="//component">
+	<xsl:variable name="found">
+		<xsl:apply-templates select="$sysdef" mode="lookfor">
+			<xsl:with-param name="id" select="@name"/>
+			<xsl:with-param name="version" select="@version"/>
+		</xsl:apply-templates>
+	</xsl:variable>
+	<xsl:if test="$found=''">
+		<xsl:call-template name="Error"><xsl:with-param name="text">VP component "<xsl:value-of select="@name"/>"<xsl:if test="@version"> v<xsl:value-of select="@version"/></xsl:if> not in SysDef</xsl:with-param></xsl:call-template>
+	</xsl:if>
+</xsl:for-each>
+</xsl:template>
+
+<xsl:template match="*" mode="lookfor"><xsl:param name="id"/><xsl:param name="version"/>
+	<xsl:choose>
+		<xsl:when test="string-length($version) and //component[@id=$id and unit[@version=$version]]">Found</xsl:when>
+		<xsl:when test="string-length($version)=0 and //*[@id=$id]">Found</xsl:when>
+		<xsl:otherwise>
+			<xsl:apply-templates select="document(//layer/@href | //package/@href | //collection/@href | //component/@href,.)/*/*" mode="lookfor">
+				<xsl:with-param name="version" select="$version"/>
+				<xsl:with-param name="id" select="$id"/>
+			</xsl:apply-templates>
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+
+
+<xsl:template match="SystemBuild" mode="x-check"><xsl:param name="sysdef"/>
+
+<xsl:call-template name="Section"><xsl:with-param name="text">System Build cross-check</xsl:with-param></xsl:call-template>
+<xsl:for-each select="//ref">
+	<xsl:variable name="found">
+		<xsl:apply-templates select="$sysdef" mode="lookfor">
+		<xsl:with-param name="id" select="current()/@item"/>
+	</xsl:apply-templates>
+</xsl:variable>
+	<xsl:if test="$found=''">
+		<xsl:call-template name="Error"><xsl:with-param name="text">Build item "<xsl:value-of select="@item"/>" not in SysDef</xsl:with-param></xsl:call-template>
+</xsl:if>
+</xsl:for-each>
+
+<xsl:for-each select="//listRef">
+	<xsl:if test="not(//list[@name=current()/@list])">
+		<xsl:call-template name="Error"><xsl:with-param name="text">Build list "<xsl:value-of select="@name"/>" not defined</xsl:with-param></xsl:call-template>
+</xsl:if>	
+</xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="my-release">
+	<xsl:variable name="n" select="@name"/>
+	<xsl:variable name="new" select="@introduced"/>
+	<xsl:variable name="end" select="@deprecated"/>
+	<xsl:choose>
+		<xsl:when test="$new!='' and $end!=''">(<xsl:value-of select="concat($new,' - ',$end)"/>)</xsl:when>
+		<xsl:when test="$new!='' ">(<xsl:value-of select="$new"/>)</xsl:when>
+		<xsl:when test="$end!=''">(? - <xsl:value-of select="$end"/>)</xsl:when>
+	</xsl:choose>
+</xsl:template>
+
+<xsl:template name="normpath"><xsl:param name="path"/>
+<!-- normalize out any ".." in the path in $path  -->
+<xsl:choose>
+	<xsl:when test="contains($path,'/../')">
+	<xsl:call-template name="normpath">
+		<xsl:with-param name="path">
+		<xsl:call-template name="before">
+			<xsl:with-param name="text" select="substring-before($path,'/../')"/>
+		</xsl:call-template>
+		<xsl:value-of select="substring-after($path,'/../')"/>
+		</xsl:with-param>
+		</xsl:call-template>
+	</xsl:when>
+	<xsl:otherwise><xsl:value-of select="$path"/></xsl:otherwise>
+</xsl:choose>
+</xsl:template>
+
+<!-- return all text before the last / -->
+<xsl:template name="before"><xsl:param name="text"/>
+<xsl:if test="contains($text,'/')">
+	<xsl:value-of select="substring-before($text,'/')"/>/<xsl:call-template name="before"><xsl:with-param name="text" select="substring-after($text,'/')"/></xsl:call-template>
+	</xsl:if>
+</xsl:template>
+
+
+</xsl:stylesheet>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/usage.xsl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,135 @@
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:output method="text"/>
+<xsl:param name="usage"/>
+
+<xsl:template match="node()|@*"><xsl:copy-of select="."/></xsl:template>
+<xsl:template match="/*">
+	<xsl:apply-templates select="." mode="desc"/>
+
+	<xsl:variable name="in">
+		<xsl:call-template name="input"/>
+	</xsl:variable>
+	<xsl:variable name="out">
+		<xsl:call-template name="output"/>
+	</xsl:variable>
+
+	<xsl:if test="$usage != ''">
+		<xsl:text>&#xa;usage: </xsl:text><xsl:value-of select="$usage"/>
+	</xsl:if>
+	<xsl:if test="$usage != '' and contains($out,'&gt;')"> [<xsl:value-of select="substring-before($out,'&gt;')"/>&gt;]  [params ...] <xsl:value-of select="substring-before($in,'&gt;')"/>&gt;</xsl:if>
+		<xsl:choose>
+			<xsl:when test="system-property('xsl:vendor-url') = 'http://xml.apache.org/xalan-c' ">
+The input file must be last. Other arguments can be in any order. 
+Parameters are case-sensitive. Text parameter values must be in single quotes.
+</xsl:when>
+			<xsl:when test="system-property('xsl:vendor-url') = 'http://xml.apache.org/xalan-j' ">
+Arguments can be in any order. 
+Parameters are case-sensitive.
+</xsl:when>
+			<xsl:when test="system-property('xsl:vendor-url') = 'http://xmlsoft.org/XSLT/' ">
+The input file must be last. Other arguments can be in any order. 
+Parameters are case-sensitive.
+</xsl:when>
+		</xsl:choose>
+
+	<xsl:text>&#xa;&#9;</xsl:text>
+		<xsl:call-template name="input"/>
+	<xsl:text>&#xa;&#9;</xsl:text>
+		<xsl:call-template name="output"/>
+	<xsl:apply-templates select="." mode="params"/>
+</xsl:template>
+
+
+<xsl:template match="/*" mode="desc">
+	<xsl:value-of select="substring-after(comment()[starts-with(.,'Description:')],':')"/>
+	<xsl:apply-templates select="document(xsl:import/@href | xsl:include/@href,.)/*" mode="desc"/>
+</xsl:template>
+
+<xsl:template match="/*" mode="params">
+	<xsl:for-each select="xsl:param">
+		<xsl:text>&#xa;&#9;</xsl:text>
+		<xsl:choose>
+			<xsl:when test="system-property('xsl:vendor-url') = 'http://xml.apache.org/xalan-c' ">
+				<xsl:text>-p </xsl:text>			
+			</xsl:when>
+			<xsl:when test="system-property('xsl:vendor-url') = 'http://xml.apache.org/xalan-j' ">
+				<xsl:text>-param </xsl:text>			
+			</xsl:when>
+			<xsl:when test="system-property('xsl:vendor-url') = 'http://xmlsoft.org/XSLT/' ">
+				<xsl:text>--string-param </xsl:text>			
+			</xsl:when>
+		</xsl:choose>
+		<xsl:value-of select="concat(@name,' ')"/>
+		<xsl:for-each select="following-sibling::node()[self::* or self::comment()][1]">
+			<xsl:if test="self::comment()">
+			<xsl:value-of select="."/>
+			</xsl:if>
+		</xsl:for-each>
+		<xsl:text>&#xa;</xsl:text>
+		<xsl:if test="not(*) and normalize-space(.)!='' ">&#9;&#9;Defaults to <xsl:choose>
+			<xsl:when test="system-property('xsl:vendor-url') = 'http://xml.apache.org/xalan-c' ">'<xsl:value-of select="."/>'</xsl:when>
+			<xsl:when test="system-property('xsl:vendor-url') = 'http://xml.apache.org/xalan-j' ">"<xsl:value-of select="."/>"</xsl:when>
+			<xsl:when test="system-property('xsl:vendor-url') = 'http://xmlsoft.org/XSLT/' ">"<xsl:value-of select="."/>"</xsl:when>
+		</xsl:choose></xsl:if>
+	</xsl:for-each>
+	<xsl:apply-templates select="document(xsl:import/@href | xsl:include/@href,.)/*" mode="params"/>
+</xsl:template>
+
+
+<xsl:template name="string"><xsl:param name="look">Description</xsl:param>
+	<xsl:variable name="s">
+		<xsl:value-of select="substring-after(comment()[starts-with(.,concat($look,':'))],':')"/>
+	</xsl:variable>
+	<xsl:choose>
+		<xsl:when test="$s != ''"><xsl:value-of select="$s"/></xsl:when>
+		<xsl:otherwise>
+			<xsl:for-each select="document(xsl:import/@href | xsl:include/@href,.)/*">
+				<xsl:call-template name="string">
+					<xsl:with-param name="look" select="$look"/>
+				</xsl:call-template>
+			</xsl:for-each>
+		</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+<xsl:template name="input">
+	<xsl:variable name="p">
+		<xsl:call-template name="string">
+			<xsl:with-param name="look" select="'Input'"/>
+		</xsl:call-template>
+	</xsl:variable>
+		<xsl:choose>
+			<xsl:when test="system-property('xsl:vendor-url') = 'http://xml.apache.org/xalan-c' "/>
+			<xsl:when test="system-property('xsl:vendor-url') = 'http://xmlsoft.org/XSLT/' "/>
+			<xsl:when test="system-property('xsl:vendor-url') = 'http://xml.apache.org/xalan-j' ">
+				<xsl:text>-in </xsl:text>			
+			</xsl:when>
+		</xsl:choose>
+	<xsl:if test="$p =''  ">&lt;xml&gt; - (required) The input XML file</xsl:if>
+	<xsl:if test="$p !=''  "><xsl:value-of select="$p"/></xsl:if>
+	<xsl:text>&#xa;</xsl:text>
+</xsl:template>
+
+<xsl:template name="output">
+	<xsl:variable name="p">
+		<xsl:call-template name="string">
+			<xsl:with-param name="look" select="'Output'"/>
+		</xsl:call-template>
+	</xsl:variable>
+	<xsl:choose>
+		<xsl:when test="system-property('xsl:vendor-url') = 'http://xml.apache.org/xalan-c' ">
+			<xsl:text>-o </xsl:text>			
+		</xsl:when>
+		<xsl:when test="system-property('xsl:vendor-url') = 'http://xml.apache.org/xalan-j' ">
+			<xsl:text>-out </xsl:text>			
+		</xsl:when>
+		<xsl:when test="system-property('xsl:vendor-url') = 'http://xmlsoft.org/XSLT/' ">
+			<xsl:text>-o </xsl:text>			
+		</xsl:when>
+	</xsl:choose>
+	<xsl:if test="$p =''  ">&lt;file&gt; - (optional) The <xsl:value-of select="xsl:output/@method"/> file to save the output as. If not present it will write to stdout.</xsl:if>
+	<xsl:if test="$p !=''  "><xsl:value-of select="$p"/></xsl:if>
+	<xsl:text>&#xa;</xsl:text>
+</xsl:template>
+
+</xsl:stylesheet>
--- a/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/mergesysdef-module.xsl	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,504 +0,0 @@
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common"  exclude-result-prefixes="exslt">
-<!--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 "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:
-	XSLT module for merging only two sysdef files according to the 3.0.0 rules. Old syntax not supported and must be converetd before calling.
--->
-	
-<xsl:variable name="defaultnamespace">http://www.symbian.org/system-definition</xsl:variable>
-
-<xsl:template match="/SystemDefinition[starts-with(@schema,'2.') or starts-with(@schema,'1.')]" priority="2" mode="merge-models">
-	<xsl:message terminate="yes">ERROR: Syntax <xsl:value-of select="@schema"/> not supported</xsl:message>
-</xsl:template>
-<xsl:template match="/SystemDefinition[not(systemModel)]" priority="2" mode="merge-models">
-	<xsl:message terminate="yes">ERROR: Can only merge stand-alone system models</xsl:message>
-</xsl:template>
-
-<!-- stuff for dealing with namespaces -->
-
-
-<xsl:template match="node()|@*" mode="translate-namespaces"><xsl:copy-of select="."/></xsl:template>
-<!-- don't translate meta or unit tags, just copy verbatim -->
-<xsl:template match="meta|unit" mode="translate-namespaces" priority="2">
-<xsl:element name="{name()}">
-<xsl:copy-of select="@*|*|comment()"/>
-</xsl:element>
-</xsl:template>
-
-<xsl:template match="*" mode="translate-namespaces"><xsl:param name="nsdoc"/>
-<xsl:element name="{name()}">
-<xsl:apply-templates select="@*|node()" mode="translate-namespaces">
-	<xsl:with-param name="nsdoc" select="$nsdoc"/>
-</xsl:apply-templates>
-</xsl:element>
-</xsl:template>
-
-
-<xsl:template match="@id|@before" mode="translate-namespaces"><xsl:param name="nsdoc"/>
-	<xsl:attribute name="{name()}">
-		<xsl:variable name="id">
-			<xsl:choose>
-				<xsl:when test="contains(.,':')">
-					<xsl:value-of select="substring-after(.,':')"/>
-				</xsl:when>
-				<xsl:otherwise>
-					<xsl:value-of select="."/>
-				</xsl:otherwise>
-			</xsl:choose>
-		</xsl:variable>
-		<xsl:variable name="ns">
-			<xsl:choose>
-				<xsl:when test="contains(.,':')">
-					<xsl:value-of select="ancestor-or-self::*/namespace::*[name()=substring-before(current()/.,':')]"/>
-				</xsl:when>
-				<xsl:when test="/SystemDefinition/@id-namespace">
-					<xsl:value-of select="/SystemDefinition/@id-namespace"/>
-				</xsl:when>
-				<xsl:otherwise>
-					<xsl:value-of select="$defaultnamespace"/>
-				</xsl:otherwise>
-			</xsl:choose>
-		</xsl:variable>
-		<xsl:choose>
-			<xsl:when test="not($nsdoc/@id-namespace) and $defaultnamespace=$ns">
-				<xsl:value-of select="$id"/>
-			</xsl:when>
-			<xsl:when test="$nsdoc/@id-namespace=$ns">
-				<xsl:value-of select="$id"/>
-			</xsl:when>
-			<xsl:when test="$nsdoc/namespace::*[.=$ns]">
-				<xsl:value-of select="concat(name($nsdoc/namespace::*[.=$ns]),':',$id)"/>
-			</xsl:when>
-			<xsl:when test="/SystemDefinition/@id-namespace=$ns">
-				<xsl:variable name="myns">
-					<xsl:apply-templates mode="ns-prefix" select="$nsdoc">
-						<xsl:with-param name="ns" select="$ns"/>
-					</xsl:apply-templates>
-				</xsl:variable>			
-				<xsl:value-of select="concat($myns,':',$id)"/>
-			</xsl:when>
-			<xsl:otherwise> <!-- some namespace that needed to be defined --> 
-			<xsl:message>Warning: need definition for namespace "<xsl:value-of select="$ns"/>" for <xsl:value-of select="$id"/></xsl:message>
-				<xsl:value-of select="."/>					
-			</xsl:otherwise>
-		</xsl:choose>		
-	</xsl:attribute>
-</xsl:template>
-
-<xsl:template match="/SystemDefinition" mode="ns-prefix">
-	<xsl:param name="ns"/> <!-- the namespace URI -->
-	<xsl:param name="pre"/> <!-- the preferred prefix to use if possbile -->
-	<xsl:param name="dontuse"/> <!-- space prefixed, separated and terminated list of namespace prefixes to not use -->
-	<xsl:param name="chars">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</xsl:param> <!-- single letter namespace prefixes to try -->
-	<xsl:variable name="name" select="substring(substring-after($ns,'http://www.'),1,1)"/>
-	<xsl:choose>
-		<xsl:when test="$pre!='' and $pre!='id-namespace' and not(//namespace::*[name()=$pre]) and not(contains($dontuse,concat(' ',$pre,' ')))">
-			<xsl:value-of select="$pre"/>
-		</xsl:when>
-		<xsl:when test="$ns='' and $chars=''">
-			<xsl:message terminate="yes">ERROR: Cannot create namespace prefix for downstream default namespace in <xsl:value-of select="*/@id"/></xsl:message>
-		</xsl:when>
-		<xsl:when test="$name!='' and not(contains($dontuse,concat(' ',$name,' ')))"><xsl:value-of select="$name"/></xsl:when>
-		<xsl:when test="namespace::*[name()=substring($chars,1,1)] or contains($dontuse,concat(' ',substring($chars,1,1),' '))">
-			<xsl:apply-templates mode="ns-prefix">
-				<xsl:with-param name="chars" select="substring($chars,2)"/>
-			</xsl:apply-templates>
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:value-of select="substring($chars,1,1)"/>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-
-<!--  need to make sure this handles <meta> correctly -->
-
-<xsl:template match="/SystemDefinition" mode="merge-models">
-	<xsl:param name="other"/>	<!-- the downstream SystemDefinition this is merged with -->
-	<xsl:param name="up" select="systemModel"/>	<!-- the element containing the origin @name used for any component from "this" model. -->
-	<xsl:param name="down" select="$other/systemModel"/> <!-- the element containing origin @name used for any component from $other model. -->
-	
-	<!-- do some testing -->
- 	<xsl:if test="$other[starts-with(@schema,'2.') or starts-with(@schema,'1.')]">
-		<xsl:message terminate="yes">ERROR: Syntax <xsl:value-of select="$other/@schema"/> not supported</xsl:message>
-	</xsl:if>
-	<xsl:if test="not($other/systemModel)">
-		<xsl:message terminate="yes">ERROR: Can only merge stand-alone system models</xsl:message>
-	</xsl:if>
-	 
-	<xsl:copy>
-		<xsl:copy-of  select="@*"/> <!--  use attributes from origin model -->
-		<xsl:variable name="namespaces">
-			<xsl:copy> <!-- needs <copy> so the processor doesn't lose the namespaces -->
-				<!--copy namespaces as needed -->
-				
-				<xsl:copy-of select="namespace::*[name()!='xml']"/> <!-- all upstream namespaces -->
-
-				<xsl:variable name="cur" select="."/>
-				<xsl:for-each select="$other/namespace::*"> <!-- all namespaces in downstream not already in upstream -->
-					<xsl:if test="not((. = $cur/@id-namespace) or (not($cur/@id-namespace) and .= $defaultnamespace) or  $cur/namespace::*[.=current()])">
-							<!-- namespace in downstream not in upstream doc -->
-							<xsl:variable name="newprefix">
-								 <!-- test to see if the ns prefix already exists -->
-								<xsl:apply-templates select="$cur" mode="ns-prefix">
-									<xsl:with-param name="ns" select="."/>
-									<xsl:with-param name="pre" select="name()"/>
-								</xsl:apply-templates>
-							</xsl:variable>
-							<xsl:copy/>
-					</xsl:if>   
-				</xsl:for-each>
-				
-					<xsl:if test="not(($other/@id-namespace = @id-namespace) or (not($other/@id-namespace) and not(@id-namespace)) or (not(@id-namespace) and $other/@id-namespace = $defaultnamespace) or namespace::*[.=$other/@id-namespace])">  
-						<!-- default namespace in downstream not in upstream doc -->
-						<!-- need to make created ns a bit more intelligent -->
-						<xsl:attribute name="bar" namespace="{$other/@id-namespace}">
-							<xsl:value-of select="$other/@id-namespace"/>
-						</xsl:attribute>
-				</xsl:if>
-			</xsl:copy>
-		</xsl:variable>
-
-		
-		<!-- copy the namespaces to currently open element (the root one) -->
-		<xsl:copy-of select="namespace::*"/>
-		<xsl:for-each select="$other/namespace::*[.!=current()/namespace::*]"><xsl:copy/></xsl:for-each>
-		<xsl:for-each select="exslt:node-set($namespaces)/*/namespace::*"><xsl:copy/></xsl:for-each>
-	<!-- translate all IDs in downstream doc to use namespaces from upstream doc  
-		This is so much easier than having to propigate this info around while creating the doc-->
-	<xsl:variable name="otherdoc">
-		<xsl:apply-templates mode="translate-namespaces" select="$other">
-			<xsl:with-param name="nsdoc" select="exslt:node-set($namespaces)/* | ."/>
-		</xsl:apply-templates>
-	</xsl:variable>
-		<xsl:apply-templates mode="merge-models">
-			<xsl:with-param name="other" select="exslt:node-set($otherdoc)/*"/>
-			<xsl:with-param name="up" select="$up"/>
-			<xsl:with-param name="down" select="$down"/>
-		</xsl:apply-templates>
-	
-	</xsl:copy>
-</xsl:template>
-
-<xsl:template match="systemModel" mode="merge-models">
-	<xsl:param name="other"/>	<!-- the parent of the downstream systemModel this is merged with -->
-	<xsl:param name="up"/>
-	<xsl:param name="down"/>
-	<xsl:copy><xsl:copy-of  select="@*"/>
-		<!--  copy metas and comments in between meta. Do not try to merge metadata between models -->
-			<xsl:copy-of select="meta | $other/systemModel/meta | comment()[following-sibling::meta]"/>	
-		<xsl:apply-templates mode="merge-models">
-			<xsl:with-param name="other" select="$other/systemModel"/>
-			<xsl:with-param name="up" select="$up"/>
-			<xsl:with-param name="down" select="$down"/>
-		</xsl:apply-templates>
-	</xsl:copy>
-</xsl:template>
-
-<xsl:template match="@*|*|comment()" mode="merge-models"><xsl:copy-of select="."/></xsl:template>
-
-
-<xsl:template match="meta|comment()[following-sibling::meta]" mode="merge-models"/>
-	<!-- copy elesewhere, not here so that metas always appear first-->
-
-
-
-<!-- merge levels attribute via std rules -->
-<xsl:template match="layer/@levels|package/@levels" mode="merge-models">
-	<xsl:param name="other"/><!-- the element contains the other @levels -->
-	<xsl:choose>
-		<!--  if they are the same, or not specified in the other,  just copy -->
-		<xsl:when test=".=$other/@levels or not($other/@levels)"><xsl:copy-of select="."/></xsl:when>
-		<xsl:when test="contains(concat(' ',normalize-space(.),' '),concat(' ',normalize-space($other/@levels),' '))">
-			<!--upstream completely contains downstream, just copy --> 
-			<xsl:copy-of select="."/>
-		</xsl:when>
-		<xsl:when test="contains(concat(' ',normalize-space($other/@levels),' '),concat(' ',normalize-space(.),' '))">
-			<!--  If this is contained is other, then use other-->
-			<xsl:copy-of select="$other/@levels"/>
-		</xsl:when>
-		<xsl:when test="contains(concat(' ',normalize-space($other/@levels),' '),' - ')">
-			<!-- if other uses + syntax, then pre/append -->
-			<xsl:variable name="lev">
-				<xsl:value-of select="substring-before(concat(' ',normalize-space($other/@levels),' '),' - ')"/>
-				<xsl:value-of select="concat(' ',.,' ')"/>
-				<xsl:value-of select="substring-after(concat(' ',normalize-space($other/@levels),' '),' - ')"/>
-			</xsl:variable>
-			<xsl:attribute name="levels"><xsl:value-of select="normalize-space($lev)"/></xsl:attribute>
-		</xsl:when>
-		<xsl:otherwise> <!--  if they differ, use the origin's levels -->
-			<xsl:message>Note: levels differ "<xsl:value-of select="."/>" vs "<xsl:value-of select="$other/@levels"/>"</xsl:message>
-			<xsl:copy-of select="."/>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-<xsl:template name="copy-sorted-content">
-	<xsl:param name="base"/>
-	<xsl:param name="to-sort"/>
-	<xsl:param name="start"/>
-	<xsl:param name="end"/>
-	<xsl:param name="down"/>
-	<xsl:param name="remainder" select="/.."/>
-
-	<xsl:choose>
-		<xsl:when test="not($to-sort)"/>  <!-- nothing left to copy. stop -->
-		<xsl:when test="not($base)"/>  <!-- reached end. stop -->
-		<xsl:when test="$base[1]/@id=$end/following-sibling::*[1]/@id"/> <!-- passed $end. Stop -->
-		<xsl:when test="$base[1]/@id = $to-sort[1]/@id">  <!-- both lists start with same item -->
-			<xsl:if test="$base[1]/@id!=$end/@id"> <!-- not at end, so keep going -->
-				<xsl:call-template name="copy-sorted-content">
-					<xsl:with-param name="base" select="$base[position() != 1]"/>
-					<xsl:with-param name="to-sort" select="$to-sort[position() != 1]"/>
-					<xsl:with-param name="remainder" select="$remainder"/>
-					<xsl:with-param name="start" select="$start"/>
-					<xsl:with-param name="end" select="$end"/>
-					<xsl:with-param name="down" select="$down"/>
-				</xsl:call-template>		
-			</xsl:if>
-		</xsl:when>	
-		<xsl:when test="$remainder[@id = $base[1]/@id]"> <!-- left over item is in $base -->
-			<xsl:call-template name="copy-sorted-content">
-				<xsl:with-param name="base" select="$base[position() != 1]"/>
-				<xsl:with-param name="to-sort" select="$to-sort"/>
-				<xsl:with-param name="remainder" select="$remainder[@id != $base[1]/@id]"/>
-				<xsl:with-param name="start" select="$start"/>
-				<xsl:with-param name="end" select="$end"/>
-				<xsl:with-param name="down" select="$down"/>
-			</xsl:call-template>		
-		</xsl:when>
-		<xsl:when test="not($base[@id = $to-sort[1]/@id])"> <!-- in to-sort, but not base -->		
-			<xsl:if test="$base[1]/@id=$end/@id  and not($base[@id=$to-sort[1]/@before])">
-			 	<!-- if at end, then this needs to be copied
-					don't copy if the before ID is found in $base	-->
-				<xsl:apply-templates mode="merge-copy-of" select="$to-sort[1]">
-					<xsl:with-param name="origin" select="$down"/>
-					<xsl:with-param name="root" select="$end/ancestor::systemModel"/>
-				</xsl:apply-templates>
-			</xsl:if>			
-		<xsl:call-template name="copy-sorted-content">
-			<xsl:with-param name="base" select="$base"/>
-			<xsl:with-param name="to-sort" select="$to-sort[position() != 1]"/>
-			<xsl:with-param name="remainder" select="$remainder"/>
-			<xsl:with-param name="start" select="$start"/>
-			<xsl:with-param name="end" select="$end"/>
-			<xsl:with-param name="down" select="$down"/>
-		</xsl:call-template>		
-		</xsl:when>	
-		<xsl:when test="not($to-sort[@id = $base[1]/@id])"> <!-- in base, but not to-sort -->		
-		<xsl:call-template name="copy-sorted-content">
-			<xsl:with-param name="base" select="$base[position() != 1]"/>
-			<xsl:with-param name="to-sort" select="$to-sort"/>
-			<xsl:with-param name="remainder" select="$remainder"/>
-			<xsl:with-param name="start" select="$start"/>
-			<xsl:with-param name="end" select="$end"/>
-			<xsl:with-param name="down" select="$down"/>
-		</xsl:call-template>		
-		</xsl:when>	
-		<xsl:when test="$base[@id = $to-sort[1]/@id]"> <!-- is in base, but not 1st one-->
-			<xsl:call-template name="copy-sorted-content">
-				<xsl:with-param name="base" select="$base"/>
-				<xsl:with-param name="to-sort" select="$to-sort[position() != 1] "/>
-				<xsl:with-param name="remainder" select="$remainder | $to-sort[1]"/>
-				<xsl:with-param name="start" select="$start"/>
-				<xsl:with-param name="end" select="$end"/>
-				<xsl:with-param name="down" select="$down"/>
-			</xsl:call-template>
-		</xsl:when>	
-	</xsl:choose>
-</xsl:template>
-
-<xsl:template match="layer | package | collection | component" mode="merge-models">
-	<xsl:param name="other"/>	<!-- the downstream item of the parent's rank that contains a potential items this is merged with -->
-	<xsl:param name="up"/>
-	<xsl:param name="down"/>
-	<xsl:variable name="this" select="."/>	<!-- current item -->
-	
-	<!-- match = this item in the downstream model -->	
-	<xsl:variable name="match" select="$other/*[@id=current()/@id]"/>
-	
-	<!-- prev = the previous item before the current one (no metas, only named items)-->
-	<xsl:variable name="prev" select="preceding-sibling::*[@id][1]"/> 
-
-	<!-- copy all items between this and prev  that are solely in the downstream model -->	 		
-
-	<xsl:choose>
-		<xsl:when test="$match and (not($prev) or $other/*[@id= $prev/@id] )">
-			<xsl:call-template name="copy-sorted-content">
-				<xsl:with-param name="base" select="../*[@id]"/>
-				<xsl:with-param name="to-sort" select="$other/*[@id]"/>
-				<xsl:with-param name="start" select="$prev"/>
-				<xsl:with-param name="end" select="."/>
-				<xsl:with-param name="down" select="$down"/>
-			</xsl:call-template>
-		</xsl:when>
-	<xsl:when test="not($match/preceding-sibling::*[@id=$this/../*/@id]) and $other/*[@id= current()/@id]/preceding-sibling::*[@id and not(@before)]">
-		<!-- if this is the first item in other that's also in this, then put all new items from other here -->
-		<xsl:apply-templates mode="merge-copy-of" select="$match/preceding-sibling::*[@id and not(@before)]">
-			<xsl:with-param name="origin" select="$down"/>
-			<xsl:with-param name="root" select="$this/ancestor::systemModel"/>	
-		</xsl:apply-templates>
-	</xsl:when>
-	</xsl:choose>
-
- 	<!-- just copy anything identified as being before this, assume they're all ok -->
-	<xsl:apply-templates mode="merge-copy-of" select="$other/*[@before=current()/@id]">
-		<xsl:with-param name="remove-before" select="1"/>
-		<xsl:with-param name="origin" select="$down"/>
-		<xsl:with-param name="root" select="$this/ancestor::systemModel"/>	
-	</xsl:apply-templates>
-
-	
-	<xsl:copy>
-		<xsl:apply-templates select="@*" mode="merge-models"> <!-- copy upstream attributes -->
-			<xsl:with-param name="other" select="$match"/>
-		</xsl:apply-templates>
-		
-		<xsl:if test="self::component and not(@origin-model) and $up/@name">
-			<!-- insert origin-model and optional root for components only -->
-			<xsl:attribute name="origin-model">
-				<xsl:value-of select="$up/@name"/>
-			</xsl:attribute>
-			<xsl:if test="not(@root)">
-				<xsl:copy-of select="$up/@root"/>
-			</xsl:if>
-		</xsl:if>
-		
-		<xsl:for-each select="$match/@*">  <!-- copy downstream attributes, only if not set on upstream -->
-			<xsl:if test="not($this/@*[name()=name(current())])"><xsl:copy-of select="."/></xsl:if>
-		</xsl:for-each>
-		
-		<xsl:choose>
-			<xsl:when test="self::component">
-				<!-- copy all units, metas and comments from this
-					copy all metas in the merged component
-					copy any new comments in the merged component (not duplicates)
-					if there are no units in the this, copy all units in the merged component
-					if there are units in this, copy only the versioned units in the merged component (only those versions not already specified) -->
-				<xsl:copy-of select="*|comment() | $match/meta |$match/unit[not($this/unit)] | $match/unit[$this/unit and @version[.!=$this/unit/@version]] | $match/comment()[.!=$this/comment()]"/>				
-			</xsl:when>
-			<xsl:otherwise>
-
-				<!--  copy metas and comments in between meta. Do not try to merge metadata between models -->
-				<xsl:copy-of select="meta | $match/meta | comment()[following-sibling::meta]"/>
-				
-				<xsl:apply-templates mode="merge-models">
-					<xsl:with-param name="other" select="$match"/>
-					<xsl:with-param name="up" select="$up"/>
-					<xsl:with-param name="down" select="$down"/>
-				</xsl:apply-templates>
-				<!--  don't copy if explicitly or implicitly placed already-->
-				<xsl:for-each select="$match/*[not(@before) and not(following-sibling::*[@id=$this/*/@id])]">
-					<xsl:if test="not($this/*[@id=current()/@id])">
-						<xsl:apply-templates mode="merge-copy-of" select=".">
-							<xsl:with-param name="origin" select="$down"/>
-							<xsl:with-param name="root" select="$this/ancestor::systemModel"/>			
-						</xsl:apply-templates>
-					</xsl:if>
-				</xsl:for-each>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:copy>
-	
-	<xsl:if test="self::layer and not(following-sibling::layer)">
-		<!-- for the last layer, tack on any remaining layers -->
-		<xsl:apply-templates mode="merge-copy-of" select="$other/layer[not(@before) and not(following-sibling::*[@id=$this/../layer/@id]) and not(@id=$this/../layer/@id)]">
-			<xsl:with-param name="origin" select="$down"/>
-			<xsl:with-param name="root" select="$this/ancestor::systemModel"/>			
-		</xsl:apply-templates>		
-	</xsl:if>
-</xsl:template>
-
-
-
-<xsl:template match="*" mode="merge-copy-of">
-	<xsl:param name="remove-before" select="0"/> <!-- set to true if any before attribute is to be removed -->
-	<xsl:param name="origin"/>	<!--the element containing the @name to use the origin-model attribute  -->
-	<xsl:param name="root"/> 	<!--the systemModel element in the upstream doc  -->
-
-	<xsl:choose>
-		<!-- this might slow things down, consider making optional -->
-		<xsl:when test="not(self::layer) and count($root/descendant::*[name()=name(current()/..) and @id!=current()/../@id]/*[@id=current()/@id])">
-			<xsl:message>Warning: <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" moved in downstream model. Ignoring moved <xsl:value-of select="name()"/>
-				<xsl:text>&#xa;</xsl:text>
-			</xsl:message>
-		</xsl:when>
-		<xsl:otherwise>
-			<!-- save all content in a variable to test to see if it's got any problems (ie been removed due to errors)-->
-			<xsl:variable name="content">
-				<xsl:apply-templates select="*|comment()" mode="merge-copy-of">
-					<xsl:with-param name="origin" select="$origin"/>
-					<xsl:with-param name="root" select="$root"/>
-				</xsl:apply-templates>
-			</xsl:variable>
-			<xsl:choose>
-				<!-- if all elements in this have been deleted, throw out this element -->
-				<xsl:when test="not(exslt:node-set($content)/*) and *">
-					<xsl:message>Warning: All content in downstream <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" is invalid. Ignoring <xsl:value-of select="name()"/>
-						<xsl:text>&#xa;</xsl:text>
-					</xsl:message>
-				</xsl:when>
-				<xsl:otherwise>
-					<xsl:copy>
-						<xsl:choose>
-							<xsl:when test="$remove-before">
-								<xsl:copy-of select="@*[name()!='before']"/>
-							</xsl:when>
-							<xsl:otherwise><xsl:copy-of select="@*"/></xsl:otherwise>
-						</xsl:choose>
-						<xsl:copy-of select="exslt:node-set($content)"/>
-					</xsl:copy>
-				</xsl:otherwise>
-			</xsl:choose>					
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-
-<xsl:template match="comment()|@*" mode="merge-copy-of">
-	<xsl:copy-of select="."/>
-</xsl:template>
-
-<xsl:template match="component" mode="merge-copy-of">
-	<xsl:param name="remove-before" select="0"/> <!-- set to true if any before attribute is to be removed -->
-	<xsl:param name="origin"/>	<!--the element containing the @name to use the origin-model attribute  -->
-	<xsl:param name="root"/> 	<!--the systemModel element in the upstream doc  -->
-	
-	<xsl:choose>
-		<!-- this might slow things down, consider making optional -->
-		<xsl:when test="$root/descendant::collection[@id!=current()/../@id]/component[@id=current()/@id]">
-			<xsl:message>Warning: <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" moved in downstream model. Ignoring moved <xsl:value-of select="name()"/>
-				<xsl:text>&#xa;</xsl:text>
-			</xsl:message>
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:copy>
-				<xsl:choose>
-					<xsl:when test="$remove-before">
-						<xsl:copy-of select="@*[name()!='before']"/>
-					</xsl:when>
-					<xsl:otherwise><xsl:copy-of select="@*"/></xsl:otherwise>
-				</xsl:choose>
-				<xsl:if test="not(@origin-model) and $origin/@name">
-					<xsl:attribute name="origin-model">
-						<xsl:value-of select="$origin/@name"/>
-					</xsl:attribute>
-					<xsl:if test="not(@root)">
-						<xsl:copy-of select="$origin/@root"/>
-					</xsl:if>
-				</xsl:if>
-				<xsl:copy-of select="*|comment()"/>
-			</xsl:copy>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/mergesysdef.bat	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,21 @@
+@rem Copyright (c) 2010 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 .%1==. goto use
+@ java -jar %~dp0xalanj\xalan.jar -xsl %~dpn0.xsl %*  -XSLTC
+@goto end
+:use
+@ java -jar %~dp0xalanj\xalan.jar -in %~dpn0.xsl -xsl %~dp0lib\usage.xsl -param usage "%~n0"
+:end
--- a/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/mergesysdef.xsl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/mergesysdef.xsl	Fri Aug 13 14:59:05 2010 +0300
@@ -1,8 +1,8 @@
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common">
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common" exclude-result-prefixes="exslt">
 <!--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 "Eclipse Public License v1.0"
+	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".
 
@@ -13,19 +13,33 @@
 	Merge two 3.x syntax system definitions
 -->
 
+<!--Description:This merges two 3.x syntax system definitions.
+It can process two standalone sysdefs or two sysdef fragments which describe
+the same system model item.
+If the sysdefs are not the same schema, the output will use the highest schema
+value of the two.
+-->
+<!--Input:<sysdef> - (required) The system definition XML file to process in the 3.0 format, and can be a fragment or stand-alone.
+	If a fragment, this must be the same rank as the Downstream sysdef-->
+<!--Output:<sysdef> - (optional) The system definition XML file to save the output as. If not present it will write to stdout.-->
+
 	<xsl:output method="xml" indent="yes"/>
-	<xsl:param name="Downstream">mcl/System_Definition_Template.xml</xsl:param>
+	<xsl:param name="Downstream">mcl/System_Definition_Template.xml</xsl:param> <!-- <sysdef> - (required) The path to the downstream systef relative to the upstream one (ie the -in sysdef). -->
 	<xsl:key name="origin" match="component" use="@origin-model"/>
 
-<!-- only supports 3.x syntax and only operates on stand-alone models -->
-
 <xsl:variable name="downstream" select="document($Downstream,.)/SystemDefinition"/>
 <xsl:param name="upname">
 	<xsl:choose>
-		<xsl:when test="$downstream[starts-with(@schema,'2.') or starts-with(@schema,'1.')  or not(systemModel)]">
+		<xsl:when test="$downstream[starts-with(@schema,'2.') or starts-with(@schema,'1.')]">
 			<xsl:message terminate="yes">Syntax <xsl:value-of select="@schema"/> not supported</xsl:message>
 		</xsl:when>
-		<xsl:when test="/SystemDefinition/systemModel/@name=$downstream/systemModel/@name">
+		<xsl:when test="name($downstream/*)!=name(/SystemDefinition/*)">
+			<xsl:message terminate="yes">Can only merge fragments of the same rank</xsl:message>
+		</xsl:when>
+<!--		<xsl:when test="$downstream[not(systemModel)]">
+			<xsl:message terminate="yes">Needs to be a standalone system definition</xsl:message>
+		</xsl:when>-->
+		<xsl:when test="/SystemDefinition/systemModel/@name=$downstream/systemModel/@name or not(/SystemDefinition/systemModel/@name)">
 			<xsl:apply-templates mode="origin-term" select="/*">
 				<xsl:with-param name="root">Upstream</xsl:with-param>
 			</xsl:apply-templates>
@@ -33,17 +47,22 @@
 		<xsl:otherwise><xsl:value-of select="/SystemDefinition/systemModel/@name"/></xsl:otherwise>
 	</xsl:choose>
 </xsl:param>
+<!-- [name] - (optional) The name used in the origin-model attribute of any component that comes from the upstream sysdef. Defaults to the name attribute on the systemModel element, or "Upstream"-->
 
 <xsl:param name="downname">
 	<xsl:choose>
-		<xsl:when test="/SystemDefinition/systemModel/@name=$downstream/systemModel/@name">
+		<xsl:when test="/SystemDefinition/systemModel/@name=$downstream/systemModel/@name or not($downstream/systemModel/@name)">
 			<xsl:apply-templates mode="origin-term" select="$downstream">	
 				<xsl:with-param name="root">Downstream</xsl:with-param>
 			</xsl:apply-templates>
 			</xsl:when>
+		<xsl:when test="name($downstream/*)!=name(/SystemDefinition/*)">
+			<xsl:message terminate="yes">Can only merge fragments of the same rank</xsl:message>
+		</xsl:when>
 		<xsl:otherwise><xsl:value-of select="$downstream/systemModel/@name"/></xsl:otherwise>
 	</xsl:choose>
 </xsl:param>
+<!-- [name] - (optional) The name used in the origin-model attribute of any component that comes from the downstream sysdef. Defaults to the name attribute on the systemModel element, or "Downstream"-->
 
 <xsl:template mode="origin-term" match="*">
 	<xsl:param name="root"/>
@@ -68,7 +87,21 @@
 </xsl:template>
 
 
-<!--  this merge only two files according to the 3.0.0 rules. Old syntax not supported. Must be converetd before calling -->
+<!-- choose the greater of the two versions -->
+<xsl:template name="compare-versions"><xsl:param name="v1"/><xsl:param name="v2"/>
+			<xsl:choose>
+				<xsl:when test="$v1=$v2"><xsl:value-of select="$v1"/></xsl:when>
+				<xsl:when test="substring-before($v1,'.') &gt; substring-before($v2,'.')"><xsl:value-of select="$v1"/></xsl:when>
+				<xsl:when test="substring-before($v1,'.') &lt; substring-before($v2,'.')"><xsl:value-of select="$v2"/></xsl:when>
+				<xsl:when test="substring-before(substring-after($v1,'.'),'.') &gt; substring-before(substring-after($v2,'.'),'.')"><xsl:value-of select="$v1"/></xsl:when>
+				<xsl:when test="substring-before(substring-after($v1,'.'),'.') &lt; substring-before(substring-after($v2,'.'),'.')"><xsl:value-of select="$v2"/></xsl:when>
+				<xsl:when test="substring-after(substring-after($v1,'.'),'.') &gt; substring-after(substring-after($v2,'.'),'.')"><xsl:value-of select="$v1"/></xsl:when>
+				<xsl:when test="substring-after(substring-after($v1,'.'),'.') &lt; substring-after(substring-after($v2,'.'),'.')"><xsl:value-of select="$v2"/></xsl:when>
+				<xsl:otherwise><xsl:value-of select="$v1"/></xsl:otherwise>
+			</xsl:choose>
+</xsl:template>
+
+<!--  this merge only two files according to the 3.0.x rules. Old syntax not supported. Must be converetd before calling -->
 
 
 
@@ -77,7 +110,7 @@
 		<sysdef name="{$upname}"/>
 	</xsl:variable>
 	<xsl:variable name="downmodel">
-		<sysdef name="{$downname}"/>
+		<sysdef name="{$downname}" pathto="{$Downstream}"/>
 	</xsl:variable>
 	
 	<xsl:choose>
@@ -96,5 +129,14 @@
 	</xsl:choose>
 </xsl:template>
 
-<xsl:include href="mergesysdef-module.xsl"/>
+<xsl:include href="lib/path-module.xsl"/>
+<xsl:include href="lib/mergesysdef-module.xsl"/>
+
+<xsl:template match="@*[local-name()='proFile' or local-name()='qmakeArgs'  or namespace-uri()='qt']" mode="merge-copy-of">
+	<!-- this fixes a xalan-j issue where it changes the namespace in the merged model to just "qt"-->
+	<xsl:attribute name="{local-name()}" namespace="http://www.nokia.com/qt">
+		<xsl:value-of select="."/>
+	</xsl:attribute>
+</xsl:template>
+
 </xsl:stylesheet>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/sysdefdowngrade.bat	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,21 @@
+@rem Copyright (c) 2010 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 .%1==. goto use
+@ java -jar %~dp0xalanj\xalan.jar -xsl %~dpn0.xsl %*  -XSLTC
+@goto end
+:use
+@ java -jar %~dp0xalanj\xalan.jar -in %~dpn0.xsl -xsl %~dp0lib\usage.xsl -param usage "%~n0"
+:end
--- a/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/sysdefdowngrade.xsl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/sysdefdowngrade.xsl	Fri Aug 13 14:59:05 2010 +0300
@@ -3,7 +3,7 @@
 <!--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 "Eclipse Public License v1.0"
+	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".
 
@@ -14,11 +14,19 @@
 	Downgrade a 3.x system definition into the 2.0.1 syntax
 -->
 	<xsl:output method="xml" indent="yes"/>
-	
+
+
+<!--Description:Downgrades a 3.x system definition into the 2.0.1 syntax
+ -->
+
+<!--Input:<sysdef> - (required) The system definition XML file to process, in the 3.0 format, and can be a pkgdef or stand-alone sysdef.-->
+<!--Output:<sysdef> - (optional) The system definition XML file to save the output as. If not present it will write to stdout.-->
+
 	<xsl:param name="Path">os/deviceplatformrelease/foundation_system/system_model</xsl:param>
-	<!-- $Path is the location of the root system definition XML file. Must not end in /
-		This is used to compute the absolute paths the 2.0 syntax needs-->
-	<xsl:param name="Root"/> <!-- space separated list of root variables in the form "VAR1=value1 VAR=value2" --> 
+	<!-- <oldpath> - The directory containing the root system definition XML file in the 2.0 sysdef style. This must not end in /
+		This is used to compute the absolute paths the 2.0 syntax needs. -->
+	<xsl:param name="Root"/> <!--<list> - (optional) A space separated list of root variables in the form "VAR1=value1 VAR=value2" --> 
+	<xsl:param name="Strict" select="0"/> <!--1 - (optional) If present, namespaced extensions are stripped out --> 
 	<xsl:variable name="root" select="concat(' ',$Root,' ')"/> <!-- sort of hack to allow absolute paths in downgraded output -->
 	<xsl:variable name="srcroot" select="substring-before(substring-after($root,' SRCROOT='),' ')"/> <!-- the default path prefix -->
 
@@ -26,10 +34,10 @@
 	<xsl:message terminate="yes">ERROR: Cannot process this document</xsl:message>
 </xsl:template>
 
-<!-- can only handle 3.0.0 to 2.0.1 transforms
+<!-- can only handle 3.0.x to 2.0.1 transforms
 	Assumes only packages are using href
  -->
-<xsl:template match="/SystemDefinition[@schema='3.0.0']"> 
+<xsl:template match="/SystemDefinition[starts-with(@schema,'3.0.')]"> 
 	<!-- process root system definition or package definition-->
 	<xsl:call-template name="DTD"/> <!-- insert 2.0.01 DTD -->
   <SystemDefinition name="{*/@name}" schema="2.0.1">
@@ -37,7 +45,7 @@
   </SystemDefinition>
 </xsl:template>
 
-<xsl:template match="/SystemDefinition[@schema='3.0.0' and systemModel]"> 
+<xsl:template match="/SystemDefinition[starts-with(@schema,'3.0.') and systemModel]"> 
 	<xsl:call-template name="DTD"/> <!-- insert 2.0.01 DTD -->
   <SystemDefinition name="{systemModel/@name}" schema="2.0.1">
   	<xsl:apply-templates select="*|comment()"/>
@@ -106,6 +114,7 @@
 		<xsl:choose>
 			<xsl:when test="@href">
 				<xsl:variable name="this" select="."/>
+				<xsl:variable name="prefixmap" select="ancestor::SystemDefinition/*/meta[@rel='link-mapping']/map-prefix[starts-with(current()/@href,@link)]"/>
 				<xsl:for-each select="document(@href,.)/SystemDefinition/*">
 					<xsl:variable name="my-id"><xsl:apply-templates mode="normalize-id" select="@id"/></xsl:variable>
 					<xsl:variable name="other-id"><xsl:apply-templates mode="normalize-id" select="$this/@id"/></xsl:variable>
@@ -124,9 +133,31 @@
 					</xsl:for-each>
 					<xsl:apply-templates select="*|comment()">
 	  					<xsl:with-param name="path">
-	  						<xsl:call-template name="normpath">
-	  							<xsl:with-param name="path" select="concat($path,'/',$this/@href)"/>
-	  						</xsl:call-template>
+							<xsl:choose>
+								<xsl:when test="$prefixmap">
+	  								<xsl:call-template name="normpath">
+	  									<xsl:with-param name="path">
+										<xsl:apply-templates select="$prefixmap/@to"/>
+										<xsl:value-of select="substring-after($this/@href,$prefixmap/@link)"/>
+									 </xsl:with-param>
+	  								</xsl:call-template>
+								</xsl:when>
+								<xsl:when test="starts-with($this/@href,'/')">  <!-- absolute path -->
+	  								<xsl:call-template name="normpath">
+	  									<xsl:with-param name="path" select="$this/@href"/>
+	  								</xsl:call-template>
+								</xsl:when>
+								<xsl:when test="contains($this/@href,'://')">  <!-- generic URI -->
+	  								<xsl:call-template name="normpath">
+	  									<xsl:with-param name="path" select="substring-after($this/@href,'://')"/>
+	  								</xsl:call-template>
+								</xsl:when>
+								<xsl:otherwise>
+	  								<xsl:call-template name="normpath">
+	  									<xsl:with-param name="path" select="concat($path,'/',$this/@href)"/>
+	  								</xsl:call-template>
+								</xsl:otherwise>
+							</xsl:choose>
 	  					</xsl:with-param> 
 	  				</xsl:apply-templates>
 				</xsl:for-each>
@@ -194,6 +225,11 @@
 			<xsl:with-param name="path" select="$path"/> 
 		</xsl:apply-templates>
 		<xsl:copy-of select="@filter|@root[not(contains($root,concat(' ',.,'=')))]|@version|@prebuilt|@priority"/>
+		<xsl:for-each select="@*[contains(name(),':') and not($Strict)]">
+			<xsl:attribute name="{local-name()}">
+				<xsl:value-of select="."/>
+			</xsl:attribute>
+		</xsl:for-each>
 	</unit>
 </xsl:template>
 
@@ -211,7 +247,11 @@
 		<xsl:choose>
 			<xsl:when test="../@root">
 				<xsl:variable name="pre" select="substring-before(substring-after($root,concat(' ',../@root,'=')),' ')"/>
-				<xsl:if test="$pre!=''"><xsl:value-of select="concat($pre,'/')"/></xsl:if>
+				<xsl:value-of select="$pre"/>
+				<xsl:if test="$pre!='' and $pre!='/'">/</xsl:if>
+			</xsl:when>
+			<xsl:when test="$srcroot='/'"> <!-- treat all paths as absolute -->
+				<xsl:value-of select="$srcroot"/>
 			</xsl:when>
 			<xsl:when test="$srcroot!=''">
 				<xsl:value-of select="concat($srcroot,'/')"/>
@@ -241,6 +281,15 @@
 	<xsl:copy-of select="info/@contract"/>
 </xsl:template>
 
+
+<xsl:template match="meta[@rel='link-mapping']/map-prefix/@to">
+	<xsl:choose>
+		<xsl:when test="starts-with(.,'/')"><xsl:value-of select="substring(.,2)"/></xsl:when> <!-- absolute paths in 3.0 are relative in 2.0 -->
+		<xsl:otherwise><xsl:value-of select="."/></xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+
 <xsl:template match="@id" mode="normalize-id">
 	<xsl:choose>
 		<xsl:when test="contains(@id,':')"><xsl:value-of select="substring-after(@id,':')"/></xsl:when>
--- a/buildframework/helium/sf/java/sysdef/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/ivy.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -29,7 +29,7 @@
   </info>
   <dependencies>
     <dependency name="helium-core" rev="latest.integration" conf="default" />
-    <dependency org="org.apache.xml" name="xalan" rev="latest.integration" conf="default" />
-    <dependency org="org.apache.xml" name="serializer" rev="latest.integration" conf="default" />
+    <dependency org="org.apache.xml" name="xalan" rev="2.7.0+" conf="default" />
+    <dependency org="org.apache.xml" name="serializer" rev="2.7.0+" conf="default" />
   </dependencies>
 </ivy-module>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/PackageDefinition.java	Fri Aug 13 14:59:05 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.sysdef;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * Basic package_definition file parser. It is meant to extract needed data for the root system
+ * definition file creation.
+ * 
+ */
+public class PackageDefinition {
+    public static final String DEFAULT_ID_NAMESPACE = "http://www.symbian.org/system-definition";
+
+    private String idNamespace;
+    private String id;
+    private Map<String, String> namespaces = new Hashtable<String, String>();
+
+    /**
+     * Construct a PackageDefinition object extracting data from the 
+     * file <code>file</code>.
+     *  
+     * @param file
+     * @throws PackageDefinitionParsingException
+     */
+    public PackageDefinition(File file) throws PackageDefinitionParsingException {
+        try {
+            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+            Document doc = builder.parse(file);
+            if (!doc.getDocumentElement().getNodeName().equals("SystemDefinition")) {
+                throw new PackageDefinitionParsingException("Invalid XML format for "
+                    + file.getAbsolutePath() + " root element must be SystemDefinition");
+            }
+            // Getting information from the SystemDefinition element
+            if (doc.getDocumentElement().hasAttribute("id-namespace")) {
+                idNamespace = doc.getDocumentElement().getAttribute("id-namespace");
+            } else {
+                idNamespace = DEFAULT_ID_NAMESPACE;
+            }
+            NamedNodeMap attrs = doc.getDocumentElement().getAttributes();
+            for (int i = 0; i < attrs.getLength(); i++) {
+                if (attrs.item(i).getNodeName().startsWith("xmlns:")) {
+                    namespaces.put(attrs.item(i).getNodeName(), attrs.item(i).getNodeValue());
+                }
+            }
+
+            // Getting information from the package element
+            NodeList nodes = doc.getDocumentElement().getChildNodes();
+            for (int i = 0; i < nodes.getLength(); i++) {
+                if (nodes.item(i).getNodeName().equals("package")) {
+                    if (nodes.item(i).getAttributes().getNamedItem("id") == null) {
+                        throw new PackageDefinitionParsingException("Invalid XML format for "
+                            + file.getAbsolutePath()
+                            + " the package element must have an id attribute.");
+                    }
+                    id = nodes.item(i).getAttributes().getNamedItem("id").getNodeValue();
+                }
+            }
+            if (id == null) {
+                throw new PackageDefinitionParsingException("Invalid XML format for "
+                    + file.getAbsolutePath() + " could not find any package definition.");
+            }
+        }
+        catch (ParserConfigurationException e) {
+            throw new PackageDefinitionParsingException("Error from the XML parser configuration: "
+                + e.getMessage(), e);
+        }
+        catch (SAXException e) {
+            throw new PackageDefinitionParsingException("Error parsing the file: " + file + ": "
+                + e.getMessage(), e);
+        }
+        catch (IOException e) {
+            throw new PackageDefinitionParsingException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * id-namespace of current package.
+     * @return always returns a string
+     */
+    public String getIdNamespace() {
+        return idNamespace;
+    }
+
+    /**
+     * Id of the package.
+     * @return
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * List of global namespaces.
+     * @return a map of namespaces <name, uri>
+     */
+    public Map<String, String> getNamespaces() {
+        return namespaces;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/PackageDefinitionParsingException.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* 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;
+
+/**
+ * Exception thown by the PackageMap class while
+ * parsing a file.
+ *
+ */
+public class PackageDefinitionParsingException extends Exception {
+
+    private static final long serialVersionUID = 6940770114328037199L;
+
+    /**
+     * Exception with error message.
+     * @param message the error message
+     */
+    public PackageDefinitionParsingException(String message) {
+        super(message);
+    }
+    
+    /**
+     * Exception with an error message and a root cause.
+     * @param message the error message
+     * @param cause the root cause
+     */
+    public PackageDefinitionParsingException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/PackageMap.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/PackageMap.java	Fri Aug 13 14:59:05 2010 +0300
@@ -51,13 +51,13 @@
             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");
+                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);
+                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);
+                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"));
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/antlib.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,13 +22,14 @@
 -->
 <antlib>
     <!-- Task definition -->
-    <taskdef name="joinSysdef" classname="com.nokia.helium.sysdef.ant.taskdefs.JoinTask"/>
-    <taskdef name="mergeSysdef" classname="com.nokia.helium.sysdef.ant.taskdefs.MergeTask"/>
-    <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"/>
+    <taskdef name="joinSysdef" classname="com.nokia.helium.sysdef.ant.taskdefs.JoinTask" />
+    <taskdef name="mergeSysdef" classname="com.nokia.helium.sysdef.ant.taskdefs.MergeTask" />
+    <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"/>
+    <typedef name="sysdefFilterSet" classname="com.nokia.helium.sysdef.ant.types.FilterSet" />
+    <typedef name="isVendorPackage" classname="com.nokia.helium.sysdef.ant.conditions.IsVendorPackage" />
 </antlib>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/conditions/IsVendorPackage.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,116 @@
+/*
+* 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.conditions;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.taskdefs.condition.Condition;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.resources.selectors.ResourceSelector;
+import org.apache.tools.ant.types.selectors.BaseExtendSelector;
+
+import com.nokia.helium.sysdef.PackageDefinition;
+import com.nokia.helium.sysdef.PackageDefinitionParsingException;
+
+/**
+ * Ant condition to test if a package_definition.xml is
+ * defining a vendor package. A package is considered as a vendor package
+ * when its id-namespace attribute has a different from the default one (please check the
+ * system definition documentation on the Symbian Foundation website for further detail).
+ *
+ * <pre>
+ *     &lt;condition property="name" value="true"&gt;
+ *         &lt;hlm:isVendorPackage file="${epocroot}/sf/app/package/package_definition.xml" /&gt;
+ *     &lt;/condition&gt;
+ * </pre>
+ * 
+ * This condition is also usable as a resource selector:
+ *
+ * <pre>
+ *     &lt;restrict&gt;
+ *         &lt;fileset dir=&quot;...&quot; includes=&quot;package_definition.xml&quot; /&gt;
+ *         &lt;hlm:isVendorPackage /&gt;
+ *     &lt;/restrict&gt;
+ * </pre>
+ * 
+ */
+public class IsVendorPackage extends BaseExtendSelector
+    implements Condition, ResourceSelector {
+
+    private File file;
+    
+    /**
+     * Detect is the package_definition.xml is from a vendor package.
+     * Vendor package have different id-namespace than the default
+     * one (<code>PackageDefinition.DEFAULT_ID_NAMESPACE</code>).
+     * 
+     * @param file
+     * @return true if it denotes a vendor package.
+     */
+    protected boolean isVendorPackage(File file) {
+        if ("package_definition.xml".equals(file.getName())) {
+            try {
+                PackageDefinition pkgDef = new PackageDefinition(file);
+                return !PackageDefinition.DEFAULT_ID_NAMESPACE.equals(pkgDef.getIdNamespace());
+            } catch (PackageDefinitionParsingException e) {
+                throw new BuildException("Error parsing " + file 
+                        + ": " + e.getMessage(), e);
+            }
+        }
+        return false;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean eval() {
+        if (file == null) {
+            throw new BuildException("'file' attribute is not defined.");
+        }
+        return isVendorPackage(file);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isSelected(File basedir, String filename, File file) {
+        return isVendorPackage(file);
+    }
+
+    /**
+     * The file to test when used as a condition.
+     * @param file
+     * @ant.required
+     */
+    public void setFile(File file) {
+        this.file = file;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isSelected(Resource resource) {
+        if (!resource.isFilesystemOnly()) {
+            throw new BuildException(this.getDataTypeName() + " only supports filesystem resources.");
+        }
+        return isVendorPackage(new File(resource.toString()));
+    }
+}
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/AbstractSydefTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/AbstractSydefTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -17,18 +17,18 @@
 package com.nokia.helium.sysdef.ant.taskdefs;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.FileNotFoundException;
 import java.util.Map;
 
 import javax.xml.transform.ErrorListener;
 import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
-import javax.xml.transform.TransformerConfigurationException;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
@@ -45,7 +45,8 @@
     private File srcFile;
     private File destFile;
     private File epocroot;
-    private boolean failOnError = true;
+    private boolean failOnError = true;  // Error should not fail by default.
+    private boolean failOnWarning; // Warning should not fail by default.
     
     /**
      * Get the source file.
@@ -117,7 +118,15 @@
     }
 
     /**
-     * Defines if the file should fail on error.
+     * Shall we fail the build on warning.
+     * @return is the task should fail on warning.
+     */
+    public boolean isFailOnWarning() {
+        return failOnWarning;
+    }
+
+    /**
+     * Defines if the task should fail on error.
      * @param failonerror
      * @ant.not-required Default is true.
      */
@@ -126,11 +135,20 @@
     }
 
     /**
+     * Defines if the task should fail on warning.
+     * @param failonerror
+     * @ant.not-required Default is true.
+     */
+    public void setFailOnWarning(boolean failOnWarning) {
+        this.failOnWarning = failOnWarning;
+    }
+
+    /**
      * This method should be defined by the implementing class
      * to define the location of the XSLT file.
      * @return the XSLT file location.
      */
-    abstract File getXsl();
+    protected abstract File getXsl();
     
     /**
      * Check if required attribute have been configured correctly.
@@ -267,7 +285,7 @@
      */
     @Override
     public void warning(TransformerException message) throws TransformerException {
-        if (this.isFailOnError()) {
+        if (this.isFailOnWarning()) {
             throw message;
         } else {
             log("WARNING: " + message.getMessageAndLocation(), Project.MSG_WARN);
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/CreatePackageMappingTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/CreatePackageMappingTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -22,18 +22,20 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
-import org.apache.tools.ant.types.DirSet;
+
 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.types.DirSet;
 import org.apache.tools.ant.types.Resource;
 import org.apache.tools.ant.types.ResourceCollection;
-import java.util.Hashtable;
-import org.apache.tools.ant.DirectoryScanner;
+
 import com.nokia.helium.sysdef.PackageMap;
 import com.nokia.helium.sysdef.PackageMapParsingException;
 
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/CreateRootSysdefTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/CreateRootSysdefTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -34,6 +34,8 @@
 import org.apache.tools.ant.types.Resource;
 import org.apache.tools.ant.types.ResourceCollection;
 
+import com.nokia.helium.sysdef.PackageDefinition;
+import com.nokia.helium.sysdef.PackageDefinitionParsingException;
 import com.nokia.helium.sysdef.PackageMap;
 import com.nokia.helium.sysdef.PackageMapParsingException;
 
@@ -50,9 +52,9 @@
  *
  * Example:
  * <pre>
- * &lt;hlm:createPackageMapping epocroot="E:\sdk" destFile="E:\sdk\sysdef_root.xml" &gt;
+ * &lt;hlm:createRootSysdef epocroot="E:\sdk" destFile="E:\sdk\sysdef_root.xml" &gt;
  *     &lt;fileset dir="E:\sdk" includes="root/&#42;&#42;/package_definition.xml"&gt;
- * &lt;/hlm:createPackageMapping&gt;
+ * &lt;/hlm:createRootSysdef&gt;
  * </pre>
  *
  * @ant.task name="createRootSysdef" category="Sysdef"
@@ -61,12 +63,13 @@
 
     private File destFile;
     private List<ResourceCollection> resourceCollections = new ArrayList<ResourceCollection>(); 
-    private Map<String, Map<String, List<String>>> roots = new HashMap<String, Map<String, List<String>>>();
+    private Map<String, Map<String, List<Map<String, Object>>>> roots = new HashMap<String, Map<String, List<Map<String, Object>>>>();
     private Map<String, List<String>> layers = new HashMap<String, List<String>>();
     private File epocroot;
     private boolean failOnError = true;
     private boolean checkPackageExists;
     private File template;
+    private String idNamespace;
 
     /**
      * {@inheritDoc}
@@ -101,14 +104,14 @@
                     if (pkgMapFile.exists()) {
                         log("Package map file: " + pkgMapFile);
                         if (!checkPackageExists) {
-                            addPackage(pkgMapFile, pkgDir.getName());
+                            addPackage(pkgDefFile, pkgMapFile, pkgDir.getName());
                         } 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());
+                                addPackage(pkgDefFile, pkgMapFile, pkgDir.getName());
                             } else {
                                 log("Could not find " + destPkg.getAbsolutePath() +
                                         " so entry is not added to the root system definition.", Project.MSG_ERR);
@@ -119,7 +122,9 @@
                         log("Package map file: " + pkgMapFile);
                         if (pkgMapFile.exists()) {
                             if (!checkPackageExists) {
-                                addPackage(pkgMapFile, pkgDir.getName());
+                                // slash must be use to generate correct path.
+                                addPackage(pkgDefFile, pkgMapFile, pkgMapFile.getParentFile().getName() + "/" +
+                                        pkgDir.getParentFile().getName() + "/" + pkgDir.getName());
                             } else {
                                 PackageMap pkgMap = new PackageMap(pkgMapFile);
                                 File destPkg = new File(epocroot, pkgMap.getRoot() + File.separator +
@@ -129,17 +134,17 @@
                                         File.separator +
                                         CreatePackageMappingTask.PACKAGE_DEFINITION_FILENAME);
                                 if (destPkg.exists()) {
-                                    addPackage(pkgMapFile, pkgDir.getParentFile().getName() +
-                                            File.separator + pkgDir.getName());
+                                    addPackage(destPkg, pkgMapFile, pkgMapFile.getParentFile().getName() + "/" +
+                                            pkgDir.getParentFile().getName() + "/" + 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);
+                            log("Could not find package_map.xml file for " + pkgDefFile.toString(), Project.MSG_ERR);
                             if (shouldFailOnError()) {
-                                throw new BuildException("Could not find:" + pkgMapFile.toString());
+                                throw new BuildException("Could not find package_map.xml file for " + pkgDefFile.toString());
                             }
                         }
                     }
@@ -150,6 +155,12 @@
                     if (shouldFailOnError()) {
                         throw new BuildException(e.getMessage(), e);
                     }
+                } catch (PackageDefinitionParsingException e) {
+                    log("Invalid " + CreatePackageMappingTask.PACKAGE_DEFINITION_FILENAME 
+                            + "(" + e.getMessage() + ")", Project.MSG_ERR);
+                    if (shouldFailOnError()) {
+                        throw new BuildException(e.getMessage(), e);
+                    }
                 }
                     
             }
@@ -157,19 +168,33 @@
         generateRootSysdef();
     }
 
-    private void addPackage(File pkgMapFile, String pkgPath) throws 
-        PackageMapParsingException {
+    private void addPackage(File pkgDefinition, File pkgMapFile, String pkgPath) throws
+        PackageMapParsingException, PackageDefinitionParsingException {
+        // Some quick validity checking. 
+        PackageDefinition pkg = new PackageDefinition(pkgDefinition);
+        if (idNamespace == null && (pkg.getIdNamespace() != null && pkg.getIdNamespace().length() > 0)) {
+            idNamespace = pkg.getIdNamespace();
+        } else if (idNamespace != null && !idNamespace.equals(pkg.getIdNamespace())) {
+            log("Warning: " + pkgDefinition.toString() +
+                    " namespace doesn't match the default one. (" 
+                    + idNamespace + " != " + pkg.getIdNamespace(), Project.MSG_WARN);
+        }
+            
+        // Adding the package in the structure.
         log("Adding: " + pkgMapFile, Project.MSG_DEBUG);
-        // Adding the package in the structure.
         PackageMap pkgMap = new PackageMap(pkgMapFile);
         if (!roots.containsKey(pkgMap.getRoot())) {
-            roots.put(pkgMap.getRoot(), new HashMap<String, List<String>>());
+            roots.put(pkgMap.getRoot(), new HashMap<String, List<Map<String, Object>>>());
         }
         if (!roots.get(pkgMap.getRoot()).containsKey(pkgMap.getLayer())) {
-            roots.get(pkgMap.getRoot()).put(pkgMap.getLayer(), new ArrayList<String>());
+            roots.get(pkgMap.getRoot()).put(pkgMap.getLayer(), new ArrayList<Map<String, Object>>());
             layers.put(pkgMap.getLayer(), new ArrayList<String>());
         }
-        roots.get(pkgMap.getRoot()).get(pkgMap.getLayer()).add(pkgPath);
+        Map<String, Object> data = new HashMap<String, Object>();
+        data.put("path", pkgPath);
+        data.put("id", pkg.getId());
+        data.put("namespaces", pkg.getNamespaces());
+        roots.get(pkgMap.getRoot()).get(pkgMap.getLayer()).add(data);
         layers.get(pkgMap.getLayer()).add(pkgPath);
     }
     
@@ -282,6 +307,10 @@
             data.put("roots", roots);
             // Content by layer
             data.put("layers", layers);
+            // id-namespace
+            if (idNamespace != null) {
+                data.put("idnamespace", idNamespace);
+            }
             // Environment location
             data.put("epocroot", getEpocroot().getAbsolutePath());
             // Relative path from destFile to epocroot.
@@ -313,10 +342,14 @@
      */
     protected String getRelativeDiff() {
         String rel = getEpocroot().toURI().relativize(getDestFile().getParentFile().toURI()).getPath();
-        String[] relArray = rel.split("/"); // This is an URI not a File.
-        rel = "";
-        for (String string : relArray) {
-            rel += ".." + File.separatorChar; 
+        if (rel.length() > 0) {
+            String[] relArray = rel.split("/"); // This is an URI not a File.
+            rel = ""; //"." + File.separatorChar;
+            for (@SuppressWarnings("unused") String string : relArray) {
+                rel += ".." + File.separatorChar; 
+            }
+        } else {
+            rel = "." + File.separatorChar;
         }
         return rel;
     }
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/DowngradeTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/DowngradeTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -34,10 +34,16 @@
  *   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>.
  *
+ * <br>
+ * This task relies on externals tools. Their location can be configured the following ways:
+ *  <li>by configuring the sysdef.tools.home property, fails if the location is incorrect.
+ *  <li>The parent folder of the joinsysdef tool from the PATH, fallback on SDK location.
+ *  <li>Default SDK location.
+ *
  *   @ant.task name="downgradeSysdef" category="Sysdef"
  */
 public class DowngradeTask extends AbstractSydefTask {
-    private static final String XSLT = "sf/os/buildtools/bldsystemtools/sysdeftools/sysdefdowngrade.xsl"; 
+    private static final String XSLT = "sysdefdowngrade.xsl"; 
 
     /**
      * {@inheritDoc}
@@ -54,6 +60,6 @@
      */
     @Override
     protected File getXsl() {
-        return new File(this.getEpocroot(), XSLT);
+        return new File(SysdefUtils.getSysdefHome(getProject(), this.getEpocroot()), XSLT);
     }
 }
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/FilterTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/FilterTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -19,9 +19,7 @@
 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;
@@ -48,27 +46,19 @@
  * 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>.
  *
+ * <br>
+ * This task relies on externals tools. Their location can be configured the following ways:
+ *  <li>by configuring the sysdef.tools.home property, fails if the location is incorrect.
+ *  <li>The parent folder of the joinsysdef tool from the PATH, fallback on SDK location.
+ *  <li>Default SDK location.
+ *
  * @ant.task name="filterSysdef" category="Sysdef"
  */
 public class FilterTask extends AbstractSydefTask {
-    private static final String XSLT = "sf/os/buildtools/bldsystemtools/sysdeftools/filtering.xsl";
+    private static final String XSLT = "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
      */
@@ -96,19 +86,26 @@
         log("Filtering " + this.getSrcFile());
         for (FilterSet filterSet : filterSets) {
             if (filterSet.isReference()) {
-                filterSet = (FilterSet)filterSet.getRefid().getReferencedObject();
+                try {
+                    filterSet = (FilterSet)filterSet.getRefid().getReferencedObject();
+                } catch (ClassCastException ex) {
+                    throw new BuildException("Object referenced by '" + filterSet.getRefid().getRefId() + "' is not a sysdefFilterSet.", ex);
+                }
             }
             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.");
-                    }
+                    
+                    // validating parameter first.
+                    filter.validate();
+                    
+                    // Then filter the file
                     dst = File.createTempFile("sysdef", ".xml", this.getEpocroot());
                     toDelete.add(dst);
-                    filter(src, dst, filter.getFilter(), filter.getType());
+                    filter.filter(this, src, dst);
+                    
                     // Dest is the input for next loop.
                     src = dst;
                 }
@@ -135,7 +132,7 @@
      * {@inheritDoc}
      */
     @Override
-    File getXsl() {
-        return new File(this.getEpocroot(), XSLT);
+    protected File getXsl() {
+        return new File(SysdefUtils.getSysdefHome(getProject(), this.getEpocroot()), XSLT);
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/JoinTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/JoinTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -36,16 +36,25 @@
  * 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>.
  *
+ * <br>
+ * This task relies on externals tools. Their location can be configured the following ways:
+ *  <li>by configuring the sysdef.tools.home property, fails if the location is incorrect.
+ *  <li>The parent folder of the joinsysdef tool from the PATH, fallback on SDK location.
+ *  <li>Default SDK location.
+ *
  * @ant.task name="joinSysdef" category="Sysdef"
  */
 
 public class JoinTask extends AbstractSydefTask {
-    private static final String XSLT = "sf/os/buildtools/bldsystemtools/sysdeftools/joinsysdef.xsl"; 
+    private static final String XSLT = "joinsysdef.xsl"; 
 
     /**
      * {@inheritDoc}
      */
     public void execute() {
+        // This task is configure to always fail on warnings,
+        // because it doesn't fails in case of missing link. 
+        this.setFailOnWarning(true);
         check();
         log("Joining " + this.getSrcFile()); 
         log("Creating " + this.getDestFile());
@@ -57,6 +66,6 @@
      */
     @Override
     protected File getXsl() {
-        return new File(this.getEpocroot(), XSLT);
+        return new File(SysdefUtils.getSysdefHome(getProject(), this.getEpocroot()), XSLT);
     }
 }
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/MergeTask.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/MergeTask.java	Fri Aug 13 14:59:05 2010 +0300
@@ -50,11 +50,17 @@
  *   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>.
  *   
+ * <br>
+ * This task relies on externals tools. Their location can be configured the following ways:
+ *  <li>by configuring the sysdef.tools.home property, fails if the location is incorrect.
+ *  <li>The parent folder of the joinsysdef tool from the PATH, fallback on SDK location.
+ *  <li>Default SDK location.
+
  *   @ant.task name="mergeSysdef" category="Sysdef"
  */
 
 public class MergeTask extends AbstractSydefTask {
-    private static final String XSLT = "sf/os/buildtools/bldsystemtools/sysdeftools/mergesysdef.xsl"; 
+    private static final String XSLT = "mergesysdef.xsl"; 
     private File downstreamFile;
     private List<ResourceCollection> resourceCollections = new ArrayList<ResourceCollection>();
 
@@ -156,6 +162,6 @@
      */
     @Override
     protected File getXsl() {
-        return new File(this.getEpocroot(), XSLT);
+        return new File(SysdefUtils.getSysdefHome(getProject(), this.getEpocroot()), XSLT);
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/SysdefUtils.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* 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 org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+
+import com.nokia.helium.core.FileUtils;
+
+/**
+ * Utility class to access the system definition tools.
+ *
+ */
+public final class SysdefUtils {
+    public static final String SYSDEF_HOME_PROPERTY_NAME = "sysdef.tools.home";
+    private static final String ASSET_PATH = "sf/os/buildtools/bldsystemtools/sysdeftools";
+    
+    private SysdefUtils() {        
+    }
+    
+    /**
+     * Get the location of the the system definitions tools.
+     * Use the SYSDEF_HOME_PROPERTY_NAME if it is defined.
+     * Else it tries to search the joinsysdef script on the path,
+     * and finally falls back on the ASSET_PATH location.
+     * @param project the current Ant project.
+     * @param epocroot the epocroot location.
+     * @return a directory represented by a File object.
+     */
+    public static File getSysdefHome(Project project, File epocroot) {
+        if (project.getProperty(SYSDEF_HOME_PROPERTY_NAME) != null) {
+            File dir = new File(project.getProperty(SYSDEF_HOME_PROPERTY_NAME)).getAbsoluteFile();
+            if (dir.exists() && dir.isDirectory()) {
+                return dir;
+            } else {
+                throw new BuildException("The " + SYSDEF_HOME_PROPERTY_NAME +
+                        " property refers to an invalid directory: " + dir);
+            }
+        } else {
+            File dir = FileUtils.findExecutableOnPath("joinsysdef");
+            if (dir != null) {
+                return dir.getParentFile();
+            }
+            // last resorts the asset location...
+            dir = new File(epocroot, ASSET_PATH);
+            if (!dir.exists() || !dir.isDirectory()) {
+                throw new BuildException("Could not find system definition tools home.");
+            }
+            return dir;
+        }
+    }
+    
+}
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/types/Filter.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/types/Filter.java	Fri Aug 13 14:59:05 2010 +0300
@@ -16,44 +16,29 @@
 */
 package com.nokia.helium.sysdef.ant.types;
 
+import java.io.File;
+
+import com.nokia.helium.sysdef.ant.taskdefs.FilterTask;
+
 /**
- * This type defines a system definition filter.
+ * This interface defines filter applied by the sysdefFilter task.
  *
  */
-public class Filter {
-    private String filter;
-    private String type = "has";
+public interface Filter {
 
     /**
-     * Define the filter
-     * @param filter the filter string.
+     * Validate the object parameters.
+     * This method will be called before the filter method.
      */
-    public void setFilter(String filter) {
-        this.filter = filter;
-    }
+    void validate();
     
     /**
-     * Get the filter.
-     */
-    public String getFilter() {
-        return filter;
-    }
-
-    /**
-     * Define the filter type
-     * @param type
-     * @ant.not-required Default has.
+     * Apply filtering on the src file and save the outcome into
+     * the dest file.
+     * @param task the calling task.
+     * @param src the source file
+     * @param dest the dest file.
      */
-    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
+    void filter(FilterTask task, File src, File dest);
+    
+}
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/types/FilterSet.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/types/FilterSet.java	Fri Aug 13 14:59:05 2010 +0300
@@ -24,7 +24,7 @@
 /**
  * This Ant type defines a set of system definition
  * filters.
- *
+ * @ant.type name="sysdefFilterSet" category="Sysdef"
  */
 public class FilterSet extends DataType {
     private List<Filter> filters = new ArrayList<Filter>();
@@ -32,8 +32,8 @@
     /**
      * Create a new nested filter.
      */
-    public Filter createFilter() {
-        Filter filter = new Filter();
+    public SysdefFilter createFilter() {
+        SysdefFilter filter = new SysdefFilter();
         filters.add(filter);
         return filter;
     }
@@ -45,6 +45,15 @@
     public List<Filter> getFilters() {
         return filters;
     }
+
+    /**
+     * Create a config filter.
+     * @return a config filter.
+     */
+    public SysdefConfig createConfig() {
+        SysdefConfig filter = new SysdefConfig();
+        filters.add(filter);
+        return filter;
+    }
     
-
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/types/SysdefConfig.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,112 @@
+/*
+* 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.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.ProjectComponent;
+import org.apache.tools.ant.taskdefs.ExecTask;
+
+import com.nokia.helium.core.FileUtils;
+import com.nokia.helium.sysdef.ant.taskdefs.FilterTask;
+import com.nokia.helium.sysdef.ant.taskdefs.SysdefUtils;
+
+/**
+ * This type configure the Feature based filtering, by accepting 
+ * a HRH file parameter and a set of include path as input. 
+ *
+ */
+public class SysdefConfig extends ProjectComponent implements Filter {
+    private File file;
+    private String includes;
+  
+    /**
+     * The configuration file. (e.g bldvariant.hrh)
+     * @param file
+     * @ant.required
+     */
+    public void setFile(File file) {
+        this.file = file;
+    }
+        
+    /**
+     * Set a list of include path separated by current os separator character (; or :)
+     * @param includes
+     * @ant.not-required
+     */
+    public void setIncludes(String includes) {
+        this.includes = includes;
+    }
+    
+    /**
+     * Get the list of include path as a list of File objet.
+     * Include will be considered as relative to basedir if they
+     * are not absolute.
+     * @return a list of directories.
+     */
+    protected List<File> getIncludes() {
+        List<File> includeFiles = new ArrayList<File>();
+        if (includes != null) {
+            for (String include : includes.split(File.pathSeparator)) {
+                includeFiles.add(getProject().resolveFile(include));
+            }
+        }
+        return includeFiles;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void filter(FilterTask task, File src, File dest) {
+        String[] pathDirs = {SysdefUtils.getSysdefHome(task.getProject(), task.getEpocroot()).toString()};
+        File script = FileUtils.findExecutableOnPath("joinsysdef", pathDirs);
+        if (script == null) {
+            throw new BuildException("Could not find the joinsysdef tool.");           
+        }
+        ExecTask exec = new ExecTask();
+        exec.bindToOwner(task);
+        exec.setDir(task.getEpocroot());
+        exec.setExecutable(script.toString());
+        exec.createArg().setValue("-config");
+        exec.createArg().setFile(file);
+        exec.createArg().setValue("-output");
+        exec.createArg().setFile(dest);
+        for (File include : getIncludes()) {
+            exec.createArg().setValue("-I" + include.toString());            
+        }
+        exec.createArg().setFile(src);
+        exec.execute();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void validate() {
+        if (file == null) {
+            throw new BuildException("'file' attribute is not defined.");
+        }
+        if (!file.exists()) {
+            throw new BuildException("Could not find file: " + file.getAbsolutePath());
+        }
+    }
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/types/SysdefFilter.java	Fri Aug 13 14:59:05 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.sysdef.ant.types;
+
+import java.io.File;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.apache.tools.ant.BuildException;
+
+import com.nokia.helium.sysdef.ant.taskdefs.AbstractSydefTask;
+import com.nokia.helium.sysdef.ant.taskdefs.FilterTask;
+import com.nokia.helium.sysdef.ant.taskdefs.SysdefUtils;
+
+/**
+ * This type defines a system definition filter.
+ *
+ */
+public class SysdefFilter implements Filter {
+    private static final String INVALID_FILTER = "nothing";
+    private static final String XSLT = "filtering.xsl";
+    private String filter;
+    private String type = "has";
+    private String verbatim;
+
+    /**
+     * Define the verbatim to filter in, can be used in conjunction with filter.
+     * @param verbatim a string representing a comma separated list of id to 
+     *               filter in.
+     * @ant.required
+     */
+    public void setVerbatim(String verbatim) {
+        this.verbatim = verbatim;
+    }
+
+    /**
+     * Define the filter, can be used in conjunction with verbatim attribute.
+     * @param filter the filter string.
+     * @ant.required
+     */
+    public void setFilter(String filter) {
+        this.filter = filter;
+    }
+
+    /**
+     * Define the filter type
+     * @param type
+     * @ant.not-required Default has.
+     */
+    public void setType(SydefFilterTypeEnum type) {
+        this.type = type.getValue();
+    }
+
+    
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void filter(FilterTask task, File src, File dest) {
+        FilterImpl impl = new FilterImpl();
+        impl.bindToOwner(task);
+        impl.setEpocroot(task.getEpocroot());
+        impl.setSrcFile(src);
+        impl.setDestFile(dest);
+        impl.filter(filter, type);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void validate() {
+        if (filter == null && verbatim == null) {
+            throw new BuildException("'filter' or/and 'idlist' attribute is not defined.");
+        }
+    }
+
+    private class FilterImpl extends AbstractSydefTask {
+        
+        /**
+         * 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(String filter, String filterType) {
+            Map<String, String> params = new Hashtable<String, String>();
+            params.put("filter-type", filterType);
+            if (filter == null && verbatim != null) {
+                params.put("filter", INVALID_FILTER);
+            } else if (filter != null) {
+                params.put("filter", filter);
+            }
+            if (verbatim != null) {
+                params.put("verbatim", verbatim);
+            }
+            transform(params);
+        }
+        
+        
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        protected File getXsl() {
+            return new File(SysdefUtils.getSysdefHome(getProject(), this.getEpocroot()), XSLT);
+        }
+    }
+
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/templates/root_sysdef_model.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/templates/root_sysdef_model.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -140,16 +140,30 @@
 <!-- filter and priority are deprecated 
     "root" attribute will usually be inserted by tools when merging models, although it can be set manually-->
 ]>
-<SystemDefinition schema="3.0.0">
-<#assign name="">
-<#list roots?keys as root><#assign name=name + root + "_"></#list>
-<systemModel name="${name}">
+<SystemDefinition schema="3.0.0" <#if (idnamespace?? && idnamespace!="http://www.symbian.org/system-definition")>xmlns:vendor="${idnamespace}"</#if>>
+<systemModel name="<#list roots?keys as root>${root}<#if root_has_next>_</#if></#list>">
 <#list layers?keys as layer>
     <layer id="${layer}" name="${layer}">
     <#list roots?keys as root>
         <#if roots[root]?keys?seq_contains(layer)>
             <#list roots[root][layer] as pkg>
-        <package id="${pkg}" href="${dest_dir_to_epocroot?replace('\\', '/')}${root}/${layer}/${pkg}/package_definition.xml"/>
+                    <#assign namespaces="" />
+                    <#if (idnamespace?? && idnamespace!="http://www.symbian.org/system-definition")>
+                        <#assign pkgid="vendor:${pkg['id']}" />
+                    <#else>
+                        <#assign pkgid="${pkg['id']}" />
+                    </#if>
+                    <#list pkg['namespaces']?keys as ns>
+                        <#if pkg['namespaces'][ns] != "http://www.symbian.org/system-definition">                        
+                            <#assign namespaces="${namespaces} ${ns}=\"${pkg['namespaces'][ns]}\"" />
+                        <#else>
+                            <#assign nsname=ns?replace("xmlns:", '')>
+                            <#if pkg['id']?starts_with("${nsname}:")>
+                                <#assign pkgid=pkg['id']?replace("${nsname}:", '') />
+                            </#if>
+                        </#if>
+                    </#list> 
+         <package id="${pkgid}" href="${dest_dir_to_epocroot?replace('\\', '/')}${root}/${layer}/${pkg['path']}/package_definition.xml" ${namespaces}/>
             </#list>
         </#if>
     </#list>
--- a/buildframework/helium/sf/java/sysdef/tests/antunit/test_create_root_sysdef.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/tests/antunit/test_create_root_sysdef.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -92,6 +92,15 @@
         <au:assertTrue>
             <contains string="${pkg.root}" substring="valid_package" />
         </au:assertTrue>
+        <au:assertFalse>
+            <contains string="${pkg.root}" substring="id-namespace=&quot;&quot;" />
+        </au:assertFalse>
+        <au:assertTrue message="Check if xmlns:qt=&quot;http://qt.nokia.com&quot; is defined.">
+            <contains string="${pkg.root}" substring="xmlns:qt=&quot;http://qt.nokia.com&quot;" />
+        </au:assertTrue>
+        <au:assertTrue message="Check if id=&quot;valid_package&quot; is defined.">
+            <contains string="${pkg.root}" substring="id=&quot;valid_package&quot;" />
+        </au:assertTrue>
     </target>
 
     <!--
@@ -219,9 +228,9 @@
         <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" />
+                    <contains string="${pkg.root}" substring="valid_package/package_definition.xml" />
+                    <contains string="${pkg.root}" substring="vendor_package/package_definition.xml" />
+                    <contains string="${pkg.root}" substring="vendor_package/vendor_package_info/nokia_vendor_package_metadata/package_definition.xml" />
                 </and>
             </not>
         </au:assertTrue>
@@ -230,17 +239,35 @@
     <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" />
+                <include name="vendor_package/*/*/package_definition.xml" />
+                <include name="vendor_package2/**/package_definition.xml" />
             </fileset>
         </hlm:createRootSysdef>
         <au:assertFileExists file="${epocroot.temp}/sysdef_model.xml" />
         <loadfile property="pkg.root" srcfile="${epocroot.temp}/sysdef_model.xml" />
+        <echo>${pkg.root}</echo>
         <au:assertTrue>
-            <and>
-                <contains string="${pkg.root}" substring="vendor_package" />
-                <contains string="${pkg.root}" substring="nokia_vendor_package" />
-            </and>
+            <contains string="${pkg.root}" substring="vendor_package/vendor_package_info/nokia_vendor_package_metadata/package_definition.xml" />
+        </au:assertTrue>
+        <au:assertTrue message="Vendor package overriding SF should not be prefixed by sf because it is the default namespace.">
+            <contains string="${pkg.root}" substring="id=&quot;vendor_package&quot;" />
+        </au:assertTrue>
+        <au:assertTrue message="Check that xmlns:qt=&quot;http://www.nokia.com/qt&quot; is added.">
+            <contains string="${pkg.root}" substring="xmlns:qt=&quot;http://www.nokia.com/qt&quot;" />
+        </au:assertTrue>
+        <au:assertTrue message="Check that xmlns:vendor=&quot;http://www.vendor.com/schema/drd/system-definition&quot; is added.">
+            <contains string="${pkg.root}" substring="xmlns:vendor=&quot;http://www.vendor.com/schema/drd/system-definition&quot;" />
         </au:assertTrue>
+        <au:assertTrue message="Verify that a space is added between namespaces">
+            <not>
+                <contains string="${pkg.root}" substring="&quot;xmlns" />
+            </not>
+        </au:assertTrue>        
+        <au:assertTrue message="Vendor package 2 is pure vendor, so it must be prefixed with vendor.">
+            <contains string="${pkg.root}" substring="id=&quot;vendor:vendor_package2&quot;" />
+        </au:assertTrue>
+    	<!-- Let's check if the file is syntaxically correct. -->
+    	<xmlvalidate file="${epocroot.temp}/sysdef_model.xml" lenient="yes"/>
     </target>
       
 </project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/sysdef/tests/antunit/test_filter_sysdef.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/tests/antunit/test_filter_sysdef.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -80,7 +80,7 @@
     </target>
 
     <target name="test-nested-filterset-missing-filter-attribute">
-        <au:expectfailure expectedMessage="'filter' attribute is not defined.">
+        <au:expectfailure expectedMessage="'filter' or/and 'idlist' attribute is not defined.">
         <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
             destfile="${epocroot.temp}/filtered.xml">
             <filterSet>
@@ -106,4 +106,100 @@
         <au:assertFileExists file="${epocroot.temp}/filtered.xml" />
     </target>
 
-</project>
\ No newline at end of file
+    <target name="test-nested-filterset-verbatim">
+        <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
+            destfile="${epocroot.temp}/filtered.xml">
+            <filterSet>
+                <filter filter="test" type="has" verbatim="component"/>
+            </filterSet>
+        </hlm:filterSysdef>
+        <au:assertFileExists file="${epocroot.temp}/filtered.xml" />
+    </target>
+    
+    <target name="test-nested-filterset-verbatim-nofilter">
+        <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
+            destfile="${epocroot.temp}/filtered.xml">
+            <filterSet>
+                <filter verbatim="component"/>
+            </filterSet>
+        </hlm:filterSysdef>
+        <au:assertFileExists file="${epocroot.temp}/filtered.xml" />
+    </target>
+    
+    <target name="test-nested-filterset-with-config-missing-file-attribute">
+        <au:expectfailure expectedMessage="'file' attribute is not defined.">
+            <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
+                    destfile="${epocroot.temp}/filtered.xml">
+                <filterSet>
+                    <config />
+                </filterSet>
+            </hlm:filterSysdef>
+        </au:expectfailure>
+    </target>
+
+    <target name="test-nested-filterset-with-config-missing-invalid-file">
+        <au:expectfailure expectedMessage="Could not find file:">
+            <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
+                    destfile="${epocroot.temp}/filtered.xml">
+                <filterSet>
+                    <config file="invalid_config.hrh"/>
+                </filterSet>
+            </hlm:filterSysdef>
+        </au:expectfailure>
+    </target>
+	
+    <target name="test-nested-filterset-with-config-missing-valid-file">
+        <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
+                destfile="${epocroot.temp}/filtered.xml">
+            <filterSet>
+                <config file="../data/filter/config/config.hrh"/>
+            </filterSet>
+        </hlm:filterSysdef>
+        <au:assertFileExists file="${epocroot.temp}/filtered.xml" />
+        <au:assertLogContains text="-config" />
+        <au:assertLogContains text="-output" />
+        <au:assertLogDoesntContain text="-I" />
+    </target>
+
+
+	
+    <target name="test-nested-filterset-with-config-missing-valid-file-and-includes">
+        <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
+                destfile="${epocroot.temp}/filtered.xml">
+            <filterSet>
+                <config file="../data/filter/config/config.hrh"
+                	includes="${epocroot.temp}/epoc32/include${path.separator}${epocroot.temp}/epoc32/config"/>
+            </filterSet>
+        </hlm:filterSysdef>
+        <au:assertFileExists file="${epocroot.temp}/filtered.xml" />
+        <au:assertLogContains text="-config" />
+        <au:assertLogContains text="-output" />
+        <au:assertLogContains text="-I${epocroot.temp}${file.separator}epoc32${file.separator}include" />
+        <au:assertLogContains text="-I${epocroot.temp}${file.separator}epoc32${file.separator}config" />
+    </target>
+
+    <target name="test-nested-filterset-with-config-check-property-for-home-invalid">
+    	<property name="sysdef.tools.home" location="../../demo/data/invalid_dir" />
+        <au:expectfailure expectedMessage="The sysdef.tools.home property refers to an invalid directory:">
+            <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
+                destfile="${epocroot.temp}/filtered.xml">
+                <filterSet>
+                    <config file="../data/filter/config/config.hrh"/>
+                </filterSet>
+            </hlm:filterSysdef>
+        </au:expectfailure>
+        <au:assertFileDoesntExist file="${epocroot.temp}/filtered.xml" />
+    </target>
+
+    <target name="test-nested-filterset-with-config-check-property-for-home">
+        <property name="sysdef.tools.home" location="../../demo/data/sf/os/buildtools/bldsystemtools/sysdeftools" />
+        <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
+            destfile="${epocroot.temp}/filtered.xml">
+            <filterSet>
+                <config file="../data/filter/config/config.hrh"/>
+            </filterSet>
+        </hlm:filterSysdef>
+        <au:assertFileExists file="${epocroot.temp}/filtered.xml" />
+    </target>
+
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/tests/antunit/test_is_vendor_package.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_is_vendor_package.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-is-vendor-package" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium antlib merge sysdef tests.</description>
+
+    <taskdef resource="com/nokia/helium/sysdef/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <property name="epocroot" location="../data/rootsysdef" />
+    <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-missing-file">
+        <au:expectfailure expectedMessage="'file' attribute is not defined.">
+            <condition property="is.vendor" value="true">
+                <hlm:isVendorPackage />
+            </condition>
+        </au:expectfailure>
+    </target>
+    
+    <target name="test-regular-package">
+        <condition property="is.vendor" value="true" else="false">
+            <hlm:isVendorPackage file="../data/isvendor/package/package_definition.xml" />
+        </condition>
+        <au:assertTrue message="Must not be a vendor package">
+            <isfalse value="${is.vendor}" />
+        </au:assertTrue>
+    </target>
+
+    <target name="test-vendor-package">
+        <condition property="is.vendor" value="true" else="false">
+            <hlm:isVendorPackage file="../data/isvendor/package/vendor_package_info/vendor_package_metadata/package_definition.xml" />
+        </condition>
+        <au:assertTrue message="Must be a vendor package">
+            <istrue value="${is.vendor}" />
+        </au:assertTrue>
+    </target>
+
+    <target name="test-regular-package-selector">
+        <au:assertTrue message="Must not count a package">
+            <resourcecount when="eq" count="0">
+                <restrict>
+                    <fileset dir="../data/isvendor" includes="*/package_definition.xml">
+                        <custom classname="com.nokia.helium.sysdef.ant.conditions.IsVendorPackage" />
+                    </fileset>
+                </restrict>
+            </resourcecount>
+        </au:assertTrue>
+    </target>
+    
+    <target name="test-vendor-package-selector">
+        <au:assertTrue message="Must not be a vendor package">
+            <resourcecount when="eq" count="1">
+                <fileset dir="../data/isvendor" includes="*/*/*/package_definition.xml">
+                    <custom classname="com.nokia.helium.sysdef.ant.conditions.IsVendorPackage" />
+                </fileset>
+            </resourcecount>
+        </au:assertTrue>
+    </target>
+
+    <target name="test-vendor-package-selector-resource">
+        <au:assertTrue message="Must count a vendor package">
+            <resourcecount when="eq" count="1">
+                <restrict>
+                    <fileset dir="../data/isvendor" includes="*/*/*/package_definition.xml" />
+                    <hlm:isVendorPackage />
+                </restrict>
+            </resourcecount>
+        </au:assertTrue>
+    </target>
+
+    <target name="test-regular-package-selector-resource">
+        <au:assertTrue message="Must not count any package package">
+            <resourcecount when="eq" count="0">
+                <restrict>
+                    <fileset dir="../data/isvendor" includes="*/package_definition.xml" />
+                    <hlm:isVendorPackage />
+                </restrict>
+            </resourcecount>
+        </au:assertTrue>
+    </target>
+
+</project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/sysdef/tests/bld.sh	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/tests/bld.sh	Fri Aug 13 14:59:05 2010 +0300
@@ -16,9 +16,4 @@
 # Description: 
 #
 
-
-
-module load java/1.6.0
-module load mercurial
-export OLDANT_ARGS="-lib ../lib -lib ../../lib -lib ../../bin/helium-core.jar -lib ../../bin/helium-sysdef.jar -lib ../../antlibs"
-ant -Dant.executor.class="com.nokia.helium.core.ant.HeliumExecutor" $*
+ant  $*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/tests/data/filter/config/config.hrh	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,18 @@
+/*
+* 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:  
+*
+*/
+
+// Some dummy configuration file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/tests/data/isvendor/package/package_definition.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,31 @@
+<?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="vendor_package" name="valid_package" levels="demo">
+    <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/isvendor/package/package_map.xml	Fri Aug 13 14:59:05 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/isvendor/package/vendor_package_info/vendor_package_metadata/package_definition.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,31 @@
+<?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" id-namespace="http://www.vendor.org">
+  <package id="vendor_package" name="vendor_package" levels="demo">
+    <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/java/sysdef/tests/data/rootsysdef/epocroot_valid/root/layer/vendor_package/package_definition.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/epocroot_valid/root/layer/vendor_package/package_definition.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,8 +22,7 @@
 -->
 <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" />
+    <collection id="collection" name="Collection " level="demo">
       <component id="component" name="Component " purpose="development">
         <unit bldFile="collection/component/group" mrp="" />
       </component>
--- a/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
+++ 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	Fri Aug 13 14:59:05 2010 +0300
@@ -22,8 +22,7 @@
 -->
 <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" />
+    <collection id="collection" name="Collection " level="demo">
       <component id="component" name="Component " purpose="development">
         <unit bldFile="collection/component/group" mrp="" />
       </component>
--- a/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/template.txt.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/template.txt.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -23,7 +23,7 @@
 <#list roots?keys as root>
     <#list roots[root]?keys as layer>
         <#list roots[root][layer] as pkg>
-${root}/${layer}/${pkg}
+${root}/${layer}/${pkg['path']}
         </#list>
     </#list>
 </#list>
--- a/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/valid_package/package_definition.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/valid_package/package_definition.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,8 +22,7 @@
 -->
 <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" />
+    <collection id="collection" name="Collection " level="demo">
       <component id="component" name="Component " purpose="development">
         <unit bldFile="collection/component/group" mrp="" />
       </component>
--- a/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/valid_package_root2/package_definition.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/valid_package_root2/package_definition.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,8 +22,7 @@
 -->
 <SystemDefinition schema="3.0.0" xmlns:qt="http://qt.nokia.com">
   <package id="valid_package_root2" name="valid_package_root2" levels="demo">
-    <!-- the xml syntax of this file is voluntarly wrong. -->
-    <collection id="collection2" name="Collection 2" level="demo" />
+    <collection id="collection2" name="Collection 2" level="demo">
       <component id="component2" name="Component 2" purpose="development">
         <unit bldFile="collection2/component2/group" mrp="" />
       </component>
--- a/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/vendor_package/package_definition.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/vendor_package/package_definition.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -20,10 +20,9 @@
 
 ============================================================================
 -->
-<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" />
+<SystemDefinition schema="3.0.0" xmlns:qt="http://www.nokia.com/qt">
+  <package id="vendor_package" name="valid_package" levels="demo">
+    <collection id="collection" name="Collection " level="demo">
       <component id="component" name="Component " purpose="development">
         <unit bldFile="collection/component/group" mrp="" />
       </component>
--- a/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/vendor_package/vendor_package_info/nokia_vendor_package_metadata/package_definition.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/vendor_package/vendor_package_info/nokia_vendor_package_metadata/package_definition.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -20,10 +20,10 @@
 
 ============================================================================
 -->
-<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" />
+<SystemDefinition schema="3.0.0" xmlns:qt="http://qt.nokia.com" xmlns:sf="http://www.symbian.org/system-definition" id-namespace="http://www.vendor.com/schema/drd/system-definition">
+ <!-- This package is overriding official SF package. -->
+  <package id="sf:vendor_package" name="vendor_package" levels="demo">
+    <collection id="collection" name="Collection " level="demo">
       <component id="component" name="Component " purpose="development">
         <unit bldFile="collection/component/group" mrp="" />
       </component>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/vendor_package2/package_definition.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,31 @@
+<?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://www.nokia.com/qt" id-namespace="http://www.vendor.com/schema/drd/system-definition">
+  <package id="vendor_package2" name="valid_package" levels="demo">
+    <collection id="vendor_package2_collection" name="Collection " level="demo">
+      <component id="vendor_package2_component" name="Component " purpose="development">
+        <unit bldFile="vendor_package2_collection/vendor_package2_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/vendor_package2/package_map.xml	Fri Aug 13 14:59:05 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"/>
--- a/buildframework/helium/sf/python/pythoncore/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/ivy.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -30,9 +30,8 @@
   <publications>
       <artifact type="egg"/>
   </publications>
-  <dependencies>
-      <dependency org="amara" name="amara" rev="latest.integration" conf="default" />
-      <dependency org="lxml" name="lxml" rev="latest.integration" conf="default" />
+  <dependencies>
+      <dependency org="py_dom_xpath" name="py_dom_xpath" rev="latest.integration" conf="default" />
       <dependency org="org.apache.commons" name="commons-io" rev="latest.integration" conf="default" />
       <dependency org="mocker" name="mocker" rev="latest.integration" conf="default" />
       <dependency org="path" name="path" rev="latest.integration" conf="default" />
--- a/buildframework/helium/sf/python/pythoncore/lib/amara.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/amara.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,11 +18,50 @@
 #===============================================================================
 """amara"""
 
-# pylint: disable-msg=E1103
-import sys
-if 'java' in sys.platform:
+# pylint: disable=E1103
+#import sys
+#if 'java' in sys.platform:
+#    pass
+if True:
+    import os
     import xml.dom.minidom
     import urllib
+    import xpath
+    import xml.etree.ElementTree
+    import xml.etree.ElementInclude
+    
+    # pylint: disable=W0212
+    def fixed_writexml(self, writer, indent="", addindent="", newl=""):
+        # indent = current indentation
+        # addindent = indentation to add to higher levels
+        # newl = newline string
+        writer.write(indent + "<" + self.tagName)
+    
+        attrs = self._get_attributes()
+        a_names = attrs.keys()
+        a_names.sort()
+    
+        for a_name in a_names:
+            writer.write(" %s=\"" % a_name)
+            xml.dom.minidom._write_data(writer, attrs[a_name].value)
+            writer.write("\"")
+        if self.childNodes:
+            if len(self.childNodes) == 1 \
+              and self.childNodes[0].nodeType == xml.dom.minidom.Node.TEXT_NODE:
+                writer.write(">")
+                self.childNodes[0].writexml(writer, "", "", "")
+                writer.write("</%s>%s" % (self.tagName, newl))
+                return
+            writer.write(">%s" % (newl))
+            for node in self.childNodes:
+                if node.__class__ == xml.dom.minidom.Text and node.data.strip() == '':
+                    continue
+                node.writexml(writer, indent + addindent, addindent, newl)
+            writer.write("%s</%s>%s" % (indent, self.tagName, newl))
+        else:
+            writer.write("/>%s" % (newl))
+    # replace minidom's function with ours
+    xml.dom.minidom.Element.writexml = fixed_writexml
     
     def parse(param):
         """parse"""
@@ -42,29 +81,55 @@
             if isinstance(dom, file):
                 self.dom = xml.dom.minidom.parse(dom)
             elif isinstance(dom, basestring):
-                if dom.startswith('file:///'):
+                cwd_backup = os.getcwd()
+                if dom.startswith('file:///') or dom.startswith('///') or os.path.exists(dom):
+                    try:
+                        path = urllib.url2pathname(dom)
+                        path = path.replace('file:///', '')
+                        os.chdir(os.path.dirname(path))
+                    except IOError:
+                        pass
                     dom = urllib.urlopen(dom).read()
+                
+                ettree = xml.etree.ElementTree.fromstring(dom)
+                xml.etree.ElementInclude.include(ettree)
+                dom = xml.etree.ElementTree.tostring(ettree)
+                os.chdir(cwd_backup)
                 self.dom = xml.dom.minidom.parseString(dom)
             else:
                 self.dom = dom
         
         def __getitem__(self, name):
             return self.__getattr__(name)
-        
+            
+        def __setitem__(self, key, value):
+            self.xml_set_attribute(key, value)
+            
         def __getattr__(self, attr):
             if isinstance(attr, basestring):
                 res = self.dom.getElementsByTagName(attr)
                 if len(res) == 0:
                     if hasattr(self.dom, 'documentElement'):
                         val = self.dom.documentElement.getAttribute(attr)
+                        if not self.dom.documentElement.hasAttribute(attr):
+                            raise Exception(attr + ' not found')
                     else:
                         val = self.dom.getAttribute(attr)
-                    if val == '':
-                        raise Exception(attr + ' not found')
+                        if not self.dom.hasAttribute(attr):
+                            raise Exception(attr + ' not found')
                     return val
                 return MinidomAmara(res[0], self.dom)
-            return MinidomAmara(self.parent.getElementsByTagName(self.dom.tagName)[attr])
+            if self.parent:
+                return MinidomAmara(self.parent.getElementsByTagName(self.dom.tagName)[attr])
+            else:
+                raise Exception(str(attr) + ' not found')
     
+        def __setattr__(self, name, value):
+            if isinstance(value, basestring):
+                self.xml_set_attribute(name, value)
+            else:
+                object.__setattr__(self, name, value)
+        
         def __iter__(self):
             for entry in self.parent.getElementsByTagName(self.dom.tagName):
                 yield MinidomAmara(entry)
@@ -76,13 +141,15 @@
                     text = text + t_text.data
             return text
         
-        def xml(self, out=None, indent=True, omitXmlDeclaration=False, encoding=''):
+        def xml(self, out=None, indent=False, omitXmlDeclaration=False, encoding='utf-8'):
             """xml"""
+            if omitXmlDeclaration:
+                pass
             if out:
-                out.write(self.dom.toprettyxml())
+                out.write(self.dom.toprettyxml(encoding=encoding))
             if indent:
-                return self.dom.toprettyxml()
-            return self.dom.toxml()
+                return self.dom.toprettyxml(encoding=encoding)
+            return self.dom.toxml(encoding=encoding)
         
         def xml_append_fragment(self, text):
             """xml append fragment"""
@@ -92,6 +159,9 @@
             """set XML attribute"""
             self.dom.setAttribute(name, value)
         
+        def xml_remove_child(self, value):
+            self.dom.removeChild(value.dom)
+        
         def _getxml_children(self):
             """get xml children"""
             l_attrib = []
@@ -142,24 +212,32 @@
         
         def __eq__(self, obj):
             return str(self) == obj
+        def __ne__(self, obj):
+            return str(self) != obj
         
         def __len__(self):
-            return len(self.parent.getElementsByTagName(self.dom.tagName))
+            if self.parent:
+                return len(self.parent.getElementsByTagName(self.dom.tagName))
+            return 1
         
-        def xml_xpath(self, xpath):
+        def xml_xpath(self, axpath):
             """append to the XML path"""
-            import java.io.ByteArrayInputStream
-            import org.dom4j.io.SAXReader
-            import org.dom4j.DocumentHelper
-
-            stream = java.io.ByteArrayInputStream(java.lang.String(self.dom.toxml()).getBytes("UTF-8"))
-            xmlReader = org.dom4j.io.SAXReader()
-            doc = xmlReader.read(stream)
-            xpath = org.dom4j.DocumentHelper.createXPath(xpath)
-            signalNodes = xpath.selectNodes(doc)
-            iterator = signalNodes.iterator()
-            out = []
-            while iterator.hasNext():
-                p_iterator = iterator.next()
-                out.append(MinidomAmara(p_iterator.asXML()))
-            return out
+            results  = [] 
+            for result in xpath.find(axpath, self.dom): 
+                results.append(MinidomAmara(result)) 
+            return results 
+#            import java.io.ByteArrayInputStream
+#            import org.dom4j.io.SAXReader
+#            import org.dom4j.DocumentHelper
+#
+#            stream = java.io.ByteArrayInputStream(java.lang.String(self.dom.toxml()).getBytes("UTF-8"))
+#            xmlReader = org.dom4j.io.SAXReader()
+#            doc = xmlReader.read(stream)
+#            xpath = org.dom4j.DocumentHelper.createXPath(xpath)
+#            signalNodes = xpath.selectNodes(doc)
+#            iterator = signalNodes.iterator()
+#            out = []
+#            while iterator.hasNext():
+#                p_iterator = iterator.next()
+#                out.append(MinidomAmara(p_iterator.asXML()))
+#            return out
--- a/buildframework/helium/sf/python/pythoncore/lib/archive/builders.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/archive/builders.py	Fri Aug 13 14:59:05 2010 +0300
@@ -134,12 +134,12 @@
                 commonRoots[common_path] = 1
         return commonRoots.keys()
 
-    def getPrefix(self, dir, commonUncRoots):
+    def getPrefix(self, dir_, commonUncRoots):
         """get prefix"""
         for root in commonUncRoots:
-            if dir.startswith(root):
+            if dir_.startswith(root):
                 return root
-        raise Exception("Could not find root for %s." % dir)
+        raise Exception("Could not find root for %s." % dir_)
     
     def checkRootDirValue(self, builder, parse_xml_file, build_drive, config_type):
         """Checks UNC path in root.dir and adds the substituted drive into EMAKEROOT."""
--- a/buildframework/helium/sf/python/pythoncore/lib/archive/mappers.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/archive/mappers.py	Fri Aug 13 14:59:05 2010 +0300
@@ -292,7 +292,7 @@
                     value = fileutils.read_policy_content(policyfile)
                     if value not in self._binary.keys():    #check policy file is valid
                         _logger.error("POLICY_ERROR: policy file found %s but policy %s value not exists in csv" % (policyfile, value))
-                except Exception, exc:
+                except IOError, exc:
                     _logger.error("POLICY_ERROR: %s" % exc)         
                     value = self._config.get('policy.default.value', MISSING_POLICY)
             else:       #no policy file present
@@ -408,7 +408,7 @@
         """ Initialization. """
         PolicyRemoverMapper.__init__(self, config, archiver)
 
-    def load_policy_binary(self, csvfile):
+    def load_policy_binary(self, csvfile, column=1):
         """ Loading the policy using the 3rd column. """
         _logger.info("POLICY_INFO: Loading actions from the 3rd column")
         PolicyRemoverMapper.load_policy_binary(self, csvfile, column=3)
@@ -419,7 +419,7 @@
         """ Initialization. """
         PolicyRemoverMapper.__init__(self, config, archiver)
 
-    def load_policy_binary(self, csvfile):
+    def load_policy_binary(self, csvfile, column=1):
         """ Loading the policy using the 4th column. """
         _logger.info("POLICY_INFO: Loading actions from the 4th column")
         PolicyRemoverMapper.load_policy_binary(self, csvfile, column=4)
--- a/buildframework/helium/sf/python/pythoncore/lib/archive/scanners.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/archive/scanners.py	Fri Aug 13 14:59:05 2010 +0300
@@ -21,11 +21,12 @@
 
 import os
 import fileutils
-import selectors
 import logging
 import codecs
 import pathaddition
 
+import archive.selectors
+
 _logger = logging.getLogger('archive.scanners')
 _logger_abld = logging.getLogger('archive.scanners.abld')
 logging.basicConfig()
@@ -46,11 +47,11 @@
         [self.add_exclude_file(ex) for ex in self._config.get_list('exclude_file', [])]
         [self.add_exclude_lst(filename) for filename in self._config.get_list('exclude.lst', [])]
         [self.add_filetype(filetype) for filetype in self._config.get_list('filetype', [])]
-        [self.add_selector(selectors.get_selector(selector, self._config)) for selector in self._config.get_list('selector', [])]
+        [self.add_selector(archive.selectors.get_selector(selector, self._config)) for selector in self._config.get_list('selector', [])]
         # To support old features.
         # TODO: inform customers and remove.
         if 'distribution.policy.s60' in self._config:
-            self.add_selector(selectors.get_selector('distribution.policy.s60', self._config))
+            self.add_selector(archive.selectors.get_selector('distribution.policy.s60', self._config))
 
     def add_exclude_lst(self, filename):
         """ Adding excludes from exclude list. """
--- a/buildframework/helium/sf/python/pythoncore/lib/archive/selectors.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/archive/selectors.py	Fri Aug 13 14:59:05 2010 +0300
@@ -73,7 +73,7 @@
         else:
             try:
                 policy_value = fileutils.read_policy_content(policy_file)
-            except Exception:
+            except IOError:
                 _logger.warning('POLICY_ERROR: Exception thrown parsing policy file: ' + policy_file)
                 policy_value = archive.mappers.MISSING_POLICY
         # loop through the possible values
@@ -130,7 +130,7 @@
         else:
             try:
                 policy_value = fileutils.read_symbian_policy_content(policy_file)
-            except Exception:
+            except IOError:
                 _logger.warning('POLICY_ERROR: Exception thrown parsing policy file: ' + policy_file)
                 policy_value = archive.mappers.MISSING_POLICY
         # loop through the possible values
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/__init__.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/__init__.py	Fri Aug 13 14:59:05 2010 +0300
@@ -35,7 +35,7 @@
 
 import ats3.parsers as parser
 
-from path import path # pylint: disable-msg=F0401
+from path import path # pylint: disable=F0401
 
 _logger = logging.getLogger('ats')
 
@@ -85,7 +85,7 @@
             hrh = os.path.join(self.build_drive + os.sep, 'epoc32', 'include', 'feature_settings.hrh')
             if os.path.exists(tsrc):
                 if os.path.exists(hrh):
-                    temp_dict = c_parser.get_cpp_output(path(tsrc), "d", hrh)
+                    temp_dict = c_parser.get_cpp_output(path(tsrc), "d", hrh, self.build_drive)
                 else:
                     temp_dict = c_parser.get_cpp_output(path(tsrc), "d")
                 for t_key, t_value in temp_dict.items():
@@ -157,6 +157,7 @@
             self.eunitexerunner_flags = config.eunitexerunner_flags
         self.sets = []
         self.src_dst = []
+        self.dll_files = {}
         self.pmd_files = []
         self.trace_activation_files = []
         self.trace_enabled = 'False'
@@ -183,7 +184,8 @@
     def insert_set(self, data_files=None, config_files=None, 
                    engine_ini_file=None,  image_files=None, sis_files=None,
                    testmodule_files=None, test_timeout=None,eunitexerunner_flags=None , test_harness=None,
-                   src_dst=None, pmd_files=None, trace_activation_files=None, custom_dir=None, component_path=None):
+                   src_dst=None, pmd_files=None, trace_activation_files=None, custom_dir=None, 
+                   dll_files=None, component_path=None):
         """
         Insert a test set into the test plan.
         """
@@ -212,9 +214,11 @@
             trace_activation_files = []
         if component_path is None:
             component_path = self.component_path
+        if dll_files is None:
+            dll_files = self.dll_files
             
         setd = dict(name="set%d" % len(self.sets),
-                    image_files=image_files, engine_ini_file=engine_ini_file, ctc_enabled=self.ctc_enabled, component_path=component_path)
+                    image_files=image_files, engine_ini_file=engine_ini_file, ctc_enabled=self.ctc_enabled, dll_files=dll_files, component_path=component_path)
         
         setd = dict(setd, custom_dir=custom_dir)
         if sis_files:
@@ -420,7 +424,7 @@
     else:
         generator = adg.Ats3TestDropGenerator()
     _logger.info("generating drop file: %s" % config.drop_file)
-    generator.generate(test_plan, output_file=config.drop_file, config_file=config.config_file)
+    generator.generate(test_plan, output_file=config.drop_file, config_file=config.config_file )
 
 def split_paths(arg, delim=","):
     """
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/aste.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/aste.py	Fri Aug 13 14:59:05 2010 +0300
@@ -21,7 +21,7 @@
 
 """ASTE test drop generation."""
 
-# pylint: disable-msg=R0201,R0903,R0902,W0142
+
 #W0142 => * and ** were used
 #R* removed during refactoring
 
@@ -33,10 +33,10 @@
 import tempfile
 import zipfile
 import pkg_resources
-from path import path # pylint: disable-msg=F0401
+from path import path # pylint: disable=F0401
 import amara
 import ntpath as atspath
-import jinja2 # pylint: disable-msg=F0401
+import jinja2 # pylint: disable=F0401
 
 _logger = logging.getLogger('ats3')
 
@@ -375,7 +375,7 @@
         """ generate an XML file"""
         loader = jinja2.ChoiceLoader([jinja2.PackageLoader(__name__, 'templates')])
         env = jinja2.Environment(loader=loader)
-        template = env.from_string(pkg_resources.resource_string(__name__, 'aste_template.xml'))# pylint: disable-msg=E1101
+        template = env.from_string(pkg_resources.resource_string(__name__, 'aste_template.xml'))# pylint: disable=E1101
         
         xmltext = template.render(test_plan=test_plan, os=os, atspath=atspath, atsself=self).encode('ISO-8859-1')
         return et.ElementTree(et.XML(xmltext))
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/ats4_template.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/ats4_template.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -29,8 +29,8 @@
         {% 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> 
+        {%- endif %}
+        <meta name="name">{{ test_plan['testrun_name'] }}</meta>
     </metadata>
     
     <agents>
@@ -47,7 +47,7 @@
             <meta name="component_path">{{ setd['component_path'] }}</meta>
         </metadata>
         <initialization>
-            {% include 'prestep_custom.xml' ignore missing %}
+            {{ atsself.get_template(setd['custom_dir'], 'prestep_custom.xml') }}
         
             {% if setd.image_files -%}
             <task>
@@ -57,23 +57,33 @@
                 {% for img in atsself.get_sorted_images(setd) -%}
                     {% if img.startswith('\\\\') -%}
                     <parameter name="image-{{ i }}" value="{{ img }}" />
-                    {% else %}
+                    {% else -%}
                     <parameter name="image-{{ i }}" value="ATS3Drop\images\{{ os.path.basename(img) }}" />
-                    {% endif %}
+                    {%- endif %}
                     {% set i = i + 1 %}
-                {% endfor -%}
+                {%- endfor %}
                 </parameters>
             </task>
-            {% endif %}
+            {%- endif %}
+            {% set udaerase = atsself.get_udaerase_image(setd) %}
+            {% if udaerase -%}
+            <task>
+                <type>FlashTask</type>
+                <parameters>
+                    <parameter name="image-{{ i }}" value="ATS3Drop\images\{{ os.path.basename(udaerase) }}" />
+                    <parameter name="force" value="true"/>
+                </parameters>
+            </task>
+            {%- endif %}
             
             {% if setd["ctc_enabled"] == "True" -%}
             {{ macros.ctc_initialization() }}
-            {% endif %}
+            {%- endif %}
             
             <task>
                 <type>CreateDirTask</type>
-                <parameters>                
-                    <parameter value="{{ atsself.getlogdir(setd) }}" name="dir"/>
+                <parameters>
+                    <parameter value="{{ atsself.getlogdir(test_plan, setd) }}" name="dir"/>
                 </parameters>
             </task>
                       
@@ -84,50 +94,60 @@
                 <parameters>
                     <parameter name="src" value="ATS3Drop\{{ setd.name }}\sis\{{ os.path.basename(sis_file) }}"/>
                     <parameter name="dst" value="c:\testframework\{{ os.path.basename(sis_file) }}"/>
+                    <parameter name="reboot-retry-count" value="1"/>
+                    <parameter name="retry-count" value="1"/>
                 </parameters>
             </task>
-              {% endfor -%}
-          {% else %}
+              {%- endfor %}
+          {% else -%}
               {% if setd['src_dst'] != [] -%}
-                {% for file in setd['src_dst'] -%}            
+                {% for file in setd['src_dst'] -%}
             <task>
                 <type>FileUploadTask</type>
                 <parameters>
                     <parameter value="ATS3Drop\{{ setd.name }}\{{ file[1].replace(":", "") }}" name="src"/>
                     <parameter value="{{ file[1] }}" name="dst"/>
+                    <parameter name="reboot-retry-count" value="1"/>
+                    <parameter name="retry-count" value="1"/>
                 </parameters>
             </task>
-                {% endfor -%}
-              {% else %}
+                {%- endfor %}
+              {% else -%}
                   {% for data_file in setd["data_files"] -%}
             <task>
                 <type>FileUploadTask</type>
                 <parameters>
                     <parameter name="src" value="ATS3Drop\{{ setd.name }}\data\{{ os.path.basename(data_file) }}"/>
                     <parameter name="dst" value="e:\testing\data\{{ os.path.basename(data_file) }}"/>
+                    <parameter name="reboot-retry-count" value="1"/>
+                    <parameter name="retry-count" value="1"/>
                 </parameters>
             </task>
-                  {% endfor -%}
+                  {%- endfor %}
                   {% for data_file in setd["config_files"] -%}
             <task>
                 <type>FileUploadTask</type>
                 <parameters>
                     <parameter name="src" value="ATS3Drop\{{ setd.name }}\conf\{{ os.path.basename(data_file) }}"/>
                     <parameter name="dst" value="e:\testing\conf\{{ os.path.basename(data_file) }}"/>
+                    <parameter name="reboot-retry-count" value="1"/>
+                    <parameter name="retry-count" value="1"/>
                 </parameters>
             </task>
-                  {% endfor -%}
+                  {%- endfor %}
                   {% for data_file in setd["testmodule_files"] -%}
             <task>
                 <type>FileUploadTask</type>
                 <parameters>
                     <parameter name="src" value="ATS3Drop\{{ setd.name }}\testmodules\{{ os.path.basename(data_file) }}"/>
                     <parameter name="dst" value="c:\sys\bin\{{ os.path.basename(data_file) }}"/>
+                    <parameter name="reboot-retry-count" value="1"/>
+                    <parameter name="retry-count" value="1"/>
                 </parameters>
             </task>
-                  {% endfor -%}
-              {% endif %}
-          {% endif %}
+                  {%- endfor %}
+              {%- endif %}
+          {%- endif %}
           
           {% if setd.engine_ini_file -%}
               {% if (setd.has_key("sis_files") and setd["sis_files"]) or setd["src_dst"] == [] -%}
@@ -136,10 +156,12 @@
                 <parameters>
                     <parameter name="src" value="ATS3Drop\{{ setd.name }}\init\{{ os.path.basename(setd["engine_ini_file"]) }}"/>
                     <parameter name="dst" value="c:\testframework\{{ os.path.basename(setd["engine_ini_file"]) }}"/>
+                    <parameter name="reboot-retry-count" value="1"/>
+                    <parameter name="retry-count" value="1"/>
                 </parameters>
             </task>
-              {% endif %}
-          {% endif %}
+              {%- endif %}
+          {%- endif %}
           
           {% for sis_file in setd["sis_files"] -%}
             <task>
@@ -152,14 +174,11 @@
                     <parameter name="software-package" value="c:\testframework\{{ os.path.basename(sis_file) }}"/>
                </parameters>
             </task>
-          {% endfor -%}
+          {%- endfor %}
         </initialization>    
-        
-        {% include 'prerun_custom.xml' ignore missing %}
-
+        {{ atsself.get_template(setd['custom_dir'], 'prerun_custom.xml') }}
         {% if setd['src_dst'] -%}
             {{ macros.generate_runsteps_stif(setd) }}
-            
             {% for file in setd['src_dst'] -%}
                 {% if setd["test_harness"] == "GENERIC" -%}
                     {% if 'testscript' in file[2] -%}
@@ -167,25 +186,28 @@
         <task>
             <type>MTFTask</type>
             <parameters>
-                <parameter name="file" value="testframework.exe"/>
+                <parameter name="file" value="{{ file[2].split(':')[2] }}"/>
                 <parameter name="parameters" value="{{ file[1] }}"/>
                 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
-                <parameter name="result-file" value="{{ atsself.MTF_LOG_DIR }}\{{ os.path.basename(file[1]).replace('.script', '.htm') }}"/>
+                <parameter name="result-file" value="{{ atsself.MTF_LOG_DIR }}\{{ atspath.basename(file[1]).replace('.script', '.htm') }}"/>
+                <parameter name="result-download-retry-count" value="1" />
+                <parameter name="result-download-reboot-retry-count" value="1" />
             </parameters>
         </task>
-                        {% else %}
+                        {% else -%}
         <task>
             <type>TEFTask</type>
             <parameters>
-                <parameter name="file" value="testexecute.exe"/>
+                <parameter name="file" value="{{ file[2].split(':')[1] }}"/>
                 <parameter name="parameters" value="{{ file[1] }}"/>
                 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
-                <parameter name="result-file" value="{{ atsself.TEF_LOG_DIR }}\{{ os.path.basename(file[1]).replace('.script', '.htm') }}"/>
+                <parameter name="result-file" value="{{ atsself.TEF_LOG_DIR }}\{{ atspath.basename(file[1]).replace('.script', '.htm') }}"/>
+                <parameter name="result-download-retry-count" value="1" />
+                <parameter name="result-download-reboot-retry-count" value="1" />
             </parameters>
         </task>
-                        {% endif %}
-                    {% endif %}
-                    
+                        {%- endif %}
+                    {%- endif %}
                     {% if file[2] == 'testmodule:rtest' -%}
         <task>
             <type>ExecutableTestCaseTask</type>
@@ -194,11 +216,26 @@
                 <parameter name="parser" value="RTestResultParser" />
                 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
                 <parameter name="parameters" value="" />
-                <parameter name="result-file" value="{{ atsself.TEF_LOG_DIR }}\{{ os.path.basename(file[1]).replace('.exe', '.htm') }}"/>
+                <parameter name="result-file" value="{{ atsself.TEF_LOG_DIR }}\{{ atspath.basename(file[1]).replace('.exe', '.htm') }}"/>
+                <parameter name="result-download-retry-count" value="1" />
+                <parameter name="result-download-reboot-retry-count" value="1" />
             </parameters>
         </task>
-                    {% endif %}
-                {% endif %}
+                    {%- endif %}
+                    {% if file[2] == "testmodule:sut" -%}
+        <task>
+            <type>SymbianUnitTestTask</type>
+            <parameters>
+                <parameter value="z:\sys\bin\symbianunittest.exe" name="file"/>
+                <parameter value="-tests={{ file[1] }} -noprompt" name="parameters"/>
+                <parameter value="{{ atsself.SUT_LOG_DIR }}\SymbianUnitTestResults.html" name="result-file"/>
+                <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="result-download-retry-count" value="1" />
+                <parameter name="result-download-reboot-retry-count" value="1" />
+            </parameters>
+        </task>
+                    {%- endif %}
+                {%- endif %}
                 {% if setd["test_harness"] == "EUNIT" -%}
                     {% if file[2] == "testmodule" -%}
         <task>
@@ -208,77 +245,91 @@
                 <parameter name="result-file" value="{{ atsself.EUNIT_LOG_DIR }}\{{ atspath.basename(file[1]).replace('.' + file[1].rsplit(".")[1], '_log.xml') }}"/>
                 <parameter name="parameters" value="{{ test_plan["eunitexerunner_flags"] }} /F {{ atspath.basename(file[1]).replace('.dll', '').replace('.exe', '') }} /l xml {{ atspath.basename(file[1]) }}"/>
                 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="result-download-retry-count" value="1" />
+                <parameter name="result-download-reboot-retry-count" value="1" />
             </parameters>
         </task>
-                    {% endif %}
+                    {%- endif %}
                     {% if file[2] == "testmodule:qt" -%}
         <task>
             <type>QTestTask</type>
             <parameters>
-                <parameter name="file" value="{{ file[1] }}"/>                      
-                <parameter name="parameters" value="-lightxml -o {{ atsself.QT_LOG_DIR }}\{{ os.path.basename(file[1]).replace('.' + file[1].rsplit(".")[1], '_log.xml') }}"/>
-                <parameter name="result-file" value="{{ atsself.QT_LOG_DIR }}\{{ os.path.basename(file[1]).replace('.' + file[1].rsplit(".")[1], '_log.xml') }}"/>
+                <parameter name="file" value="{{ file[1] }}"/>
+                <parameter name="parameters" value="-lightxml -o {{ atsself.QT_LOG_DIR }}\{{ atspath.basename(file[1]).replace('.' + file[1].rsplit(".")[1], '_log.xml') }}"/>
+                <parameter name="result-file" value="{{ atsself.QT_LOG_DIR }}\{{ atspath.basename(file[1]).replace('.' + file[1].rsplit(".")[1], '_log.xml') }}"/>
                 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="result-download-retry-count" value="1" />
+                <parameter name="result-download-reboot-retry-count" value="1" />
             </parameters>
         </task>
-                    {% endif %}
-                {% endif %}
-            {% endfor -%}
-        {% else %}
+                    {%- endif %}
+                {%- endif %}
+            {%- endfor %}
+        {% else -%}
             {{ macros.generate_runsteps_stif_single_set(setd) }}
-        {% endif %}
-        
-        {% include 'postrun_custom.xml' ignore missing %}
+        {%- endif %}
+        {{ atsself.get_template(setd['custom_dir'], 'postrun_custom.xml') }}
         
         <finalization>
         {% if setd["ctc_enabled"] == "True" -%}
         {{ macros.ctc_finalization(setd) }}
-        {% endif %}
+        {%- endif %}
 
             <task>
                 <type>FileDownloadTask</type>
                 <parameters>
-                    <parameter value="{{ atsself.getlogdir(setd) }}\*" name="src"/>
+                    <parameter value="{{ atsself.getlogdir(test_plan, setd) }}\*" name="src"/>
                     <parameter name="recursive" value="true"/>
+                    <parameter name="reboot-retry-count" value="1"/>
+                    <parameter name="retry-count" value="1"/>
                 </parameters>
             </task>
-        {% include 'poststep_custom.xml' ignore missing %}
+        {{ atsself.get_template(setd['custom_dir'], 'poststep_custom.xml') }}
         </finalization>
         
     </execution>    
-    {% endfor -%}
+    {%- endfor %}
     
     {% include 'postset_custom.xml' ignore missing %}
     
     <postActions>
         {% include 'prepostaction.xml' ignore missing %}
         {% for action_type, parameters in test_plan.post_actions -%}
-            {% if action_type == 'RunProcessAction' %}
+            {% if action_type == 'RunProcessAction' -%}
         <action>
             <type>{{ action_type }}</type>
             <parameters>
                 {% for name, value in parameters -%}
                 <parameter name="{{ name }}" value="{{ value }}"/>
-                {% endfor -%}
+                {%- endfor %}
             </parameters>
         </action>
-            {% endif %}
-        {% endfor -%}
+            {%- endif %}
+        {%- endfor %}
         {% if test_plan['report_email'] -%}
         <action>
             <type>EmailAction</type>
             <parameters>
-                <parameter value="Release testing" name="subject"/>
+                <parameter value="ATS test results {{ test_plan['testrun_name'] }}" name="subject"/>
                 <parameter value="{{ test_plan['report_email'] }}" name="to"/>
                 <parameter value="simplelogger" name="format"/>
+                {% if test_plan['report_type'].lower() == 'no_attachment' -%}
+                <parameter value="false" name="attach-report"/>
+                {%- endif %}
             </parameters>
         </action>
-        {% endif %}
+        {%- endif %}
         {% if test_plan['diamonds_build_url'] -%}
         <action>
             <type>DiamondsAction</type>
+            {% if test_plan.sets != [] and test_plan.sets[0]["ctc_enabled"] == "True" -%}
+            <parameters>
+                <parameter value="true" name="send-ctc-data" /> 
+            </parameters>
+            {%- endif %}
         </action>
-        {% endif %}
+        {%- endif %}
+        
         {% include 'postpostaction.xml' ignore missing %}
     </postActions>
     
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/atsconfigparser.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/atsconfigparser.py	Fri Aug 13 14:59:05 2010 +0300
@@ -103,7 +103,7 @@
                     settings[subconfig] = config[subconfig]
         return settings
 
-def converttestxml(specfilename, testxmldata): # pylint: disable-msg=R0912
+def converttestxml(specfilename, testxmldata): # pylint: disable=R0912
     """ convert the specfilename to xml"""
     specfile = open(specfilename)
 
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/custom.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/custom.py	Fri Aug 13 14:59:05 2010 +0300
@@ -20,7 +20,7 @@
 import ats3
 import ats3.dropgenerator as adg
 from optparse import OptionParser
-from path import path # pylint: disable-msg=F0401
+from path import path # pylint: disable=F0401
 import logging
 _logger = logging.getLogger('ats')
 
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/dropgenerator.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/dropgenerator.py	Fri Aug 13 14:59:05 2010 +0300
@@ -21,9 +21,6 @@
 
 """ Generate test drop zip file for ATS3"""
 
-# pylint: disable-msg=W0142,R0912,R0201,R0915,R0913,R0904
-# pylint: disable-msg=C0302
-# pylint: disable-msg=W0404,W0603
 
 #W0142 => * and ** were used
 #C0302 => Too many lines
@@ -31,23 +28,22 @@
 #W => use of global statement
 
 import codecs
-from  xml.parsers.expat import ExpatError
+from xml.parsers.expat import ExpatError
 
 from xml.etree import ElementTree as et
 import pkg_resources
-from path import path # pylint: disable-msg=F0401
+from path import path # pylint: disable=F0401
 import logging
 import os
 import re
 import zipfile
 import amara
-import atsconfigparser
+import ats3.atsconfigparser
 
-# pylint: disable-msg=W0404
 from ntpath import sep as atssep
 import ntpath as atspath
 
-import jinja2 # pylint: disable-msg=F0401
+import jinja2 # pylint: disable=F0401
 
 _logger = logging.getLogger('ats')
 
@@ -106,7 +102,7 @@
         
         if config_file:
             xmltext = et.tostring(xml.getroot(), "ISO-8859-1")
-            xmltext = atsconfigparser.converttestxml(config_file, xmltext)
+            xmltext = ats3.atsconfigparser.converttestxml(config_file, xmltext)
             xml = et.ElementTree(et.XML(xmltext))
             
         return self.generate_drop(test_plan, xml, output_file)
@@ -304,7 +300,7 @@
                     SE(params, "param", engineini=path(r"c:" + os.sep + "testframework") / ini_name)            
                     
                 # if no inifile, but cfg files defined, use those
-                elif setd["config_files"]!=[]:
+                elif setd["config_files"] != []:
                     for config_file in setd["config_files"]:
                         step = SE(case, "step", 
                                   name="Execute test: %s" % config_file.name, 
@@ -444,11 +440,17 @@
             if 'rofs3' in image_file.name:
                 sorted_images.append(image_file)
         for image_file in setd["image_files"]:
-            if 'core' not in image_file.name and 'rofs2' not in image_file.name and 'rofs3' not in image_file.name:
+            if 'core' not in image_file.name and 'rofs2' not in image_file.name and 'rofs3' not in image_file.name and 'udaerase' not in image_file.name.lower():
                 sorted_images.append(image_file)
         if len(sorted_images) > 0 and "rofs" in sorted_images[0]:
             return setd["image_files"]
         return sorted_images
+        
+    def get_udaerase_image(self, setd):
+        for image_file in setd["image_files"]:
+            if 'udaerase' in image_file.name.lower():
+                return image_file
+        return None
     
     def generate_steps(self, setd, case, test_plan):
         """Generate the test plan <step>s."""
@@ -520,7 +522,7 @@
                 filename = file1[1]
                 filename = filename[file1[1].rfind(os.sep)+1:]
                 harness = "testexecute.exe"
-                if file1[2] == "testscript:mtf":
+                if "testscript:mtf" in file1[2]:
                     harness = "testframework.exe"
                 step = SE(case, "step", 
                               name="Execute test: %s" %  filename, harness=setd["test_harness"], 
@@ -530,12 +532,12 @@
                 SE(params, "param", file=harness)
                 SE(params, "param", parameters=file1[1])
                 
-                if file1[2] == "testscript:mtf":
+                if "testscript:mtf" in file1[2]:
                     SE(params, "param", {'result-file': self.MTF_LOG_DIR + os.sep + filename.replace('.script', '.htm')})
                 else:
                     SE(params, "param", {'result-file': self.TEF_LOG_DIR + os.sep + filename.replace('.script', '.htm')})
                 SE(params, "param", timeout=time_out)
-                if file1[2] == "testscript:mtf":
+                if "testscript:mtf" in file1[2]:
                     SE(params, "param", parser="MTFResultParser")
                 else:
                     SE(params, "param", parser="TEFTestResultParser")
@@ -640,32 +642,42 @@
             #for EUnit or other executables
             if sdst[2] == "testmodule":
                 eunit_exe = "EUNITEXERUNNER.EXE"
-                if re_dll.search(filename):                    
-                    step = SE(case, "step", name = "Execute test: %s" % filename, harness=setd["test_harness"],
-                              **self.defaults)
-                    SE(step, "command").text = "execute"
-                    params = SE(step, "params")
-                    SE(params, "param", file=path(r"z:" + os.sep + "sys" + os.sep + "bin") / eunit_exe)
-                    elem = SE(params, "param")
-                    elem.set('result-file', path(self.EUNIT_LOG_DIR) / no_dll_xml)
-                    SE(params, "param", parameters="%s /F %s /l xml %s" % (eunit_flags, no_dll, filename))
-                    SE(params, "param", timeout=time_out)
-            
+                # include dll file only if it has some harness defined, else skip execute step, only install                
+                if filename.lower() in setd['dll_files']:
+                    if setd['dll_files'][filename.lower()] == "":
+                        pass 
+                    else:
+                        if re_dll.search(filename):                    
+                            step = SE(case, "step", name = "Execute test: %s" % filename, harness=setd["test_harness"],
+                                      **self.defaults)
+                            SE(step, "command").text = "execute"
+                            params = SE(step, "params")
+                            SE(params, "param", file=path(r"z:" + os.sep + "sys" + os.sep + "bin") / eunit_exe)
+                            elem = SE(params, "param")
+                            elem.set('result-file', path(self.EUNIT_LOG_DIR) / no_dll_xml)
+                            SE(params, "param", parameters="%s /F %s /l xml %s" % (eunit_flags, no_dll, filename))
+                            SE(params, "param", timeout=time_out)
+                    
             #for QtTest.lib executables
             elif sdst[2] == "testmodule:qt":
-                step = SE(case, "step", name = "Execute Qt-test: %s" % filename, harness=setd["test_harness"],
-                          **self.defaults)
-                SE(step, "command").text = "execute"
-                params = SE(step, "params")
-                SE(params, "param", file=path(sdst[1]))
-                SE(params, "param", parameters=r"-lightxml -o %s\%s" % (path(self.QT_LOG_DIR),  no_dll_xml))
-                elem = SE(params, "param")
-                elem.set('result-file', path(self.QT_LOG_DIR) / no_dll_xml)
-                SE(params, "param", parser="QTestResultParser")
-                elem = SE(params, "param")
-                elem.set('delete-result',"true")
-                SE(params, "param", async="false")
-                SE(params, "param", timeout=time_out)
+                # include dll file only if it has some harness defined, else skip execute step, only install
+                if filename.lower() in setd['dll_files']:
+                    if setd['dll_files'][filename.lower()] == "":
+                        pass 
+                    else:
+                        step = SE(case, "step", name = "Execute Qt-test: %s" % filename, harness=setd["test_harness"],
+                                  **self.defaults)
+                        SE(step, "command").text = "execute"
+                        params = SE(step, "params")
+                        SE(params, "param", file=path(sdst[1]))
+                        SE(params, "param", parameters=r"-lightxml -o %s\%s" % (path(self.QT_LOG_DIR),  no_dll_xml))
+                        elem = SE(params, "param")
+                        elem.set('result-file', path(self.QT_LOG_DIR) / no_dll_xml)
+                        SE(params, "param", parser="QTestResultParser")
+                        elem = SE(params, "param")
+                        elem.set('delete-result',"true")
+                        SE(params, "param", async="false")
+                        SE(params, "param", timeout=time_out)
 
                 
 
@@ -795,7 +807,14 @@
     def check_mtf_harness(self, _setd_):
         """check the testscript.mtf file is present"""
         for _srcdst_ in _setd_['src_dst']:
-            if _srcdst_[2] == "testscript:mtf":
+            if "testscript:mtf" in _srcdst_[2]:
+                return True
+        return False
+        
+    def check_sut_harness(self, _setd_):
+        """check the testscript.sut file is present"""
+        for _srcdst_ in _setd_['src_dst']:
+            if "testmodule:sut" in _srcdst_[2]:
                 return True
         return False
 
@@ -871,11 +890,11 @@
                 # clear the loop variable 
                     loop = ''
                 cust = unicode(custom_action_file.read(1))
-        except Exception, err:
+        except UnicodeError, err:
             _logger.error("Error %s in XML when prosessing %s\n" % ( err, filename))
             xmltree.append(et.Comment("Error in XML file when prosessing %s\n" % ( filename)))
 
-        if loop != '' :
+        if loop != '':
             # we should have used all the input and cleared loop variable
             _logger.warning("Issues in customization file %s in XML when prosessing issue %s \n Line and column refer to section:\n%s\n" % ( filename, err,  loop))
 
@@ -912,11 +931,13 @@
     STIF_LOG_DIR = r"c:\logs\testframework"
     TEF_LOG_DIR = r"c:\logs\testexecute"
     MTF_LOG_DIR = r"c:\logs\testresults"
+    SUT_LOG_DIR = r"c:\sut"
     STIFUNIT_LOG_DIR = r"c:\logs\testframework"
     EUNIT_LOG_DIR = r"c:\Shared\EUnit\logs"
     #QT_LOG_DIR = r"c:\private\Qt\logs"
     QT_LOG_DIR = r"c:\shared\EUnit\logs"
     CTC_LOG_DIR = r"c:\data\ctc"
+    AtsInterface_LOG_DIR = r"c:\spd_logs\xml"
 
     def stif_init_file(self, src_dst):
         """init the STIF format file"""
@@ -955,23 +976,39 @@
             drop_id = temp_drop_id
 
         return atspath.join(ats_network, "ctc_helium" , diamonds_id, drop_id, setd["name"], "ctcdata")
+    
+    def stifmodulename(self, ini_file):
+        modname = None
+        ini = open(ini_file)
+        for line in ini:
+            if line.startswith('ModuleName'):
+                modname = line.split('=')[1].strip()
+        ini.close()
+        return modname
 
-    def getlogdir(self, setd):
+    def getlogdir(self, test_plan, setd):
         """ find the logger directory"""
+        returnval = None
         if setd["test_harness"] == "STIF":
-            return self.STIF_LOG_DIR
+            if test_plan['hti'] == 'True':
+                returnval = self.STIF_LOG_DIR
+            else:
+                returnval = self.AtsInterface_LOG_DIR
         elif setd["test_harness"] == "STIFUNIT":
-            return self.STIFUNIT_LOG_DIR
+            returnval = self.STIFUNIT_LOG_DIR
         elif setd["test_harness"] == "GENERIC":
             if self.check_mtf_harness(setd):
-                return self.MTF_LOG_DIR
+                returnval = self.MTF_LOG_DIR
+            elif self.check_sut_harness(setd):
+                returnval = self.SUT_LOG_DIR
             else:
-                return self.TEF_LOG_DIR
+                returnval = self.TEF_LOG_DIR
         elif setd["test_harness"] == "EUNIT":
             if self.check_qt_harness(setd):
-                return self.QT_LOG_DIR
+                returnval = self.QT_LOG_DIR
             else:
-                return self.EUNIT_LOG_DIR
+                returnval = self.EUNIT_LOG_DIR
+        return returnval
 
     def generate_xml(self, test_plan):
         """generate the XML"""
@@ -989,7 +1026,19 @@
         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
+            template = env.from_string(pkg_resources.resource_string(__name__, 'ats4_template.xml'))# pylint: disable=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
+        return et.ElementTree(et.XML(xmltext))
+        
+    def get_template(self, directory, template_name):
+        if directory:
+            name = os.path.join(directory, template_name)
+            if os.path.exists(name):
+                template_file = open(name)
+                contents = template_file.read()
+                template_file.close()
+                return contents
+        return ''
+    
+    
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/matti/MattiDrops.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/matti/MattiDrops.py	Fri Aug 13 14:59:05 2010 +0300
@@ -21,7 +21,7 @@
 #===============================================================================
 
 """ create the MATTI test drop file for use on the test server """
-# pylint: disable-msg=R0902, R0903, R0912
+# pylint: disable=R0902, R0903, R0912
 
 import os
 import re
@@ -31,7 +31,7 @@
 import logging 
 from optparse import OptionParser
 from xml.etree import ElementTree as et
-from jinja2 import Environment, PackageLoader # pylint: disable-msg=F0401
+from jinja2 import Environment, PackageLoader # pylint: disable=F0401
 
 # Shortcuts
 E = et.Element
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/matti2.py	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,446 @@
+# -*- encoding: latin-1 -*-
+
+#============================================================================ 
+#Name        : matti.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:
+#===============================================================================
+
+"""MATTI test drop generation."""
+
+# pylint: disable=R0201,R0903,R0902,W0142
+#W0142 => * and ** were used
+#R* removed during refactoring
+
+from optparse import OptionParser
+from xml.etree import ElementTree as et
+import logging
+import os
+import re
+import tempfile
+import zipfile
+import pkg_resources # pylint: disable=F0401
+from path import path # pylint: disable=F0401
+import amara
+import ntpath as atspath
+import jinja2 # pylint: disable=F0401
+import ats3.parsers as parser
+
+_logger = logging.getLogger('matti')
+
+# Shortcuts
+E = et.Element
+SE = et.SubElement
+
+class Configuration(object):
+    """
+    MATTI drop generation configuration.
+    """
+    
+    def __init__(self, opts):
+        """
+        Initialize from optparse configuration options.
+        """
+        
+        self._opts = opts
+        # Customize some attributes from how optparse leaves them.
+        self.build_drive = path(self._opts.build_drive)
+        self.file_store = path(self._opts.file_store)
+        self.flash_images = self.split_paths(self._opts.flash_images)
+        self.matti_sis_files = self.split_paths(self._opts.matti_sis_files)
+        self.test_assets = self.split_paths(self._opts.testasset_location)
+        self.template_loc = path(self._opts.template_loc)
+        
+        
+    def split_paths(self, arg, delim=","):
+        """
+        Split the string by delim, removing extra whitespace.
+        """
+        return [path(part.strip()) 
+                for part in arg.split(delim) if part.strip()]
+    
+    def __getattr__(self, attr):
+        return getattr(self._opts, attr)
+    
+    def __str__(self):
+        dump = "Configuration:\n"
+        seen = set()
+        for key, value in vars(self).items():
+            if not key.startswith("_"):
+                dump += "\t%s = %s\n" % (key, value)
+                seen.add(key)
+        for key, value in vars(self._opts).items():
+            if key not in seen:
+                dump += "\t%s = %s\n" % (key, value)
+                seen.add(key)                
+        return dump
+    
+
+class MattiTestPlan(object):
+    """
+    Tells MATTI server what to test and how.
+    
+    The MATTI test plan from which the test.xml file can be written. The test
+    plan requires TestAsset(s) to perform the tests
+    """
+
+    def __init__(self, config):
+        self.pkg_parser = parser.PkgFileParser()
+        self.file_store = config.file_store
+        self.matti_timeout = config.matti_timeout
+        self.test_profiles = config.test_profiles
+        self.sierra_enabled = to_bool(config.sierra_enabled)
+        self.sierra_parameters = config.sierra_parameters
+        self.test_profiles = config.test_profiles.strip().split(",")
+        self.build_drive = config.build_drive
+        self.matti_sis_files = ""
+        self.install_files = []
+        self.matti_task_files = None
+
+    def insert_execution_block(self, block_count=1, image_files=None, matti_sis_files=None, test_asset_path=None, matti_parameters=None):
+        """
+        Insert Matti tasks and test data files into execution block
+        """
+        self.matti_sis_files = matti_sis_files
+        temp_sis_files = [] 
+        if self.matti_sis_files != None:
+            for sis_file in self.matti_sis_files:
+                temp_sis_files.append(sis_file.split("#"))
+        
+        test_asset_path = test_asset_path
+        if image_files is None:
+            image_files = []
+
+        exe_dict = dict(name="exe%d" % block_count, asset_path=test_asset_path, image_files=image_files, matti_sis_files=temp_sis_files)
+        exe_dict = dict(exe_dict, test_timeout=self.matti_timeout)
+        exe_dict = dict(exe_dict, matti_parameters=matti_parameters)
+        exe_dict = dict(exe_dict, sierra_enabled=self.sierra_enabled.lower())
+        exe_dict = dict(exe_dict, sierra_parameters=self.sierra_parameters)
+        
+
+        self.matti_task_files = self.create_matti_task_files_list(self.sierra_enabled, test_asset_path)
+        exe_dict = dict(exe_dict, matti_task_files=self.matti_task_files)
+
+        self.install_files = self.create_install_files_list(test_asset_path)
+        exe_dict = dict(exe_dict, install_files=self.install_files)
+        return exe_dict        
+
+    def create_matti_task_files_list(self, enabler=None, asset_path=None):
+        """
+        Creates list of files needed to include in MATTI execution tasks
+        if sierra.enabled then 
+            profiles (.sip files) are included
+        else
+            all ruby (.rb) files are included
+        """
+
+        profiles = []
+        rb_files = []
+
+        #If sierra engine is enabled (set to True)
+        if self.sierra_enabled.lower() == "true":
+            profile_path = path(os.path.join(asset_path, "profile"))
+            if os.path.exists(profile_path):
+                for profile_name in self.test_profiles: 
+                    item = list(profile_path.walkfiles("%s.sip"%profile_name.lower().strip()))
+                    if len(item) > 0:
+                        #profiles.append(os.path.join(profile_path, item[0]))
+                        profiles.append(asset_path.rsplit(os.sep, 1)[1] + "/" + "profile" + "/" + item[0].rsplit(os.sep, 1)[1])
+                return profiles
+        else: #If sierra engine is not enabled (set to False)
+            if os.path.exists(asset_path):
+                #returns list(asset_path.walkfiles("*.rb")):
+                for item in list(asset_path.walkfiles("*.rb")):
+                    rb_files.append(asset_path.rsplit(os.sep, 1)[1] + "/" + item.rsplit(os.sep, 1)[1])
+                # Sorting the result, so we ensure they are always in similar order.
+                rb_files.sort()
+                return rb_files                      
+
+    def create_install_files_list(self, asset_path=None):
+        """
+        Collects all the .pkg files and extract data
+        Creates  a list of src, dst files.
+        """
+        pkg_files = []
+        if os.path.exists(asset_path):
+            pkg_files =  list(asset_path.walkfiles("*.pkg"))
+            return self.pkg_parser.get_data_files(pkg_files, self.build_drive)
+        else:
+            return None
+         
+    def __getitem__(self, key):
+        return self.__dict__[key]
+
+
+
+class MattiTestDropGenerator(object):
+    """
+    Generate test drop zip file for Matti.
+
+    Generates drop zip files file from Test Assets. The main
+    responsibility of this class is to create testdrop and test.xml
+    file and build a zip file for the MATTI drop.
+    
+    """
+
+    def __init__(self):
+        self.drop_path_root = path("MATTIDrop")
+        self.drop_path = None
+        self.defaults = {}
+
+    def generate(self, xml_dict, output_file, template_loc=None):
+        """Generate a test drop file."""
+        xml = self.generate_xml(xml_dict, template_loc)
+        return self.generate_drop(xml_dict, xml, output_file)
+
+    def generate_drop(self, xml_dict, xml, output_file):
+        """Generate test drop zip file."""
+
+        zfile = zipfile.ZipFile(output_file, "w", zipfile.ZIP_DEFLATED)
+        try:
+            for drop_file, src_file in self.drop_files(xml_dict):
+
+                _logger.info("   + Adding: %s" % src_file.strip())
+                try:
+                    zfile.write(src_file.strip(), drop_file.encode('utf-8'))
+                except OSError, expr:
+                    _logger.error(expr)
+            doc = amara.parse(et.tostring(xml.getroot()))
+            _logger.debug("XML output: %s" % doc.xml(indent=u"yes", encoding="ISO-8859-1"))
+            zfile.writestr("test.xml", doc.xml(indent="yes", encoding="ISO-8859-1"))
+        finally:
+            _logger.info("Matti testdrop created successfully!")
+            zfile.close()
+
+    def generate_xml(self, xml_dict, template_loc):
+        """ generate an XML file"""
+        template_loc = path(template_loc).normpath()
+        loader = jinja2.ChoiceLoader([jinja2.PackageLoader(__name__, 'templates')])
+        env = jinja2.Environment(loader=loader)
+        if template_loc is None or not ".xml" in template_loc.lower():
+            template = env.from_string(pkg_resources.resource_string(__name__, 'matti_template.xml'))# pylint: disable=E1101
+        else:
+            template = env.from_string(open(template_loc).read())# pylint: disable=E1101
+            
+        xmltext = template.render(xml_dict=xml_dict, os=os, atspath=atspath, atsself=self).encode('ISO-8859-1')
+        #print xmltext
+        return et.ElementTree(et.XML(xmltext))
+
+
+    def generate_testasset_zip(self, xml_dict, output_file=None):
+        """Generate TestAsset.zip for the MATTI server"""
+        filename = xml_dict["temp_directory"].joinpath(r"TestAsset.zip")
+        
+        if output_file != None:
+            filename = output_file
+            
+        for exe_block in xml_dict["execution_blocks"]:
+            testasset_location = path(exe_block["asset_path"])
+
+            zfile = zipfile.ZipFile(filename, "w", zipfile.ZIP_DEFLATED)
+            try:
+                for file_ in list(testasset_location.walkfiles()):
+                    file_mod = file_.replace(testasset_location, "")
+                    zfile.write(file_, file_mod.encode('utf-8'))
+            finally:
+                zfile.close()
+        return filename
+            
+    def drop_files(self, xml_dict):
+        """Yield a list of drop files."""
+        
+        drop_set = set()
+        drop_files = []
+
+        #Adding test asset, there's an execution block for every test asset
+        for execution_block in xml_dict["execution_blocks"]:
+            testasset_location = path(execution_block["asset_path"])
+            asset_files = list(testasset_location.walkfiles())
+
+            drop_path = path(execution_block["name"])
+            
+            drop_files = ((drop_path.parent, "images", execution_block["image_files"]),
+                          (drop_path.parent,  "sisfiles", execution_block["matti_sis_files"]),
+                          (drop_path.parent,  "mattiparameters", execution_block["matti_parameters"]),
+                          (drop_path.parent,  execution_block["name"], asset_files))
+    
+            for drop_dir, sub_dir, files in drop_files:
+                for file_path in files:
+                    if file_path != None:
+                        
+                        #Adding image files to the top level,                         
+                        #Also adding mattiparameters.xml file
+                        if  sub_dir.lower() == "images" or sub_dir.lower() == "mattiparameters":
+                            drop_file = drop_dir.joinpath(sub_dir, file_path.name)
+                        
+                        #Adding sisfiles, installation of matti sisfiles is a bit different
+                        #than normal sisfiles
+                        elif sub_dir.lower() == "sisfiles":
+                            drop_file = drop_dir.joinpath(sub_dir, path(file_path[0]).name)
+                            file_path = path(file_path[0])
+                                                    
+                        #Adding test asset files                        
+                        else:
+                            temp_file = file_path.rsplit(os.sep, 1)[0]
+                            replace_string = testasset_location.rsplit(os.sep, 1)[0]
+                            drop_file = drop_dir.joinpath(sub_dir + "\\" + temp_file.replace(replace_string, ""), file_path.name)
+                            
+                        drop_file = drop_file.normpath()
+                        if drop_file not in drop_set:
+                            drop_set.add(drop_file)
+                            yield (drop_file, file_path.normpath())        
+       
+
+class MattiComponentParser(object):
+    """
+    Add information to the XML dictionary
+    """
+    def __init__(self, config):
+        self.flash_images = [path(p) for p in config.flash_images]
+        self.matti_parameters = [path(config.matti_parameters).normpath()]
+        self.matti_sis_files = config.matti_sis_files
+        self.build_drive = config.build_drive
+        self.test_timeout = config.matti_timeout
+        self.diamonds_build_url = config.diamonds_build_url
+        self.testrun_name = config.testrun_name
+        self.alias_name = config.alias_name
+        self.device_type = config.device_type
+        self.report_email = config.report_email
+        self.email_format = config.email_format
+        self.email_subject = config.email_subject
+
+        self.xml_dict = {}
+
+        
+    def insert_pre_data(self):
+        """
+        Creates a dictionary for the data before
+        the <execution> block starts.
+        """
+        self.xml_dict = dict(self.xml_dict, temp_directory=path(tempfile.mkdtemp()))
+        self.xml_dict = dict(self.xml_dict, diamonds_build_url=self.diamonds_build_url)
+        self.xml_dict = dict(self.xml_dict, testrun_name=self.testrun_name)
+        self.xml_dict = dict(self.xml_dict, alias_name=self.alias_name)
+        self.xml_dict = dict(self.xml_dict, device_type=self.device_type)
+
+    def create_execution_block(self, config):
+        """Parse flash images and creates execution block for matti"""
+        execution_block_list = []
+        block_count = 0
+        for test_asset in config.test_assets:
+            if os.path.exists(test_asset):
+                test_plan = MattiTestPlan(config)
+                block_count += 1
+                execution_block_list.append(test_plan.insert_execution_block(block_count, self.flash_images, self.matti_sis_files, test_asset, self.matti_parameters))
+
+
+        self.xml_dict = dict(self.xml_dict,  execution_blocks=execution_block_list)
+
+    def insert_post_data(self):
+        """
+        Creates a dictionary for the data after
+        the <execution> block ends. Or, Postaction data
+        """
+        self.xml_dict = dict(self.xml_dict, report_email=self.report_email)
+        self.xml_dict = dict(self.xml_dict, email_format=self.email_format)
+        self.xml_dict = dict(self.xml_dict, email_subject=self.email_subject)
+            
+        return self.xml_dict
+    
+def create_drop(config):
+    """Create a test drop."""
+    xml_dict = {}
+        
+    _logger.debug("initialize Matti dictionary")
+    drop_parser = MattiComponentParser(config)
+    
+    #Inserting data for test run and global through out the dictionary
+    drop_parser.insert_pre_data()
+    
+    #for every asset path there should be a
+    #separate execution block
+    drop_parser.create_execution_block(config) 
+
+    #Inserting reporting and email data (post actions)
+    xml_dict = drop_parser.insert_post_data()    
+    
+    generator = MattiTestDropGenerator()
+    
+    _logger.info("generating drop file: %s" % config.drop_file)
+    generator.generate(xml_dict, output_file=config.drop_file, template_loc=config.template_loc)
+
+def to_bool(param):
+    """setting a true or false based on a param value"""
+    param = str(param).lower()
+    if "true" == param or "t" == param or "1" == param:
+        return "True"
+    else:
+        return "False"
+
+def main():
+    """Main entry point."""    
+    
+    
+    cli = OptionParser(usage="%prog [options] PATH1 [PATH2 [PATH3 ...]]")
+    cli.add_option("--ats4-enabled", help="ATS4 enabled", default="True")
+    cli.add_option("--build-drive", help="Build area root drive")
+    cli.add_option("--drop-file", help="Name for the final drop zip file", default="MATTIDrop.zip")
+
+    cli.add_option("--minimum-flash-images", help="Minimum amount of flash images", default=2)
+    cli.add_option("--flash-images", help="Paths to the flash image files", default="")
+    cli.add_option("--matti-sis-files", help="Sis files location", default="")
+
+    cli.add_option("--testasset-location", help="MATTI test assets location", default="")
+    cli.add_option("--template-loc", help="Custom template location", default="")
+    cli.add_option("--sierra-enabled", help="Enabled or disabled Sierra", default=True)
+    cli.add_option("--test-profiles", help="Test profiles e.g. bat, fute", default="")
+    cli.add_option("--matti-parameters", help="Location of xml file contains additional parameters for Matti", default="")
+
+    cli.add_option("--matti-timeout", help="Test execution timeout value (default: %default)", default="60")
+    cli.add_option("--sierra-parameters", help="Additional sierra parameters for matti task", default="")
+    cli.add_option("--file-store", help="Destination path for reports.", 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("--alias-name", help="Name of the alias", default="sut_s60")
+    cli.add_option("--device-type", help="Device type (e.g. 'PRODUCT')", default="unknown")    
+    cli.add_option("--diamonds-build-url", help="Diamonds build url")         
+    cli.add_option("--email-format", help="Format of an email", default="")
+    cli.add_option("--email-subject", help="Subject of an email", default="Matti Testing")
+    
+
+    cli.add_option("--verbose", help="Increase output verbosity", action="store_true", default=False)
+
+    opts, _ = cli.parse_args()
+
+    ats4_enabled = to_bool(opts.ats4_enabled)
+    
+    if ats4_enabled == "False":
+        cli.error("MATTI tests execute on ATS4. Set property 'ats4.enabled'")
+    
+    if not opts.flash_images:
+        cli.error("no flash image files given")
+    if len(opts.flash_images.split(",")) < int(opts.minimum_flash_images):
+        cli.error("Not enough flash files: %i defined, %i needed" % (len(opts.flash_images.split(",")), int(opts.minimum_flash_images) ))
+
+    if opts.verbose:
+        _logger.setLevel(logging.DEBUG)
+        logging.basicConfig(level=logging.DEBUG)
+    _ = tempfile.mkdtemp()
+    config = Configuration(opts)
+    create_drop(config)
+
+if __name__ == "__main__":
+    main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/matti_template.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
+<!-- 
+============================================================================ 
+Name        : matti_template.xml
+Part of     : Helium 
+
+Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+All rights reserved.
+This component and the accompanying materials are made available
+under the terms of the License "Eclipse Public License v1.0"
+which accompanies this distribution, and is available
+at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+Initial Contributors:
+Nokia Corporation - initial contribution.
+
+Contributors:
+
+Description:
+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 xml_dict['diamonds_build_url'] -%}
+        <meta name="diamonds-buildid">{{ xml_dict['diamonds_build_url'] }}</meta> 
+        <meta name="diamonds-testtype">Smoke</meta>
+        {% endif %}
+        <meta name="name">{{ xml_dict['testrun_name'] }}</meta> 
+    </metadata>
+    
+    <agents>
+        <agent alias="{{ xml_dict['alias_name'] }}">
+            <property name="hardware" value="{{ xml_dict["device_type"] }}"/>
+        </agent>
+    </agents>
+    
+    
+    {% for exe_block in xml_dict['execution_blocks'] -%}
+    <execution defaultAgent="{{ xml_dict['alias_name'] }}">        
+        <initialization>
+        
+            {% if exe_block['image_files'] -%}
+            <task agents="{{ xml_dict['alias_name'] }}">
+                <type>FlashTask</type>
+                <parameters>
+                {% set i = 1 %}
+                {% for img in exe_block['image_files'] -%}
+                    <parameter name="image-{{ i }}" value="images\{{ os.path.basename(img) }}" />
+                    {% set i = i + 1 %}
+                {% endfor -%}
+                </parameters>
+            </task>
+            {% endif %}
+                     
+
+            {% if exe_block['install_files'] != [] -%}
+              {% for file in exe_block['install_files'] -%}            
+            <task agents="{{ xml_dict['alias_name'] }}">
+                <type>FileUploadTask</type>
+                <parameters>
+                    <parameter name="src" value="{{exe_block['name']}}{{ atspath.normpath(atspath.normpath(file[0]).replace(atspath.normpath(exe_block['asset_path']).rsplit("\\", 1)[0], "")) }}"/>
+                    <parameter name="dst" value="{{ atspath.normpath(file[1]) }}"/>
+                </parameters>
+            </task>
+              {% endfor -%}
+            {% endif %}
+            
+            {% if exe_block['matti_sis_files'] != [] -%}
+              {% for sisfile in exe_block['matti_sis_files'] -%}            
+            <task agents="{{ xml_dict['alias_name'] }}">
+                <type>FileUploadTask</type>
+                <parameters>
+                    <parameter name="src" value="sisfiles\{{ os.path.basename(sisfile[0]) }}"/>
+                    <parameter name="dst" value="{{ sisfile[2] }}"/>
+                </parameters>
+            </task>
+              {% endfor -%}
+            {% endif %}
+
+          {% for sis_file in exe_block["matti_sis_files"] -%}
+            <task agents="{{ xml_dict['alias_name'] }}">
+               <type>InstallSisTask</type>
+               <parameters>
+                    <parameter name="software-package" value="{{ sis_file[2] }}"/>
+                    <parameter name="timeout" value="{{ exe_block["test_timeout"] }}"/>
+                    <parameter name="upgrade-data " value="true"/>
+                    <parameter name="ignore-ocsp-warnings" value="true"/>
+                    <parameter name="ocsp-done" value="true"/>
+                    <parameter name="install-drive" value="{{ sis_file[2].split(":")[0] }}"/>
+                    <parameter name="overwrite-allowed" value="true"/>
+                    <parameter name="download-allowed" value="false"/>
+                    <parameter name="download-username" value="user"/>
+                    <parameter name="download-password" value="passwd"/>
+                    <parameter name="upgrade-allowed" value="true"/>
+                    <parameter name="optional-items-allowed" value="true"/>
+                    <parameter name="untrusted-allowed" value="true"/>
+                    <parameter name="package-info-allowed" value="true"/>
+                    <parameter name="user-capabilities-granted" value="true"/>
+                    <parameter name="kill-app" value="true"/>
+               </parameters>
+            </task>
+          {%- endfor -%}
+
+            <task agents="{{ xml_dict['alias_name'] }}">
+                <type>RebootTask</type>
+                <parameters/>                
+            </task>
+            <task agents="{{ xml_dict['alias_name'] }}">
+                <type>CreateDirTask</type>
+                <parameters>                
+                    <parameter value="c:\logs\testability" name="dir"/>
+                </parameters>
+            </task>
+        </initialization>
+
+        {% for task_file in exe_block["matti_task_files"] -%}
+        <task agents="{{ xml_dict['alias_name'] }}">
+           <type>MATTITask</type>
+           <parameters>
+              <parameter value="{{ exe_block["name"] }}\matti_testcases\" name="script"/>
+              <parameter value="{{ exe_block["name"] }}\matti_testcases\mattiparameters\{{ os.path.basename(exe_block["matti_parameters"][0]) }}" name="xml"/>
+              <parameter value="{{ exe_block['test_timeout'] }}" name="timeout"/>
+              <parameter value="{{ exe_block["sierra_enabled"] }}" name="sierra"/>
+              <parameter value="{{ exe_block["sierra_parameters"] }} -e %TEST_RUN_SANDBOX%/{{ exe_block["name"] }}/{{ task_file }} test_unit" name="executable-parameters"/>
+           </parameters>
+        </task>
+        {% endfor -%}
+        
+        <finalization>
+	      <task agents="{{ xml_dict['alias_name'] }}">
+	        <type>CleanupTask</type>
+	        <parameters>
+	          <parameter value="true" name="upload-files"/>
+	        </parameters>
+	      </task>
+        </finalization>
+    </execution>    
+    {% endfor -%}
+    
+    <postActions>
+    <action>
+      <type>EmailAction</type>
+      <parameters>
+        <parameter value="{{ xml_dict['email_subject'] }}" name="subject"/>
+        <parameter value="{{ xml_dict['report_email'] }}" name="to"/>
+        <parameter value="{{ xml_dict['email_format'] }}" name="format"/>
+      </parameters>
+    </action>
+    </postActions>
+    
+</testrun>
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/parsers.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/parsers.py	Fri Aug 13 14:59:05 2010 +0300
@@ -22,10 +22,6 @@
 """ The ATS related parsers """
 
 
-# pylint: disable-msg=W0142,W0102
-# pylint: disable-msg=C0302
-# pylint: disable-msg=R0201,R0912,R0915,R0911,R0902
-
 #W0142 => * and ** were used
 #W0102 => Dangerous default value [] as argument
 #C0302 => Too many lines
@@ -70,7 +66,7 @@
     def __init__(self):
         self.path_to_build = ""
 
-    def get_cpp_output(self, bld_path = None, output_parameter = "n", imacros = None):
+    def get_cpp_output(self, bld_path = None, output_parameter = "n", imacros = None, bld_drive=None):
         """
         To clean out conditionals from the compilation it is necessary to 
         use C preprocessing to clean out those.
@@ -90,8 +86,8 @@
         else:
             os.chdir(os.path.normpath(os.path.join(bld_path)))
             
-        if imacros is not None:
-            includedir = os.path.join(os.path.splitdrive(bld_path)[0] + os.sep, 'epoc32', 'include')
+        if imacros and bld_drive:
+            includedir = os.path.join(bld_drive + os.sep, 'epoc32', 'include')
             command = r"cpp -imacros %s -I %s bld.inf" % (str(imacros), includedir)
         else:
             command = u"cpp bld.inf"
@@ -198,6 +194,7 @@
                 test_sets[t_case[1]]['content'][t_case[1]]['harness'] = harness
                 test_sets[t_case[1]]['content'][t_case[1]]['pkg_files'] = pkg_parser.get_pkg_files(t_case[1], False)
                 test_sets[t_case[1]]['content'][t_case[1]]['mmp_files'] = bld_parser.get_test_mmp_files(t_case[1], False)
+                test_sets[t_case[1]]['content'][t_case[1]]['dll_files'] = mmp_parser.get_dll_files(t_case[1])
             else:
                 for key, value in test_sets.items():
                     if t_case[0] in value['content'].keys():
@@ -208,6 +205,7 @@
                             test_sets[key]['content'][t_case[1]]['harness'] = harness
                             test_sets[key]['content'][t_case[1]]['pkg_files'] = pkg_parser.get_pkg_files(t_case[1], False)
                             test_sets[key]['content'][t_case[1]]['mmp_files'] = bld_parser.get_test_mmp_files(t_case[1], False)
+                            test_sets[key]['content'][t_case[1]]['dll_files'] = mmp_parser.get_dll_files(t_case[1])
                         else:
                             test_sets[t_case[1]] = {}
                             test_sets[t_case[1]]['content'] = {}
@@ -216,6 +214,7 @@
                             test_sets[t_case[1]]['content'][t_case[1]]['harness'] = harness
                             test_sets[t_case[1]]['content'][t_case[1]]['pkg_files'] = pkg_parser.get_pkg_files(t_case[1], False)
                             test_sets[t_case[1]]['content'][t_case[1]]['mmp_files'] = bld_parser.get_test_mmp_files(t_case[1], False)
+                            test_sets[t_case[1]]['content'][t_case[1]]['dll_files'] = mmp_parser.get_dll_files(t_case[1])
 
         os.chdir(temp_path)
         if test_sets == {}:
@@ -430,6 +429,59 @@
         if mmp file is not given, the function will try to find the file(s) on the given location with extension ".mmp"
         """
         return self.read_information_from_mmp(path_to_mmp, 7)
+    
+    def get_dll_files(self, path_to_mmp = None):
+        """
+        Returns the dll files and their harness of the test component        
+        """
+        return self.read_information_from_mmp(path_to_mmp, 8)
+
+    def get_mmp_harness(self, libraries=None):
+        """
+        Harness was actually calculated at the test component level, it has to be calculated at the
+        mmp file level and it has to be stored as "dll file":"harness" in a dictionary so that while writing
+        execute step in test.xml; the dlls which doesn't have any harness are skipped from being written. 
+        
+        This method identifies the harness from the given list of list libraries found in mmp file under LIBRARY tag(s)
+        Returns the harness of the libraries in mmp file        
+        """        
+        stif = False
+        eunit = False
+        stifunit = False
+        generic = False
+        if libraries:
+            if "stiftestinterface.lib" in libraries:
+                stif = True
+            if "eunit.lib" in libraries or "qttest.lib" in libraries:
+                eunit = True
+            if "stifunit.lib" in libraries:
+                stifunit = True
+            elif "testexecuteutils.lib" in libraries or 'testframeworkclient.lib' in libraries or 'rtest' in libraries or 'symbianunittestfw.lib' in libraries:
+                generic = True
+        
+        return self.select_harness(generic, stif, eunit, stifunit)           
+
+
+    def select_harness(self, generic, stif, eunit, stifunit):
+        """
+        return the harness based on the Test Framework
+        """
+        harness = ""
+        if generic:
+            harness = "GENERIC"
+        elif stif and eunit:
+            #_logger.warning("both eunit.lib and stiftestinterface.lib listed in mmp file - choosing STIF.")
+            harness = "STIF"
+        elif stif and not eunit:
+            harness = "STIF"
+        elif eunit and not stif:
+            harness = "EUNIT"
+        elif stifunit and not stif and not eunit:
+            harness = "STIFUNIT"
+
+        return harness
+
+
 
     def read_information_from_mmp(self, path_to_mmp, flag = 0):
         """
@@ -444,19 +496,17 @@
         5 - libraries
         6 - harness (in case of test component)
         7 - mmpfilename
+        8 - dictionary of dll files and their harness 
         """
 
 
         filename = ""
         filetype = ""
         dll_type = ""
+        libs = []
+        dll_files = {}
         libraries = []
         lst_mmp_paths = []
-        harness = ""
-        stif = False
-        eunit = False
-        stifunit = False
-        tef = False
         self.path_to_mmp = path_to_mmp
         try:
             if isinstance(path_to_mmp, list):
@@ -472,6 +522,7 @@
                     lst_mmp_paths.append(self.path_to_mmp)
 
             for mmp in lst_mmp_paths:
+                mmp_harness = ""
                 mmp_file = open(mmp, 'r')
                 for line in mmp_file:
                     if re.match(r"\A(target\s).*([.]\w+)", line.lower().strip()):
@@ -481,33 +532,19 @@
                     elif re.match(r"\A(targettype\s).*", line.lower().strip()):
                         found = re.findall(r"\Atargettype[\s]*(\w+)", line.lower())
                         if found:
-                            filetype = found[0]                       
-
-                libraries = libraries + re.findall(r"\b(\w+[.]lib)\b", mmp.text().lower())
+                            filetype = found[0]
+                libs = []                                       
+                libs = re.findall(r"\b(\w+[.]lib)\b", mmp.text().lower())       
+                # get harness for a mmp/dll file         
+                mmp_harness = self.get_mmp_harness(libs)
+                # store the harness of every dll file, later to be used while writing test.xml execute steps
+                dll_files[filename] = mmp_harness
+                libraries = libraries + libs
                 if '//rtest' in mmp.text().lower() or '* rtest' in mmp.text().lower() or '// rtest' in mmp.text().lower():
                     libraries.append('rtest')
-            
-            if libraries:
-                if "stiftestinterface.lib" in libraries:
-                    stif = True
-                if "eunit.lib" in libraries or "qttest.lib" in libraries:
-                    eunit = True
-                if "stifunit.lib" in libraries:
-                    stifunit = True
-                elif "testexecuteutils.lib" in libraries or 'testframeworkclient.lib' in libraries or 'rtest' in libraries:
-                    tef = True
-
-            if tef:
-                harness = "GENERIC"
-            elif stif and eunit:
-                #_logger.warning("both eunit.lib and stiftestinterface.lib listed in mmp file - choosing STIF.")
-                harness = "STIF"
-            elif stif and not eunit:
-                harness = "STIF"
-            elif eunit and not stif:
-                harness = "EUNIT"
-            elif stifunit and not stif and not eunit:
-                harness = "STIFUNIT"
+                    
+            # get harness for one (sub)component file
+            harness = self.get_mmp_harness(libraries)            
 
             if harness is "":
                 dll_type = "dependent"
@@ -518,23 +555,27 @@
 
         except:
             traceback.print_exc()
-        finally:
+        else:
+            returnvals = None
             if flag == 0:
-                return (filename, filetype, libraries, harness)
+                returnvals = (filename, filetype, libraries, harness)
             elif flag == 1:
-                return (filename, filetype, libraries)
+                returnvals = (filename, filetype, libraries)
             elif flag == 2:
-                return (filename, filetype)
+                returnvals = (filename, filetype)
             elif flag == 3:
-                return filename
+                returnvals = filename
             elif flag == 4:
-                return filetype
+                returnvals = filetype
             elif flag == 5:
-                return libraries
+                returnvals = libraries
             elif flag == 6:
-                return harness
+                returnvals = harness
             elif flag == 7:
-                return dll_type
+                returnvals = dll_type
+            elif flag == 8:
+                returnvals = dll_files
+            return returnvals
 
 class PkgFileParser(object):
     """
@@ -545,9 +586,10 @@
     for every file in the pkg file
     """
 
-    def __init__(self, bldpath, platform = None, specific_pkg = None, drive=''):
+    def __init__(self, bldpath = None, platform = None, specific_pkg = None, drive=''):
         self.platform = platform
         self.build_platform = None
+        self.build_target = 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() 
@@ -619,7 +661,7 @@
         self.exclude = exclude
         self._files = []
 
-        if type(location) is not list:
+        if type(location).__name__ != 'list':
             locations = [location]
         else:
             locations = location
@@ -628,7 +670,7 @@
             
             #if location is already a file
             if ".pkg" in str(_file_).lower():
-                self._files = _file_
+                self._files.append(_file_)
             else:
                 self.location = path(_file_)
 
@@ -657,11 +699,12 @@
         result = re.search(r'^\s*"(.*?)".*?-.*?"(.*?)"', pkg_line)
 
         if result is None:
+            if pkg_line.startswith('"'):
+                _logger.warning(pkg_line.strip() + ' line not valid pkg format in ' + pkg_file)
             return None
         val1, val2 = result.groups()
 
         if val1 != "":
-            
             #replacing delimiters (${platform} and ${target}) in PKG file templates, 
             #for instance, QT tests PKG files have delimeters 
             if "$(platform)" in val1.lower() and self.build_platform is not None:
@@ -669,13 +712,20 @@
             if "$(target)" in val1.lower() and self.build_target is not None:
                 val1 = val1.lower().replace("$(target)", self.build_target)
 
-            if path.isabs(path(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())
+            #For MATTI PKG files in which location of the data files are unknown or can be changed
+            if "[PKG_LOC]" in val1.upper():
+                val1 = val1.replace("[PKG_LOC]", self.pkg_file_path)
+
+            if os.path.exists(val1):
+                map_src = os.path.abspath(val1)
             else:
-                map_src = str(path.joinpath(self.pkg_file_path, path(val1)).normpath())
-            map_dst = str(path(val2).normpath())
+                if os.path.isabs(os.path.normpath(val1)):
+                    map_src = os.path.normpath(os.path.join(self.drive, val1))
+                elif re.search(r"\A\w", val1, 1):
+                    map_src = os.path.normpath(os.path.join(self.pkg_file_path + os.sep, os.path.normpath(val1)))
+                else:
+                    map_src = os.path.normpath(os.path.join(self.pkg_file_path, val1))
+            map_dst = os.path.normpath(val2)
         else:
             map_src, map_dst = val1, val2
         map_src = map_src.strip()
@@ -710,7 +760,10 @@
                 if "qttest.lib" in _libraries_:
                     file_type = "data" + ":qt:dependent" 
                 else:
-                    file_type = "testmodule"
+                    if 'symbianunittestfw.lib' in _libraries_:
+                        file_type = "testmodule:sut"
+                    else:
+                        file_type = "testmodule"
                     
         elif ext == 'exe' and 'rtest' in _libraries_:
             file_type = "testmodule:rtest"
@@ -731,9 +784,22 @@
             file_type = "pmd"
         elif ext == "script":
             if "testframeworkclient.lib" in _libraries_:
-                file_type = "testscript:mtf"
+                file_type = "testscript:mtf:testframework.exe"
             else:
-                file_type = "testscript"
+                file_type = "testscript:testexecute.exe"
+            if ',' in pkg_line:
+                exename = pkg_line.split(',')[1].strip()
+                if exename == 'install_only':
+                    file_type = "data"
+                elif exename == 'testframework.exe':
+                    file_type = "testscript:mtf:" + exename
+                elif exename == 'testexecute.exe':
+                    file_type = "testscript:" + exename
+                else:
+                    if "testframeworkclient.lib" in _libraries_:
+                        file_type = "testscript:mtf:" + exename
+                    else:
+                        file_type = "testscript:" + exename
         else:
             file_type = "data"
 
@@ -747,6 +813,9 @@
     def read_pkg_file(self, pkg_files):
         """Reads contents of PKG file"""
         pkg_paths = []
+        if type(pkg_files).__name__ != "list":
+            pkg_files = [pkg_files]
+            
         for pkg_file in pkg_files:
             if not os.path.exists( pkg_file ):
                 _logger.error("No PKG -file in path specified")
@@ -758,7 +827,8 @@
                 except UnicodeError:
                     file1 = open(pkg_file, 'r')
                     lines = file1.readlines()
-                pkg_file_path = path(os.path.dirname(pkg_file))
+
+                pkg_file_path = path((pkg_file.rsplit(os.sep, 1))[0])
                 for line in lines:
                     pkg_path = self.__map_pkg_path(line, pkg_file_path, os.path.basename(pkg_file))
                     if pkg_path is None:
@@ -766,4 +836,4 @@
                     else:
                         pkg_paths.append(pkg_path)
 
-        return pkg_paths
\ No newline at end of file
+        return pkg_paths
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/templates/ats4_macros.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/templates/ats4_macros.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -19,7 +19,6 @@
 
 ============================================================================
 -->
-
 {% macro ctc_initialization() -%}
             <task>
                 <type>CreateDirTask</type>
@@ -31,6 +30,7 @@
                 <type>NonTestExecuteTask</type>
                 <parameters>
                     <parameter value="z:\sys\bin\ctcman.exe" name="file" />
+                    <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
                 </parameters>
             </task>
 {%- endmacro %}
@@ -41,6 +41,7 @@
                 <parameters>
                     <parameter value="writelocal" name="parameters" />
                     <parameter value="z:\sys\bin\ctcman.exe" name="file" />
+                    <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
                 </parameters>
             </task>
             <task>
@@ -48,24 +49,19 @@
                 <parameters>
                     <parameter value="writefile" name="parameters" />
                     <parameter value="z:\sys\bin\ctcman.exe" name="file" />
+                    <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
                 </parameters>
             </task>
-            
-            {% if test_plan["ctc_run_process_params"].strip() != "" -%}            
             <task>
-              <type>FileDownloadTask</type>
-              <parameters>
-                  <parameter name="src" value="{{ atsself.CTC_LOG_DIR }}\ctcdata.txt"/>
-                  <parameter name="dst" value="{{ atsself.ctcnetworkpath(setd, test_plan) }}"/>
-              </parameters>
-            </task>
-            {% endif %}
-            
-            <task>
-              <type>FileDownloadTask</type>
-              <parameters>
-                  <parameter name="src" value="{{ atsself.CTC_LOG_DIR }}\ctcdata.txt"/>
-              </parameters>
+                <metadata>
+                    <meta name="file-type">CTCDATA</meta> 
+                </metadata>
+                <type>FileDownloadTask</type>
+                <parameters>
+                    <parameter name="src" value="{{ atsself.CTC_LOG_DIR }}\ctcdata.txt"/>
+                    <parameter name="reboot-retry-count" value="1"/>
+                    <parameter name="retry-count" value="1"/>
+                </parameters>
             </task>
 {%- endmacro %}
 
@@ -76,23 +72,25 @@
         <task>
             <type>StifRunCasesTask</type>
             <parameters>
-              	<parameter name="filter" value="*"/>
-              	<parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
-              	<parameter name="engineini" value="{{ ini_file[1] }}"/>
+                <parameter name="filter" value="*"/>
+                <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="engineini" value="{{ ini_file[1] }}"/>
             </parameters>
         </task>
-        {% else %}
+        {% else -%}
         <task>
             <type>AtsInterfaceTask</type>
             <parameters>
-              	<parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
-              	<parameter name="file" value="atsinterface.exe" />
-              	<parameter name="parameters" value="-engineini {{ ini_file[1] }}" />
-              	<parameter name="result-file" value="{{ atsself.STIF_LOG_DIR }}\{{ os.path.basename(ini_file[1]).replace('.' + ini_file[1].rsplit(".")[1], '.xml') }}" />
+                <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="file" value="atsinterface.exe" />
+                <parameter name="parameters" value="-testmodule {{ atsself.stifmodulename(ini_file[0]) }} -engineini {{ ini_file[1] }}" />
+                <parameter name="result-file" value="{{ atsself.AtsInterface_LOG_DIR }}\{{ atsself.stifmodulename(ini_file[0]) + '.xml' }}" />
+                <parameter name="result-download-retry-count" value="1" />
+                <parameter name="result-download-reboot-retry-count" value="1" />
             </parameters>
         </task>
-        {% endif %}
-            {% else %}
+        {%- endif %}
+            {% else -%}
                 {% for file in setd['src_dst'] -%}
                     {% if setd["test_harness"] == "STIF" or setd["test_harness"] == "STIFUNIT" -%}
                         {% if file[2] == "conf" and ".dll" not in file[1].lower() -%}
@@ -100,120 +98,129 @@
         <task>
             <type>StifRunCasesTask</type>
             <parameters>
-              	<parameter name="module" value="TESTSCRIPTER"/>
-              	<parameter name="filter" value="*"/>
-              	<parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
-              	<parameter name="testcase-file" value="{{ file[1] }}"/>
+                <parameter name="module" value="TESTSCRIPTER"/>
+                <parameter name="filter" value="*"/>
+                <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="testcase-file" value="{{ file[1] }}"/>
             </parameters>
         </task>
-        {% else %}
+        {% else -%}
         <task>
             <type>AtsInterfaceTask</type>
             <parameters>
-              	<parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
-              	<parameter name="file" value="atsinterface.exe" />
-              	<parameter name="parameters" value="-testmodule TESTSCRIPTER" />
-              	<parameter name="result-file" value="{{ atsself.STIF_LOG_DIR }}\TESTSCRIPTER.xml" />
+                <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="file" value="atsinterface.exe" />
+                <parameter name="parameters" value="-testmodule TESTSCRIPTER" />
+                <parameter name="result-file" value="{{ atsself.AtsInterface_LOG_DIR }}\TESTSCRIPTER.xml" />
+                <parameter name="result-download-retry-count" value="1" />
+                <parameter name="result-download-reboot-retry-count" value="1" />
             </parameters>
         </task>
-        {% endif %}
-                        {% endif %}
+        {%- endif %}
+                        {%- endif %}
                         {% if file[2] == "testmodule" -%}
         {% if test_plan['hti'] == 'True' -%}
         <task>
             <type>StifRunCasesTask</type>
             <parameters>
-              	<parameter name="module" value="{{ os.path.basename(file[1]) }}"/>
-              	<parameter name="filter" value="*"/>
-              	<parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="module" value="{{ os.path.basename(file[1]) }}"/>
+                <parameter name="filter" value="*"/>
+                <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
             </parameters>
         </task>
-        {% else %}
+        {% else -%}
         <task>
             <type>AtsInterfaceTask</type>
             <parameters>
-              	<parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
-              	<parameter name="file" value="atsinterface.exe" />
-              	<parameter name="parameters" value="-testmodule {{ os.path.basename(file[1]) }}" />
-              	<parameter name="result-file" value="{{ atsself.STIF_LOG_DIR }}\{{ os.path.basename(file[1]).replace('.' + file[1].rsplit(".")[1], '.xml') }}" />
+                <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="file" value="atsinterface.exe" />
+                <parameter name="parameters" value="-testmodule {{ os.path.basename(file[1]) }}" />
+                <parameter name="result-file" value="{{ atsself.AtsInterface_LOG_DIR }}\{{ os.path.basename(file[1]).replace('.' + file[1].rsplit(".")[1], '.xml') }}" />
+                <parameter name="result-download-retry-count" value="1" />
+                <parameter name="result-download-reboot-retry-count" value="1" />
             </parameters>
         </task>
-        {% endif %}
-                        {% endif %}
-                    {% endif %}
-                {% endfor -%}
-            {% endif %}
+        {%- endif %}
+                        {%- endif %}
+                    {%- endif %}
+                {%- endfor %}
+            {%- endif %}
 {%- endmacro %}
 
-
 {% macro generate_runsteps_stif_single_set(setd) -%}
             {% if setd["engine_ini_file"] != None -%}
         {% if test_plan['hti'] == 'True' -%}
         <task>
             <type>StifRunCasesTask</type>
             <parameters>
-              	<parameter name="filter" value="*"/>
-              	<parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
-              	<parameter name="engineini" value="c:\testframework\{{ os.path.basename(setd["engine_ini_file"]) }}"/>
+                <parameter name="filter" value="*"/>
+                <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="engineini" value="c:\testframework\{{ os.path.basename(setd["engine_ini_file"]) }}"/>
             </parameters>
         </task>
-        {% else %}
+        {% else -%}
         <task>
             <type>AtsInterfaceTask</type>
             <parameters>
-              	<parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
-              	<parameter name="file" value="atsinterface.exe" />
-              	<parameter name="parameters" value="-engineini c:\testframework\{{ os.path.basename(setd["engine_ini_file"]) }}" />
-              	<parameter name="result-file" value="{{ atsself.STIF_LOG_DIR }}\{{ os.path.basename(setd["engine_ini_file"]).replace('.' + setd["engine_ini_file"].rsplit(".")[1], '.xml') }}" />
+                <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="file" value="atsinterface.exe" />
+                <parameter name="parameters" value="-engineini c:\testframework\{{ os.path.basename(setd["engine_ini_file"]) }}" />
+                <parameter name="result-file" value="{{ atsself.AtsInterface_LOG_DIR }}\{{ os.path.basename(setd["engine_ini_file"]).replace('.' + setd["engine_ini_file"].rsplit(".")[1], '.xml') }}" />
+                <parameter name="result-download-retry-count" value="1" />
+                <parameter name="result-download-reboot-retry-count" value="1" />
             </parameters>
         </task>
-        {% endif %}
+        {%- endif %}
             {% elif setd["config_files"] != [] -%}
                  {% for config_file in setd["config_files"] -%}
         {% if test_plan['hti'] == 'True' -%}
         <task>
             <type>StifRunCasesTask</type>
             <parameters>
-              	<parameter name="module" value="TESTSCRIPTER"/>
-              	<parameter name="filter" value="*"/>
-              	<parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
-              	<parameter name="testcase-file" value="e:\testing\conf\{{ os.path.basename(config_file) }}"/>
+                <parameter name="module" value="TESTSCRIPTER"/>
+                <parameter name="filter" value="*"/>
+                <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="testcase-file" value="e:\testing\conf\{{ os.path.basename(config_file) }}"/>
             </parameters>
         </task>
-        {% else %}
+        {% else -%}
         <task>
             <type>AtsInterfaceTask</type>
             <parameters>
-              	<parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
-              	<parameter name="file" value="atsinterface.exe" />
-              	<parameter name="parameters" value="-config e:\testing\conf\{{ os.path.basename(config_file) }}" />
-              	<parameter name="result-file" value="{{ atsself.STIF_LOG_DIR }}\{{ os.path.basename(config_file).replace('.' + config_file.rsplit(".")[1], '.xml') }}" />
+                <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="file" value="atsinterface.exe" />
+                <parameter name="parameters" value="-config e:\testing\conf\{{ os.path.basename(config_file) }}" />
+                <parameter name="result-file" value="{{ atsself.AtsInterface_LOG_DIR }}\{{ os.path.basename(config_file).replace('.' + config_file.rsplit(".")[1], '.xml') }}" />
+                <parameter name="result-download-retry-count" value="1" />
+                <parameter name="result-download-reboot-retry-count" value="1" />
             </parameters>
         </task>
-        {% endif %}
-                {% endfor -%}
-            {% else %}
+        {%- endif %}
+                {%- endfor %}
+            {% else -%}
                 {% for testmodule_file in setd["testmodule_files"] -%}
         {% if test_plan['hti'] == 'True' -%}
         <task>
             <type>StifRunCasesTask</type>
             <parameters>
-              	<parameter name="module" value="{{ os.path.basename(testmodule_file) }}"/>
-              	<parameter name="filter" value="*"/>
-              	<parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="module" value="{{ os.path.basename(testmodule_file) }}"/>
+                <parameter name="filter" value="*"/>
+                <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
             </parameters>
         </task>
-        {% else %}
+        {% else -%}
         <task>
             <type>AtsInterfaceTask</type>
             <parameters>
-              	<parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
-              	<parameter name="file" value="atsinterface.exe" />
-              	<parameter name="parameters" value="-module {{ os.path.basename(testmodule_file) }}" />
-              	<parameter name="result-file" value="{{ atsself.STIF_LOG_DIR }}\{{ os.path.basename(testmodule_file).replace('.' + testmodule_file.rsplit(".")[1], '.xml') }}" />
+                <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/>
+                <parameter name="file" value="atsinterface.exe" />
+                <parameter name="parameters" value="-testmodule {{ os.path.basename(testmodule_file) }}" />
+                <parameter name="result-file" value="{{ atsself.AtsInterface_LOG_DIR }}\{{ os.path.basename(testmodule_file).replace('.' + testmodule_file.rsplit(".")[1], '.xml') }}" />
+                <parameter name="result-download-retry-count" value="1" />
+                <parameter name="result-download-reboot-retry-count" value="1" />
             </parameters>
         </task>
-        {% endif %}
-                {% endfor -%}
-            {% endif %}
+        {%- endif %}
+                {%- endfor %}
+            {%- endif %}
 {%- endmacro %}
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/testconfigurator.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/testconfigurator.py	Fri Aug 13 14:59:05 2010 +0300
@@ -21,7 +21,7 @@
 
 """Parse Symbian SW component for ATS3 testing related information"""
 
-# pylint: disable-msg=R0902,R0912,R0901,R0915,R0201
+
 #R* remove during refactoring
 
 from path import path # pylint: disable-msg=F0401
@@ -100,6 +100,7 @@
         src_dst = []
         pmd_files = []
         trace_activation_files = []
+        dll_files = {}
         
         if not os.path.exists( self.tsrc_dir ):
             _logger.error("Missing test source directory: %s", self.tsrc_dir)
@@ -135,6 +136,10 @@
             elif test_harness == "EUNIT":
                 try:
                     src_dst  = pkg_parser.get_data_files(self.tsrc_pkg_files(_paths_dict_), self.build_drive)
+                    #collecting dll files and their harness for the test component, it will be
+                    # compared while writing 'execute' step in the test.xml generation                    
+                    for sub_component in _paths_dict_[tsrc_dir]['content'].keys():                        
+                        dll_files.update(_paths_dict_[tsrc_dir]['content'][sub_component]['dll_files'])  
 
                 except OSError:
                     _logger.warning("No pkg file found in the directory ( %s )" % self.tsrc_pkg_dir)
@@ -187,6 +192,7 @@
                                              pmd_files=pmd_files,
                                              trace_activation_files=trace_activation_files,
                                              custom_dir=self.custom_dir,
+                                             dll_files=dll_files,
                                              component_path=tsrc_dir)
                     else:
                         test_plan.insert_set(image_files=self.flash_images,
@@ -195,6 +201,7 @@
                                              test_harness=test_harness,
                                              src_dst=src_dst,
                                              custom_dir=self.custom_dir,
+                                             dll_files = dll_files,
                                              component_path=tsrc_dir)
             else:
                 if self.trace_enabled == "True":
@@ -210,6 +217,7 @@
                                          pmd_files=pmd_files,
                                          trace_activation_files=trace_activation_files,
                                          custom_dir=self.custom_dir,
+                                         dll_files = dll_files,
                                          component_path=tsrc_dir)
                 else:
                     test_plan.insert_set(image_files=self.flash_images,
@@ -218,13 +226,16 @@
                                          test_harness=test_harness,
                                          src_dst=src_dst,
                                          custom_dir=self.custom_dir,
+                                         dll_files = dll_files,
                                          component_path=tsrc_dir)
 
     def check_dll_duplication(self, _dll_file_, _src_dst_ ):
         """Checks if the dll is already in the dictionary, created by pkg file"""
         for item in _src_dst_:
             first = item[0]
-            return _dll_file_.lower() in first.lower()
+            if _dll_file_.lower() in first.lower():
+                return True
+        return False
             
     @property
     def tsrc_bld_dir(self):
--- a/buildframework/helium/sf/python/pythoncore/lib/atsant.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/atsant.py	Fri Aug 13 14:59:05 2010 +0300
@@ -26,6 +26,7 @@
 import os
 import logging
 import configuration
+import amara
 
 _logger = logging.getLogger('atsant')
 
@@ -36,7 +37,7 @@
         self.productname = productname
         self.config = self.getconfig()
         
-    def getconfig(self, type=None, productname=None):
+    def getconfig(self, type_=None, productname=None):
         """get configuration"""
         noncust = None
         for root, _, files in os.walk(self.imagesdir, topdown=False):
@@ -46,12 +47,12 @@
                     configBuilder = configuration.NestedConfigurationBuilder(open(filePath, 'r'))
                     configSet = configBuilder.getConfiguration()
                     for config in configSet.getConfigurations():
-                        if type and productname:
-                            if type in config.type and config['PRODUCT_NAME'] in productname:
+                        if type_ and productname:
+                            if type_ in config.type and config['PRODUCT_NAME'].lower() in productname.lower():
                                 return config
                         else:
                             noncust = config
-        if type:
+        if type_:
             return None
         if noncust:
             return noncust
@@ -68,7 +69,7 @@
     def findimages(self): 
         """find images"""
         output = ''
-        for imagetype, imagetypename in [('core', 'CORE'), ('langpack', 'ROFS2'), ('cust', 'ROFS3'), ('udaerase', 'UDAERASE')]:
+        for imagetype, imagetypename in [('core', 'CORE'), ('langpack', 'ROFS2'), ('cust', 'ROFS3'), ('udaerase', 'UDAERASE'), ('emmc', 'EMMC')]:
             iconfigxml = self.getconfig(imagetype, self.productname)
             if iconfigxml == None:
                 iconfigxml = self.config
@@ -98,52 +99,64 @@
     return retVal
 
 
-def files_to_test(canonicalsysdeffile, excludetestlayers, idobuildfilter, builddrive, createmultipledropfiles):
+def files_to_test(canonicalsysdeffile, excludetestlayers, idobuildfilter, builddrive, createmultipledropfiles, sysdef3=False):
     """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):
-# pylint: disable-msg=W0704
-            try:
-                if re.search(r"\b%s\b" % layr, excludetestlayers):
+    if sysdef3 == True:
+        sdf = amara.parse(open(canonicalsysdeffile))
+        for package in sdf.SystemDefinition.systemModel.package:
+            for collection in package.collection:
+                if hasattr(collection, 'component'): 
+                    for component in collection.component:
+                        print component.id
+                        if get_boolean(createmultipledropfiles):
+                            group = 'singledropfile'
+                        else:
+                            group = 'default'
+                        if hasattr(component, 'meta') and hasattr(component.meta, 'group'):
+                            if not group.lower() == 'singledropfile':
+                                group = component.meta.group[0].name                            
+                        if hasattr(component, 'unit'):
+                            for unit in component.unit:
+                                if group not in modules:
+                                    modules[group] = []
+                                modules[group].append(builddrive + os.sep + unit.bldFile)
+    else:
+        sdf = sysdef.api.SystemDefinition(canonicalsysdeffile)
+        
+        single_key = 'singledropfile'       #default single drop file name
+       
+        for layr in sdf.layers:
+            if re.match(r".*_test_layer$", layr):
+                if excludetestlayers and re.search(r"\b%s\b" % layr, excludetestlayers):
                     continue
-            except TypeError:       #needed to catch exceptions and not have them printed
-                pass
-# pylint: enable-msg=W0704
-
-            layer = sdf.layers[layr]
-            for mod in layer.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:
-                        if idobuildfilter != "":
-                            include_unit = False
-                            if hasattr(unit, 'filters'):
-                                if len(unit.filters) > 0:
-                                    for afilter in unit.filters:
-                                        if re.search(r"\b%s\b" % afilter, idobuildfilter):
-                                            include_unit = True
-                                        else:
-                                            include_unit = False
-                                elif len(unit.filters) == 0:
-                                    include_unit = True
+                layer = sdf.layers[layr]
+                for mod in layer.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:
+                            if idobuildfilter != "":
+                                include_unit = False
+                                if hasattr(unit, 'filters'):
+                                    if len(unit.filters) > 0:
+                                        for afilter in unit.filters:
+                                            include_unit = re.search(r"\b%s\b" % afilter, idobuildfilter)
+                                    elif len(unit.filters) == 0:
+                                        include_unit = True
+                                else:
+                                    include_unit = False
                             else:
                                 include_unit = False
-                        else:
-                            include_unit = False
-                            if hasattr(unit, 'filters'):
-                                if len(unit.filters) == 0:
-                                    include_unit = True
-                    if include_unit:
-                        modules[single_key].append(os.path.join(builddrive + os.sep, unit.path))
+                                if hasattr(unit, 'filters'):
+                                    if len(unit.filters) == 0:
+                                        include_unit = True
+                        if include_unit:
+                            modules[single_key].append(builddrive + os.sep + unit.path)
     return modules
 
--- a/buildframework/helium/sf/python/pythoncore/lib/bomtofile.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/bomtofile.py	Fri Aug 13 14:59:05 2010 +0300
@@ -19,8 +19,7 @@
 """build of Materials to file writer"""
 
 class BOMWriter(object):
-    """
-    Read BOM and output in text
+    """ Read BOM and output in text.
     """
     def __init__(self, session, project_name, project, output_dir):
         self.project_name = project_name
@@ -48,16 +47,14 @@
             fileout.write(str(i) + ") " + str(project) + "\n")
             
             cmproject = self.session.create(str(project))
+
+            baseline = str(cmproject.baseline).strip()
+            if baseline == "None":
+                fileout.write(str(i) + ") " + str(project) + "\n")
+            else:
+                fileout.write(str(i) + ") " + baseline + "\n")
+            i += 1
             
-            try:
-                baseline = str(cmproject.baseline).strip()
-                if baseline == "None":
-                    fileout.write(str(i) + ") " + str(project) + "\n")
-                else:
-                    fileout.write(str(i) + ") " + baseline + "\n")
-                i += 1
-            except Exception, ex:
-                print ex
         fileout.close()
             
     def writetasks(self):
--- a/buildframework/helium/sf/python/pythoncore/lib/build/model.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/build/model.py	Fri Aug 13 14:59:05 2010 +0300
@@ -30,8 +30,8 @@
 
 # Uncomment this line to enable logging in this module, or configure logging elsewhere
 _logger = logging.getLogger("bom")
-#_logger.setLevel(logging.DEBUG)
-logging.basicConfig(level=logging.DEBUG)
+_logger.setLevel(logging.INFO)
+#logging.basicConfig(level=logging.DEBUG)
 
 
 class SessionCreator(object):
@@ -63,7 +63,7 @@
         self.config = config
         self.build = ""
         self._projects = []
-        self._icd_icfs = []
+        self.icd_icfs = []
         self._flags = []
         
         self._capture_icd_icfs()
@@ -95,8 +95,8 @@
                                                 if file_.endswith(exclude):
                                                     excluded = True
                                             if file_.endswith('.zip') and not excluded:
-                                                self._icd_icfs.append(file_)
-                                                self._icd_icfs.sort(key=str)
+                                                self.icd_icfs.append(file_)
+                                                self.icd_icfs.sort(key=str)
         
     def _capture_flags(self):
         """capture flags"""
@@ -414,16 +414,6 @@
     def __str__(self):
         """ String representation. """
         return str(self.ccm_task)
-        
-        
-class ICD_ICF(object):
-    """ A ICD or ICF patch zip file provided by Symbian. """
-    pass
-
-
-class Flag(object):
-    """ A compilation flag. """
-    pass
     
 
 class BOMDeltaXMLWriter(object):
@@ -439,7 +429,7 @@
         """ Write the BOM delta information to an XML file. """
         bom_log = amara.parse(open(self._bom_log, 'r'))
         doc = amara.create_document(u'bomDelta')
-        # pylint: disable-msg=E1101
+        # pylint: disable=E1101
         doc.bomDelta.xml_append(doc.xml_create_element(u'buildFrom', content=unicode(bom_log.bom.build)))
         doc.bomDelta.xml_append(doc.xml_create_element(u'buildTo', content=unicode(self._bom.config['build.id'])))
         content_node = doc.xml_create_element(u'content')
@@ -601,7 +591,7 @@
     def write(self, path):
         """ Write the BOM information to an XML file. """
         doc = amara.create_document(u'bom')
-        # pylint: disable-msg=E1101
+        # pylint: disable=E1101
         doc.bom.xml_append(doc.xml_create_element(u'build', content=unicode(self._bom.config['build.id'])))
         doc.bom.xml_append(doc.xml_create_element(u'content'))
         for project in self._bom.projects:
@@ -639,7 +629,7 @@
                     fix_node = doc.xml_create_element(u'fix', content=(unicode(task)), attributes = {u'type': unicode(fix.__class__.__name__)})
                     project_node.xml_append(fix_node)
 
-        if self._bom._icd_icfs != []:
+        if self._bom.icd_icfs != []:
             # Add ICD info to BOM
             doc.bom.content.xml_append(doc.xml_create_element(u'input'))
     
@@ -653,12 +643,14 @@
     
             doc.bom.content.input.xml_append(doc.xml_create_element(u'icds'))
 
-        # pylint: disable-msg=R0914
-        for i, icd in enumerate(self._bom._icd_icfs):
+        # pylint: disable=R0914
+        for i, icd in enumerate(self._bom.icd_icfs):
             doc.bom.content.input.icds.xml_append(doc.xml_create_element(u'icd'))
             doc.bom.content.input.icds.icd[i].xml_append(doc.xml_create_element(u'name', content=(unicode(icd))))
         #If currentRelease.xml exists then send s60 <input> tag to diamonds
         current_release_xml_path = self._bom.config['currentRelease.xml']
+        # data from the metadata will go first as they must be safer than the one
+        # given by the user 
         if current_release_xml_path is not None and os.path.exists(current_release_xml_path):
             metadata = symrec.ReleaseMetadata(current_release_xml_path)
             service = metadata.service
@@ -666,32 +658,80 @@
             release = metadata.release
             # Get name, year, week and version from baseline configuration
             s60_input_node = doc.xml_create_element(u'input')
-            s60_version = self._bom.config['s60_version']
-            s60_release = self._bom.config['s60_release']
-            if s60_version != None:
-                s60_year = s60_version[0:4]
-                s60_week = s60_version[4:]
+            s60_type = u's60'
+            s60_year = u'0'
+            s60_week = u'0'
+            s60_release = u''
+            # Using regular expression in first place
+            regexp = r'(?P<TYPE>.*)_(?P<YEAR>\d{4})(?P<WEEK>\d{2})_(?P<REVISION>.*)'            
+            if self._bom.config['release_regexp']:
+                if '?P<TYPE>' not in self._bom.config['release_regexp']:
+                    _logger.error('Missing TYPE in: %s' % str(self._bom.config['release_regexp']))
+                    _logger.info('Using default regular expression: %s' % regexp)
+                elif '?P<YEAR>' not in self._bom.config['release_regexp']:
+                    _logger.error('Missing YEAR in: %s' % str(self._bom.config['release_regexp']))
+                    _logger.info('Using default regular expression: %s' % regexp)
+                elif '?P<WEEK>' not in self._bom.config['release_regexp']:
+                    _logger.error('Missing WEEK in: %s' % str(self._bom.config['release_regexp']))
+                    _logger.info('Using default regular expression: %s' % regexp)
+                elif '?P<REVISION>' not in self._bom.config['release_regexp']:
+                    _logger.error('Missing REVISION in: %s' % str(self._bom.config['release_regexp']))
+                    _logger.info('Using default regular expression: %s' % regexp)
+                else:
+                    _logger.info('Using custom regular expression to capture the baseline release information: %s'
+                                  % str(self._bom.config['release_regexp']))
+                    regexp = self._bom.config['release_regexp']                
+            res = re.match(regexp, release)            
+            if res != None:
+                s60_type = res.group('TYPE')
+                s60_release = res.group('TYPE') + '_' + res.group('REVISION')
+                s60_year = res.group('YEAR')
+                s60_week = res.group('WEEK')
             else:
-                s60_year = u'0'
-                s60_week = u'0'
-                if s60_version == None:
-                    res = re.match(r'(.*)_(\d{4})(\d{2})_(.*)', release)
-                    if res != None:
-                        s60_release = res.group(1) + '_' + res.group(4)
-                        s60_year = res.group(2)
-                        s60_week = res.group(3)
-            s60_input_node.xml_append(doc.xml_create_element(u'name', content=(unicode("s60"))))
+                _logger.warning("Regular expression '%s' is not matching '%s'." % (regexp, release))
+                if self._bom.config['s60_version'] != None:
+                    # last resorts if it doesn't matches
+                    _logger.warning("Falling back on s60.version and s60.release to determine input.")
+                    s60_version = self._bom.config['s60_version']
+                    s60_year = s60_version[0:4]
+                    s60_week = s60_version[4:]
+                    if self._bom.config['s60_release']:
+                        s60_release = self._bom.config['s60_release']
+
+            s60_input_node.xml_append(doc.xml_create_element(u'name', content=(unicode(s60_type))))
             s60_input_node.xml_append(doc.xml_create_element(u'year', content=(unicode(s60_year))))
             s60_input_node.xml_append(doc.xml_create_element(u'week', content=(unicode(s60_week))))
             s60_input_node.xml_append(doc.xml_create_element(u'version', content=(unicode(s60_release))))
 
             s60_input_source = s60_input_node.xml_create_element(u'source')
-            s60_input_source.xml_append(doc.xml_create_element(u'type', content=(unicode("grace"))))
+            s60_input_source.xml_append(doc.xml_create_element(u'type', content=(unicode("hydra"))))
             s60_input_source.xml_append(doc.xml_create_element(u'service', content=(unicode(service))))
             s60_input_source.xml_append(doc.xml_create_element(u'product', content=(unicode(product))))
             s60_input_source.xml_append(doc.xml_create_element(u'release', content=(unicode(release))))
             s60_input_node.xml_append(s60_input_source)
             doc.bom.content.xml_append(s60_input_node)
+        elif self._bom.config['s60_version'] and self._bom.config['s60_release']:
+            _logger.info("currentRelease.xml not defined, falling back on s60.version and s60.release to determine input.")
+            s60_type = u's60'
+            s60_version = self._bom.config['s60_version']
+            s60_year = u'0'
+            s60_week = u'0'
+            if len(s60_version) > 6:
+                s60_year = s60_version[0:4]
+                s60_week = s60_version[4:]
+            s60_release = self._bom.config['s60_release']
+            s60_input_node = doc.xml_create_element(u'input')
+            s60_input_node.xml_append(doc.xml_create_element(u'name', content=(unicode(s60_type))))
+            s60_input_node.xml_append(doc.xml_create_element(u'year', content=(unicode(s60_year))))
+            s60_input_node.xml_append(doc.xml_create_element(u'week', content=(unicode(s60_week))))
+            s60_input_node.xml_append(doc.xml_create_element(u'version', content=(unicode(s60_release))))
+
+            s60_input_source = s60_input_node.xml_create_element(u'source')
+            s60_input_source.xml_append(doc.xml_create_element(u'type', content=(unicode("unknown"))))
+            s60_input_node.xml_append(s60_input_source)
+            doc.bom.content.xml_append(s60_input_node)
+            
+            
         out = open(path, 'w')
         doc.xml(out, indent='yes')
         out.close()
--- a/buildframework/helium/sf/python/pythoncore/lib/ccm/__init__.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ccm/__init__.py	Fri Aug 13 14:59:05 2010 +0300
@@ -41,8 +41,16 @@
 VALID_OBJECT_STATES = ('working', 'checkpoint', 'public', 'prep', 'integrate', 'sqa', 'test','released')
 STATIC_OBJECT_STATES = ('integrate', 'sqa', 'test','released')
 CCM_SESSION_LOCK = os.path.join(tempfile.gettempdir(), "ccm_session.lock")
+if os.path == '\\':
+    # on windows platform we need insulation of session opening
+    # so the _router.adr doesn't get modified while
+    # opening a session. This must be in a common location.
+    TEMPDIR = os.path.join(os.environ['SYSTEMROOT'], 'temp')
+    if not os.path.exists(TEMPDIR):
+        TEMPDIR = os.environ['TEMP']
+    CCM_SESSION_LOCK = os.path.join(TEMPDIR, "ccm_session.lock")
 
-def _execute(command, timeout=None):
+def execute(command, timeout=None):
     """ Runs a command and returns the result data. """
     targ = ""
     if timeout is not None:
@@ -72,6 +80,7 @@
         self.status = None
         self._output = None
         self._output_str = None
+        self.error = None
     
     def _setoutput(self, output):
         """set output"""
@@ -116,15 +125,16 @@
         """ Internal function to allow overloading, you must override _seterror.
         """
         # the error output is automatically converted to ascii before any treatment 
-        if isinstance(error, unicode):
-            self._error_str = error.encode('ascii', 'replace')
-        else:
-            self._error_str = error.decode('ascii', 'ignore')
-        _logger.debug("error ---->")
-        for line in self._error_str.splitlines():
-            _logger.debug(line)
-        _logger.debug("<----")
-        self._seterror(self._error_str)
+        if error is not None:
+            if isinstance(error, unicode):
+                self._error_str = error.encode('ascii', 'replace')
+            else:
+                self._error_str = error.decode('ascii', 'ignore')
+            _logger.debug("error ---->")
+            for line in self._error_str.splitlines():
+                _logger.debug(line)
+            _logger.debug("<----")
+            self._seterror(self._error_str)
                 
     def _geterror(self):
         """ Returns the content of _output. """
@@ -606,12 +616,18 @@
         if (self.dbpath != None):            
             return
         result = self.execute("status")
-        for match in re.finditer(r'(?:(?:Graphical)|(?:Command)) Interface\s+@\s+(?P<ccmaddr>\w+:\d+(?:\:\d+\.\d+\.\d+\.\d+)+)(?P<current_session>\s+\(current\s+session\))?\s*\nDatabase:\s*(?P<dbpath>\S+)', result.output, re.M | re.I):
-            dictionary = match.groupdict()
-            if (dictionary['current_session'] != None):
-                _logger.debug("AbstractSession: __find_dbpath: Found dbpath: %s" % dictionary['dbpath'])
-                self.dbpath = dictionary['dbpath']
-        assert self.dbpath != None
+        
+        gotsession = False
+        for line in result.output.splitlines():
+            if gotsession:
+                gotsession = False
+                if 'Database:' in line:
+                    self.dbpath = line.replace('Database:', '').strip()
+                    _logger.debug("AbstractSession: __find_dbpath: Found dbpath: %s" % self.dbpath)
+            if '(current session)' in line:
+                gotsession = True
+        if not self.dbpath:
+            raise Exception('self.dbpath is None ' + result.output)
     
     def execute(self, _, result=None):
         """ Abstract function that should implement the execution of ccm command
@@ -739,13 +755,13 @@
         command = "%s start -m -q -nogui -n %s -pw %s -h %s -d %s" % \
                     (CCM_BIN, username, password, engine, dbpath)
         _logger.debug('Starting new session:' + command.replace(password, "***"))
-        (result, status) = _execute(command, timeout=timeout)
+        (result, status) = execute(command, timeout=timeout)
         if status != 0:
-            raise Exception("Error creating a session: result:\n%s\nCommand: %s" % (result, command.replace(password, "***")))
+            raise CCMException("Error creating a session: result:\n%s\nCommand: %s" % (result, command.replace(password, "***")))
         session_addr = result.strip()
         _logger.debug(session_addr)
         if not re.match(r'[a-zA-Z0-9_\-.]+:\d+:\d+\.\d+\.\d+\.\d+(:\d+\.\d+\.\d+\.\d+)?', session_addr):
-            raise Exception("Error creating a session: result:\n%s" % result)
+            raise CCMException("Error creating a session: result:\n%s" % result)
         return Session(username, engine, dbpath, session_addr)        
             
     def execute(self, cmdline, result=None):
@@ -761,7 +777,7 @@
             if result == None:
                 result = Result(self)
             if os.sep == '\\':
-                command = "set CCM_ADDR=" + self._session_addr + " && " + CCM_BIN + " %s" % cmdline
+                command = "set CCM_ADDR=" + self._session_addr + " && \"" + CCM_BIN + "\" %s" % cmdline
             else:
                 command = "export CCM_ADDR=" + self._session_addr + " && " + CCM_BIN + " %s" % cmdline
             _logger.debug('Execute > ' + command)
@@ -1911,9 +1927,10 @@
         router_address = None
         if database == None and dbpath != None:
             database = os.path.basename(dbpath)
-        
+                
         lock = fileutils.Lock(CCM_SESSION_LOCK)
         try:
+            _logger.info("Locking " + CCM_SESSION_LOCK)
             lock.lock(wait=True)
             # if we have the database name we can switch to the correct Synergy router
             if database != None:
@@ -1932,9 +1949,11 @@
             # If no existing sessions were available, start a new one
             _logger.info('Opening session.')
             new_session = Session.start(username, password, engine, dbpath)
+            _logger.info("Unlocking " + CCM_SESSION_LOCK)
             lock.unlock()
             return new_session
         finally:
+            _logger.info("Unlocking " + CCM_SESSION_LOCK)
             lock.unlock()
     raise CCMException("Cannot open session for user '%s'" % username)
 
@@ -1969,6 +1988,7 @@
         raise CCMException("Could not find CM/Synergy executable in the path.")
     command = "%s status" % (CCM_BIN)
 
+    _logger.info("Locking " + CCM_SESSION_LOCK)
     lock = fileutils.Lock(CCM_SESSION_LOCK)
     result = ""
     output = []
@@ -1989,11 +2009,11 @@
                     routerfile.close()
 
         _logger.debug('Command: ' + command)
-        (result, status) = _execute(command)
+        (result, status) = execute(command)
         if database != None:
             lock.unlock()
         if (status != 0):
-            raise CCMException("Ccm status execution returned an error.")
+            raise CCMException("Ccm status execution returned an error. " + command + " " + result)
         _logger.debug('ccm status result: ' + result)
         for match in re.finditer(r'Command Interface\s+@\s+(?P<ccmaddr>\w+:\d+:\d+.\d+.\d+.\d+(:\d+.\d+.\d+.\d+)*)(?P<current_session>\s+\(current\s+session\))?\s+Database:\s*(?P<dbpath>\S+)', result, re.M):
             data = match.groupdict()
@@ -2008,6 +2028,7 @@
                 output.append(existing_session)
     finally:
         if database != None:
+            _logger.info("Unlocking " + CCM_SESSION_LOCK)
             lock.unlock()
     return  output
 
--- a/buildframework/helium/sf/python/pythoncore/lib/ccm/extra.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ccm/extra.py	Fri Aug 13 14:59:05 2010 +0300
@@ -43,21 +43,21 @@
     
     
 
-def Snapshot(project, targetdir, dir=None):
+def Snapshot(project, targetdir, dir_=None):
     """ This function can snapshot anything from Synergy, even prep/working projects """
     assert project != None, "a project object must be supplied"
     assert project.type == "project", "project must be of project type"
-    if not dir:
-        dir = project.root_dir()
-    targetdir = os.path.join(targetdir, dir.name)
+    if not dir_:
+        dir_ = project.root_dir()
+    targetdir = os.path.join(targetdir, dir_.name)
     os.makedirs(targetdir)
-    for object in dir.children(project):
-        if object.type == 'dir':
-            Snapshot(project, targetdir, object)
-        elif object.type == 'project':
-            Snapshot(object, targetdir)
+    for object_ in dir_.children(project):
+        if object_.type == 'dir':
+            Snapshot(project, targetdir, object_)
+        elif object_.type == 'project':
+            Snapshot(object_, targetdir)
         else:
-            object.to_file(os.path.join(targetdir, object.name))
+            object_.to_file(os.path.join(targetdir, object_.name))
 
 
 class _FastSnapshot:
@@ -74,14 +74,14 @@
         """ Do the checkout, and then walkthrough the project hierarchy to find subproject to snapshot. """
         _logger.info("Snapshotting %s under %s" % (self.project, self.targetdir))
         self.project.snapshot(self.targetdir, False)
-        def walk(dir, targetdir):
+        def walk(dir_, targetdir):
             """walkthrough the project hierarchy to find subproject to snapshot"""
-            for object in dir.children(self.project):
-                if isinstance(object, ccm.Dir):
-                    walk(object, os.path.join(targetdir, object.name))
-                elif isinstance(object, ccm.Project):
-                    _logger.info("Adding project %s" % object.objectname)
-                    self.pool.addWork(_FastSnapshot(self.pool, object, targetdir, self.callback, self.exc_hld))
+            for object_ in dir_.children(self.project):
+                if isinstance(object_, ccm.Dir):
+                    walk(object_, os.path.join(targetdir, object_.name))
+                elif isinstance(object_, ccm.Project):
+                    _logger.info("Adding project %s" % object_.objectname)
+                    self.pool.addWork(_FastSnapshot(self.pool, object_, targetdir, self.callback, self.exc_hld))
                     
         if len(self.project.subprojects) > 0:
             rootdir = self.project.root_dir()
@@ -147,9 +147,9 @@
         def __call__(self):
             output = ""
             _logger.info("Maintaining project %s" % self.subproject)
-            for tuple in self.subproject.finduse():
-                if tuple['project'] == self.toplevel:
-                    self.subproject['wa_path'] = os.path.join(self.toplevel['wa_path'], tuple['path'])
+            for tuple_ in self.subproject.finduse():
+                if tuple_['project'] == self.toplevel:
+                    self.subproject['wa_path'] = os.path.join(self.toplevel['wa_path'], tuple_['path'])
                     self.subproject["project_subdir_template"] = ""
                     _logger.info("Maintaining project %s under %s" % (self.subproject, self.subproject['wa_path']))
                     output = self.subproject.work_area(True, True, True, wat=self.wat)
@@ -274,7 +274,9 @@
         """load the command"""
         if self.cacheXml is not None and os.path.exists(self.cacheXml):
             _logger.info("Loading %s" % self.cacheXml)
-            doc = parse(open(self.cacheXml, 'r')) 
+            stream = open(self.cacheXml, 'r')
+            doc = parse(stream)
+            stream.close() 
             sessions = doc.documentElement
             self._lock.acquire()
             try:
--- a/buildframework/helium/sf/python/pythoncore/lib/comments.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/comments.py	Fri Aug 13 14:59:05 2010 +0300
@@ -87,12 +87,10 @@
             if COMMENT_SYMBOLS.has_key(file_type):
                 for i in range(len(COMMENT_SYMBOLS[file_type])): 
                     comment = comment.replace(COMMENT_SYMBOLS[file_type][i], "")
-            try:
-                doc.commentLog.xml_append_fragment(comment)
-                # Add a generic file attribute to the comment to label which file it comes from
-                doc.commentLog.xml_children[-1].xml_set_attribute(u'file', unicode(filename))
-            except Exception:
-                _logger.warning("A comment in '%s' is not valid XML." % filename)
+                    
+            doc.commentLog.xml_append_fragment(comment)
+            # Add a generic file attribute to the comment to label which file it comes from
+            doc.commentLog.xml_children[-1].xml_set_attribute(u'file', unicode(filename))
 
         #print doc.xml()
         return doc
--- a/buildframework/helium/sf/python/pythoncore/lib/configuration.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/configuration.py	Fri Aug 13 14:59:05 2010 +0300
@@ -83,13 +83,13 @@
         """ See if the given name matches the name of this configuration. """
         return self.name == name
 
-    def get(self, key, default_value):
+    def get(self, key, failobj=None):
         """ Get an item from the configuration. """
         try:
             return self.__getitem__(key)
         except KeyError:
-            return default_value
-
+            return failobj
+        
     def get_list(self, key, default_value):
         """ Get a value as a list. """
         try:
@@ -402,7 +402,7 @@
         """ Is this a buildable configuration? """
         return self.abstract == None
 
-    def _addPropertyValue(self, key, value, parseList=True):
+    def add_property_value(self, key, value, parseList=True):
         """Adds a property value to the configuration.
 
         If the property does not exist, it is added without modification.
@@ -519,14 +519,14 @@
         Configuration.__init__(self)
         self._configs = configs
 
-    def getConfigurations(self, name=None, type=None):
+    def getConfigurations(self, name=None, type_=None):
         """ Return a list of configs that matches the name and type specified. 
         
         This can be queried multiple times to retrieve different named configurations.
         """
         result = []
         for conf in self._configs:
-            if ((name != None and conf.match_name(name)) or name == None) and ((type != None and conf.type == type) or type == None):
+            if ((name != None and conf.match_name(name)) or name == None) and ((type_ != None and conf.type == type_) or type_ == None):
                 result.append(conf)
         return result
 
@@ -546,9 +546,11 @@
 
     def __init__(self, inputfile, configname=''):
         """ Initialization. """
+        ConfigurationBuilder.__init__(self)
         self.inputfile = inputfile
         self.configname = configname
         self._warn_on_deprecated_spec = False
+        self.rootNode = None
 
     def getConfiguration(self):
         """ Returns a ConfigurationSet object.
@@ -624,14 +626,13 @@
         out.write(doc.toprettyxml())
         out.close()
 
-
-    def getConfigurations(self, name=None, type=None):
+    def getConfigurations(self, name=None, type_=None):
         """ Get a list of the individual configurations. 
         
         Once read a new builder must be opened to retrieve a differently filtered set of configurations.
         """
         config_set = self.getConfiguration()
-        return config_set.getConfigurations(name, type)
+        return config_set.getConfigurations(name, type_)
 
     def getReferences(self):
         """get references"""
@@ -682,18 +683,18 @@
                         if not isinstance(parent_value, types.ListType):
                             parent_value = [parent_value]
                         for value in parent_value:
-                            config._addPropertyValue(name, value)
+                            config.add_property_value(name, value)
 
                 if child.nodeName == 'set' or child.nodeName == 'append':
                     name = child.getAttribute('name')
                     if child.hasAttribute('value'):
                         value = child.getAttribute('value')
-                        config._addPropertyValue(name, value)
+                        config.add_property_value(name, value)
                     elif child.hasChildNodes():
                         value = ""
                         for textchild in child.childNodes:
                             value += textchild.data
-                        config._addPropertyValue(name, value, False)
+                        config.add_property_value(name, value, False)
                 elif child.nodeName == 'specRef':
                     for ref in child.getAttribute('ref').split(','):
                         node = self.getNodeByReference(ref)
@@ -757,14 +758,4 @@
     def to_xpath(self):
         """ Convert the key to XPath syntax. """
         return self.string.replace('.', '/')
-        
-        
-class XMLConfiguration(HierarchicalConfiguration):
-    """ A XML-based hierarchical configuration. """
-    
-    def __init__(self, file_):
-        """ Initialization. """
-        from lxml import etree
-        HierarchicalConfiguration.__init__(self)
-        
-        self._root = etree.parse(file_)
+        
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/lib/convertpkg.py	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,76 @@
+#============================================================================ 
+#Name        : .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 os
+from distutils import dir_util # pylint: disable-msg=E0611
+
+def main():
+    if len(sys.argv) < 3:
+        print 'Usage: ' + sys.argv[0] + ' pkgsrc pkgdst test_type'
+        sys.exit(1)
+    convertpkg(sys.argv[1], sys.argv[2], sys.argv[3])
+
+def convertpkg(srcs, dst, testtype):
+    i = 1
+    
+    bldfile = open(os.path.join(dst, 'bld.inf'), 'w')
+    
+    for src in srcs.split(' '):
+        bldfile.write('#include "' + str(i) + '/group/bld.inf"\n')
+        srcfile = open(src)
+        os.makedirs(os.path.join(dst, str(i), 'group'))
+        dstfile = open(os.path.join(dst, str(i), 'group', os.path.basename(src)), 'w')
+        for line in srcfile:
+            if line.startswith('"') and not line.startswith('"\\') and not line.startswith('"/'):
+                line = line.replace('"', '"' + os.path.dirname(src) + os.sep, 1)
+            dstfile.write(line)
+        srcfile.close()
+        dstfile.close()
+        
+        customdir = os.path.join(os.path.dirname(src), 'custom')
+        if os.path.exists(customdir):
+            dir_util.copy_tree(customdir, os.path.join(dst, str(i), 'group', 'custom'))
+        
+        subbldfile = open(os.path.join(dst, str(i), 'group', 'bld.inf'), 'w')
+        subbldfile.write('PRJ_TESTMMPFILES\n')
+        subbldfile.write('test.mmp\n')
+        subbldfile.close()
+        
+        submmpfile = open(os.path.join(dst, str(i), 'group', 'test.mmp'), 'w')
+        submmpfile.write('TARGET        fake.exe\n')
+        submmpfile.write('TARGETTYPE    exe\n')
+        
+        if testtype == 'tef':
+            submmpfile.write('LIBRARY testexecuteutils.lib\n')
+        elif testtype == 'mtf':
+            submmpfile.write('LIBRARY testframeworkclient.lib\n')
+        elif testtype == 'rtest':
+            submmpfile.write('//rtest\n')
+        elif testtype == 'stif':
+            submmpfile.write('LIBRARY stiftestinterface.lib\n')
+        else:
+            raise Exception('Test type unknown: ' + testtype)
+        submmpfile.close()
+        
+        i += 1
+        
+    bldfile.close()
+    
+if __name__ == "__main__":
+    main()
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/ctc.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ctc.py	Fri Aug 13 14:59:05 2010 +0300
@@ -35,15 +35,14 @@
         self.ftp = None
     
     def upload(self):
-        """upload"""
+        """ Proceed to the upload. """
         self._open()
-        """ Proceed to the upload. """
         monsyms = []
         i = 1
         for p_path in self.paths:
             if os.path.exists(p_path) and os.path.isfile(p_path):
                 # ftp://1.2.3.4/ctc_helium/[diamonds_id]/mon_syms/2/mon.sym
-                outputdir = "ctc_helium/%s/mon_syms/%d" % (self.diamondsid , i)
+                outputdir = "%s/mon_syms/%d" % (self.diamondsid , i)
                 output = outputdir + "/MON.SYM"
                 self._ftpmkdirs(outputdir)
                 print "Copying %s under %s" % (p_path, output)
@@ -61,22 +60,24 @@
         """close"""
         self.ftp.quit()
 
-    def _ftpmkdirs(self, dir):
+    def _ftpmkdirs(self, dir_):
         """ftp make directory"""
         pwd = self.ftp.pwd()
-        for d_dir in dir.split('/'):
-            if len(d_dir)!=0:
-# pylint: disable-msg=W0704
-                #disable except not doing anything
+        for d_dir in dir_.split('/'):
+            if len(d_dir) != 0:
                 try:
                     print "Creating %s under %s" % (d_dir, self.ftp.pwd())
                     self.ftp.mkd(d_dir)
                 except ftplib.error_perm:      #capture the exception but not display it.
                     pass
-# pylint: enable-msg=W0704
                 self.ftp.cwd(d_dir)
         self.ftp.cwd(pwd)
     
     def _send(self, src, dst):
         """send """
-        self.ftp.storbinary("STOR " + dst, open(src, "rb"), 1024)
+        try:
+            self.ftp.storbinary("STOR " + dst, open(src, "rb"), 1024)
+        except ftplib.error_perm, e:
+            print 'File already uploaded. ' + str(e)
+            
+            
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/delta_zip.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/delta_zip.py	Fri Aug 13 14:59:05 2010 +0300
@@ -38,6 +38,8 @@
         self.temp_dir = temp_dir
         self.exclude_dirs = exclude_dirs
         self.list_of_files = list_of_files
+        self.dest_dir = None
+        self.list_of_lists = None
         
     def create_file_list(self):
         """Create list of files (was list_files.pl)"""
@@ -171,6 +173,10 @@
     
 class MD5SignatureBuilderEBS(MD5SignatureBuilder):
     """ build the MD5 CRCs for all the files in the list of files"""
+    def __init__(self, build_area_root, nb_split, temp_dir, exclude_dirs, list_of_files):
+        MD5SignatureBuilder.__init__(self, build_area_root, nb_split, temp_dir, exclude_dirs, list_of_files)
+        self.makefile = None
+        
     def create_build_file(self):
         """Create EBS XML"""
         liste = self.create_command_list()
@@ -189,6 +195,7 @@
     """ The MD5 CRC creation for delta zippinf for use on EC machines"""
     def __init__(self, build_area_root, nb_split, temp_dir, exclude_dirs, ec_cluster_manager, ec_build_class, list_of_files):
         MD5SignatureBuilder.__init__(self, build_area_root, nb_split, temp_dir, exclude_dirs, list_of_files)
+        self.makefile = None
         self.ec_cluster_manager = ec_cluster_manager
         self.ec_build_class = ec_build_class
     
@@ -332,10 +339,10 @@
         
         return string
 
-def readEvalid(dir):
+def readEvalid(dir_):
     """read E valid"""
     filesdict = {}
-    for root, _, files in os.walk(dir):
+    for root, _, files in os.walk(dir_):
         for name in files:
             f_file = os.path.join(root, name)
             directory = None
@@ -373,7 +380,7 @@
         shutil.rmtree(dest)
     os.mkdir(dest)
     for line in open(adomappingfile):
-        dir = line.split('=')[0].replace(r'\:', ':')
+        dir_ = line.split('=')[0].replace(r'\:', ':')
         tmpfile = os.path.join(dest, str(i))
-        os.system('evalid -g ' + dir + ' ' + tmpfile)
+        os.system('evalid -g ' + dir_ + ' ' + tmpfile)
         i = i + 1
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/dependancygraph.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/dependancygraph.py	Fri Aug 13 14:59:05 2010 +0300
@@ -25,9 +25,9 @@
 
 class Library:
     """ Class Library holds information of the required modules or components such as license and the version """
-    def __init__(self, name, license, version=''):
+    def __init__(self, name, license_, version=''):
         self.name = name
-        self.license = license
+        self.license_ = license_
         self.version = version
         self.requires = []
 
@@ -42,7 +42,7 @@
         """add library"""
         for lib in self.getLibraries(conf):
             if lib.name.lower() == library.name.lower():
-                lib.license = library.license
+                lib.license_ = library.license_
                 return
         self.getLibraries(conf).append(library)
     def getLibraries(self, conf):
@@ -75,17 +75,17 @@
 
     def readModules(self):
         """read modules"""
-        license = ''
+        license_ = ''
         for module in self.ivyxml['ivy-module'].dependencies.xml_children:
             if hasattr(module, 'data'):
                 if 'License:' in module.data:
-                    license = module.data.strip()
+                    license_ = module.data.strip()
             elif hasattr(module, 'name'):
                 modulename = module.name.replace('-', '_')
             
                 if module.org != 'SWEPT':
-                    self.group.addLibrary(module.conf, Library(modulename, license))
-                    license = ''
+                    self.group.addLibrary(module.conf, Library(modulename, license_))
+                    license_ = ''
 
     def readSubModules(self):
         """read Sub Modules"""
@@ -96,19 +96,19 @@
                     ivydir = os.path.join(ivydir, 'modules')
                     ivyjarfile = os.path.join(ivydir, module.name + '-1.0.ivy.xml')
                     ivymodulexml = amara.parse(open(ivyjarfile))
-                    license = ''
+                    license_ = ''
                     for artifact in ivymodulexml['ivy-module'].publications.xml_children:
                         if hasattr(artifact, 'data'):
                             if 'License:' in artifact.data:
-                                license = artifact.data.strip()
+                                license_ = artifact.data.strip()
                         elif hasattr(artifact, 'name'):
                             bits = artifact.name.split('-')
                             name = bits[0]
                             version = ''
                             if len(bits) > 1:
                                 version = bits[1]
-                            self.group.addLibrary(module.conf, Library(name, license, version))
-                            license = ''
+                            self.group.addLibrary(module.conf, Library(name, license_, version))
+                            license_ = ''
 
 PYTHON_GROUP = True
 SUBCON_PYTHON_GROUP = False
@@ -163,7 +163,7 @@
     """read Pkg info"""
     name = ''
     version = ''
-    license = ''
+    license_ = ''
     license2 = ''
   
     for line in data:
@@ -172,14 +172,14 @@
         if 'Version:' in line:
             version = line.strip().replace('Version: ', '')
         if 'License:' in line:
-            license = line.strip().replace('License: ', '')
+            license_ = line.strip().replace('License: ', '')
         if 'Classifier: License :: ' in line:
             license2 = license2 + ' ' + line.strip().replace('Classifier: License :: ', '').replace('OSI Approved :: ', '')
     
-    if license.lower() == 'unknown' or license == '' or license2 != '':
-        license = license2
+    if license_.lower() == 'unknown' or license_ == '' or license2 != '':
+        license_ = license2
     
-    return Library(name, license, version)
+    return Library(name, license_, version)
 
 def addLicensesColors(graphdata, group):
     """add license colours"""
@@ -190,8 +190,8 @@
             for module in group.getLibraries(conf):
                 if module.name.lower() in line.lower() and 'label=' in line:
                     newline = line.replace('label=', 'color=%s,label=' % group.getColor(conf))
-                    if module.license != '':
-                        newline = newline.replace("\"];", "|%s\"];" % module.license)
+                    if module.license_ != '':
+                        newline = newline.replace("\"];", "|%s\"];" % module.license_)
                     break
         newgraphdata.append(newline)
     return newgraphdata
@@ -270,14 +270,14 @@
     output = "helium_ant -> helium_python;\n"
     
     if subcon:
-        list = [SUBCON_PYTHON_GROUP]
+        libs_list = [SUBCON_PYTHON_GROUP]
     else:
-        list = [SUBCON_PYTHON_GROUP, PYTHON_GROUP]
+        libs_list = [SUBCON_PYTHON_GROUP, PYTHON_GROUP]
     
-    for group in list:
+    for group in libs_list:
         for lib in libraries.getLibraries(group):
             output = output + ("helium_python -> \"%s\";\n" % lib.name)
-            output = output + ("\"%s\" [style=filled,shape=record,color=%s,label=\"%s %s|%s\"];\n" % (lib.name, libraries.getColor(group), lib.name, lib.version, lib.license))
+            output = output + ("\"%s\" [style=filled,shape=record,color=%s,label=\"%s %s|%s\"];\n" % (lib.name, libraries.getColor(group), lib.name, lib.version, lib.license_))
             
             for require in lib.requires:
                 output = output + ("\"%s\" -> \"%s\";\n" % (lib.name, require))
--- a/buildframework/helium/sf/python/pythoncore/lib/docs.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/docs.py	Fri Aug 13 14:59:05 2010 +0300
@@ -35,7 +35,7 @@
                 filePath = os.path.abspath(os.path.join(root, fname))
                 with open(filePath) as f_file:
                     filePathAmara = 'file:///'+ filePath.replace('\\','/')
-                    curPrj=amara.parse(filePathAmara)
+                    curPrj = amara.parse(filePathAmara)
                     for line in f_file:
                         linePattern = re.compile('^import')
                         lineMatch = linePattern.search(line)
@@ -47,7 +47,7 @@
                                 try:
                                     importModule = __import__(curModule)
                                     if hasattr(importModule, '__file__'):
-                                        modulePath=importModule.__file__
+                                        modulePath = importModule.__file__
                                         if 'helium' in modulePath:
                                             for projectList in dbPrj.antDatabase.project:
                                                 if (projectList.name == curPrj.project.name):
--- a/buildframework/helium/sf/python/pythoncore/lib/escapeddict.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/escapeddict.py	Fri Aug 13 14:59:05 2010 +0300
@@ -38,7 +38,10 @@
 class EscapedDict(UserDict.UserDict):
     """ Implements a dictionary that escapes the key values recursively. """        
     
-    def __init__(self, dict={}, failonerror=False):
+    # pylint: disable=W0622
+    def __init__(self, dict=None, failonerror=False):
+        if dict == None:
+            dict = {}
         UserDict.UserDict.__init__(self, dict)
         self.__failonerror = failonerror
         
--- a/buildframework/helium/sf/python/pythoncore/lib/fileutils.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/fileutils.py	Fri Aug 13 14:59:05 2010 +0300
@@ -397,12 +397,12 @@
             value = match.group(1)
         else:
             error = "Content of '%s' doesn't match r'^\d+|0842[0-9a-zA-Z]{3}\s*$'." % filename
-    except Exception, exc:
+    except IOError, exc:
         error = str(exc)
     if value is not None:
         return value
     # worse case....
-    raise Exception(error)
+    raise IOError(error)
 
 def load_policy_content(filename):
     """ Testing policy content loading. """
@@ -410,8 +410,8 @@
     try:
         fileh = codecs.open(filename, 'r', 'ascii')
         data = fileh.read()
-    except:
-        raise Exception("Error loading '%s' as an ASCII file." % filename)
+    except ValueError:
+        raise IOError("Error loading '%s' as an ASCII file." % filename)
     finally:
         fileh.close()
     return data
@@ -485,7 +485,7 @@
                     break
                 md5.update(chunk)
             file_handle.close()
-        except Exception, exc:
+        except IOError, exc:
             LOGGER.warning("Error happened on %d trial: %s" % (trial, str(exc)))
     return md5.hexdigest()
 
@@ -497,8 +497,8 @@
         LOGGER.debug('Opening symbian policy file: ' + filename)
         try:
             fileh = codecs.open(filename, 'r', 'ascii')
-        except:
-            raise Exception("Error loading '%s' as an ASCII file." % filename)        
+        except ValueError:
+            raise IOError("Error loading '%s' as an ASCII file." % filename)        
         for line in fileh:
             match = re.match(r'^Category\s+([A-Z])\s*$', line, re.M|re.DOTALL)
             if match != None:
@@ -508,12 +508,12 @@
         fileh.close()
         if match == None:
             error = "Content of '%s' doesn't match r'^Category\s+([A-Z])\s*$'." % filename
-    except Exception, exc:
+    except IOError, exc:
         error = str(exc)
     if value is not None:
         return value
     # worse case....
-    raise Exception(error)
+    raise IOError(error)
 
 
 class LockFailedException(Exception):
@@ -542,6 +542,7 @@
             # Open the file
             if self.f_desc == None:
                 self.f_desc = open(self._filename, "w+")
+            # pylint: disable=W0212
             wfd = win32file._get_osfhandle(self.f_desc.fileno())
             if not wait:
                 try:
@@ -565,9 +566,10 @@
             if self.f_desc == None:
                 LOGGER_LOCK.debug("already unlocked")
                 return
+            # pylint: disable=W0212
             wfd = win32file._get_osfhandle(self.f_desc.fileno())
             try:
-                # pylint: disable-msg=E1101
+                # pylint: disable=E1101
                 win32file.UnlockFile(wfd, 0 , 0, 0xffff, 0)
                 self.f_desc.close()
                 self.f_desc = None
--- a/buildframework/helium/sf/python/pythoncore/lib/freedisk.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/freedisk.py	Fri Aug 13 14:59:05 2010 +0300
@@ -39,24 +39,23 @@
 
 
 def print_space_report(drive, space_required):
-    """
-    compares the required space with current free space on the provided drive
+    """ Compares the required space with current free space on the provided drive.
     """
     try:
         if sys.platform == "win32":
-            import win32file # pylint: disable-msg=F0401
+            import win32file # pylint: disable=F0401
             free_bytes = win32file.GetDiskFreeSpaceEx(drive)[0]
         elif 'java' in sys.platform:
-            import java.io # pylint: disable-msg=F0401
+            import java.io # pylint: disable=F0401
             free_bytes = java.io.File(drive).getFreeSpace()
         else:
             import os
             import statvfs
-            # pylint: disable-msg=E1101
+            # pylint: disable=E1101
             stats = os.statvfs(drive)
             free_bytes = stats[statvfs.F_BSIZE] * stats[statvfs.F_BAVAIL]
             
-    except Exception, err_type:
+    except (IOError, win32file.error), err_type:
         print "ERROR: Either specified drive doesn't exist or an unknown error"
         print str(err_type)
         print HELP_STRING
@@ -76,8 +75,7 @@
 
     
 def main():
-    """
-    Gets and parse options and verifies the option values
+    """ Gets and parse options and verifies the option values.
     """
     try:
         opts = getopt.getopt(sys.argv[1:], "hs:d:", \
--- a/buildframework/helium/sf/python/pythoncore/lib/getVariantConfiguration.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/getVariantConfiguration.py	Fri Aug 13 14:59:05 2010 +0300
@@ -71,7 +71,7 @@
                     if len(str(v_info)) > 0:
                         outfile.write(str(v_info)+"\n")
         outfile.close()
-    except Exception, exc:
+    except IOError, exc:
         print "ERROR: %s" % exc
         sys.exit(-1)
     
--- a/buildframework/helium/sf/python/pythoncore/lib/helium/documentation.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/helium/documentation.py	Fri Aug 13 14:59:05 2010 +0300
@@ -19,8 +19,7 @@
 
 """ Helium API documentation processing. """
 
-from lxml import etree
-
+import amara
 
 class APIDeltaWriter(object):
     """ Creates an XML delta of the Helium API between releases. """
@@ -31,81 +30,76 @@
         
     def write(self, path):
         """ Write the API delta information to an XML file. """
-        root = etree.Element('apiChanges')
+        root = amara.create_document('apiChanges')
         
-        old_db = etree.parse(self.old_database)
-        new_db = etree.parse(self.new_database)
+        old_db = amara.parse(self.old_database)
+        new_db = amara.parse(self.new_database)        
         
-        
-        old_macro_names = set([macro[0].text for macro in old_db.findall('/project/macro')])
-        new_macro_names = set([macro[0].text for macro in new_db.findall('/project/macro')])
+        old_macro_names = set([str(macro.name) for macro in old_db.xml_xpath('/antDatabase/project/macro')])
+        new_macro_names = set([str(macro.name) for macro in new_db.xml_xpath('/antDatabase/project/macro')])
         
-        old_target_names = set([target[0].text for target in old_db.findall('/project/target')])
-        new_target_names = set([target[0].text for target in new_db.findall('/project/target')])
+        old_target_names = set([str(target.name) for target in old_db.xml_xpath('/antDatabase/project/target')])
+        new_target_names = set([str(target.name) for target in new_db.xml_xpath('/antDatabase/project/target')])
+        new_target_names_public = set([str(target.name) for target in new_db.xml_xpath("/antDatabase/project/target[scope='public']")])
         
-        old_property_names = set([property[0].text for property in old_db.findall('/project/property')])
-        new_property_names = set([property[0].text for property in new_db.findall('/project/property')])
+        old_property_names = set([str(property_.name) for property_ in old_db.xml_xpath('/antDatabase/project/property')])
+        new_property_names = set([str(property_.name) for property_ in new_db.xml_xpath('/antDatabase/project/property')])
+        new_property_names_public = set([str(property_.name) for property_ in new_db.xml_xpath("/antDatabase/project/property[scope='public']")])
         
-        old_project_names = set([project[0].text for project in old_db.findall('/project')])
-        new_project_names = set([project[0].text for project in new_db.findall('/project')])
+        old_project_names = set([str(project.name) for project in old_db.xml_xpath('/antDatabase/project')])
+        new_project_names = set([str(project.name) for project in new_db.xml_xpath('/antDatabase/project')])
         
         dict_old_taskdef_names  = {}
         dict_new_taskdef_names  = {}
-        for taskdef in old_db.findall('/project/taskdef'):
-            dict_old_taskdef_names[taskdef[0].text] = taskdef[1].text
-        for taskdef in new_db.findall('/project/taskdef'):
-            dict_new_taskdef_names[taskdef[0].text] = taskdef[1].text
+        for taskdef in old_db.xml_xpath('/antDatabase/project/taskdef'):
+            dict_old_taskdef_names[taskdef.name] = taskdef.name
+        for taskdef in new_db.xml_xpath('/antDatabase/project/taskdef'):
+            dict_new_taskdef_names[taskdef.name] = taskdef.name
 
         projects_removed = old_project_names.difference(new_project_names)
         for project in projects_removed:
-            project_element = etree.SubElement(root, 'project', attrib={'state': 'removed'})
-            project_element.text = project
+            root.xml_append(root.xml_create_element('project', attributes={'state': 'removed'}, content=project))
         projects_added = new_project_names.difference(old_project_names)
         for project in projects_added:
-            project_element = etree.SubElement(root, 'project', attrib={'state': 'added'})
-            project_element.text = project
+            root.xml_append(root.xml_create_element('project', attributes={'state': 'added'}, content=project))
         
         propertys_removed = old_property_names.difference(new_property_names)
-        for property in propertys_removed:
-            property_element = etree.SubElement(root, 'property', attrib={'state': 'removed'})
-            property_element.text = property
+        for property_ in propertys_removed:
+            root.xml_append(root.xml_create_element('property', attributes={'state': 'removed'}, content=property_))
         propertys_added = new_property_names.difference(old_property_names)
-        for property in propertys_added:
-            property_element = etree.SubElement(root, 'property', attrib={'state': 'added'})
-            property_element.text = property
+        for property_ in propertys_added:
+            if property_ in new_property_names_public or new_property_names_public == set([]):
+                root.xml_append(root.xml_create_element('property', attributes={'state': 'added'}, content=property_))
                     
         macros_removed = old_macro_names.difference(new_macro_names)
         for macro in macros_removed:
-            macro_element = etree.SubElement(root, 'macro', attrib={'state': 'removed'})
-            macro_element.text = macro
+            root.xml_append(root.xml_create_element('macro', attributes={'state': 'removed'}, content=macro))
         macros_added = new_macro_names.difference(old_macro_names)
         for macro in macros_added:
-            macro_element = etree.SubElement(root, 'macro', attrib={'state': 'added'})
-            macro_element.text = macro
+            root.xml_append(root.xml_create_element('macro', attributes={'state': 'added'}, content=macro))
         targets_removed = old_target_names.difference(new_target_names)
         
         for target in targets_removed:
-            target_element = etree.SubElement(root, 'target', attrib={'state': 'removed'})
-            target_element.text = target
+            root.xml_append(root.xml_create_element('target', attributes={'state': 'removed'}, content=target))
         targets_added = new_target_names.difference(old_target_names)
         for target in targets_added:
-            target_element = etree.SubElement(root, 'target', attrib={'state': 'added'})
-            target_element.text = target
+            if target in new_target_names_public or new_target_names_public == set([]):
+                root.xml_append(root.xml_create_element('target', attributes={'state': 'added'}, content=target))
 
         taskdefs_removed = set(dict_old_taskdef_names.keys()) - set(dict_new_taskdef_names.keys()) 
         for taskdefKey in taskdefs_removed:
-            taskdef_element = etree.SubElement(root, 'taskdef', attrib={'state': 'removed'})
-            taskdef_element.text = taskdefKey
-            taskdef_element.attrib['classname'] =  dict_old_taskdef_names[taskdefKey]
+            taskdef_element = root.xml_create_element('taskdef', attributes={'state': 'removed'}, content=str(taskdefKey))
+            root.xml_append(taskdef_element)
+            taskdef_element.classname = dict_old_taskdef_names[taskdefKey]
         taskdefs_added = set(dict_new_taskdef_names.keys()) - set(dict_old_taskdef_names.keys())
         for taskdefKey in taskdefs_added:
-            taskdef_element = etree.SubElement(root, 'taskdef', attrib={'state': 'added'})
-            taskdef_element.text = taskdefKey
-            taskdef_element.attrib['classname'] =  dict_new_taskdef_names[taskdefKey]
+            taskdef_element = root.xml_create_element('taskdef', attributes={'state': 'added'}, content=str(taskdefKey))
+            root.xml_append(taskdef_element)
+            taskdef_element.classname = dict_new_taskdef_names[taskdefKey]
             
-        etree.dump(root)
-        tree = etree.ElementTree(root)
-        tree.write(path, pretty_print=True)
+        f = open(path, 'w')
+        root.xml(indent=True, out=f)
+        f.close()
         
         
         
--- a/buildframework/helium/sf/python/pythoncore/lib/helium/logger.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/helium/logger.py	Fri Aug 13 14:59:05 2010 +0300
@@ -23,7 +23,7 @@
   - First version of the module.
 """
 
-# pylint: disable-msg=E1101,E1103
+# pylint: disable=E1101,E1103
 
 import codecs
 import xml.dom.minidom
@@ -43,6 +43,7 @@
     def __call__(self, *args):
         """Make this object callable. Call _print from the logger instance.
         @params *args a list of arguments"""
+        # pylint: disable=W0212
         self.__logger._print(self.__name, args)
 
 
@@ -142,10 +143,10 @@
             print ("---------------------------------------------------------------------")
             print (" + %s" % title)
 
-    def SetCustomOutputer(self, type, classname, config = None):
+    def SetCustomOutputer(self, type_, classname, config = None):
         """set custom out puter"""
         node = self.__doc.createElementNS("", "__customoutputer")
-        node.setAttributeNS("", "type", type)
+        node.setAttributeNS("", "type", type_)
         node.setAttributeNS("", "module", classname)
         if config != None:
             node.appendChild(config)
@@ -170,7 +171,7 @@
         """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)))
+        output = u"".join([u"%s" % x for x in list(*args)])
         nodetype = kind.lower()
         msgtype = ""
         if nodetype != "print" and nodetype != "info" and nodetype != "debug":
--- a/buildframework/helium/sf/python/pythoncore/lib/helium/output/widgets.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/helium/output/widgets.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 #===============================================================================
 """ handles components in XML documents"""
 
-# pylint: disable-msg=E1101
+# pylint: disable=E1101
 
 import xml.dom.minidom
 class Widget:
@@ -100,7 +100,7 @@
 
         self.__table.appendChild(row)
 
-    def addStatistics(self, type, value):
+    def addStatistics(self, type_, value):
         """add Statistics"""
         if self.__table_stat == None:
             head1 = self._Box__doc.createElementNS("", "h1")
@@ -123,8 +123,8 @@
 
         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)))
+        div.setAttributeNS("", "class", "gbl_cnt_" + type_)
+        div.appendChild(self._Box__doc.createTextNode("%d %ss" % (value, type_)))
         t_d.appendChild(div)
         self.__table_stat.appendChild(t_d)
           
@@ -132,7 +132,7 @@
     
 class Event(Widget):
     """ A widget representing an event component """
-    def __init__(self, doc, container, id):
+    def __init__(self, doc, container, id_):
         Widget.__init__(self)
         self.__doc = doc
         node_head = doc.createElementNS("", "div")
@@ -140,11 +140,11 @@
         container.appendChild(node_head)
 
         link = doc.createElementNS("", "a")
-        link.setAttributeNS("", "href", "javascript:ToggleNode('Img%d')" % id)
+        link.setAttributeNS("", "href", "javascript:ToggleNode('Img%d')" % id_)
         node_head.appendChild(link)
         
         span = doc.createElementNS("", "span")
-        span.setAttributeNS("", "id", "Img%d" % id)
+        span.setAttributeNS("", "id", "Img%d" % id_)
         span.setAttributeNS("", "style", "background:url(http://fawww.europe.nokia.com/isis/isis_interface/img/icons/button_open.gif) no-repeat")
         link.appendChild(span)
 
@@ -156,7 +156,7 @@
         
         # shaow all
         showall = doc.createElementNS("", "a")
-        showall.setAttributeNS("", "href", "javascript:ShowChilds('Img%d')"  % id)
+        showall.setAttributeNS("", "href", "javascript:ShowChilds('Img%d')"  % id_)
         span = doc.createElementNS("", "span")
         span.setAttributeNS("", "class", "node_action")
         span.appendChild(doc.createTextNode("[Show All]"))
@@ -164,7 +164,7 @@
         
         #hide all
         hideall = doc.createElementNS("", "a")
-        hideall.setAttributeNS("", "href", "javascript:HideChilds('Img%d')" % id)
+        hideall.setAttributeNS("", "href", "javascript:HideChilds('Img%d')" % id_)
         span = doc.createElementNS("", "span")
         span.setAttributeNS("", "class", "node_action")
         span.appendChild(doc.createTextNode("[Hide All]"))
@@ -172,7 +172,7 @@
         
         #toggle node
         self.__togglenode = doc.createElementNS("", "a")
-        self.__togglenode.setAttributeNS("", "href", "javascript:ToggleNode('Img%d')" % id)
+        self.__togglenode.setAttributeNS("", "href", "javascript:ToggleNode('Img%d')" % id_)
         self.__togglenode.appendChild(doc.createTextNode(""))
         # append container
         node_head.appendChild(showall)
@@ -180,7 +180,7 @@
         node_head.appendChild(self.__togglenode)
 
         contentx = doc.createElementNS("", "div")
-        contentx.setAttributeNS("", "id", "Content%d" % id)
+        contentx.setAttributeNS("", "id", "Content%d" % id_)
         contentx.setAttributeNS("", "style", "display:none")
         container.appendChild(contentx)
         content = doc.createElementNS("", "div")
@@ -194,15 +194,15 @@
         """set Title"""
         self.__title.data = title
 
-    def addStatistics(self, type, value):
+    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")
             self.__togglenode.appendChild(self.__node_info)
         span = self.__doc.createElementNS("", "span")
-        span.setAttributeNS("", "class","cnt_%s" % type)
-        span.appendChild(self.__doc.createTextNode("%d %ss" % (value, type)))
+        span.setAttributeNS("", "class","cnt_%s" % type_)
+        span.appendChild(self.__doc.createTextNode("%d %ss" % (value, type_)))
         self.__node_info.appendChild(span)
           #<span class="node_info">
           #  <span class="cnt_warning">2 warnings</span>
@@ -302,7 +302,7 @@
             """push Content"""
             self.getDOMContainer().appendChild(self.__doc.createTextNode(arg))
             self.getDOMContainer().appendChild(self.__doc.createElementNS("","br"))
-        map(pushContent, text.strip().split("\n"))
+        [pushContent(line) for line in text.strip().split("\n")]
 
     def getDOMContainer(self):
         """get DOM Container"""
--- a/buildframework/helium/sf/python/pythoncore/lib/helium/outputer.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/helium/outputer.py	Fri Aug 13 14:59:05 2010 +0300
@@ -38,25 +38,25 @@
         url_file.close()
         self.__xml = amara.parse(data)
         
-    def getClass(self, type, default = None):
+    def getClass(self, type_, default = None):
         """get Class"""
-        return self._getValue(type, "class", default)
+        return self._getValue(type_, "class", default)
 
-    def getImg(self, type, default = None):
+    def getImg(self, type_, default = None):
         """ get Image"""
-        return self._getValue(type, "img", default)
+        return self._getValue(type_, "img", default)
     
-    def getWidth(self, type, default = None):
+    def getWidth(self, type_, default = None):
         """get Width"""
-        return self._getValue(type, "width", default)
+        return self._getValue(type_, "width", default)
     
-    def getHeight(self, type, default = None):
+    def getHeight(self, type_, default = None):
         """get height"""
-        return self._getValue(type, "height", default)
+        return self._getValue(type_, "height", default)
     
-    def _getValue(self, type, attr, default = None):
+    def _getValue(self, type_, attr, default = None):
         """get value"""
-        r_attr = self.__xml.xml_xpath("/htmloutput/icons/icon[@type='%s']" % type)
+        r_attr = self.__xml.xml_xpath("/htmloutput/icons/icon[@type='%s']" % type_)
         if len(r_attr) == 0:
             if default == None:
                 raise Exception("Not found")
@@ -67,6 +67,7 @@
 class XML2XHTML:
     """ This class is used to generate an html file from the given xml """
     def __init__(self, filename, url="http://fawww.europe.nokia.com/isis/isis_interface/configuration.xml", usedataurl=False):
+        self.__title = None
         self.__config = Configuration(url)
         self.__filename = filename
         self.__srcdoc = xml.dom.minidom.parse(filename)
@@ -165,15 +166,13 @@
             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_foot = self.__factory["__footer"](self.__doc, body)
-            if footer.attributes.has_key("title"):
-                f_foot.setTitle(footer.attributes['title'].value)
-            if footer.attributes.has_key("subtitle"):
-                f_foot.setSubTitle(footer.attributes['subtitle'].value)
-        except Exception:
-            pass
+        footer = root.getElementsByTagName("__footer")[0]
+        f_foot = self.__factory["__footer"](self.__doc, body)
+        if footer.attributes.has_key("title"):
+            f_foot.setTitle(footer.attributes['title'].value)
+        if footer.attributes.has_key("subtitle"):
+            f_foot.setSubTitle(footer.attributes['subtitle'].value)
+
         # Generate summary
         self._createSummary()
 
@@ -285,7 +284,7 @@
 
     def _createSummary(self):
         """create Summary"""
-        # pylint: disable-msg=E1101
+        # pylint: disable=E1101
         if self.__xhtml_summary == None:
             self.__xhtml_summary = Summary(self.__doc, self.__body)
             self.__xhtml_summary.setTitle("Global Statistics")
--- a/buildframework/helium/sf/python/pythoncore/lib/iadinfo.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/iadinfo.py	Fri Aug 13 14:59:05 2010 +0300
@@ -1,6 +1,6 @@
 #============================================================================ 
-#Name        : iadinfo.py 
-#Part of     : Helium 
+#Name       : iadinfo.py 
+#Part of    : Helium 
 
 #Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 #All rights reserved.
@@ -24,34 +24,39 @@
 
 PyASN1Availabe = True
 
-try :
+try:
     from pyasn1.codec.der import decoder
     from pyasn1.type import base
 except ImportError:
     PyASN1Availabe = False
 
-def _findItem(item, itemParent, index, objectIdentifier) :
+def _findItem(item, itemParent, index, objectIdentifier):
     """find Item"""
-    if isinstance(item, base.AbstractSimpleAsn1Item) :
-        if item == objectIdentifier :
+    if isinstance(item, base.AbstractSimpleAsn1Item):
+        if item == objectIdentifier:
             return itemParent[index + 1]
     else:
-        for i_item in range(len(item)) :
+        for i_item in range(len(item)):
             found = _findItem(item[i_item], item, i_item, objectIdentifier)
             if found: 
                 return found
 
-def findItem(decodedCert, objectIdentifier) :
+def findItem(decodedCert, objectIdentifier):
     """find item"""
     return _findItem(decodedCert, None, 0, objectIdentifier)
 
 
-class CertificateOrganization :
+class CertificateOrganization:
     """ This class holds organisation details of certificate issuer or signer """
-    def __init__(self) :
-        pass
-    
-    def parse(self, decodedCert) :
+    def __init__(self):
+        self.commonName = None
+        self.countryCode = None
+        self.locality = None
+        self.state = None
+        self.street = None
+        self.organization = None
+        
+    def parse(self, decodedCert):
         """parse certificate Organisation"""
         self.commonName = findItem(decodedCert, (2, 5, 4, 3))
         self.countryCode = findItem(decodedCert, (2, 5, 4, 6))
@@ -60,29 +65,30 @@
         self.street = findItem(decodedCert, (2, 5, 4, 9))
         self.organization = findItem(decodedCert, (2, 5, 4, 10))
 
-    def readableStr(self) :
+    def readableStr(self):
         """readable String"""
         buf = ""
-        if self.commonName :
+        if self.commonName:
             buf += self.commonName.prettyPrint() + "\n"
-        if self.countryCode :
+        if self.countryCode:
             buf += self.countryCode.prettyPrint() + "\n"
-        if self.locality :
+        if self.locality:
             buf += self.locality.prettyPrint() + "\n"
-        if self.state :
+        if self.state:
             buf += self.state.prettyPrint() + "\n"
-        if self.street :
+        if self.street:
             buf += self.street.prettyPrint() + "\n"
-        if self.organization :
+        if self.organization:
             buf += self.organization.prettyPrint()
         return buf
 
-class CertificateInfo :
+class CertificateInfo:
     """ This class holds certificate information such as certificate signer and issuer """
-    def __init__(self) :
-        pass
+    def __init__(self):
+        self.issuer = None
+        self.signer = None
         
-    def parse(self, decodedCert) :
+    def parse(self, decodedCert):
         """parse"""
         self.issuer = CertificateOrganization()
         self.issuer.parse(decodedCert[0][3])
@@ -90,101 +96,101 @@
         self.signer = CertificateOrganization()
         self.signer.parse(decodedCert[0][5])
         
-    def readableStr(self) :
+    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 SISFileHeader:
     """ Class SIS File header """
-    def __init__(self) :
+    def __init__(self):
         self.uid1 = 0
         self.uid2 = 0
         self.uid3 = 0
         self.uidChecksum = 0
 
-class SISField :
+class SISField:
     """ Class SIS Field """
-    def __init__(self) :
-        self.type = 0
+    def __init__(self):
+        self.type_ = 0
         self.length = None
         self.subFields = []
         
-    def readFieldLength(self, fileReader) :
+    def readFieldLength(self, fileReader):
         """read Field Length"""
         length = fileReader.readBytesAsUint(4)
-        if length & 0x80000000 > 0 :
+        if length & 0x80000000 > 0:
             length = length << 32
             length |= fileReader.readBytesAsUint(4)
         return length
         
-    def findField(self, fieldType, startIndex=0) :
+    def findField(self, fieldType, startIndex=0):
         """find Field"""
         result = None
         index = startIndex
         
-        for field in self.subFields[startIndex:] :
-            if field.type == fieldType :
+        for field in self.subFields[startIndex:]:
+            if field.type_ == fieldType:
                 result = field
                 break
-            ++ index
+            index = index + 1
         return (result, index)
         
-    def readableStr(self) :
+    def readableStr(self):
         """readable String"""
         return ""
     
-    def traverse(self, handler, depth=0) :
+    def traverse(self, handler, depth=0):
         """ traverse"""
         handler.handleField(self, depth)
-        for field in self.subFields :
+        for field in self.subFields:
             field.traverse(handler, depth + 1)
         
-class SISUnsupportedField(SISField) :
+class SISUnsupportedField(SISField):
     """ Class SIS UnsupportedField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialisation From File"""
         self.length = self.readFieldLength(fileReader)
         fileReader.readPlainBytes(self.length)
 
-class SISStringField(SISField) :
+class SISStringField(SISField):
     """ Class SIS StringField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.data = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         buf = fileReader.readPlainBytes(self.length)
         self.data = u""
-        while len(buf) > 0 :
+        while len(buf) > 0:
             temp = buf[:2]
             buf = buf[2:]
             self.data += unichr(ord(temp[0]) | ord(temp[1]) << 8)
         
-    def readableStr(self) :
+    def readableStr(self):
         """readable String"""
         return self.data
         
-class SISArrayField(SISField) :
+class SISArrayField(SISField):
     """ Class SIS ArrayField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
-        type = fileReader.readBytesAsInt(4)
+        type_ = fileReader.readBytesAsInt(4)
         l_len = self.length - 4
-        while l_len > 0 :
-            field = SISFieldTypes[type]()
-            field.type = type
+        while l_len > 0:
+            field = SISFieldTypes[type_]()
+            field.type_ = type_
             field.initFromFile(fileReader)
             self.subFields.append(field)
             
@@ -192,32 +198,32 @@
             padding = fileReader.skipPadding()
             l_len -= padding
 
-class SISCompressedField(SISField) :
+class SISCompressedField(SISField):
     """ Class SIS CompressedField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.algorithm = None
         self.uncompressedDataSize = None
         self.data = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.algorithm = fileReader.readBytesAsUint(4)
         self.uncompressedDataSize = fileReader.readBytesAsUint(8)
         data = fileReader.readPlainBytes(self.length - 4 - 8)
-        if self.algorithm == 0 :
+        if self.algorithm == 0:
             self.data = data
-        elif self.algorithm == 1 :
+        elif self.algorithm == 1:
             self.data = zlib.decompress(data)
             
-class SISVersionField(SISField) :
+class SISVersionField(SISField):
     """ Class SIS VersionField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.version = (- 1, - 1, - 1)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         major = fileReader.readBytesAsInt(4)
@@ -225,147 +231,147 @@
         build = fileReader.readBytesAsInt(4)
         self.version = (major, minor, build)
         
-    def readableStr(self) :
+    def readableStr(self):
         """readable string"""
         return str(self.version)
     
-class SISVersionRangeField(SISField) :
+class SISVersionRangeField(SISField):
     """ Class SIS VersionRangeField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.fromVersion = None
         self.toVersion = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.fromVersion = fieldParser.parseField(fileReader)
-        if self.length - fieldParser.lastReadBytes > 0  :
+        if self.length - fieldParser.lastReadBytes > 0 :
             self.toVersion = fieldParser.parseField(fileReader)
     
-class SISDateField(SISField) :
+class SISDateField(SISField):
     """ Class SIS DateField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.year = None
         self.month = None
         self.day = None
         
-    def initFromFile(self, fileReader) :
+    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) :
+    def readableStr(self):
         """readable string"""
         return str(self.year) + "." + str(self.month) + "." + str(self.day)
     
-class SISTimeField(SISField) :
+class SISTimeField(SISField):
     """ Class SIS TimeField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.hours = None
         self.minutes = None
         self.seconds = None
         
-    def initFromFile(self, fileReader) :
+    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) :
+    def readableStr(self):
         """readable String"""
         return str(self.hours) + ":" + str(self.minutes) + ":" + str(self.seconds)
     
-class SISDateTimeField(SISField) :
+class SISDateTimeField(SISField):
     """ Class SIS DateTimeField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.date = None
         self.time = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.date = fieldParser.parseField(fileReader)
         self.time = fieldParser.parseField(fileReader)
     
-class SISUidField(SISField) :
+class SISUidField(SISField):
     """ Class SIS UidField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.uid = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.uid = fileReader.readBytesAsUint(4)
         
-    def readableStr(self) :
+    def readableStr(self):
         """readable String"""
         return hex(self.uid)
     
-class SISLanguageField(SISField) :
+class SISLanguageField(SISField):
     """ Class SIS LanguageField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.language = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.language = fileReader.readBytesAsUint(4)
         
-    def readableStr(self) :
+    def readableStr(self):
         """readable String"""
         return str(self.language)
     
-class SISContentsField(SISField) :
+class SISContentsField(SISField):
     """ Class SIS ContentsField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         field = fieldParser.parseField(fileReader)
-        while field :
-            if field.type == 3 : # compressed<conroller>
+        while field:
+            if field.type_ == 3: # compressed<conroller>
                 bufferReader = SISBufferReader(field.data)
                 field = fieldParser.parseField(bufferReader)
             self.subFields.append(field)
             field = fieldParser.parseField(fileReader)
 
-class SISControllerField(SISField) :
+class SISControllerField(SISField):
     """ Class SIS ControllerField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         bufferReader = SISBufferReader(fileReader.readPlainBytes(self.length))
         field = fieldParser.parseField(bufferReader)
-        while field :
+        while field:
             self.subFields.append(field)
             field = fieldParser.parseField(bufferReader)
 
-class SISInfoField(SISField) :
+class SISInfoField(SISField):
     """ Class SIS InfoField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.installType = None
         self.installFlags = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
@@ -378,34 +384,34 @@
         self.installType = fileReader.readBytesAsUint(1)
         self.installFlags = fileReader.readBytesAsUint(1) 
             
-class SISSupportedLanguagesField(SISField) :
+class SISSupportedLanguagesField(SISField):
     """ Class SISSupportedLanguagesField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # languages
         
-class SISSupportedOptionsField(SISField) :
+class SISSupportedOptionsField(SISField):
     """ Class SISSupportedOptionsField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # options
             
-class SISPrerequisitiesField(SISField) :
+class SISPrerequisitiesField(SISField):
     """ Class SISPrerequisitiesField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
@@ -413,77 +419,77 @@
         self.subFields.append(fieldParser.parseField(fileReader)) # dependencies
         
         
-class SISDependencyField(SISField) :
+class SISDependencyField(SISField):
     """ Class SISDependencyField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # UID
         field = fieldParser.parseField(fileReader)
         # Version range field is optional
-        if field.type == VersionRangeField :
+        if field.type_ == VersionRangeField:
             self.subFields.append(field) # version range
             self.subFields.append(fieldParser.parseField(fileReader)) # dependency names
-        else :
+        else:
             self.subFields.append(field) # dependency names
     
-class SISPropertiesField(SISField) :
+class SISPropertiesField(SISField):
     """ Class SISPropertiesField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # properties
     
-class SISPropertyField(SISField) :
+class SISPropertyField(SISField):
     """ Class SISPropertyField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.key = None
         self.value = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.key = fileReader.readBytesAsInt(4)
         self.value = fileReader.readBytesAsInt(4)
     
-class SISSignaturesField(SISUnsupportedField) :
+class SISSignaturesField(SISUnsupportedField):
     """ Class SISSignaturesField There is a type for this field, but there is no definition of the field contents"""
     pass
     
-class SISCertificateChainField(SISField) :
+class SISCertificateChainField(SISField):
     """ Class SISCertificateChainField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # certificate data
     
-class SISLogoField(SISField) :
+class SISLogoField(SISField):
     """ Class SISLogoField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
 
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # logo file
     
-class SISFileDescriptionField(SISField) :
+class SISFileDescriptionField(SISField):
     """ Class SISFileDescriptionField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.operation = None
         self.operationOptions = None
@@ -491,7 +497,7 @@
         self.uncompressedLength = None
         self.fileIndex = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
@@ -500,7 +506,7 @@
         self.subFields.append(fieldParser.parseField(fileReader))
         field = fieldParser.parseField(fileReader)
         self.subFields.append(field)
-        if field.type == 41 : # read field was capabilities ==> there is one more field left
+        if field.type_ == 41: # read field was capabilities ==> there is one more field left
             self.subFields.append(fieldParser.parseField(fileReader))
         
         self.operation = fileReader.readBytesAsUint(4)
@@ -509,29 +515,29 @@
         self.uncompressedLength = fileReader.readBytesAsUint(8)
         self.fileIndex = fileReader.readBytesAsUint(4)
         
-    def readableStr(self) :
+    def readableStr(self):
         """readable string"""
         return "index: " + str(self.fileIndex)
     
-class SISHashField(SISField) :
+class SISHashField(SISField):
     """ Class SISHashField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.algorithm = None
 
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.algorithm = fileReader.readBytesAsUint(4)
         self.subFields.append(fieldParser.parseField(fileReader)) # logo file
     
-class SISIfField(SISField) :
+class SISIfField(SISField):
     """ Class SISIfField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
 
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
@@ -539,27 +545,27 @@
         self.subFields.append(fieldParser.parseField(fileReader)) # install block
         self.subFields.append(fieldParser.parseField(fileReader)) # else ifs
 
-class SISElseIfField(SISField) :
+class SISElseIfField(SISField):
     """ Class SISElseIfField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
 
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # expression
         self.subFields.append(fieldParser.parseField(fileReader)) # install block
     
-class SISInstallBlockField(SISField) :
+class SISInstallBlockField(SISField):
     """ Class SISInstallBlockField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.files = None
         self.embeddedSISFiles = None
         self.ifBlocks = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
@@ -567,212 +573,212 @@
         self.subFields.append(fieldParser.parseField(fileReader))
         self.subFields.append(fieldParser.parseField(fileReader))
 
-class SISExpressionField(SISField) :
+class SISExpressionField(SISField):
     """ Class SISExpressionField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.operator = None
         self.integerValue = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.operator = fileReader.readBytesAsUint(4)
         self.integerValue = fileReader.readBytesAsInt(4)
         
-        if self.operator == 10 or self.operator == 13 :
+        if self.operator == 10 or self.operator == 13:
             self.subFields.append(fieldParser.parseField(fileReader))
-        if self.operator == 1 or self.operator == 2 or self.operator == 3 or self.operator == 4 or self.operator == 5 or self.operator == 6 or self.operator == 7 or self.operator == 8 or self.operator == 11 or self.operator == 12 :
+        if self.operator == 1 or self.operator == 2 or self.operator == 3 or self.operator == 4 or self.operator == 5 or self.operator == 6 or self.operator == 7 or self.operator == 8 or self.operator == 11 or self.operator == 12:
             self.subFields.append(fieldParser.parseField(fileReader))
-        if not (self.operator == 13 or self.operator == 14 or self.operator == 15 or self.operator == 16 or self.operator == 10) :
+        if not (self.operator == 13 or self.operator == 14 or self.operator == 15 or self.operator == 16 or self.operator == 10):
             self.subFields.append(fieldParser.parseField(fileReader))
         
-class SISDataField(SISField) :
+class SISDataField(SISField):
     """ Class SISDataField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # data units
     
-class SISDataUnitField(SISField) :
+class SISDataUnitField(SISField):
     """ Class SISDataUnitField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # file data
     
-class SISFileDataField(SISField) :
+class SISFileDataField(SISField):
     """ Class SISFileDataField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # raw file data
     
-class SISSupportedOptionField(SISField) :
+class SISSupportedOptionField(SISField):
     """ Class SISSupportedOptionField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # names
     
-class SISControllerChecksumField(SISField) :
+class SISControllerChecksumField(SISField):
     """ Class SISControllerChecksumField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.checksum = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.checksum = fileReader.readBytesAsUint(2)
     
-class SISDataChecksumField(SISField) :
+class SISDataChecksumField(SISField):
     """ Class SISDataChecksumField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.checksum = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.checksum = fileReader.readBytesAsUint(2)
     
-class SISSignatureField(SISField) :
+class SISSignatureField(SISField):
     """ Class SISSignatureField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # signature algorithm
         self.subFields.append(fieldParser.parseField(fileReader)) # signature data
     
-class SISBlobField(SISField) :
+class SISBlobField(SISField):
     """ Class SISBlobField """ 
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.data = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.data = fileReader.readPlainBytes(self.length)
     
-class SISSignatureAlgorithmField(SISField) :
+class SISSignatureAlgorithmField(SISField):
     """ Class SISSignatureAlgorithmField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # algorithm identifier
     
-class SISSignatureCertificateChainField(SISField) :
+class SISSignatureCertificateChainField(SISField):
     """ Class SISSignatureCertificateChainField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # signatures
         self.subFields.append(fieldParser.parseField(fileReader)) # certificate chain
     
-class SISDataIndexField(SISField) :
+class SISDataIndexField(SISField):
     """ Class SISDataIndexField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.dataIndex = None
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.dataIndex = fileReader.readBytesAsUint(4)
 
-class SISCapabilitiesField(SISField) :
+class SISCapabilitiesField(SISField):
     """ Class SISCapabilitiesField """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.capabilities = 0
         self.readableCaps = []
         
-    def initFromFile(self, fileReader) :
+    def initFromFile(self, fileReader):
         """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.capabilities = fileReader.readBytesAsUint(self.length)
         
-        for i in range(20) :
-            if (self.capabilities >> i) & 0x01 :
+        for i in range(20):
+            if (self.capabilities >> i) & 0x01:
                 self.readableCaps.append(CapabilityNames[i])
                 
-    def readableStr(self) :
+    def readableStr(self):
         """readable string"""
         return " ".join(self.readableCaps)
     
 SISFieldTypes = { 
-    1 : SISStringField,
-    2 : SISArrayField,
-    3 : SISCompressedField,
-    4 : SISVersionField,
-    5 : SISVersionRangeField,
-    6 : SISDateField,
-    7 : SISTimeField,
-    8 : SISDateTimeField,
-    9 : SISUidField,
-    10 : SISUnsupportedField,
-    11 : SISLanguageField,
-    12 : SISContentsField,
-    13 : SISControllerField,
-    14 : SISInfoField,
-    15 : SISSupportedLanguagesField,
-    16 : SISSupportedOptionsField,
-    17 : SISPrerequisitiesField,
-    18 : SISDependencyField,
-    19 : SISPropertiesField,
-    20 : SISPropertyField,
-    21 : SISSignaturesField,
-    22 : SISCertificateChainField,
-    23 : SISLogoField,
-    24 : SISFileDescriptionField,
-    25 : SISHashField,
-    26 : SISIfField,
-    27 : SISElseIfField,
-    28 : SISInstallBlockField,
-    29 : SISExpressionField,
-    30 : SISDataField,
-    31 : SISDataUnitField,
-    32 : SISFileDataField,
-    33 : SISSupportedOptionField,
-    34 : SISControllerChecksumField,
-    35 : SISDataChecksumField,
-    36 : SISSignatureField,
-    37 : SISBlobField,
-    38 : SISSignatureAlgorithmField,
-    39 : SISSignatureCertificateChainField,
-    40 : SISDataIndexField,
-    41 : SISCapabilitiesField
+    1: SISStringField,
+    2: SISArrayField,
+    3: SISCompressedField,
+    4: SISVersionField,
+    5: SISVersionRangeField,
+    6: SISDateField,
+    7: SISTimeField,
+    8: SISDateTimeField,
+    9: SISUidField,
+    10: SISUnsupportedField,
+    11: SISLanguageField,
+    12: SISContentsField,
+    13: SISControllerField,
+    14: SISInfoField,
+    15: SISSupportedLanguagesField,
+    16: SISSupportedOptionsField,
+    17: SISPrerequisitiesField,
+    18: SISDependencyField,
+    19: SISPropertiesField,
+    20: SISPropertyField,
+    21: SISSignaturesField,
+    22: SISCertificateChainField,
+    23: SISLogoField,
+    24: SISFileDescriptionField,
+    25: SISHashField,
+    26: SISIfField,
+    27: SISElseIfField,
+    28: SISInstallBlockField,
+    29: SISExpressionField,
+    30: SISDataField,
+    31: SISDataUnitField,
+    32: SISFileDataField,
+    33: SISSupportedOptionField,
+    34: SISControllerChecksumField,
+    35: SISDataChecksumField,
+    36: SISSignatureField,
+    37: SISBlobField,
+    38: SISSignatureAlgorithmField,
+    39: SISSignatureCertificateChainField,
+    40: SISDataIndexField,
+    41: SISCapabilitiesField
     }
 
 [StringField,
@@ -818,71 +824,71 @@
  CapabilitiesField] = range(1, 42)
      
 FieldNames = {
- 0 : "ROOT",
- StringField : "StringField",
- ArrayField : "ArrayField",
- CompressedField : "CompressedField",
- VersionField : "VersionField",
- VersionRangeField : "VersionRangeField",
- DateField : "DateField",
- TimeField : "TimeField",
- DateTimeField : "DateTimeField",
- UidField : "UidField",
- UnusedField : "UnusedField",
- LanguageField : "LanguageField",
- ContentsField : "ContentsField",
- ControllerField : "ControllerField",
- InfoField : "InfoField",
- SupportedLanguagesField : "SupportedLanguagesField",
- SupportedOptionsField : "SupportedOptionsField",
- PrerequisitiesField : "PrerequisitiesField",
- DependencyField : "DependencyField",
- PropertiesField : "PropertiesField",
- PropertyField : "PropertyField",
- SignaturesField : "SignaturesField",
- CertificateChainField : "CertificateChainField",
- LogoField : "LogoField",
- FileDescriptionField : "FileDescriptionField",
- HashField : "HashField",
- IfField : "IfField",
- ElseIfField : "ElseIfField",
- InstallBlockField : "InstallBlockField",
- ExpressionField : "ExpressionField",
- DataField : "DataField",
- DataUnitField : "DataUnitField",
- FileDataField : "FileDataField",
- SupportedOptionField : "SupportedOptionField",
- ControllerChecksumField : "ControllerChecksumField",
- DataChecksumField : "DataChecksumField",
- SignatureField : "SignatureField",
- BlobField : "BlobField",
- SignatureAlgorithmField : "SignatureAlgorithmField",
- SignatureCertificateChainField : "SignatureCertificateChainField",
- DataIndexField : "DataIndexField",
- CapabilitiesField : "CapabilitiesField"
+ 0: "ROOT",
+ StringField: "StringField",
+ ArrayField: "ArrayField",
+ CompressedField: "CompressedField",
+ VersionField: "VersionField",
+ VersionRangeField: "VersionRangeField",
+ DateField: "DateField",
+ TimeField: "TimeField",
+ DateTimeField: "DateTimeField",
+ UidField: "UidField",
+ UnusedField: "UnusedField",
+ LanguageField: "LanguageField",
+ ContentsField: "ContentsField",
+ ControllerField: "ControllerField",
+ InfoField: "InfoField",
+ SupportedLanguagesField: "SupportedLanguagesField",
+ SupportedOptionsField: "SupportedOptionsField",
+ PrerequisitiesField: "PrerequisitiesField",
+ DependencyField: "DependencyField",
+ PropertiesField: "PropertiesField",
+ PropertyField: "PropertyField",
+ SignaturesField: "SignaturesField",
+ CertificateChainField: "CertificateChainField",
+ LogoField: "LogoField",
+ FileDescriptionField: "FileDescriptionField",
+ HashField: "HashField",
+ IfField: "IfField",
+ ElseIfField: "ElseIfField",
+ InstallBlockField: "InstallBlockField",
+ ExpressionField: "ExpressionField",
+ DataField: "DataField",
+ DataUnitField: "DataUnitField",
+ FileDataField: "FileDataField",
+ SupportedOptionField: "SupportedOptionField",
+ ControllerChecksumField: "ControllerChecksumField",
+ DataChecksumField: "DataChecksumField",
+ SignatureField: "SignatureField",
+ BlobField: "BlobField",
+ SignatureAlgorithmField: "SignatureAlgorithmField",
+ SignatureCertificateChainField: "SignatureCertificateChainField",
+ DataIndexField: "DataIndexField",
+ CapabilitiesField: "CapabilitiesField"
 }
      
 CapabilityNames = {
-    0 : "TCB",
-    1 : "CommDD",
-    2 : "PowerMgmt",
-    3 : "MultimediaDD",
-    4 : "ReadDeviceData",
-    5 : "WriteDeviceData",
-    6 : "DRM",
-    7 : "TrustedUI",
-    8 : "ProtServ",
-    9 : "DiskAdmin",
-    10 : "NetworkControl",
-    11 : "AllFiles",
-    12 : "SwEvent",
-    13 : "NetworkServices",
-    14 : "LocalServices",
-    15 : "ReadUserData",
-    16 : "WriteUserData",
-    17 : "Location",
-    18 : "SurroundingsDD",
-    19 : "UserEnvironment"
+    0: "TCB",
+    1: "CommDD",
+    2: "PowerMgmt",
+    3: "MultimediaDD",
+    4: "ReadDeviceData",
+    5: "WriteDeviceData",
+    6: "DRM",
+    7: "TrustedUI",
+    8: "ProtServ",
+    9: "DiskAdmin",
+    10: "NetworkControl",
+    11: "AllFiles",
+    12: "SwEvent",
+    13: "NetworkServices",
+    14: "LocalServices",
+    15: "ReadUserData",
+    16: "WriteUserData",
+    17: "Location",
+    18: "SurroundingsDD",
+    19: "UserEnvironment"
     }
 
 InstallTypes = {
@@ -893,86 +899,86 @@
     4: "PP"
     }
     
-class SISReader :
+class SISReader:
     """ SIS Reader """
-    def __init__(self) :
+    def __init__(self):
         self.bytesRead = 0
         
-    def readUnsignedBytes(self, numBytes) :
+    def readUnsignedBytes(self, numBytes):
         """read Unsigned bytes"""
         buf = self.readPlainBytes(numBytes)
-        if len(buf) < numBytes :
+        if len(buf) < numBytes:
             return []
             
-        format = ""
-        for _ in range(numBytes) :
-            format += "B"
-        return struct.unpack(format, buf)
+        format_ = ""
+        for _ in range(numBytes):
+            format_ += "B"
+        return struct.unpack(format_, buf)
     
-    def readSignedBytes(self, numBytes) :
+    def readSignedBytes(self, numBytes):
         """read signed bytes"""
         buf = self.readPlainBytes(numBytes)
-        if len(buf) < numBytes :
+        if len(buf) < numBytes:
             return []
             
-        format = ""
-        for _ in range(numBytes) :
-            format += "b"
-        return struct.unpack(format, buf)
+        format_ = ""
+        for _ in range(numBytes):
+            format_ += "b"
+        return struct.unpack(format_, buf)
         
-    def readBytesAsUint(self, numBytes) :
+    def readBytesAsUint(self, numBytes):
         """read bytes as Unit"""
         result = 0
-        bytes = self.readUnsignedBytes(numBytes)
-        if len(bytes) == numBytes :
-            for i_byte in range(numBytes) :
-                result |= bytes[i_byte] << (i_byte * 8)
+        bytes_ = self.readUnsignedBytes(numBytes)
+        if len(bytes_) == numBytes:
+            for i_byte in range(numBytes):
+                result |= bytes_[i_byte] << (i_byte * 8)
         
         return result
         
-    def readBytesAsInt(self, numBytes) :
+    def readBytesAsInt(self, numBytes):
         """read bytes as Integer"""
         result = 0
-        bytes = self.readSignedBytes(numBytes)
-        if len(bytes) == numBytes :
-            for i_byte in range(numBytes) :
-                result |= bytes[i_byte] << (i_byte * 8)
+        bytes_ = self.readSignedBytes(numBytes)
+        if len(bytes_) == numBytes:
+            for i_byte in range(numBytes):
+                result |= bytes_[i_byte] << (i_byte * 8)
         
         return result
         
-    def skipPadding(self) :
+    def skipPadding(self):
         """skip padding"""
         result = 0
-        if self.bytesRead % 4 != 0 :
+        if self.bytesRead % 4 != 0:
             paddingLength = 4 - self.bytesRead % 4
             self.readPlainBytes(paddingLength)
             result = paddingLength
             
         return result
 
-    def readPlainBytes(self, numBytes) :
+    def readPlainBytes(self, numBytes):
         """read plain bytes"""
         pass
 
-class SISFileReader(SISReader) : 
+class SISFileReader(SISReader): 
     """ SIS File Reader """
-    def __init__(self, inStream) :
+    def __init__(self, inStream):
         SISReader.__init__(self)
         self.inStream = inStream
         self.eof = False
         self.bytesRead = 0
 
-    def readPlainBytes(self, numBytes) :
+    def readPlainBytes(self, numBytes):
         """read Plain byytes"""
-        if self.eof :
+        if self.eof:
             return ""
             
-        if numBytes == 0 :
+        if numBytes == 0:
             return ""
             
         buf = ""
         buf = self.inStream.read(numBytes)
-        if len(buf) < numBytes :
+        if len(buf) < numBytes:
             self.eof = True
             return ""
             
@@ -980,121 +986,122 @@
         
         return buf
 
-    def isEof(self) :
+    def isEof(self):
         """is it End of File"""
         return self.eof
         
-class SISBufferReader(SISReader) :
+class SISBufferReader(SISReader):
     """ SIS Buffer reader """
-    def __init__(self, buffer) :
-        self.buffer = buffer
+    def __init__(self, buffer_):
+        SISReader.__init__(self)
+        self.buffer_ = buffer_
         self.bytesRead = 0
         
-    def readPlainBytes(self, numBytes) :
+    def readPlainBytes(self, numBytes):
         """read Plain bytes"""
-        if self.isEof() :
+        if self.isEof():
             return ""
             
-        if numBytes == 0 :
+        if numBytes == 0:
             return ""
             
-        result = self.buffer[self.bytesRead:self.bytesRead + numBytes]
+        result = self.buffer_[self.bytesRead:self.bytesRead + numBytes]
             
         self.bytesRead += numBytes
         
         return result
             
-    def isEof(self) :
+    def isEof(self):
         """is it End of File"""
-        return self.bytesRead >= len(self.buffer)
+        return self.bytesRead >= len(self.buffer_)
         
-class SISFieldParser :
+class SISFieldParser:
     """ Parser to read a SIS field """
-    def __init__(self) :
+    def __init__(self):
         self.lastReadBytes = 0
         
-    def parseField(self, fileReader) :
+    def parseField(self, fileReader):
         """Reads the next field from the fileReader stream and returns it"""
         field = None
         self.lastReadBytes = 0
-        type = fileReader.readBytesAsUint(4)
+        type_ = fileReader.readBytesAsUint(4)
         self.lastReadBytes += 4
-        if type != 0 :
-            field = SISFieldTypes[type]()
-            field.type = type
+        if type_ != 0:
+            field = SISFieldTypes[type_]()
+            field.type_ = type_
             field.initFromFile(fileReader)
             self.lastReadBytes += field.length + 4 # Field length + length field
             self.lastReadBytes += fileReader.skipPadding()
         return field
 
-class SISInfo(SISField) :
+class SISInfo(SISField):
     """ SIS file information """
-    def __init__(self) :
+    def __init__(self):
         SISField.__init__(self)
         self.fin = None
         self.fileHeader = SISFileHeader()
         
-    def parse(self, filename) :
+    def parse(self, filename):
         """parse"""
         fin = open(filename, 'rb')
         fileReader = SISFileReader(fin)
         self.parseHeader(fileReader)
         self.parseSISFields(fileReader)
         
-    def parseHeader(self, 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) :
+    def parseSISFields(self, fileReader):
         """parse SIS Fileds"""
         parser = SISFieldParser()
-        while not fileReader.isEof() :
+        while not fileReader.isEof():
             self.subFields.append(parser.parseField(fileReader))
 
-class Handler :
+class Handler:
     """ A handler class """
-    def __init__(self) :
+    def __init__(self):
         self.files = []
         self.fileDatas = []
         self.signatureCertificateChains = []
         
-    def handleField(self, field, _) :
+    def handleField(self, field, _):
         """handle Field"""
-        if field.type == FileDescriptionField :
+        if field.type_ == FileDescriptionField:
             self.files.append(field)
-        elif field.type == FileDataField :
+        elif field.type_ == FileDataField:
             self.fileDatas.append(field)
-        elif field.type == SignatureCertificateChainField  :
+        elif field.type_ == SignatureCertificateChainField :
             self.signatureCertificateChains.append(field)
 
-    def execute(self, options) :
+    def execute(self, options):
         """execute"""
-        for f_file in self.files :
-            if options.info :
+        for f_file in self.files:
+            if options.info:
                 buf = "   " + f_file.findField(StringField)[0].readableStr()
                 caps = f_file.findField(CapabilitiesField)[0]
-                if caps :
+                if caps:
                     buf += " [" + " ".join(f_file.findField(CapabilitiesField)[0].readableCaps) + "]"
                 print buf
-            if options.extract :
+            if options.extract:
                 parts = f_file.findField(StringField)[0].readableStr().split("\\")
-                if len(parts[len(parts) - 1]) > 0 :
+                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) :
+                    if not os.path.exists(path):
                         os.makedirs(path)
                     newFile = file(path + os.sep + parts[len(parts) - 1], "wb")
                     newFile.write(self.fileDatas[f_file.fileIndex].findField(CompressedField)[0].data)
                     newFile.close()
-        for sig in self.signatureCertificateChains :
+        for sig in self.signatureCertificateChains:
             if options.certificate:
                 buf = sig.findField(CertificateChainField)[0].subFields[0].data
                 print "Certificate chain:"
                 i_num = 1
-                while len(buf) > 0 :
+                while len(buf) > 0:
                     print "   Certificate " + str(i_num) + ":"
                     i_num += 1
                     decoded = decoder.decode(buf)
@@ -1104,24 +1111,24 @@
                     print "      " + "\n      ".join(readableStr.split('\n'))
                     buf = decoded[1]
             
-class ContentPrinter :
+class ContentPrinter:
     """ A handler class which prints the field contents """
-    def __init__(self) :
+    def __init__(self):
         pass
         
-    def handleField(self, field, depth) :
+    def handleField(self, field, depth):
         """handle Field"""
         buf = ""
-        for _ in range(depth) :
+        for _ in range(depth):
             buf += "  "
-        buf += FieldNames[field.type] + " "
-        if len(field.readableStr()) > 0 :
+        buf += FieldNames[field.type_] + " "
+        if len(field.readableStr()) > 0:
             buf += field.readableStr()
         print buf
 
-class IADHandler :
+class IADHandler:
     """ IAD handler class """
-    def __init__(self) :
+    def __init__(self):
         self.packageVersion = (0, 0, 0)
         self.packageUid = 0
         self.vendorName = ""
@@ -1132,26 +1139,29 @@
         self.packageDependencies = []
         self.installType = 0
         self.installFlags = 0
+        self.packageVersionField = None
+        self.packageUidField = None
+        self.vendorNameField = None
         
-    def handleDependency(self, field) :
+    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 :
+        if field.subFields[1] and field.subFields[1].type_ == VersionRangeField:
             res = field.subFields[1]
-            if res.fromVersion != None :
+            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 :
+            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, _) :
+    def handleField(self, field, _):
         """handle Field"""
-        if field.type == InfoField :
+        if field.type_ == InfoField:
             self.packageVersion = field.subFields[4].version
             self.packageVersionField = field.subFields[4]
             self.packageUid = field.subFields[0].uid
@@ -1160,19 +1170,19 @@
             self.vendorNameField = field.subFields[1]
             self.installType = field.installType
             self.installFlags = field.installFlags
-            for name in field.subFields[2].subFields :
+            for name in field.subFields[2].subFields:
                 self.packageNames.append(name.data)
-        elif field.type == LanguageField :
+        elif field.type_ == LanguageField:
             self.languages.append(field.language)
-        elif field.type == PrerequisitiesField :
-            for f_field in field.subFields[0].subFields :
+        elif field.type_ == PrerequisitiesField:
+            for f_field in field.subFields[0].subFields:
                 dependency = self.handleDependency(f_field)
                 self.platformDependencies.append(dependency)
-            for f_field in field.subFields[1].subFields :
+            for f_field in field.subFields[1].subFields:
                 dependency = self.handleDependency(f_field)
                 self.packageDependencies.append(dependency)
         
-    def getInfo (self, fileName) :
+    def getInfo (self, fileName):
         """get Info"""
         sisInfo = SISInfo()
         sisInfo.parse(fileName)
@@ -1187,11 +1197,11 @@
              + "<build>" + repr(handler.packageVersion[2]) + "</build>" \
              + "</version>\n" \
              + "  <type>" + InstallTypes[self.installType] + "</type>\n"
-        for num, name in enumerate(handler.packageNames) :
+        for num, name in enumerate(handler.packageNames):
             info += "  <name language='" + repr(handler.languages[num]) + "'>" + name + "</name>\n"
-        for language in handler.languages :
+        for language in handler.languages:
             info += "  <language>" + repr(language) + "</language>\n"
-        for platDep in handler.platformDependencies :
+        for platDep in handler.platformDependencies:
             info += "  <platform_dependency><uid>" + hex(platDep[0]) + "</uid>\n"
             info += "    <from>" \
                  + "<major>" + repr(platDep[1]) + "</major>" \
@@ -1203,7 +1213,7 @@
 #           info += "<build>" + repr(platDep[6]) + "</build>"
             info += "</to>\n" \
              + "  </platform_dependency>\n"
-        for packageDep in handler.packageDependencies :
+        for packageDep in handler.packageDependencies:
             info += "  <package_dependency><uid>" + hex(packageDep[0]) + "</uid>\n"
             info += "    <from>" \
                  + "<major>" + repr(packageDep[1]) + "</major>" \
@@ -1218,6 +1228,6 @@
         info += "</sisinfo>\n"
         return info
 
-if __name__ == "__main__" :
+if __name__ == "__main__":
     _handler = IADHandler()
     print (_handler.getInfo (sys.argv[1]))
--- a/buildframework/helium/sf/python/pythoncore/lib/ido.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ido.py	Fri Aug 13 14:59:05 2010 +0300
@@ -29,13 +29,13 @@
 
 def get_sysdef_location(sysdef):
     """ Search for layer_real_source_path entity inside the sysdef file. """
-    input = open(sysdef, 'r')
-    for line in input.readlines():
+    input_ = open(sysdef, 'r')
+    for line in input_.readlines():
         result = MATCH_ENTITY.match(line)
         if result != None:
-            input.close()
+            input_.close()
             return result.groups()[0]
-    input.close()
+    input_.close()
     print 'layer_real_source_path entity not found in ' + sysdef
     return None
 
--- a/buildframework/helium/sf/python/pythoncore/lib/idoprep.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/idoprep.py	Fri Aug 13 14:59:05 2010 +0300
@@ -34,13 +34,13 @@
         s60 grace release are set.
     """    
     if not grace:
-        raise Exception("Property 's60.grace.server' is not defined.")
+        raise EnvironmentError("Property 's60.grace.server' is not defined.")
     if not service:
-        raise Exception("Property 's60.grace.service' is not defined.")
+        raise EnvironmentError("Property 's60.grace.service' is not defined.")
     if not product:
-        raise Exception("Property 's60.grace.product' is not defined.")
+        raise EnvironmentError("Property 's60.grace.product' is not defined.")
     if not release:
-        raise Exception("Property 's60.grace.release' is not defined.")
+        raise EnvironmentError("Property 's60.grace.release' is not defined.")
             
 def get_s60_env_details(grace, service, product, release, rev, cachefilename, s60gracecheckmd5, s60graceusetickler):
     """ Return s60 environ details """
@@ -59,7 +59,7 @@
                 
     branch = os.path.join(grace, service, product)
     if not os.path.exists(branch):
-        raise Exception("Error occurred: Could not find directory %s" % branch)
+        raise IOError("Error occurred: Could not find directory %s" % branch)
         
     result = []
     for rel in os.listdir(branch):
@@ -92,14 +92,14 @@
                     _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, exc:
+        except IOError, exc:
             _logger.warning(str("WARNING: %s: %s" % (rel , exc)))
             _logger.warning(("%s is not a valid release." % rel))
             traceback.print_exc()
     
     result = validresults
     if len(result) == 0:
-        raise Exception("Error finding GRACE release.")
+        raise EnvironmentError("Error finding GRACE release.")
     print result[0]
     return result
     
@@ -119,10 +119,10 @@
         
 def create_ado_mapping(sysdefconfig, adomappingfile, adoqualitymappingfile, builddrive, adoqualitydirs):
     """ Creates ado mapping and ado quality mapping files """
-    input = open(sysdefconfig, 'r')
+    input_ = open(sysdefconfig, 'r')
     output = open(adomappingfile, 'w')
     outputquality = open(adoqualitymappingfile, 'w')
-    for sysdef in input.readlines():
+    for sysdef in input_.readlines():
         sysdef = sysdef.strip()
         if len(sysdef) > 0:
             print "Checking %s" % sysdef
@@ -143,14 +143,14 @@
                 if adoqualitydirs == None:
                     outputquality.write("%s=%s\n" % (sysdef, component))
                 else:
-                    for dir in adoqualitydirs.split(','):
-                        if os.path.normpath(dir) == os.path.normpath(os.path.join(builddrive, os.environ['EPOCROOT'], location)):
+                    for dir_ in adoqualitydirs.split(','):
+                        if os.path.normpath(dir_) == os.path.normpath(os.path.join(builddrive, os.environ['EPOCROOT'], location)):
                             outputquality.write("%s=%s\n" % (sysdef, component))
 
 
     outputquality.close()
     output.close()
-    input.close()
+    input_.close()
 
 
     
--- a/buildframework/helium/sf/python/pythoncore/lib/imaker/__init__.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/imaker/__init__.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,6 +18,6 @@
 #===============================================================================
 
 """ iMaker framework. """
-from api import *       #this needs to remain here even though pylint throws it as 
-                        #a warning 'unused' due to being needed by what imports this AGH!!! 
-                        #can't the thing that imports this import the api file?
+from imaker.api import * #this needs to remain here even though pylint throws it as 
+                         #a warning 'unused' due to being needed by what imports this AGH!!! 
+                         #can't the thing that imports this import the api file?
--- a/buildframework/helium/sf/python/pythoncore/lib/integration/ant.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/integration/ant.py	Fri Aug 13 14:59:05 2010 +0300
@@ -46,7 +46,7 @@
         for filename in components_per_file.keys():
             if len(components_per_file[filename]) > 1:
                 output.write("    <file name=\"%s\">\n" % filename)
-                output.write("".join(map(lambda x: "        <component name=\"%s\"/>\n" % x, components_per_file[filename])))
+                output.write("".join(["        <component name=\"%s\"/>\n" % x for x in components_per_file[filename]]))
                 output.write("    </file>\n")
         output.write("</buildconflicts>\n")
         output.close()
--- a/buildframework/helium/sf/python/pythoncore/lib/integration/quality.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/integration/quality.py	Fri Aug 13 14:59:05 2010 +0300
@@ -144,7 +144,7 @@
         value = None
         try:
             value = fileutils.read_policy_content(filename)
-        except Exception:
+        except IOError:
             yield ["invalidencoding", filename, None]
         if value is not None:
             if self._ids != None:
--- a/buildframework/helium/sf/python/pythoncore/lib/log2xml.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/log2xml.py	Fri Aug 13 14:59:05 2010 +0300
@@ -123,11 +123,11 @@
         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:
+        elif v_char >= 0x20 and v_char <= 0xd7ff:
             result += char
-        elif v_char>=0xe000 and v_char <= 0xfffd:
+        elif v_char >= 0xe000 and v_char <= 0xfffd:
             result += char
-        elif v_char>=0x10000 and v_char <= 0x10ffff:
+        elif v_char >= 0x10000 and v_char <= 0x10ffff:
             result += char
         else:
             result += " " 
@@ -330,6 +330,7 @@
 class ContentWriter(ContentHandler):
     """ SAX Content writer. Parse and write an XML file. """
     def __init__(self, op_sys, indent=""):
+        ContentHandler.__init__(self)
         self.os = op_sys
         self.indent = indent
         self.__content = u""
@@ -339,7 +340,7 @@
         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(" ".join(["%s=\"%s\"" % (x, attrs.getValue(x)) for x in attrs.getNames()]))
         self.os.write(">\n")
         self.indent += "\t"
         self.__content = ""
@@ -385,26 +386,26 @@
     parser = make_parser()
     parser.setContentHandler(AppendSummary(outfile, xmllog))
     
-    input = open(summary, 'r')
-    parser.parse(input)
-    input.close()
+    input_ = open(summary, 'r')
+    parser.parse(input_)
+    input_.close()
     outfile.close()
     # Updating the summary file.
     os.unlink(summary)
     os.rename(summary + ".tmp", summary)
     
 
-def symbian_log_header(output, config, command, dir):
+def symbian_log_header(output, config, command, dir_):
     """symbian log header"""
     output.log("===-------------------------------------------------")
     output.log("=== %s" % config)
     output.log("===-------------------------------------------------")
     output.log("=== %s started %s" % (config, datetime.datetime.now().ctime()))
-    output.log("=== %s == %s" % (config, dir))
+    output.log("=== %s == %s" % (config, dir_))
     output.log("-- %s" % command)
     output.log("++ Started at %s" % datetime.datetime.now().ctime())
     output.log("+++ HiRes Start %f" % time.time())
-    output.log("Chdir %s" % dir)
+    output.log("Chdir %s" % dir_)
 
 
 def symbian_log_footer(output):
--- a/buildframework/helium/sf/python/pythoncore/lib/nokia/get_gscm_info.pl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/nokia/get_gscm_info.pl	Fri Aug 13 14:59:05 2010 +0300
@@ -42,7 +42,10 @@
     }
     else
     {
-      $gscm_lib = $ENV{'CCM_HOME'} . "/../gscm-apps/lib"; # TODO: remove hardcoded path!
+      use File::Basename;
+
+      # Do not use .. because evaluation get wrong under  64-bit Linux
+      $gscm_lib = dirname($ENV{'CCM_HOME'}) . "/gscm-apps/lib"; # TODO: remove hardcoded path!
     }
     my ($perl_version) = $Config{version} =~ /^(\d+\.\d+)/;    
     unshift @INC, "$gscm_lib/$perl_version/$archname", "$gscm_lib/$perl_version", $gscm_lib;
--- a/buildframework/helium/sf/python/pythoncore/lib/nokia/gscm.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/nokia/gscm.py	Fri Aug 13 14:59:05 2010 +0300
@@ -44,7 +44,7 @@
     """ Generic method that call function 'method' on GSCM wrapper script. """
     (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.write(pkg_resources.resource_string(__name__, "get_gscm_info.pl"))# pylint: disable=E1101
     f_file.close()
     command = "perl " + filename
     command += " %s %s" % (method, dbname)
--- a/buildframework/helium/sf/python/pythoncore/lib/packageiad.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/packageiad.py	Fri Aug 13 14:59:05 2010 +0300
@@ -38,11 +38,11 @@
         """ get the list of build directories """
         units = layer.getElementsByTagName ("unit")
         for unit in units :
-            dir = unit.getAttribute ("bldFile").rstrip ('\\/')
-            i = dir.rfind ("\\")
+            dir_ = unit.getAttribute ("bldFile").rstrip ('\\/')
+            i = dir_.rfind ("\\")
             if i == - 1 :
-                i = dir.rfind ("/")
-            bldDirs.append (dir[:i + 1])
+                i = dir_.rfind ("/")
+            bldDirs.append (dir_[:i + 1])
     
     def getLayer(self, configuration, layers, bldDirs) :
         """ get each layer info """
@@ -93,14 +93,14 @@
         sisFile = packageName + '/' + packageName + ".sis"
         infoFile = packageName + "/sisinfo.xml"
         depFile = packageName + "/depends.xml"
-        zip = zipfile.ZipFile (zipFile, "w")
-        zip.write (sisFile, sisFile.encode ("utf-8"))
-        zip.write (infoFile, infoFile.encode ("utf-8"))
-        zip.write (depFile, depFile.encode ("utf-8"))
+        zip_ = zipfile.ZipFile (zipFile, "w")
+        zip_.write (sisFile, sisFile.encode ("utf-8"))
+        zip_.write (infoFile, infoFile.encode ("utf-8"))
+        zip_.write (depFile, depFile.encode ("utf-8"))
         if self.hasStub :
             stubFile = packageName + '/' + packageName + "_stub.sis"
-            zip.write (stubFile, stubFile.encode ("utf-8"))
-        zip.close()
+            zip_.write (stubFile, stubFile.encode ("utf-8"))
+        zip_.close()
         
     
     def processSisDir(self, sisDir, makesis) :
--- a/buildframework/helium/sf/python/pythoncore/lib/preparation.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/preparation.py	Fri Aug 13 14:59:05 2010 +0300
@@ -364,7 +364,7 @@
             co_role = ccm.get_role_for_purpose(session, self._config['purpose'])
             _logger.info("Switching user to role: %s" % co_role)
             session.role = co_role
-            _logger.info("Switched user to role: %s" % session._get_role())
+            _logger.info("Switched user to role: %s" % session.role)
 
     
     def __restoreRole(self, session):
@@ -374,7 +374,7 @@
 
             session.role = self.__role
             self.__role = None
-            _logger.info("Switched user to role: %s" % session._get_role())
+            _logger.info("Switched user to role: %s" % session.role)
 
             
     def __setup_project(self, project, coproject):
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_archive.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_archive.py	Fri Aug 13 14:59:05 2010 +0300
@@ -30,20 +30,20 @@
 import fileutils
 import xml.dom.minidom
 import tempfile
-import test_fileutils
+import pythoncorecpythontests.test_fileutils
 
 _logger = logging.getLogger('test.archive')
     
     
-_root_test_dir = test_fileutils._root_test_dir
+root_test_dir = pythoncorecpythontests.test_fileutils.root_test_dir
 
 def setup_module():
     """ Creates some test data files for file-related testing. """
-    test_fileutils.setup_module()
+    pythoncorecpythontests.test_fileutils.setup_module()
     
 def teardown_module():
     """ Cleans up test data files for file-related testing. """
-    test_fileutils.teardown_module()
+    pythoncorecpythontests.test_fileutils.teardown_module()
     
     
 class ArchivePreBuilderTest(unittest.TestCase):
@@ -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,7 +94,7 @@
 
         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_file:
             content = f_file.readlines()
@@ -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,7 +119,7 @@
 
         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_file:
             content = f_file.readlines()
@@ -130,16 +130,16 @@
 
     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,7 +157,7 @@
                          ]
         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_file:
             content = f_file.readlines()
@@ -169,17 +169,17 @@
 
     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,7 +197,7 @@
                          ]
         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_file:
             content = f_file.readlines()
@@ -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,7 +256,7 @@
 
         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_file:
             content = f_file.readlines()
@@ -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/',
@@ -291,10 +291,10 @@
         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_file:
             content = f_file.readlines()
@@ -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,14 +408,14 @@
         print "Commands : ", cmds
         assert len(cmds) == 3
 
-# pylint: disable-msg=C0103
+# pylint: disable=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',
@@ -470,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()
@@ -508,12 +508,12 @@
 
     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',
@@ -559,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()
@@ -587,12 +587,12 @@
 
     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',
@@ -659,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)
@@ -713,12 +713,12 @@
 
     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',
@@ -785,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)
@@ -851,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/',
@@ -870,9 +870,9 @@
         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_file:
             content = f_file.readlines()
@@ -895,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'
@@ -926,7 +926,7 @@
             self.assert_('\\\\server\\share1\\dir\\' in roots)
             self.assert_('\\\\server2\\share\\somedir\\' in roots)
 
-class MockedConfigBuilder:
+class MockedConfigBuilder(object):
     """."""
             
     def writeToXML(self, xml_file, configs, parse_xml_file):
@@ -965,9 +965,9 @@
     """ 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/',
@@ -978,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	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats3.py	Fri Aug 13 14:59:05 2010 +0300
@@ -20,7 +20,7 @@
 #===============================================================================
 
 """ Testing ATS3 framework. """
-# pylint: disable-msg=E1101,C0302,w0142,w0603,R0912,R0902,R0903,R0201,W0404, R0915
+# pylint: disable=E1101,C0302,w0142,w0603,R0912,R0902,R0903,R0201,W0404, R0915
 #w0142 => * and ** were used
 #w0603 => global variables used TSRC_PATH etc
 #R*    => will be fixed while refactoring
@@ -40,9 +40,9 @@
 import subprocess
 import fileutils
 
-from path import path # pylint: disable-msg=F0401
+from path import path # pylint: disable=F0401
 import amara
-import mocker # pylint: disable-msg=F0401
+import mocker # pylint: disable=F0401
 
 import ats3
 import ats3.testconfigurator as atc
@@ -560,7 +560,8 @@
                                        trace_path=self.atp.file_store.joinpath(u"§RUN_NAME§" + os.sep + u"§RUN_START_DATE§_§RUN_START_TIME§", "traces", "set0", "tracelog.blx"),
                                        trace_activation_files=self.trace_activation_files,
                                        ctc_enabled=self.atp["ctc_enabled"],
-                                       custom_dir=None,
+                                       custom_dir=None, 
+                                       dll_files={},
                                        component_path=self.component_path)
         assert self.atp.sets[1] == dict(name="set1",
                                        image_files=self.image_files,
@@ -574,6 +575,7 @@
                                        trace_activation_files=self.trace_activation_files,
                                        ctc_enabled=self.atp["ctc_enabled"],
                                        custom_dir=None,
+                                       dll_files={},                                        
                                        component_path=self.component_path)
 
         assert self.atp.sets[2] == dict(name="set2",
@@ -591,6 +593,7 @@
                                        trace_activation_files=self.trace_activation_files,
                                        ctc_enabled=self.atp["ctc_enabled"],
                                        custom_dir=None,
+                                       dll_files={}, 
                                        component_path=self.component_path)
         assert self.atp.sets[3] == dict(name="set3",
                                        data_files=[],
@@ -607,6 +610,7 @@
                                        trace_activation_files=self.trace_activation_files,
                                        ctc_enabled=self.atp["ctc_enabled"],
                                        custom_dir=None,
+                                       dll_files={},                                        
                                        component_path=self.component_path)
 
         assert self.atp.sets[4] == dict(name="set4",
@@ -624,6 +628,7 @@
                                        trace_activation_files=self.trace_activation_files,
                                        ctc_enabled=self.atp["ctc_enabled"],
                                        custom_dir=None,
+                                       dll_files={},                                        
                                        component_path=self.component_path)
         
     def test_post_actions_email(self):
@@ -1155,6 +1160,7 @@
         self.component_path = None
         self.custom_files = None
         self.ctc_run_process_params = None
+        self.dll_files = {}
         
     def generate_xml(self, harness, trace_enabled="False"):
         """Generates XML"""
@@ -1165,6 +1171,8 @@
         self.data_files = files("data/file1", "data/file2", "data/file3")
         self.config_files = files("conf/file1.cfg", "conf/file2.cfg")
         self.testmodule_files = files("testmodules/file1.dll", "testmodules/file2.dll")
+        self.dll_files["file1.dll"] = "EUNIT"
+        self.dll_files["file2.dll"] = ""
         self.image_files = files("output/images/file1.fpsx", "output/images/file2.fpsx")
         self.engine_ini_file = files("init/TestFramework.ini")[0]
         self.report_email = "test.receiver@company.com"
@@ -1238,12 +1246,12 @@
                      config_files=self.config_files, testmodule_files=self.testmodule_files,
                      engine_ini_file=self.engine_ini_file, test_harness=harness0,src_dst=self.src_dst0,
                      ctc_enabled=self.ctc_enabled, eunitexerunner_flags=self.eunitexerunner_flags,
-                     custom_dir = self.custom_dir, component_path=self.component_path),
+                     custom_dir = self.custom_dir, dll_files = self.dll_files, component_path=self.component_path),
                 dict(name="set1", image_files=self.image_files, data_files=self.data_files,
                      config_files=self.config_files, testmodule_files=self.testmodule_files,
                      engine_ini_file=self.engine_ini_file, test_harness=harness1, src_dst=self.src_dst1,
                      ctc_enabled=self.ctc_enabled, eunitexerunner_flags=self.eunitexerunner_flags,
-                     custom_dir = self.custom_dir, component_path=self.component_path),
+                     custom_dir = self.custom_dir, dll_files = self.dll_files, component_path=self.component_path),
             ])
         else:
             mocker.expect(test_plan.sets).result([
@@ -1253,14 +1261,14 @@
                      pmd_files=self.pmd_files, trace_activation_files=self.trace_activation_files,
                      trace_path=self.file_store.joinpath("traces", "set0", "tracelog.blx"),
                      ctc_enabled=self.ctc_enabled, eunitexerunner_flags=self.eunitexerunner_flags,
-                     custom_dir = self.custom_dir, component_path=self.component_path),
+                     custom_dir = self.custom_dir, dll_files = self.dll_files, component_path=self.component_path),
                 dict(name="set1", image_files=self.image_files, data_files=self.data_files,
                      config_files=self.config_files, testmodule_files=self.testmodule_files,
                      engine_ini_file=self.engine_ini_file, test_harness=harness1, src_dst=self.src_dst1,
                      pmd_files=self.pmd_files, trace_activation_files=self.trace_activation_files,
                      trace_path=self.file_store.joinpath("traces", "set1", "tracelog.blx"),
                      ctc_enabled=self.ctc_enabled, eunitexerunner_flags=self.eunitexerunner_flags,
-                     custom_dir = self.custom_dir, component_path=self.component_path),
+                     custom_dir = self.custom_dir, dll_files = self.dll_files, component_path=self.component_path),
             ])
         mocker.expect(test_plan.post_actions).result([
             ("SendEmailAction", (("subject", "email subject"),
@@ -1417,16 +1425,7 @@
                 assert params[0].get("file") == path(r"z:" + os.sep + "sys" + os.sep + "bin" + os.sep + "EUNITEXERUNNER.EXE")
                 assert params[1].get("result-file") == path(r"c:" + os.sep + "Shared" + os.sep + "EUnit" + os.sep + "logs" + os.sep + "file1_log.xml")
                 assert params[2].get("parameters") == "/E S60AppEnv /R Off /F file1 /l xml file1.dll"
-                assert params[3].get("timeout") == "60"
-                step = steps.next()
-                file_ = self.testmodule_files[1]
-                assert step.get("name") == "Execute test: %s" % file_.name
-                assert step.findtext("./command") == "execute"
-                params = step.findall("./params/param")
-                assert params[0].get("file") == path(r"z:" + os.sep + "sys" + os.sep + "bin" + os.sep + "EUNITEXERUNNER.EXE")
-                assert params[1].get("result-file") == path(r"c:" + os.sep + "Shared" + os.sep + "EUnit" + os.sep + "logs" + os.sep + "file2_log.xml")
-                assert params[2].get("parameters") == "/E S60AppEnv /R Off /F file2 /l xml file2.dll"
-                assert params[3].get("timeout") == "60"
+                assert params[3].get("timeout") == "60"              
 
     def test_steps_trace_enabled(self):
         """checks if traing is enabled"""
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats3_aste.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats3_aste.py	Fri Aug 13 14:59:05 2010 +0300
@@ -21,8 +21,8 @@
 
 """ Testing ATS3 ASTE framework. """
 
-# pylint: disable-msg=W0603,W0142,R0903,R0911,R0912,R0902,R0901,R0201
-# pylint: disable-msg=E1101
+# pylint: disable=W0603,W0142,R0903,R0911,R0912,R0902,R0901,R0201
+# pylint: disable=E1101
 #E1101 => Mocker shows mockery
 #R* remove during refactoring
 
@@ -37,8 +37,8 @@
 import zipfile
 import os
 
-from path import path # pylint: disable-msg=F0401
-import mocker # pylint: disable-msg=F0401
+from path import path # pylint: disable=F0401
+import mocker # pylint: disable=F0401
 
 import ats3.aste
 
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats4.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats4.py	Fri Aug 13 14:59:05 2010 +0300
@@ -20,7 +20,7 @@
 #===============================================================================
 
 """ Testing ats4 framework. """
-# pylint: disable-msg=E1101, C0302, W0142, W0603, R0902,R0903,R0912,R0915
+# pylint: disable=E1101, C0302, W0142, W0603, R0902,R0903,R0912,R0915
 #E1101 => Mocker shows mockery
 #C0302 => too many lines
 #W0142 => used * or ** magic 
@@ -40,9 +40,9 @@
 import subprocess
 import fileutils
 
-from path import path # pylint: disable-msg=F0401
+from path import path # pylint: disable=F0401
 import amara
-import mocker # pylint: disable-msg=F0401
+import mocker # pylint: disable=F0401
 
 import ntpath
 
@@ -302,17 +302,6 @@
     params = step.findall("./parameters/parameter")
     #assert params[0].get("value") == "false"
     assert params[0].get("value") == path(r"c:\data\ctc\ctcdata.txt")
-    if testtype == "withpkgfiles":
-        assert params[1].get("value") == r"\\10.0.0.1\ctc_helium\builds\drop0\set1\ctcdata"
-    else:
-        assert params[1].get("value") == r"\\10.0.0.1\ctc_helium\builds\drop0\set0\ctcdata"
-    
-    #For the ctcdata.txt to be published on the build network drive
-    step = steps.next()
-    assert step.findtext("./type") == "FileDownloadTask"
-    params = step.findall("./parameters/parameter")
-    #assert params[0].get("value") == "true"
-    assert params[0].get("value") == path(r"c:\data\ctc\ctcdata.txt")
 
 def check_ctc_start(steps):
     """Checks if CTC starts in ATS"""
@@ -338,7 +327,6 @@
 def check_diamonds_action(action):
     """ Testing Diamonds action. """
     assert action.findtext("./type") == "DiamondsAction"
-    assert not action.findall("./parameters/parameter") 
 
 def check_send_email_action(action, reportemail):
     """verifies if sening email option works"""
@@ -534,6 +522,7 @@
                                        trace_activation_files=self.trace_activation_files,
                                        ctc_enabled=self.atp["ctc_enabled"],
                                        custom_dir=None,
+                                       dll_files={},
                                        component_path=self.component_path)
         assert self.atp.sets[1] == dict(name="set1",
                                        image_files=self.image_files,
@@ -547,6 +536,7 @@
                                        trace_activation_files=self.trace_activation_files,
                                        ctc_enabled=self.atp["ctc_enabled"],
                                        custom_dir=None,
+                                       dll_files={},
                                        component_path=self.component_path)
 
         assert self.atp.sets[2] == dict(name="set2",
@@ -564,6 +554,7 @@
                                        trace_activation_files=self.trace_activation_files,
                                        ctc_enabled=self.atp["ctc_enabled"],
                                        custom_dir=None,
+                                       dll_files={},
                                        component_path=self.component_path)
         assert self.atp.sets[3] == dict(name="set3",
                                        data_files=[],
@@ -580,6 +571,7 @@
                                        trace_activation_files=self.trace_activation_files,
                                        ctc_enabled=self.atp["ctc_enabled"],
                                        custom_dir=None,
+                                       dll_files={},
                                        component_path=self.component_path)
 
         assert self.atp.sets[4] == dict(name="set4",
@@ -597,6 +589,7 @@
                                        trace_activation_files=self.trace_activation_files,
                                        ctc_enabled=self.atp["ctc_enabled"],
                                        custom_dir=None,
+                                       dll_files={},
                                        component_path=self.component_path)
         
     def test_post_actions_email(self):
@@ -778,6 +771,7 @@
         mocker.expect(test_plan.custom_dir).result(path(r"self.custom_dir"))
         mocker.expect(test_plan["report_email"]).result(self.report_email)
         mocker.expect(test_plan["ctc_run_process_params"]).result(self.ctc_run_process_params)
+        mocker.expect(test_plan["report_type"]).result("")
                 
         if self.trace_enabled.lower() == "true":
             mocker.expect(test_plan["trace_enabled"]).result("True")
@@ -834,6 +828,7 @@
         self.mocker.replay()
         self.test_plan = test_plan
         self.gen = adg.Ats3TemplateTestDropGenerator()
+        self.gen.output_file = 'ats4drop0.zip'
         return self.gen.generate_xml(test_plan)
 
     def test_basic_structure(self):
@@ -1193,6 +1188,7 @@
         mocker.expect(test_plan.custom_dir).result(path(r"self.custom_dir"))
         mocker.expect(test_plan["ctc_run_process_params"]).result(self.ctc_run_process_params)
         mocker.expect(test_plan["report_email"]).result(self.report_email)
+        mocker.expect(test_plan["report_type"]).result("")
         if self.trace_enabled == "False":
             mocker.expect(test_plan.sets).result([
                 dict(name="set0", image_files=self.image_files, data_files=self.data_files,
@@ -1240,6 +1236,7 @@
         self.test_plan = test_plan
         
         self.gen = adg.Ats3TemplateTestDropGenerator()
+        self.gen.output_file = 'ats4drop0.zip'
         return self.gen.generate_xml(test_plan)
 #        for thar in test_harness:
 #            xml = self.generate_xml(thar)
@@ -1571,6 +1568,7 @@
         mocker.expect(test_plan.custom_dir).result(path(r"self.custom_dir"))
         mocker.expect(test_plan["ctc_run_process_params"]).result(self.ctc_run_process_params)
         mocker.expect(test_plan["report_email"]).result(self.report_email)
+        mocker.expect(test_plan["report_type"]).result("")
         mocker.expect(test_plan.sets).result([
             dict(name="set0", image_files=self.image_files, sis_files=self.sis_files,
                  engine_ini_file=self.engine_ini_file, test_harness=self.harness, ctc_enabled="False", component_path=self.component_path, custom_dir=None),
@@ -1580,6 +1578,7 @@
         self.test_plan = test_plan
         
         self.gen = adg.Ats3TemplateTestDropGenerator()
+        self.gen.output_file = 'ats4drop0.zip'
         return self.gen.generate_xml(test_plan)
 
     def test_case_steps(self):
@@ -1612,3 +1611,24 @@
             assert step.findtext("./type") == "InstallSisTask"
             params = step.findall("./parameters/parameter")
             assert params[-1].get("value") == "c:\\testframework\\" + ntpath.basename(filename)
+
+def test_ats_sut():
+    opts = Bunch(file_store='', flash_images='', diamonds_build_url='', testrun_name='', device_type='', report_email='', test_timeout='', drop_file='', config_file='', target_platform='', data_dir='', build_drive='', sis_files='', harness='', trace_enabled='', specific_pkg='', ats4_enabled='true', device_hwid='')
+
+    test_plan = ats3.Ats3TestPlan(opts)
+    component_parser = ats3.testconfigurator.Ats3ComponentParser(opts)
+    
+    test_plan.sets = [dict(name="set0", image_files='', test_harness='GENERIC', custom_dir=None, src_dst=[("file1.dll", r"c:\sys\bin\file1.dll", "testmodule:sut")])]
+    
+    generator = ats3.dropgenerator.Ats3TemplateTestDropGenerator()
+    generator.output_file = 'ats4drop0.zip'
+    xml = generator.generate_xml(test_plan)
+    #print et.tostring(xml.getroot())
+    
+    steps = iter(xml.findall(".//task"))
+    steps.next()
+    steps.next()
+    step = steps.next()
+    assert step.findtext("./type") == "SymbianUnitTestTask"
+    params = step.findall("./parameters/parameter")
+    assert params[1].get("value") == r"-tests=c:\sys\bin\file1.dll -noprompt"
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats4_aste.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats4_aste.py	Fri Aug 13 14:59:05 2010 +0300
@@ -21,7 +21,7 @@
 
 """ Testing ATS4 ASTE framework. """
 
-# pylint: disable-msg=E1101, R0903, R0911, R0912, W0603, W0142, R0902, R0201
+# pylint: disable=E1101, R0903, R0911, R0912, W0603, W0142, R0902, R0201
 #E1101 => Mocker shows mockery
 #C0302 => too many lines
 #W0142 => used * or ** magic 
@@ -39,8 +39,8 @@
 import zipfile
 import os
 
-from path import path # pylint: disable-msg=F0401
-import mocker # pylint: disable-msg=F0401
+from path import path # pylint: disable=F0401
+import mocker # pylint: disable=F0401
 
 import ats3.aste
 
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_atsant.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_atsant.py	Fri Aug 13 14:59:05 2010 +0300
@@ -37,6 +37,17 @@
     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_atsant_multipledrop_with_sysdef3():
+    """test atsant and check MULTIPLE drop files are created when sysdef3 files are in use"""
+    files = atsant.files_to_test(os.path.join(os.environ['TEST_DATA'], 'data/packageiad/sysdef3_test.xml'), None, None, 'z:', 'false', True)
+    assert len(files) == 2
+    
+def test_atsant_singledrop_with_sysdef3():
+    """test atsant and check SINGLE drop file is created when sysdef3 files are in use"""
+    files = atsant.files_to_test(os.path.join(os.environ['TEST_DATA'], 'data/packageiad/sysdef3_test.xml'), None, None, 'z:', 'true', True)
+
+    assert len(files) == 1
+
 def test_IConfigATS():
     """test I config ATS"""
     tmpdir = tempfile.mkdtemp()
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ccm.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ccm.py	Fri Aug 13 14:59:05 2010 +0300
@@ -21,7 +21,7 @@
 
 """
 
-# pylint: disable-msg=E1101
+# pylint: disable=E1101
 
 import logging
 import os
@@ -38,7 +38,7 @@
 
     def test_running_sessions(self):
         """ Running sessions can be checked. """
-        obj = self.mocker.replace(ccm._execute)
+        obj = self.mocker.replace(ccm.execute)
         if sys.platform == "win32":
             obj('c:\\apps\\ccm65\\bin\\ccm.exe status')
         else:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_convertpkg.py	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,38 @@
+#============================================================================ 
+#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:
+#===============================================================================
+
+""" convertpkg.py module tests. """
+
+import tempfile
+import os
+
+def test_convertpkg():
+    import convertpkg
+    tmpdir = tempfile.mkdtemp()
+    
+    (f_desc, pkgfile) = tempfile.mkstemp()
+    f_file = os.fdopen(f_desc, 'w')
+    f_file.write(r'"/sf/a.script"-"c:\a.script"' + '\n')
+    f_file.close()
+    
+    convertpkg.convertpkg(pkgfile, tmpdir, 'tef')
+    
+    assert os.path.exists(os.path.join(tmpdir, 'bld.inf'))
+    assert os.path.exists(os.path.join(tmpdir, '1', 'group', 'test.mmp'))
+    
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_documentation.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_documentation.py	Fri Aug 13 14:59:05 2010 +0300
@@ -35,7 +35,7 @@
         (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') 
-        writer = APIDeltaWriter(old_db, new_db)
+        writer = APIDeltaWriter(open(old_db), open(new_db))
         saveout = sys.stdout
         sys.stdout = sys.stderr
         writer.write(tempFileName)
@@ -45,4 +45,4 @@
         content = tempFile.readlines()
         tempFile.close()
         os.unlink(tempFileName)
-        assert len(content) == 12
+        assert len(content) == 13
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_fileutils.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_fileutils.py	Fri Aug 13 14:59:05 2010 +0300
@@ -152,11 +152,11 @@
     }
     
 # Used by test_archive.
-_root_test_dir = "build/_test_" + str(time.strftime("%H.%M.%S"))
+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):
@@ -386,7 +386,6 @@
         print testpaths
         assert result == testpaths
 
-
     def test_emptydir(self):
         """Empty dir."""
         scanner = fileutils.FileScanner(_testpath(''))
@@ -452,7 +451,6 @@
         print testpaths
         assert result == testpaths
         
-        
     def test_distribution_policy_exclude(self):
         """ Distribution policy files can determine file selection - exclude. """
         scanner = fileutils.FileScanner(_testpath(''))
@@ -466,7 +464,6 @@
         
         assert result == testpaths
         
-        
     def test_symbian_distribution_policy_cat_a(self):
         """test symbian distribution policy category A"""
         scanner = fileutils.FileScanner(_testpath(''))
@@ -507,7 +504,6 @@
         
         assert result == testpaths
     
-        
     def test_find_subroots(self):
         """ Testing the find_subroots method. """
         scanner = fileutils.FileScanner(_testpath(''))
@@ -534,18 +530,17 @@
         _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'."
-        except:
+        except IOError:
             pass
         
         try:
             fileutils.load_policy_content(_testpath('s60/Distribution.Policy.S60'))
-        except:
+        except IOError:
             assert "Should not fail while loading 's60/Distribution.Policy.S60'."
 
 
@@ -555,7 +550,7 @@
             try:
                 fileutils.read_policy_content(filename)
                 assert "Should fail while loading '%s'." % filename
-            except:
+            except IOError:
                 pass
         else:
             assert fileutils.read_policy_content(filename) == value
@@ -566,7 +561,7 @@
             try:
                 fileutils.read_symbian_policy_content(filename)
                 assert "Should fail while loading '%s'." % filename
-            except:
+            except IOError:
                 pass
         else:
             assert fileutils.read_symbian_policy_content(filename) == value
@@ -601,7 +596,7 @@
 
 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):
@@ -623,7 +618,7 @@
     def mkdir(self, path):
         """create a folder"""
         if 'java' in sys.platform:
-            import java.io
+            import java.io # pylint: disable=F0401
             f_file = java.io.File(path)
             if not f_file.exists():
                 os.mkdir(path)
@@ -632,23 +627,23 @@
                 try:
                     import win32file
                     win32file.CreateDirectoryW('\\\\?\\' + path, None)
-                except:
+                except (ImportError, IOError, win32file.error):
                     pass
             else:
                 os.mkdir(path)
 
     def test_rmtree_long_path(self):
         """test remove tree with a long path name"""
-        fileutils.rmtree(_root_test_dir)
+        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 """
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_matti.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_matti.py	Fri Aug 13 14:59:05 2010 +0300
@@ -21,7 +21,7 @@
 
 """ Testing MATTI framework. """
 
-# pylint: disable-msg=E1101
+# pylint: disable=E1101
 
 import logging
 logging.getLogger().setLevel(logging.ERROR)
@@ -30,8 +30,6 @@
 from path import path
 import ats3.aste
 import ats3.matti.MattiDrops
-#from lxml import objectify
-#from lxml import etree
 import tempfile
 
 TEST_FILE_NAME = 'test.xml'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_matti2.py	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,294 @@
+# -*- coding: latin-1 -*-
+
+#============================================================================ 
+#Name        : test_matti2.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:
+#===============================================================================
+
+""" Testing MATTI framework. """
+
+# pylint: disable=E1101
+
+import logging
+logging.getLogger().setLevel(logging.INFO)
+import os
+#import shutil
+from path import path
+import ats3.matti2
+import tempfile
+import zipfile
+import platform
+
+TEST_PATH = None
+TEST_FILES = {}
+MATTI = None
+OUTPUT = None
+SISFILES = None
+TOTAL_TESTS_COUNT = 3
+
+
+class Bunch(object):
+    """ Configuration object. Argument from constructor are converted into class attributes. """
+    def __init__(self, **kwargs):
+        self.__dict__.update(kwargs)
+        
+class SetUp(object):
+    """ Setup the module. """
+    
+    def __init__(self):
+        """ Setup test environment. """
+        global TEST_PATH, MATTI, OUTPUT, SISFILES
+
+        TEST_PATH = path(tempfile.mkdtemp())
+        component = TEST_PATH
+        component.joinpath("matti").makedirs()
+        for path_parts in (("matti_testcases", "profile", "all.sip"),
+                           ("matti_testcases", "profile", "bat.sip"),
+                           ("matti_testcases", "profile", "fute.sip"),
+                           ("matti_testcases", "hwdata", "paths.pkg"),
+                           ("matti_testcases", "hwdata", "file1.txt"),
+                           ("matti_testcases", "hwdata", "settings.ini"),
+                           ("matti_testcases", "matti_parameters", "matti_parameters.xml"),
+                           ("matti_testcases", "unit_test1.rb"),
+                           ("matti_testcases", "unit_test2.rb"),
+                           ("output", "images", "image1.fpsx"),
+                           ("output", "images", "image2.fpsx"),
+                           ("sisfiles", "abc.sis"),
+                           ("sisfiles", "xyz.sis"),
+                           ("output", "ats", "temp.txt")):
+            filepath = component.joinpath(*path_parts)
+            if not filepath.parent.exists():
+                filepath.parent.makedirs()
+            filepath.touch()
+            TEST_FILES.setdefault(path_parts[1], []).append(filepath)
+        
+        OUTPUT = component.joinpath(r"output")
+        MATTI = component.joinpath("matti_testcases")
+        SISFILES = component.joinpath(r"sisfiles")
+        
+        if not filepath.parent.exists():
+            filepath.parent.makedirs()
+        filepath.touch()
+        
+        #mtc => matti_testcases
+        mtc = component.joinpath("matti_testcases")
+        mtc.joinpath("unit_test1.rb").write_text("unit_tests")
+        mtc.joinpath("unit_test2.rb").write_text("unit_tests")
+    
+        # profiles
+        profiles = component.joinpath("matti_testcases", "profile")
+        profiles.joinpath("all.sip").write_text("sip profile")
+        profiles.joinpath("bat.sip").write_text("sip profile")
+        profiles.joinpath("fute.sip").write_text("sip profile")
+        
+        #hwdata => hardware data
+        profiles = component.joinpath("matti_testcases", "hwdata")
+        profiles.joinpath("file1.txt").write_text("data file")
+        profiles.joinpath("settings.ini").write_text("settings initialization file")
+        profiles.joinpath("paths.pkg").write_text(
+            r"""
+            ;Language - standard language definitions
+            &EN
+            
+            ; standard SIS file header
+            #{"BTEngTestApp"},(0x04DA27D5),1,0,0
+            
+            ;Supports Series 60 v 3.0
+            (0x101F7961), 0, 0, 0, {"Series60ProductID"}
+            
+            ;Localized Vendor Name
+            %{"BTEngTestApp"}
+            
+            ;Unique Vendor name
+            :"Nokia"
+            
+            ; Files to copy
+    
+            "[PKG_LOC]\file1.txt"-"C:\Private\10202BE9\PERSISTS\file1.txt"
+            "[PKG_LOC]\settings.ini"-"c:\sys\settings.ini"
+            """.replace('\\', os.sep))
+
+
+def teardown_module(test_run_count):
+    """ stuff to do after running the tests """
+
+    if test_run_count == 0:
+        path(TEST_PATH).rmtree()  
+
+class TestMattiTestPlan(SetUp):
+    """ test MattiDrop.py """
+    global OUTPUT, MATTI, SISFILES
+
+    def __init__(self):
+        """initialize Matti Tests"""
+        SetUp.__init__(self)
+        self.file_store = OUTPUT
+        self.test_asset_path = MATTI
+        self.matti_sis_files = r"%s/abc.sis#f:\data\abc.sis#c:\abc.sis, %s/xyz.sis#f:\data\abc.sis#f:\xyz.sis" % (SISFILES, SISFILES)
+        self.build_drive = "j:"
+        self.drop_file = path(r"%s/ats/ATSMattiDrop.zip" %OUTPUT).normpath()
+
+        image_files = r"%s/images/image1.fpsx, %s/images/image2.fpsx " % (OUTPUT, OUTPUT)
+        self.flash_images = image_files 
+
+        self.template_loc = os.path.join(os.environ['TEST_DATA'], 'data/matti/matti_template.xml')
+        self.template_loc = os.path.normpath(self.template_loc)
+        self.matti_parameters = ""
+        self.config = None
+
+    def read_xml(self, file_location, zip_file=False):
+        """reads test.xml file if a path is given"""
+
+        xml_text = ""
+        file_location = path(file_location)
+        if zip_file:
+            if zipfile.is_zipfile(file_location):
+                myzip = zipfile.ZipFile(file_location, 'r')
+                xml_text = myzip.read('test.xml')
+                myzip.close()
+
+        else:
+            hnd = open(file_location, 'r')
+            for line in hnd.readlines():
+                xml_text = xml_text + line
+
+        return xml_text
+
+    def test_xml_with_all_parameters(self):
+        """ test Matti2.py with all parameters present and correct and sierra is enabled"""
+        global TOTAL_TESTS_COUNT
+        opts = Bunch(build_drive=self.build_drive,
+                     drop_file=path(r"%s/ats/ATSMattiDrop1.zip" %OUTPUT).normpath(),
+                     flash_images=self.flash_images,
+                     matti_sis_files=self.matti_sis_files,
+                     testasset_location=self.test_asset_path,
+                     template_loc=self.template_loc,
+                     sierra_enabled="True",
+                     test_profiles="bat, fute",
+                     matti_parameters="",
+                     matti_timeout="1200",
+                     sierra_parameters="--teardown",
+                     file_store=self.file_store,
+                     report_email="firstname.lastname@domain.com",
+                     testrun_name="matti test run",
+                     alias_name="alias",
+                     device_type="new_device",
+                     diamonds_build_url="http://diamonds.com/1234",
+                     email_format="simplelogger",
+                     email_subject="Matti test report",
+                     verbode="false")
+
+        self.config = ats3.matti2.Configuration(opts)
+        ats3.matti2.create_drop(self.config)
+
+        xml_loc = os.path.join(os.environ['TEST_DATA'], 'data/matti/test_all_present.xml')
+        stored_xml = self.read_xml(xml_loc, False).strip()
+        drop_loc = os.path.join(OUTPUT, 'ats/ATSMattiDrop1.zip')
+        generated_xml = self.read_xml(drop_loc, True).strip()
+
+        if platform.system().lower() == "linux":
+            assert stored_xml.replace('\r', '') in generated_xml
+        else:
+            assert stored_xml in generated_xml
+            
+        TOTAL_TESTS_COUNT -= 1
+        teardown_module(TOTAL_TESTS_COUNT)
+
+    def test_xml_if_sierra_is_not_enabled(self):
+        """ test Matti2.py with all parameters present and correct and sierra is not enabled (or false)"""
+        global TOTAL_TESTS_COUNT
+        opts = Bunch(build_drive=self.build_drive,
+                     drop_file=path(r"%s/ats/ATSMattiDrop2.zip" %OUTPUT).normpath(),
+                     flash_images=self.flash_images,
+                     matti_sis_files=self.matti_sis_files,
+                     testasset_location=self.test_asset_path,
+                     template_loc=self.template_loc,
+                     sierra_enabled="False",
+                     test_profiles="bat, fute",
+                     matti_parameters="",
+                     matti_timeout="1200",
+                     sierra_parameters="--teardown",
+                     file_store=self.file_store,
+                     report_email="firstname.lastname@domain.com",
+                     testrun_name="matti test run",
+                     alias_name="alias",
+                     device_type="new_device",
+                     diamonds_build_url="http://diamonds.com/1234",
+                     email_format="simplelogger",
+                     email_subject="Matti test report",
+                     verbode="false")
+
+        self.config = ats3.matti2.Configuration(opts)
+        ats3.matti2.create_drop(self.config)
+
+        xml_loc = os.path.join(os.environ['TEST_DATA'], 'data/matti/test_all_present_sierra_disabled.xml')
+        stored_xml = self.read_xml(xml_loc, False).strip()
+        drop_loc = os.path.join(OUTPUT, 'ats/ATSMattiDrop2.zip')
+        generated_xml = self.read_xml(drop_loc, True).strip()
+
+        if platform.system().lower() == "linux":
+            assert stored_xml.replace('\r', '') in generated_xml
+        else:
+            assert stored_xml in generated_xml
+        
+        TOTAL_TESTS_COUNT -= 1
+        teardown_module(TOTAL_TESTS_COUNT)
+
+    def test_xml_if_sierra_is_enabled_template_location_is_missing(self):
+        """ test Matti2.py with all parameters present and correct and if sierra is enabled but template location is used as default one"""
+        global TOTAL_TESTS_COUNT
+        opts = Bunch(build_drive=self.build_drive,
+                     drop_file=path(r"%s/ats/ATSMattiDrop3.zip" %OUTPUT).normpath(),
+                     flash_images=self.flash_images,
+                     matti_sis_files=self.matti_sis_files,
+                     testasset_location=self.test_asset_path,
+                     template_loc="",
+                     sierra_enabled="True",
+                     test_profiles="bat, fute",
+                     matti_parameters="",
+                     matti_timeout="1200",
+                     sierra_parameters="--teardown",
+                     file_store=self.file_store,
+                     report_email="firstname.lastname@domain.com",
+                     testrun_name="matti test run",
+                     alias_name="alias",
+                     device_type="new_device",
+                     diamonds_build_url="http://diamonds.com/1234",
+                     email_format="simplelogger",
+                     email_subject="Matti test report",
+                     verbode="false")
+        
+        self.config = ats3.matti2.Configuration(opts)
+        ats3.matti2.create_drop(self.config)
+
+        xml_loc = os.path.join(os.environ['TEST_DATA'], 'data/matti/test_all_present.xml')
+        stored_xml = self.read_xml(xml_loc, False).strip()
+        drop_loc = os.path.join(OUTPUT, 'ats/ATSMattiDrop3.zip')
+        generated_xml = self.read_xml(drop_loc, True).strip()
+
+        if platform.system().lower() == "linux":
+            assert stored_xml.replace('\r', '') in generated_xml
+        else:
+            assert stored_xml in generated_xml
+        
+        TOTAL_TESTS_COUNT -= 1
+        teardown_module(TOTAL_TESTS_COUNT)        
+        
+        
+        
+        
+        
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_parsers.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_parsers.py	Fri Aug 13 14:59:05 2010 +0300
@@ -148,6 +148,14 @@
 TARGETTYPE      PLUGIN
             """)
     tc1_dep1_mmp.close()
+    
+    tc1_dep2_mmp = open(path.joinpath(TSRC_DIR, "tsrc", "tc1", "dependent_1", "group", "onemore.mmp"), 'w')
+    tc1_dep2_mmp.write(
+            r"""
+TARGET          onemore.dll
+TARGETTYPE      PLUGIN
+            """)
+    tc1_dep2_mmp.close()
         
     tc1_dep2 = open(path.joinpath(TSRC_DIR, "tsrc", "tc1", "dependent_2", "group", "bld.inf"), "w")
     tc1_dep2.write(
@@ -407,13 +415,13 @@
         self.tcp = ats3.parsers.CppParser()
         upper_bld_path = os.path.dirname(self.bld_path)
         
-        self.dependent_paths_dictionary = {(os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/subtest/if_test/group"))): {'content': {(os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/subtest/if_test/group"))): {'pkg_files': [], 'mmp_files': ['if_test.mmp'], 'harness': 'STIFUNIT', 'type': ''}}},
-                                            (os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc2//group"))): {'content': {(os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc2/group"))): {'pkg_files': ['tc2.pkg'], 'mmp_files': ['tc2.mmp'], 'harness': 'EUNIT', 'type': 'executable'}}}, 
-                                            (os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc3/group"))): {'content': {(os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc3/group"))): {'pkg_files':[], 'mmp_files': ['tc3.mmp'], 'harness': 'EUNIT', 'type': 'executable'}}},
-                                            (os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/group"))): {'content': {(os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/subtest/group"))): {'pkg_files': [], 'mmp_files': ['sub_test.mmp'], 'harness': 'STIF', 'type': 'executable'}, 
-                                                                                                                                (os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/dependent_1/group"))): {'pkg_files': [], 'mmp_files': ['dependent_1.mmp', 'onemore.mmp'], 'harness': "", 'type':''}, 
-                                                                                                                                (os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/dependent_2/group"))): {'pkg_files': [], 'mmp_files': ['dependent_2.mmp'], 'harness': "", 'type': 'dependent'}, 
-                                                                                                                                (os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/group"))): {'pkg_files': ['tc1.pkg'], 'mmp_files': ['tc1.mmp'],'harness': 'STIF', 'type': 'executable'}}}} 
+        self.dependent_paths_dictionary = {(os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/subtest/if_test/group"))): {'content': {(os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/subtest/if_test/group"))): {'pkg_files': [], 'mmp_files': ['if_test.mmp'], 'dll_files': {'tc1_if.dll': 'STIFUNIT'}, 'harness': 'STIFUNIT', 'type': ''}}},
+                                            (os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc2//group"))): {'content': {(os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc2/group"))): {'pkg_files': ['tc2.pkg'], 'mmp_files': ['tc2.mmp'], 'dll_files': {'tc2.dll': 'EUNIT'}, 'harness': 'EUNIT', 'type': 'executable'}}}, 
+                                            (os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc3/group"))): {'content': {(os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc3/group"))): {'pkg_files':[], 'mmp_files': ['tc3.mmp'], 'dll_files': {'tc3.dll': 'EUNIT'},  'harness': 'EUNIT', 'type': 'executable'}}},
+                                            (os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/group"))): {'content': {(os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/subtest/group"))): {'pkg_files': [], 'mmp_files': ['sub_test.mmp'], 'dll_files': {'sub_test.dll': 'STIF'}, 'harness': 'STIF', 'type': 'executable'}, 
+                                                                                                                                (os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/dependent_1/group"))): {'pkg_files': [], 'mmp_files': ['dependent_1.mmp', 'onemore.mmp'],'dll_files': {'dependent_1.dll': '', 'onemore.dll': ''}, 'harness': "", 'type':'dependent'}, 
+                                                                                                                                (os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/dependent_2/group"))): {'pkg_files': [], 'mmp_files': ['dependent_2.mmp'], 'dll_files': {'dependent_2.dll': ''}, 'harness': "", 'type': 'dependent'}, 
+                                                                                                                                (os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/group"))): {'pkg_files': ['tc1.pkg'], 'mmp_files': ['tc1.mmp'], 'dll_files': {'tc1.dll': 'STIF'}, 'harness': 'STIF', 'type': 'executable'}}}} 
         
         self.extended_path_list = [(os.path.normpath(upper_bld_path), upper_bld_path),
                            (os.path.normpath(os.path.join(upper_bld_path, "../tsrc/tc1/group")), upper_bld_path),
@@ -549,6 +557,8 @@
     
     def __init__(self, methodName="runTest"):
         mocker.MockerTestCase.__init__(self, methodName)
+        self.mmp_file_path = None
+        self.lst_test_mmp = []
     
     def setUp(self):
         """Setup for BldFile parser"""
@@ -667,6 +677,83 @@
         """Test if get_harness returns right harness for given mmp"""
         assert self.tc1_harness == self.tcp.get_harness(os.path.normpath(os.path.join(self.path_list[0], 'tc1.mmp')))
     
+    def test_get_mmp_harness(self):
+        """ 
+        Testing required combinations of libraries with get_mmp_harness method and asserting the harness.
+        """
+        assert self.tcp.get_mmp_harness(None) == ""
+        assert self.tcp.get_mmp_harness(["foo"]) == ""  # value, but unexpected
+        #single values
+        assert self.tcp.get_mmp_harness(["stiftestinterface.lib"]) == "STIF"
+        assert self.tcp.get_mmp_harness(["eunit.lib"]) == "EUNIT"
+        assert self.tcp.get_mmp_harness(["qttest.lib"]) == "EUNIT"        
+        assert self.tcp.get_mmp_harness(["testexecuteutils.lib"]) == "GENERIC"
+        assert self.tcp.get_mmp_harness(["testframeworkclient.lib"]) == "GENERIC"
+        assert self.tcp.get_mmp_harness(["rtest"]) == "GENERIC"        
+        #tef gets priority even if other libraries exist 
+        #takeout only STIFUNIT.lib then TEF
+        assert self.tcp.get_mmp_harness(["stiftestinterface.lib", "eunit.lib", "qttest.lib", "testexecuteutils.lib" , "testframeworkclient.lib", "rtest"]) == "GENERIC"
+        #condition stif and eunit, then harness STIF
+        assert self.tcp.get_mmp_harness(["stiftestinterface.lib", "eunit.lib"]) == "STIF"
+        #condition stif and not eunit, then harness STIF
+        assert self.tcp.get_mmp_harness(["stiftestinterface.lib", "stifunit.lib"]) == "STIF"
+        #condition eunit and not stif , then harness EUNIT
+        assert self.tcp.get_mmp_harness(["eunit.lib", "qttest.lib", "stifunit.lib"]) == "EUNIT"
+        #condition stifunit and not eunit and not stif
+        assert self.tcp.get_mmp_harness(["stifunit.lib"]) == "STIFUNIT"
+        
+                               
+    def test_select_harness(self):
+        """Test if select_harness returns right harness for given set of Test Framework 
+        tef,stif,eunit and stifunit
+        tef   stif  eunit stifunit = result
+        ===================================
+        False,False,False,False    == ""
+
+        True, False,False,False    == "GENERIC"
+        True, True, False,False    == "GENERIC"
+        True, False,True, False    == "GENERIC"
+        True, False,False,True     == "GENERIC"
+        True, False,True, True     == "GENERIC"
+        True, True, True, False    == "GENERIC"
+        True, True, False,True     == "GENERIC"
+        True, True, True, True     == "GENERIC"
+
+        False,True, False,False    == "STIF"
+        False,True, True, False    == "STIF"
+        False,True, False,True     == "STIF"
+        False,True, True, True     == "STIF"
+
+        False,False, True, False    == "EUNIT"
+        False,False, True, True     == "EUNIT"
+
+        False,false, False, True     == "STIFUNIT"
+
+        """
+
+        assert self.tcp.select_harness(False, False, False, False )   == ""
+
+        assert self.tcp.select_harness(True, False, False, False )   == "GENERIC"
+        assert self.tcp.select_harness(True, True, False, False )   == "GENERIC"
+        assert self.tcp.select_harness(True, False, True, False )   == "GENERIC"
+        assert self.tcp.select_harness(True, False, False, True  )   == "GENERIC"
+        assert self.tcp.select_harness(True, False, True, True  )   == "GENERIC"
+        assert self.tcp.select_harness(True, True, True, False )   == "GENERIC"
+        assert self.tcp.select_harness(True, True, False, True  )   == "GENERIC"
+        assert self.tcp.select_harness(True, True, True, True  )   == "GENERIC"
+ 
+        assert self.tcp.select_harness(False, True, False, False )   == "STIF"
+        assert self.tcp.select_harness(False, True, True, False )   == "STIF"
+        assert self.tcp.select_harness(False, True, False, True  )   == "STIF"
+        assert self.tcp.select_harness(False, True, True, True  )   == "STIF"
+
+        assert self.tcp.select_harness(False, False, True, False)    == "EUNIT"
+        assert self.tcp.select_harness(False, False, True, True )    == "EUNIT"
+
+        assert self.tcp.select_harness(False, False, False, True)     == "STIFUNIT"
+        
+                                    
+                                    
     def test_read_information_method(self):
         """Test if read_information_from_mmp returns wanted output for given parameter and mmp-file"""
         assert self.tc1_all == self.tcp.read_information_from_mmp(os.path.normpath(os.path.join(self.path_list[0], 'tc1.mmp')), 0)
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_sis.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_sis.py	Fri Aug 13 14:59:05 2010 +0300
@@ -23,14 +23,12 @@
 import unittest
 import tempfile
 import os
-from lxml import etree
-
+import amara
 import configuration
 import sis
 
 _logger = logging.getLogger('test.sis')
 
-
 class ArchivePreBuilderTest(unittest.TestCase):
     """ Tests for sis module. """
     
@@ -39,20 +37,20 @@
         data = {'name': 'foo',
                 'path': 'bar'}
         tree = self._setup_test_case(data)
-        assert tree.xpath("/project/target[@name='stage1']/parallel/*/arg/@line")[0] == '-v foo.pkg foo.sis'
+        assert tree.xml_xpath("/project/target[@name='stage1']/parallel/*/arg/@line")[0] == '-v foo.pkg foo.sis'
         
     def test_sis_v2(self):
         """ V2 config format. """
         data = {'input': 'foo.pkg'}
         tree = self._setup_test_case(data)
-        assert tree.xpath("/project/target[@name='stage1']/parallel/*/arg/@line")[0] == '-v foo.pkg foo.sis'
+        assert tree.xml_xpath("/project/target[@name='stage1']/parallel/*/arg/@line")[0] == '-v foo.pkg foo.sis'
 
     def test_sis_v2_1(self):
         """ V2 config format for sisx. """
         data = {'input': 'foo.pkg', 'output': 'foo.sisx'}
         tree = self._setup_test_case(data)
-        assert tree.xpath("/project/target[@name='stage1']/parallel/*/arg/@line")[0] == '-v foo.pkg foo.sis'
-        assert tree.xpath("/project/target[@name='stage2']/parallel/*/arg/@line")[0] == '-v foo.sis foo.sisx cert1 key1'
+        assert tree.xml_xpath("/project/target[@name='stage1']/parallel/*/arg/@line")[0] == '-v foo.pkg foo.sis'
+        assert tree.xml_xpath("/project/target[@name='stage2']/parallel/*/arg/@line")[0] == '-v foo.sis foo.sisx cert1 key1'
         
     def _setup_test_case(self, additional_data):
         """ Setup test case based on varying inputs. """
@@ -66,7 +64,7 @@
         sis_prebuilder = sis.SisPreBuilder(config)
         tmpfile = os.path.join(tempfile.mkdtemp(), 'test.xml')
         sis_prebuilder.write(tmpfile)
-        tree = etree.parse(tmpfile)
+        tree = amara.parse(open(tmpfile))
         return tree
     
 
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_timeout_launcher.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_timeout_launcher.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 #===============================================================================
 """ unit tests the timeout launcher """
 
-# pylint: disable-msg=E1101
+# pylint: disable=E1101
 
 import logging
 import sys
@@ -38,7 +38,7 @@
     WINDOWS = True
 
 
-# pylint: disable-msg=C0103
+# pylint: disable=C0103
 
 class os(object):   #has to be named this as it is mocking os method.
     """ dummy the os function call"""
@@ -64,7 +64,7 @@
         sys.argv = ['timeout_launcher.py', '--timeout=1', 'version']
         timeout_launcher.main()
 
-# pylint: disable-msg=W0104
+# pylint: disable=W0104
 
     def test_valid_with_timeout(self):
         """test_valid_with_timeout: initial test with valid values and timeout."""
@@ -104,7 +104,10 @@
         process = self.mocker.mock()
 
         obj = self.mocker.replace("subprocess.Popen")
-        obj(' '.join(cmdline), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
+        shell = True
+        if WINDOWS:
+            shell = False
+        obj(' '.join(cmdline), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=shell)
         self.mocker.result(process)
 
         process.communicate()[0]
@@ -172,6 +175,6 @@
         failed = False
         try:
             timeout_launcher.main()
-        except:
+        except Exception:
             failed = True
         assert failed
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_amara.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_amara.py	Fri Aug 13 14:59:05 2010 +0300
@@ -22,6 +22,10 @@
 
 import amara
 from xmlhelper import recursive_node_scan
+import urllib
+import tempfile
+import os
+import sys
 
 def test_amara():
     """test amara"""
@@ -80,3 +84,68 @@
     
     #xcf5 = amara.parse(open(r'C:\USERS\helium\helium-dev-forbuilds\helium\tests\data\bom\build_model_bom.xml'))
     #u'%s' % xcf5.bom.content.project.folder.task.synopsis
+    
+    doc = amara.create_document(u"commentLog")
+    if not doc:
+        pass
+
+    xml1 = """<commentLog><branchInfo category="" error="kkk" file="comments_test.txt" originator="sanummel" since="07-03-22">Add rofsfiles for usage in paged images</branchInfo></commentLog>"""
+    doc2 = amara.parse(xml1)
+    assert doc2.commentLog.branchInfo.category == ""
+
+    doc2.commentLog.xml_remove_child(doc2.commentLog.branchInfo)
+    
+    myxml3 = """<a><b value="1"/></a>"""
+    xml3 = amara.parse(myxml3)
+    for p_temp in xml3.xml_xpath("//b"):
+        p_temp.value = u'2'
+    assert '2' in xml3.xml()
+    
+    xml4 = """<a>\n\t<b name="b">a</b>\n</a>"""
+
+    print amara.parse(xml4).xml(indent="yes").replace('\n', 'n').replace('\t', 't')
+    assert xml4 in amara.parse(xml4).xml(indent="yes")
+    
+    ppxml = """<SettingsData>
+  <ProductProfile Version="1.1">
+     <Feature>
+        <Index>35</Index> 
+        <Value>1</Value> 
+     </Feature>
+  </ProductProfile>
+</SettingsData>"""
+
+    newppxml = amara.parse(ppxml)
+    oldppxml = amara.parse(ppxml)
+    
+    oldppdata = {}
+    for oldfeature in oldppxml.SettingsData.ProductProfile.Feature:
+        oldppdata[str(oldfeature.Index)] = oldfeature.Value
+    for newfeature in newppxml.SettingsData.ProductProfile.Feature:
+        if not oldppdata.has_key(str(newfeature.Index)):
+            raise Exception(newfeature.Value)
+        elif oldppdata[str(newfeature.Index)] != str(newfeature.Value):
+            raise Exception(str(oldppdata[str(newfeature.Index)]) + ' ' + str(newfeature.Value))
+
+def test_amara_xinclude():
+    (f_desc1, filename1) = tempfile.mkstemp()
+    f_file1 = os.fdopen(f_desc1, 'w')
+    f_file1.write(r'<b>qwerty</b>')
+    f_file1.close()
+    (f_desc, filename) = tempfile.mkstemp()
+    f_file = os.fdopen(f_desc, 'w')
+    
+    #try:
+    #    from Ft.Lib import Uri
+    #    fileurl = Uri.OsPathToUri(filename1)
+    #except ImportError:
+    fileurl = filename1
+    
+    f_file.write(r'<a xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include href="' + os.path.basename(fileurl) + r'"/></a>')
+    f_file.close()
+    
+    #if 'java' in sys.platform:
+    doc3 = amara.parse(urllib.pathname2url(filename))
+    #else:
+    #    doc3 = amara.parse(Uri.OsPathToUri(filename))
+    assert 'qwerty' in doc3.xml()
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_bomtofile.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_bomtofile.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 #===============================================================================
 """ test BOM to file"""
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import tempfile
 from shutil import rmtree
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_build_io.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_build_io.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 #===============================================================================
 
 """ Test the build.io module. """
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 #method could be a function warning removed
 
 import logging
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_buildtools.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_buildtools.py	Fri Aug 13 14:59:05 2010 +0300
@@ -30,7 +30,8 @@
     def setUp(self):
         """called before all tests run to setup variables etc."""
         self.temp = "temp"
-        os.makedirs(self.temp)
+        if not os.path.exists(self.temp):
+            os.makedirs(self.temp)
     
     def tearDown(self):
         """ called after tests have run to clear anything left hanging around"""
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_4pn.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_4pn.py	Fri Aug 13 14:59:05 2010 +0300
@@ -20,7 +20,7 @@
 """ Test cases for ccm python toolkit.
 
 """
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import unittest
 import ccm
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_object.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_object.py	Fri Aug 13 14:59:05 2010 +0300
@@ -21,7 +21,7 @@
     unitesting CCMObject functionality
 """
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import unittest
 import ccm
@@ -80,7 +80,9 @@
 
 class MockResultSession(ccm.AbstractSession):
     """ Fake session used to test Result"""
-    def __init__(self, behave = {}, database="fakedb"):
+    def __init__(self, behave=None, database="fakedb"):
+        if behave == None:
+            behave = {}
         ccm.AbstractSession.__init__(self, None, None, None, None)
         self._behave = behave
         self._database = database
@@ -101,6 +103,7 @@
             result.status = -1  
         return result
 
+
 class CCMObjectTest(unittest.TestCase):
     """ Unit test case for CCMObject functionality """
     def test_get_baseline(self):
@@ -115,7 +118,6 @@
         objv2 = session.create('foo-2.0:project:db#1')
         assert objv2.baseline == objv1
 
-
     def test_delete_project(self):
         """ Check project deletion """
         behave = {'delete  -project "project-1:project:db#1"': "Deleting object 'project-1:project:db#1'"}
@@ -140,7 +142,7 @@
         try:
             result = project.delete(recurse=True, scope='project_and_subproject_hierarchy')        
             assert False, "The delete method must fail in case of synergy failure"
-        except:
+        except ccm.CCMException:
             pass
 
     def test_delete_object(self):
@@ -151,5 +153,7 @@
         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	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_results.py	Fri Aug 13 14:59:05 2010 +0300
@@ -25,7 +25,7 @@
 import os
 import logging
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 _logger = logging.getLogger('test.ccm_results')
 logging.basicConfig(level=logging.INFO)
@@ -49,8 +49,10 @@
 
 class MockResultSession(ccm.AbstractSession):
     """ Fake session used to test Result"""
-    def __init__(self, behave = {}, database="fakedb"):
+    def __init__(self, behave=None, database="fakedb"):
         ccm.AbstractSession.__init__(self, None, None, None, None)
+        if behave == None:
+            behave = {}
         self._behave = behave
         self._database = database
     
@@ -324,7 +326,7 @@
         session = MockResultSession(behave)
         result = session.execute('test_update', ccm.ConflictsResult(session))
         #_logger.debug(result.output)
-        # pylint: disable-msg=E1103
+        # pylint: disable=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
@@ -393,11 +395,11 @@
 Serious: 
 Update failed.
 """
-        _logger = logging.getLogger('count.logger')
-        _logger.setLevel(logging.WARNING)
+        count_logger = logging.getLogger('count.logger')
+        count_logger.setLevel(logging.WARNING)
         handler = CounterHandler()
-        _logger.addHandler(handler)
-        ccm.log_result(log, ccm.UPDATE_LOG_RULES, _logger)
+        count_logger.addHandler(handler)
+        ccm.log_result(log, ccm.UPDATE_LOG_RULES, count_logger)
         print handler.warnings
         print handler.errors
         assert handler.warnings == 5
@@ -415,11 +417,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)
+        count_logger = logging.getLogger('count.logger')
+        count_logger.setLevel(logging.WARNING)
         handler = CounterHandler()
-        _logger.addHandler(handler)
-        ccm.log_result(log, ccm.CHECKOUT_LOG_RULES, _logger)
+        count_logger.addHandler(handler)
+        ccm.log_result(log, ccm.CHECKOUT_LOG_RULES, count_logger)
         print handler.warnings
         print handler.errors
         assert handler.warnings == 4
@@ -438,11 +440,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)
+        count_logger = logging.getLogger('count.logger')
+        count_logger.setLevel(logging.WARNING)
         handler = CounterHandler()
-        _logger.addHandler(handler)
-        ccm.log_result(log, ccm.SYNC_LOG_RULES, _logger)
+        count_logger.addHandler(handler)
+        ccm.log_result(log, ccm.SYNC_LOG_RULES, count_logger)
         print handler.warnings
         print handler.errors
         assert handler.warnings == 0
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccmutil.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccmutil.py	Fri Aug 13 14:59:05 2010 +0300
@@ -46,7 +46,7 @@
         dbpath = "ccm.database.path"
         try:
             session = ccmutil.get_session(database, username, password, engine, dbpath)
-        except Exception:
+        except ccm.CCMException:
             print "Error creating session"
         assert session is None
             
@@ -60,7 +60,7 @@
         dbpath = "ccm.database.path"
         try:
             session = ccmutil.get_session(database, username, password, engine, dbpath)
-        except Exception:
+        except ccm.CCMException:
             print "Error creating session"
         assert session is None
 
@@ -72,7 +72,10 @@
         
 class MockSession(ccm.AbstractSession):
     """ Fake session used to test """
-    def __init__(self, behave = {}, username=None, password=None, engine=None, dbpath=None, database=None):
+    def __init__(self, behave=None, username=None, password=None, engine=None, dbpath=None, database=None):
+        ccm.AbstractSession.__init__(self, username, engine, dbpath, None)
+        if behave == None:
+            behave = {}
         if database == "fakedb":
             self._behave = behave
             self._database = database
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_compilation.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_compilation.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 #===============================================================================
 """test compilation """
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import unittest
 import compilation
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_configuration.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_configuration.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 #===============================================================================
 """ test configuration """
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import logging
 import StringIO
@@ -63,11 +63,11 @@
         assert len(configs) == 1
         assert configs[0].type == 'test.type', "config.type must match 'test.type'."
         
-        configs = config_set.getConfigurations(type='test.type')
+        configs = config_set.getConfigurations(type_='test.type')
         assert len(configs) == 2
         assert configs[0].type == 'test.type', "config.type must match 'test.type'."
 
-        configs = config_set.getConfigurations(name='test_spec', type='test.type')
+        configs = config_set.getConfigurations(name='test_spec', type_='test.type')
         assert len(configs) == 2
         assert configs[0].type == 'test.type', "config.type must match 'test.type'."
         
@@ -261,27 +261,4 @@
         assert config['text.b'] == 'text.value.B'
         assert config['foo'] == 'bar'
         
-        
-if 'java' not in sys.platform:
-    class XMLConfigurationTest(unittest.TestCase):
-        """ Test XML format configuration files. """
-        
-        def test_single_node_xml(self):
-            """ Properties can be read from 1 level of XML sub-elements. """
-            config = configuration.XMLConfiguration(open(os.path.join(os.environ['TEST_DATA'], 'data/ant_config_test.xml'), 'r'))
-            
-            assert config['foo'] == 'bar'
-            assert config['interpolated'] == 'foo value = bar'
-            
-        def test_nested_node_xml(self):
-            """ Properties can be read from multiple levels of XML sub-elements. """
-            config = configuration.XMLConfiguration(open(os.path.join(os.environ['TEST_DATA'], 'data/ant_config_test.xml'), 'r'))
-            
-            assert config['xml.c'] == 'C'
-            
-        def test_xml_list(self):
-            """ Multiple XML elements can be read as a list. """
-            config = configuration.XMLConfiguration(open(os.path.join(os.environ['TEST_DATA'], 'data/ant_config_test.xml'), 'r'))
-            
-            assert config['array.value'] == 'one,two,three'
         
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ctc.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ctc.py	Fri Aug 13 14:59:05 2010 +0300
@@ -80,7 +80,7 @@
         """close"""
         pass
 
-    def _ftpmkdirs(self, dir):
+    def _ftpmkdirs(self, dir_):
         """ftp make dirs"""
         pass    
     
@@ -100,5 +100,5 @@
         result = uploader.upload()
         print result
         assert len(result) == 2
-        assert result[0] == "ctc_helium/1234/mon_syms/1/MON.SYM"
-        assert result[1] == "ctc_helium/1234/mon_syms/2/MON.SYM"
+        assert result[0] == "1234/mon_syms/1/MON.SYM"
+        assert result[1] == "1234/mon_syms/2/MON.SYM"
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_deltazip.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_deltazip.py	Fri Aug 13 14:59:05 2010 +0300
@@ -33,8 +33,8 @@
         self.cwd_backup = os.getcwd()
         self.logger = logging.getLogger('test.deltazip')
         self.root = os.environ['TEST_DATA']
-        self.output = os.path.join(tempfile.gettempdir(), 'deltazip')
-        self.output2 = os.path.join(tempfile.gettempdir(), 'deltazip2')
+        self.output = tempfile.mkdtemp()
+        self.output2 = tempfile.mkdtemp()
         
         logging.basicConfig(level=logging.INFO)
 
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_docs.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_docs.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 #===============================================================================
 """test docs """
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import unittest
 import docs
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_escapeddict.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_escapeddict.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 #===============================================================================
 """test escaped dict """
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import logging
 import unittest
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_freedisk.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_freedisk.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 #===============================================================================
 """ test free disk """
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import unittest
 import logging
@@ -67,7 +67,9 @@
             """
             Tests with drive which does not exist
             """
+            print 'Running: ' + 'python -m freedisk -d %s: -s 10 ' % self.drive_letter
             output = os.system('python -m freedisk -d %s: -s 10 ' % self.drive_letter)
+            print 'output: ' + str(output)
             assert(output==-2)
             
         def test_missing_parameters(self):
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_gscm.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_gscm.py	Fri Aug 13 14:59:05 2010 +0300
@@ -21,7 +21,7 @@
 
 """
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import logging
 import unittest
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ido.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ido.py	Fri Aug 13 14:59:05 2010 +0300
@@ -47,7 +47,7 @@
     def test_ido_sysdef_valid(self):
         """ Verifying get_sysdef_location method with valid sysdef"""
         test_sysdef_file = os.path.join(os.environ['TEST_DATA'], 'data', 'packageiad', 'layers.sysdef.xml')
-        location = ido.get_sysdef_location(test_sysdef_file); 
+        location = ido.get_sysdef_location(test_sysdef_file) 
         assert location != None
 
     def test_ido_sysdef_invalid(self):
@@ -55,6 +55,6 @@
         (f_d, filename) = mkstemp()
         os.write(f_d,'Test sysdef file')
         os.close(f_d)
-        location = ido.get_sysdef_location(filename); 
+        location = ido.get_sysdef_location(filename) 
         os.unlink(filename)
         assert location == None
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_integration_ant.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_integration_ant.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 #===============================================================================
 """ Testing integration.ant module """  
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import tempfile
 import os
@@ -31,6 +31,7 @@
 
 class IntegrationAntTest(unittest.TestCase):
     """Verifying integration ant module"""
+    
     def test_check_build_duplicates_task(self):
         """Verifying check_build_duplicates_task method """
         (fileDes, outputFilename) = tempfile.mkstemp()
@@ -41,12 +42,14 @@
         outputFile.close()
         os.unlink(outputFilename)
         assert len(contents) == 15
+        
     def test_check_build_duplicates_task_invalid(self):
         """Verifying check_build_duplicates_task (invalid args) method"""
         self.assertRaises(Exception, integration.ant.check_build_duplicates_task, None, None, None, None)
 
 class _emulateTask():
     """Emulate task"""
+
     def log(self, message):
         """Emulate log method"""
         pass
@@ -55,39 +58,47 @@
     """Emulate attributes"""
     def __init__(self, outputFilename):
         self.outputFilename = outputFilename
+        
     def get(self, _):
         """Emulate get method"""
         return self.outputFilename
 
 class _emulateElements():
     """Emulate elements"""
+    
     def get(self, _):
         """Emulate get method"""
         return _emulateFileset()
 
 class _emulateFileset():
     """Emulate fileset"""
+    
     def get(self, _):
         """Emulate get method"""
         return _emulateDirScanner()
+    
     def size(self):
         """Emulate size method"""
         return 1
 
 class _emulateDirScanner():
     """Emulate dirscanner"""
+    
     def scan(self):
         """Emulate scan method"""
         pass
+    
     def getIncludedFiles(self):
         """Emulate getIncludedFiles method """
         if os.sep == '\\':
             return ['test_build_compile.log']
         elif os.sep == '/':
             return ['test_build_compile_linux.log']
+        
     def getDirectoryScanner(self, _):
         """Emulate getDirectoryScanner method """
         return self
+    
     def getBasedir(self):
         """Emulate getBasedir method """
         return os.path.join(os.environ['TEST_DATA'], 'data', 'compile', 'logs')
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_log2xml.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_log2xml.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 #===============================================================================
 """ test log to XML """
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import unittest
 import logging
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_misc.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_misc.py	Fri Aug 13 14:59:05 2010 +0300
@@ -47,7 +47,7 @@
     
     import optparse
     
-# pylint: disable-msg=W0613
+# pylint: disable=W0613
 
     def testCallback(option, opt, value, parser):
         """test Call back"""
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_preparation.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_preparation.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 #===============================================================================
 """ Testing preparation module """  
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import tempfile
 from shutil import rmtree
@@ -34,7 +34,7 @@
 _disable_is_relative = False
 _disable_sub_projects = False
 
-# pylint: disable-msg=W0613
+# pylint: disable=W0613
 #these methods are all mocking/emulating the real methods in other files so need the interface to be
 #the same and no code present hence pylint throws up warnings saying unused variables.
 def _get_role_for_status(status): 
@@ -57,7 +57,7 @@
     """ Emulate ccm.UpdateResultSimple method for unit testing """
     pass
 
-def _fastMaintainWorkArea(project, dir, projectname, threads): 
+def _fastMaintainWorkArea(project, dir_, projectname, threads): 
     """ Emulate ccm.extra.FastMaintainWorkArea method for unit testing """
     pass
 
@@ -366,9 +366,9 @@
 
 class _config():
     """Emulating configuration class"""
-    def __init__(self, type):
+    def __init__(self, type_):
         self.database = 'test'
-        self.type = type
+        self.type = type_
         self.name = 'test'
         self.data = {'database': 'test'}
         self.data['dir'] = tempfile.gettempdir()
@@ -435,7 +435,7 @@
         """ Check if key exists. """
         return self.data.has_key(key)
 
-# pylint: disable-msg=W0613
+# pylint: disable=W0613
 #need disable msg to prevent pylint warning as this is emulating the real method.
     def create(self, fpn):
         """Emulating session.create method"""
@@ -446,7 +446,7 @@
         """Emulating session.purposes method"""
         return self
 
-# pylint: disable-msg=W0613
+# pylint: disable=W0613
 #need disable msg to prevent pylint warning as this is emulating the real method.
     def get_workarea_info(self, path):
         """Emulating session.get_workarea_info method"""
@@ -465,8 +465,6 @@
 class _project():
     """Emulating project class"""
     def __init__(self):
-        global _disable_sub_projects
-        global _disable_is_relative
         self.name = 'pyUnitTestHeliumProject'
         self.objectname = '1'
         self.data = {'status':None} 
@@ -506,7 +504,7 @@
         """Emulating project.update method"""
         pass
 
-    def work_area(self, boolean1, boolean2, boolean3 = None, dir=None, projectname=None ):
+    def work_area(self, boolean1, boolean2, boolean3 = None, dir_=None, projectname=None ):
         """Emulating project.work_area method"""
         pass
 
@@ -514,7 +512,7 @@
         """Emulating project.conflict method"""
         pass
 
-# pylint: disable-msg=W0613
+# pylint: disable=W0613
 #need disable msg to prevent pylint warning as this is emulating the real method.
     def checkout(self, session, version, purpose):
         """Emulating project.checkout method"""
@@ -589,7 +587,7 @@
         """Emulating sub project.exists """
         return True                
 
-# pylint: disable-msg=W0613
+# pylint: disable=W0613
 #need disable msg to prevent pylint warning as this is emulating the real method.
     def checkout(self, session, version, purpose, subprojects=None):
         """Emulating sub project.checkout """
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_session_provider.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_session_provider.py	Fri Aug 13 14:59:05 2010 +0300
@@ -19,7 +19,7 @@
 
 """ Test cases for ccm python toolkit."""
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import unittest
 import ccm
@@ -31,10 +31,13 @@
 _logger = logging.getLogger('test.test_session_provider')
 logging.basicConfig(level=logging.INFO)
 
+
 class MockResultSession(ccm.AbstractSession):
     """ Fake session used to test Result"""
-    def __init__(self, behave = {}, database="fakedb"):
+    def __init__(self, behave=None, database="fakedb"):
         ccm.AbstractSession.__init__(self, None, None, None, None)
+        if behave == None:
+            behave = {}
         self._behave = behave
         self._database = database
         self.dbpath = "/path/to/" + database
@@ -56,12 +59,13 @@
             result.status = -1  
         return result
 
+
 class MockOpener(object):
     """ An Opener which provides a mock session """
     def __init__(self):
         self.failOnNewOpen = False
     
-# pylint: disable-msg=W0613
+# pylint: disable=W0613
 #need disable msg to prevent pylint warning as this is emulating the real method.
     def __call__(self, username=None, password=None, engine=None, dbpath=None, database=None, reuse=True):
         assert self.failOnNewOpen == False, "This method should not be called again."
@@ -70,6 +74,7 @@
         return MockResultSession()
 # pylint: enable-msg=W0613
 
+
 class SessionProviderTest(unittest.TestCase):
     """ Testing Results parsers. """
     def test_get_valid_db(self):
@@ -84,11 +89,10 @@
         try:
             _ = prov.get(database="invaliddb")
             assert False, "Should raise Exception when giving unexisting dbase.'"
-        except Exception, exc:
+        except ccm.CCMException, exc:
             _logger.info(exc)
 
 
-
 class CachedSessionProviderTest(unittest.TestCase):
     """ Testing Results parsers. """
     session_cache = os.path.join(tempfile.mkdtemp(), 'session_cache.xml')
@@ -117,7 +121,7 @@
         try:
             _ = prov.get(database="invaliddb")
             assert False, "Should raise Exception when giving unexisting dbase.'"
-        except Exception, exc:
+        except ccm.CCMException, exc:
             _logger.info(exc)
         
     def test_open_session_twice(self):
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_symbian_log.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_symbian_log.py	Fri Aug 13 14:59:05 2010 +0300
@@ -104,10 +104,10 @@
         _logger.debug(name) 
         self.stages.append(name)
 
-    def task(self, name, cmdline, dir, output):
+    def task(self, name, cmdline, dir_, output):
         """task"""
-        _logger.debug("%s, %s, %s, %s" % (name, cmdline, dir, output)) 
-        self.tasks.append({'name': name, 'cmdline': cmdline, 'dir': dir, 'output': output})
+        _logger.debug("%s, %s, %s, %s" % (name, cmdline, dir_, output)) 
+        self.tasks.append({'name': name, 'cmdline': cmdline, 'dir': dir_, 'output': output})
 
 
 class TestSymbianLog(unittest.TestCase):
--- a/buildframework/helium/sf/python/pythoncore/lib/rtfutils.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/rtfutils.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,7 +18,7 @@
 #===============================================================================
 """ rtf utilis"""
 
-# pylint: disable-msg=R0201
+# pylint: disable=R0201
 
 import csv
 import os
@@ -43,13 +43,13 @@
         template = file(self.template, 'rb' )
         output = file(outputfilename, 'w' )
         
-        self._rtftable(errors, output, tagtoreplace, template)
+        self.rtftable_file(errors, output, tagtoreplace, template)
         
         errors.close()
         output.close()
         template.close()
         
-    def _rtftable(self, errors, output, tagtoreplace, template):
+    def rtftable_file(self, errors, output, tagtoreplace, template):
         """rtf table"""
         PyRTF.Elements.StandardColours.append(PyRTF.PropertySets.Colour('NokiaBlue', 153, 204, 255))
        
@@ -104,12 +104,12 @@
         template = file(self.template, 'rb' )
         output = file(outputfilename, 'w' )
         
-        self._rtfimage(image, output, tagtoreplace, template)
+        self.rtfimage_file(image, output, tagtoreplace, template)
         
         output.close()
         template.close()
     
-    def _rtfimage(self, image, output, tagtoreplace, template):
+    def rtfimage_file(self, image, output, tagtoreplace, template):
         """rtf image"""
         temp_file = 'image_temp.rtf'
         
@@ -149,12 +149,12 @@
         inputfile = file( inputfilename, 'r' )
         outputfile = file( outputfilename, 'w' )
         
-        self._rtfconvert(inputfile, outputfile)
+        self.rtfconvert_file(inputfile, outputfile)
         
         inputfile.close()
         outputfile.close()
         
-    def _rtfconvert(self, inputfile, outputfile):
+    def rtfconvert_file(self, inputfile, outputfile):
         """rtf convert"""
         ppp = re.compile(r'(.+=)((\\\\|http|\.\\|ftp)(.+))')
         for line in inputfile:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/lib/sphinx_ext.py	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,91 @@
+#============================================================================ 
+#Name        : sphinx_ext.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:
+#===============================================================================
+""" aids to creating the API documentation"""
+import os
+import re
+
+from docutils import nodes, utils
+from docutils.parsers.rst import directives
+
+import amara
+
+treecache = None
+
+def handle_hlm_role(role, rawtext, text, lineno, inliner,
+                       options=None, content=None):
+    """ Process a custom Helium ReStructuredText role to link to a target, property or macro. """
+    if options == None:
+        options = {}
+    if content == None:
+        content = []
+    full_path_match = re.search(r"<document source=\"(.*?)\"", str(inliner.document))
+    full_path = full_path_match.group(1)
+    path_segment = full_path[full_path.index('\\doc\\') + 5:]
+    dir_levels = path_segment.count('\\')
+    (parent_type, parent_name) = get_root_element_name(text)
+    messages = []
+#    f = open('docs.log', 'a')
+    if parent_type != None and parent_name != None:
+        href_text = text.replace('.', '-').lower()
+#        f.write(href_text + "\n")
+        api_path_segment = 'api/helium/' + parent_type + '-' + parent_name  + '.html#' + href_text
+        relative_path = ('../' * dir_levels) + api_path_segment
+        api_doc_path = os.path.abspath(os.path.join(os.getcwd() + '/build/doc', api_path_segment))
+        node = nodes.reference(text, utils.unescape(text), refuri=relative_path, **options)
+#        f.write(str(node) + "\n")
+        node = nodes.literal(text, '', node, **options)
+    else:
+        messages.append(inliner.reporter.error(('Missing API doc for "%s".' % text), line=lineno))
+        node = nodes.literal(text, utils.unescape(text))
+#    f.close()
+    return [node], messages
+
+def get_root_element_name(text):
+    global treecache
+    if treecache == None:
+        database_path = os.path.abspath(os.path.join(os.getcwd() + '/build', 'public_database.xml'))
+        f = open(database_path)
+        tree = amara.parse(f)
+        
+        treecache = {}
+        for project in tree.antDatabase.project:
+            for x in project.xml_children:
+                if hasattr(x, 'name'):
+                    treecache[str(x.name)] = str(project.name)
+                    
+    if text in treecache:
+        return ('project', treecache[text])
+    return (None, None)
+
+roles = {'hlm-t': 'target',
+         'hlm-p': 'property',
+         'hlm-m': 'macro',}
+
+
+def setup(app):
+    """ Register custom RST roles for linking Helium targets, properties and macros
+    to the API documentation. """
+    for role in roles.keys():
+        app.add_role(role, handle_hlm_role)
+    app.add_description_unit('property', 'ant-prop', 'pair: %s; property')
+    app.add_description_unit('target', 'ant-target', 'pair: %s; target')
+
+    
+    
+    
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/symbian/log.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/symbian/log.py	Fri Aug 13 14:59:05 2010 +0300
@@ -139,7 +139,7 @@
         """ Method to override to catch the end stage event. """
         pass
     
-    def task(self, name, cmdline, dir, output):
+    def task(self, name, cmdline, dir_, output):
         """ Method to override to catch the task event. """
         pass
     
--- a/buildframework/helium/sf/python/pythoncore/lib/symrec.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/symrec.py	Fri Aug 13 14:59:05 2010 +0300
@@ -29,10 +29,10 @@
 LOGGER = logging.getLogger("symrec")
 logging.basicConfig(level=logging.INFO)
 
-def _cleanup_list(input):
+def _cleanup_list(input_):
     """cleanup  list"""
     result = []
-    for chars in input:
+    for chars in input_:
         if chars is not None and chars.strip() != "":
             result.append(chars)
     return result
@@ -56,6 +56,7 @@
     addindent = indentation to add to higher levels
     newl = newline string
     """
+    # pylint: disable=W0212
     writer.write(indent + "<" + self.tagName)
 
     attrs = self._get_attributes()
@@ -112,6 +113,7 @@
             result.append(instr.getAttribute('name'))
         return result
 
+
 class ReleaseMetadata(object):
     """ Create or read Metadata XML from SYMREC/SYMDEC. """
     
@@ -141,7 +143,7 @@
                 self.product = product
             if release != None:
                 self.release = release
-        elif service!=None and product!=None and release!=None:
+        elif service != None and product != None and release != None:
             self._xml = xml.dom.minidom.Document()
             self._releaseInformation = self._xml.createElement(u"releaseInformation")
             self._xml.appendChild(self._releaseInformation)
@@ -170,8 +172,7 @@
             #    releaseFiles
             self._releaseInformation.appendChild(self._xml.createElement(u'externalFiles'))
         else:
-            raise Exception("Error metadata file doesn't exists.")
-
+            raise IOError("Error metadata file doesn't exists.")
 
     def get_dependsof(self):
         """ Return a ReleaseMetada object pointing to the dependency release. """
@@ -184,7 +185,6 @@
         else:
             return None
 
-
     def set_dependsof(self, filename):
         """ Setting the dependency release. """
         metadata  = ReleaseMetadata(filename)
@@ -192,7 +192,7 @@
         self.dependsof_product  = metadata.product
         self.dependsof_release  = metadata.release
 
-    def add_package(self, name, type=None, default=True, filters=None, extract="single", md5checksum=None, size=None):
+    def add_package(self, name, type_=None, default=True, filters=None, extract="single", md5checksum=None, size=None):
         """ Adding a package to the metadata file. """
         # check if update mode
         package = None
@@ -208,8 +208,8 @@
             self._releaseFiles.appendChild(package)
             
         xml_setattr(package, 'name', os.path.basename(name))
-        if type != None:
-            xml_setattr(package, 'type', type)
+        if type_ != None:
+            xml_setattr(package, 'type', type_)
         else:
             xml_setattr(package, 'type', os.path.splitext(name)[1].lstrip('.'))
         xml_setattr(package, 'default', str(default).lower())
@@ -224,7 +224,6 @@
             xml_setattr(package, unicode("md5checksum"), unicode(md5checksum))
         if size != None:
             xml_setattr(package, unicode("size"), unicode(size))
-        
 
     def keys(self):
         """keys"""
@@ -250,7 +249,7 @@
                     size = pkg.getAttribute('size')
                 return {'type': pkg.getAttribute('type'), 'extract': pkg.getAttribute('extract'), 'default': (pkg.getAttribute('default')=="true"), \
                          'filters': filters, 's60filter': s60filters, 'md5checksum': md5checksum, 'size': size}
-        raise Exception("Key '%s' not found." % key)
+        raise KeyError("Key '%s' not found." % key)
 
     def __setitem__(self, key, value):
         self.add_package(key, value['type'], value['default'], value['filters'], value['extract'], value['md5checksum'], value['size'])
@@ -402,6 +401,7 @@
             return ValidateReleaseMetadata(dependency.filename).is_valid(checkmd5)
         return True
 
+
 class MetadataMerger(object):
     """ Merge packages definition to the root metadata. """
     
@@ -425,6 +425,7 @@
         """ Saving the XML into the provided filename. """
         return self._metadata.save(filename)
  
+ 
 class Metadata2TDD(ReleaseMetadata):
     """ Convert Metadata to a TDD file """
     def __init__(self, filename, includes=None, excludes=None):
@@ -476,11 +477,12 @@
         metadatas.sort(reverse=True)
         if len(metadatas) > 0:
             return os.path.normpath(os.path.join(releasedir, metadatas[0]))
-    except Exception, exc:
+    except (IOError, OSError), exc:
         LOGGER.error(exc)
         return None
     return None
 
+
 class ValidateReleaseMetadataCached(ValidateReleaseMetadata):
     """ Cached version of the metadata validation. """
     def __init__(self, filename, cachefile=None):
@@ -538,12 +540,13 @@
             writer.writerows(metadatas)
             f_file.close()
 
+
 class ValidateTicklerReleaseMetadata(ValidateReleaseMetadataCached):
     """ This class validate if a metadata file is stored in the correct location and
         if all deps exists.
     """
     def __init__(self, filename):
-        ReleaseMetadata.__init__(self, filename)
+        ValidateReleaseMetadataCached.__init__(self, filename)
         self.location = os.path.dirname(filename)
     
     def is_valid(self, checkmd5=True):
--- a/buildframework/helium/sf/python/pythoncore/lib/sysdef/api.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/sysdef/api.py	Fri Aug 13 14:59:05 2010 +0300
@@ -567,11 +567,11 @@
         for (unit_name, binaries) in binaries_reader:
             unit_name = unit_name.lower()
             if self.units.has_key(unit_name):
-                for bin in binaries:
-                    #if bin.find('_stolon_ekern') != -1:
-                    _logger.debug("Merging: %s" % bin)
+                for bin_ in binaries:
+                    #if bin_.find('_stolon_ekern') != -1:
+                    _logger.debug("Merging: %s" % bin_)
                 unit = self.units[unit_name]
-                unit.binaries = [Binary(bin.lower(), self) for bin in binaries]
+                unit.binaries = [Binary(bin_.lower(), self) for bin_ in binaries]
                 for binary in unit.binaries:
                     self.addElement(binary)
                     _logger.info('Merging binary: %s' % str(binary))
--- a/buildframework/helium/sf/python/pythoncore/lib/sysdef/io.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/sysdef/io.py	Fri Aug 13 14:59:05 2010 +0300
@@ -16,7 +16,7 @@
 #
 #Description:
 #===============================================================================
-# pylint: disable-msg=W0212,W0141
+# pylint: disable=W0212,W0141
 """ IO module for SystemDefinitionFile.
     - Allow convertion to m,a 
 """
--- a/buildframework/helium/sf/python/pythoncore/lib/timeout_launcher.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/timeout_launcher.py	Fri Aug 13 14:59:05 2010 +0300
@@ -18,6 +18,7 @@
 #===============================================================================
 
 """ Application launcher supporting timeout. """
+
 import os
 import sys
 import re
@@ -61,12 +62,12 @@
         sys.exit(-1)
     else:
         _logger.debug("Start command")
+        shell = True
+        if _windows:
+            shell = False
         if timeout != None:
             finish = time.time() + timeout
             timedout = False
-            shell = True
-            if _windows:
-                shell = False
             p_file = subprocess.Popen(' '.join(cmdline), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=shell)
             while (p_file.poll() == None):
                 if time.time() > finish:
@@ -84,15 +85,14 @@
                     except Exception, exc:
                         print "ERROR: %s" % exc
                 else:
-                    # pylint: disable-msg=E1101
-                    os.kill(p_file.pid, 9)
+                    os.kill(p_file.pid, 9) # pylint: disable=E1101
                 print "ERROR: exiting..."
                 raise Exception("Timeout exception.")
             else:
                 print p_file.communicate()[0]
                 sys.exit(p_file.returncode)
         else:
-            p_file = subprocess.Popen(' '.join(cmdline), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
+            p_file = subprocess.Popen(' '.join(cmdline), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=shell)
             print p_file.communicate()[0]
             sys.exit(p_file.returncode)
 
--- a/buildframework/helium/sf/python/pythoncore/lib/unittestadditions.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/unittestadditions.py	Fri Aug 13 14:59:05 2010 +0300
@@ -22,7 +22,7 @@
 import logging
 _logger = logging.getLogger('unittestadditions')
 
-# pylint: disable-msg=C0103
+# pylint: disable=C0103
 
 class skip(object):
     """ Skip decorator. The decorated function will only be called
--- a/buildframework/helium/sf/python/pythoncore/setup.py	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/setup.py	Fri Aug 13 14:59:05 2010 +0300
@@ -32,4 +32,5 @@
     packages = find_packages('lib', exclude=["*tests"]),
     test_suite = 'nose.collector',
     package_data = {'': ['*.xml', '**/*.xml', '*.pl']},
+    zip_safe = True,
     )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/tests/data/matti/matti_template.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
+<!-- 
+============================================================================ 
+Name        : matti_template.xml
+Part of     : Helium 
+
+Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+All rights reserved.
+This component and the accompanying materials are made available
+under the terms of the License "Eclipse Public License v1.0"
+which accompanies this distribution, and is available
+at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+Initial Contributors:
+Nokia Corporation - initial contribution.
+
+Contributors:
+
+Description:
+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 xml_dict['diamonds_build_url'] -%}
+        <meta name="diamonds-buildid">{{ xml_dict['diamonds_build_url'] }}</meta> 
+        <meta name="diamonds-testtype">Smoke</meta>
+        {% endif %}
+        <meta name="name">{{ xml_dict['testrun_name'] }}</meta> 
+    </metadata>
+    
+    <agents>
+        <agent alias="{{ xml_dict['alias_name'] }}">
+            <property name="hardware" value="{{ xml_dict["device_type"] }}"/>
+        </agent>
+    </agents>
+    
+    
+    {% for exe_block in xml_dict['execution_blocks'] -%}
+    <execution defaultAgent="{{ xml_dict['alias_name'] }}">        
+        <initialization>
+        
+            {% if exe_block['image_files'] -%}
+            <task agents="{{ xml_dict['alias_name'] }}">
+                <type>FlashTask</type>
+                <parameters>
+                {% set i = 1 %}
+                {% for img in exe_block['image_files'] -%}
+                    <parameter name="image-{{ i }}" value="images\{{ os.path.basename(img) }}" />
+                    {% set i = i + 1 %}
+                {% endfor -%}
+                </parameters>
+            </task>
+            {% endif %}
+                     
+
+            {% if exe_block['install_files'] != [] -%}
+              {% for file in exe_block['install_files'] -%}            
+            <task agents="{{ xml_dict['alias_name'] }}">
+                <type>FileUploadTask</type>
+                <parameters>
+                    <parameter name="src" value="{{exe_block['name']}}{{ atspath.normpath(atspath.normpath(file[0]).replace(atspath.normpath(exe_block['asset_path']).rsplit("\\", 1)[0], "")) }}"/>
+                    <parameter name="dst" value="{{ atspath.normpath(file[1]) }}"/>
+                </parameters>
+            </task>
+              {% endfor -%}
+            {% endif %}
+            
+            {% if exe_block['matti_sis_files'] != [] -%}
+              {% for sisfile in exe_block['matti_sis_files'] -%}            
+            <task agents="{{ xml_dict['alias_name'] }}">
+                <type>FileUploadTask</type>
+                <parameters>
+                    <parameter name="src" value="sisfiles\{{ os.path.basename(sisfile[0]) }}"/>
+                    <parameter name="dst" value="{{ sisfile[2] }}"/>
+                </parameters>
+            </task>
+              {% endfor -%}
+            {% endif %}
+
+          {% for sis_file in exe_block["matti_sis_files"] -%}
+            <task agents="{{ xml_dict['alias_name'] }}">
+               <type>InstallSisTask</type>
+               <parameters>
+                    <parameter name="software-package" value="{{ sis_file[2] }}"/>
+                    <parameter name="timeout" value="{{ exe_block["test_timeout"] }}"/>
+                    <parameter name="upgrade-data " value="true"/>
+                    <parameter name="ignore-ocsp-warnings" value="true"/>
+                    <parameter name="ocsp-done" value="true"/>
+                    <parameter name="install-drive" value="{{ sis_file[2].split(":")[0] }}"/>
+                    <parameter name="overwrite-allowed" value="true"/>
+                    <parameter name="download-allowed" value="false"/>
+                    <parameter name="download-username" value="user"/>
+                    <parameter name="download-password" value="passwd"/>
+                    <parameter name="upgrade-allowed" value="true"/>
+                    <parameter name="optional-items-allowed" value="true"/>
+                    <parameter name="untrusted-allowed" value="true"/>
+                    <parameter name="package-info-allowed" value="true"/>
+                    <parameter name="user-capabilities-granted" value="true"/>
+                    <parameter name="kill-app" value="true"/>
+               </parameters>
+            </task>
+          {%- endfor -%}
+
+            <task agents="{{ xml_dict['alias_name'] }}">
+                <type>RebootTask</type>
+                <parameters/>                
+            </task>
+            <task agents="{{ xml_dict['alias_name'] }}">
+                <type>CreateDirTask</type>
+                <parameters>                
+                    <parameter value="c:\logs\testability" name="dir"/>
+                </parameters>
+            </task>
+        </initialization>
+
+        {% for task_file in exe_block["matti_task_files"] -%}
+        <task agents="{{ xml_dict['alias_name'] }}">
+           <type>MATTITask</type>
+           <parameters>
+              <parameter value="{{ exe_block["name"] }}\matti_testcases\" name="script"/>
+              <parameter value="{{ exe_block["name"] }}\matti_testcases\mattiparameters\{{ os.path.basename(exe_block["matti_parameters"][0]) }}" name="xml"/>
+              <parameter value="{{ exe_block['test_timeout'] }}" name="timeout"/>
+              <parameter value="{{ exe_block["sierra_enabled"] }}" name="sierra"/>
+              <parameter value="{{ exe_block["sierra_parameters"] }} -e %TEST_RUN_SANDBOX%/{{ exe_block["name"] }}/{{ task_file }} test_unit" name="executable-parameters"/>
+           </parameters>
+        </task>
+        {% endfor -%}
+        
+        <finalization>
+	      <task agents="{{ xml_dict['alias_name'] }}">
+	        <type>CleanupTask</type>
+	        <parameters>
+	          <parameter value="true" name="upload-files"/>
+	        </parameters>
+	      </task>
+        </finalization>
+    </execution>    
+    {% endfor -%}
+    
+    <postActions>
+    <action>
+      <type>EmailAction</type>
+      <parameters>
+        <parameter value="{{ xml_dict['email_subject'] }}" name="subject"/>
+        <parameter value="{{ xml_dict['report_email'] }}" name="to"/>
+        <parameter value="{{ xml_dict['email_format'] }}" name="format"/>
+      </parameters>
+    </action>
+    </postActions>
+    
+</testrun>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/tests/data/matti/test_all_present.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<testrun>
+	<metadata>
+		<meta name="diamonds-buildid">http://diamonds.com/1234</meta>
+		<meta name="diamonds-testtype">Smoke</meta>
+		<meta name="name">matti test run</meta>
+	</metadata>
+	<agents>
+		<agent alias="alias">
+			<property name="hardware" value="new_device"/>
+		</agent>
+	</agents>
+	<execution defaultAgent="alias">
+		<initialization>
+			<task agents="alias">
+				<type>FlashTask</type>
+				<parameters>
+					<parameter name="image-1" value="images\image1.fpsx"/>
+					<parameter name="image-2" value="images\image2.fpsx"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>FileUploadTask</type>
+				<parameters>
+					<parameter name="src" value="exe1\matti_testcases\hwdata\file1.txt"/>
+					<parameter name="dst" value="C:\Private\10202BE9\PERSISTS\file1.txt"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>FileUploadTask</type>
+				<parameters>
+					<parameter name="src" value="exe1\matti_testcases\hwdata\settings.ini"/>
+					<parameter name="dst" value="c:\sys\settings.ini"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>FileUploadTask</type>
+				<parameters>
+					<parameter name="src" value="sisfiles\abc.sis"/>
+					<parameter name="dst" value="c:\abc.sis"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>FileUploadTask</type>
+				<parameters>
+					<parameter name="src" value="sisfiles\xyz.sis"/>
+					<parameter name="dst" value="f:\xyz.sis"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>InstallSisTask</type>
+				<parameters>
+					<parameter name="software-package" value="c:\abc.sis"/>
+					<parameter name="timeout" value="1200"/>
+					<parameter name="upgrade-data " value="true"/>
+					<parameter name="ignore-ocsp-warnings" value="true"/>
+					<parameter name="ocsp-done" value="true"/>
+					<parameter name="install-drive" value="c"/>
+					<parameter name="overwrite-allowed" value="true"/>
+					<parameter name="download-allowed" value="false"/>
+					<parameter name="download-username" value="user"/>
+					<parameter name="download-password" value="passwd"/>
+					<parameter name="upgrade-allowed" value="true"/>
+					<parameter name="optional-items-allowed" value="true"/>
+					<parameter name="untrusted-allowed" value="true"/>
+					<parameter name="package-info-allowed" value="true"/>
+					<parameter name="user-capabilities-granted" value="true"/>
+					<parameter name="kill-app" value="true"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>InstallSisTask</type>
+				<parameters>
+					<parameter name="software-package" value="f:\xyz.sis"/>
+					<parameter name="timeout" value="1200"/>
+					<parameter name="upgrade-data " value="true"/>
+					<parameter name="ignore-ocsp-warnings" value="true"/>
+					<parameter name="ocsp-done" value="true"/>
+					<parameter name="install-drive" value="f"/>
+					<parameter name="overwrite-allowed" value="true"/>
+					<parameter name="download-allowed" value="false"/>
+					<parameter name="download-username" value="user"/>
+					<parameter name="download-password" value="passwd"/>
+					<parameter name="upgrade-allowed" value="true"/>
+					<parameter name="optional-items-allowed" value="true"/>
+					<parameter name="untrusted-allowed" value="true"/>
+					<parameter name="package-info-allowed" value="true"/>
+					<parameter name="user-capabilities-granted" value="true"/>
+					<parameter name="kill-app" value="true"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>RebootTask</type>
+				<parameters/>
+			</task>
+			<task agents="alias">
+				<type>CreateDirTask</type>
+				<parameters>
+					<parameter name="dir" value="c:\logs\testability"/>
+				</parameters>
+			</task>
+		</initialization>
+		<task agents="alias">
+			<type>MATTITask</type>
+			<parameters>
+				<parameter name="script" value="exe1\matti_testcases\"/>
+				<parameter name="xml" value="exe1\matti_testcases\mattiparameters\."/>
+				<parameter name="timeout" value="1200"/>
+				<parameter name="sierra" value="true"/>
+				<parameter name="executable-parameters" value="--teardown -e %TEST_RUN_SANDBOX%/exe1/matti_testcases/profile/bat.sip test_unit"/>
+			</parameters>
+		</task>
+		<task agents="alias">
+			<type>MATTITask</type>
+			<parameters>
+				<parameter name="script" value="exe1\matti_testcases\"/>
+				<parameter name="xml" value="exe1\matti_testcases\mattiparameters\."/>
+				<parameter name="timeout" value="1200"/>
+				<parameter name="sierra" value="true"/>
+				<parameter name="executable-parameters" value="--teardown -e %TEST_RUN_SANDBOX%/exe1/matti_testcases/profile/fute.sip test_unit"/>
+			</parameters>
+		</task>
+		<finalization>
+			<task agents="alias">
+				<type>CleanupTask</type>
+				<parameters>
+					<parameter name="upload-files" value="true"/>
+				</parameters>
+			</task>
+		</finalization>
+	</execution>
+	<postActions>
+		<action>
+			<type>EmailAction</type>
+			<parameters>
+				<parameter name="subject" value="Matti test report"/>
+				<parameter name="to" value="firstname.lastname@domain.com"/>
+				<parameter name="format" value="simplelogger"/>
+			</parameters>
+		</action>
+	</postActions>
+</testrun>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/tests/data/matti/test_all_present_sierra_disabled.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<testrun>
+	<metadata>
+		<meta name="diamonds-buildid">http://diamonds.com/1234</meta>
+		<meta name="diamonds-testtype">Smoke</meta>
+		<meta name="name">matti test run</meta>
+	</metadata>
+	<agents>
+		<agent alias="alias">
+			<property name="hardware" value="new_device"/>
+		</agent>
+	</agents>
+	<execution defaultAgent="alias">
+		<initialization>
+			<task agents="alias">
+				<type>FlashTask</type>
+				<parameters>
+					<parameter name="image-1" value="images\image1.fpsx"/>
+					<parameter name="image-2" value="images\image2.fpsx"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>FileUploadTask</type>
+				<parameters>
+					<parameter name="src" value="exe1\matti_testcases\hwdata\file1.txt"/>
+					<parameter name="dst" value="C:\Private\10202BE9\PERSISTS\file1.txt"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>FileUploadTask</type>
+				<parameters>
+					<parameter name="src" value="exe1\matti_testcases\hwdata\settings.ini"/>
+					<parameter name="dst" value="c:\sys\settings.ini"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>FileUploadTask</type>
+				<parameters>
+					<parameter name="src" value="sisfiles\abc.sis"/>
+					<parameter name="dst" value="c:\abc.sis"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>FileUploadTask</type>
+				<parameters>
+					<parameter name="src" value="sisfiles\xyz.sis"/>
+					<parameter name="dst" value="f:\xyz.sis"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>InstallSisTask</type>
+				<parameters>
+					<parameter name="software-package" value="c:\abc.sis"/>
+					<parameter name="timeout" value="1200"/>
+					<parameter name="upgrade-data " value="true"/>
+					<parameter name="ignore-ocsp-warnings" value="true"/>
+					<parameter name="ocsp-done" value="true"/>
+					<parameter name="install-drive" value="c"/>
+					<parameter name="overwrite-allowed" value="true"/>
+					<parameter name="download-allowed" value="false"/>
+					<parameter name="download-username" value="user"/>
+					<parameter name="download-password" value="passwd"/>
+					<parameter name="upgrade-allowed" value="true"/>
+					<parameter name="optional-items-allowed" value="true"/>
+					<parameter name="untrusted-allowed" value="true"/>
+					<parameter name="package-info-allowed" value="true"/>
+					<parameter name="user-capabilities-granted" value="true"/>
+					<parameter name="kill-app" value="true"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>InstallSisTask</type>
+				<parameters>
+					<parameter name="software-package" value="f:\xyz.sis"/>
+					<parameter name="timeout" value="1200"/>
+					<parameter name="upgrade-data " value="true"/>
+					<parameter name="ignore-ocsp-warnings" value="true"/>
+					<parameter name="ocsp-done" value="true"/>
+					<parameter name="install-drive" value="f"/>
+					<parameter name="overwrite-allowed" value="true"/>
+					<parameter name="download-allowed" value="false"/>
+					<parameter name="download-username" value="user"/>
+					<parameter name="download-password" value="passwd"/>
+					<parameter name="upgrade-allowed" value="true"/>
+					<parameter name="optional-items-allowed" value="true"/>
+					<parameter name="untrusted-allowed" value="true"/>
+					<parameter name="package-info-allowed" value="true"/>
+					<parameter name="user-capabilities-granted" value="true"/>
+					<parameter name="kill-app" value="true"/>
+				</parameters>
+			</task>
+			<task agents="alias">
+				<type>RebootTask</type>
+				<parameters/>
+			</task>
+			<task agents="alias">
+				<type>CreateDirTask</type>
+				<parameters>
+					<parameter name="dir" value="c:\logs\testability"/>
+				</parameters>
+			</task>
+		</initialization>
+		<task agents="alias">
+			<type>MATTITask</type>
+			<parameters>
+				<parameter name="script" value="exe1\matti_testcases\"/>
+				<parameter name="xml" value="exe1\matti_testcases\mattiparameters\."/>
+				<parameter name="timeout" value="1200"/>
+				<parameter name="sierra" value="false"/>
+				<parameter name="executable-parameters" value="--teardown -e %TEST_RUN_SANDBOX%/exe1/matti_testcases/unit_test1.rb test_unit"/>
+			</parameters>
+		</task>
+		<task agents="alias">
+			<type>MATTITask</type>
+			<parameters>
+				<parameter name="script" value="exe1\matti_testcases\"/>
+				<parameter name="xml" value="exe1\matti_testcases\mattiparameters\."/>
+				<parameter name="timeout" value="1200"/>
+				<parameter name="sierra" value="false"/>
+				<parameter name="executable-parameters" value="--teardown -e %TEST_RUN_SANDBOX%/exe1/matti_testcases/unit_test2.rb test_unit"/>
+			</parameters>
+		</task>
+		<finalization>
+			<task agents="alias">
+				<type>CleanupTask</type>
+				<parameters>
+					<parameter name="upload-files" value="true"/>
+				</parameters>
+			</task>
+		</finalization>
+	</execution>
+	<postActions>
+		<action>
+			<type>EmailAction</type>
+			<parameters>
+				<parameter name="subject" value="Matti test report"/>
+				<parameter name="to" value="firstname.lastname@domain.com"/>
+				<parameter name="format" value="simplelogger"/>
+			</parameters>
+		</action>
+	</postActions>
+</testrun>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/tests/data/packageiad/sysdef3_test.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+				
+				</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_test" origin-model="sf">
+						<unit bldFile="/sf/mw/dummytest/test_nested/tc1/group" mrp="/sf/mw/dummytest/"/>
+					</component>
+				
+					<component id="tc2" name="tc2" purpose="development" filter="test" origin-model="sf">
+						<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" origin-model="sf">
+						<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">
+				
+				</collection>
+			</package>
+		</layer>
+		
+		
+	</systemModel>
+</SystemDefinition>
\ No newline at end of file
--- a/buildframework/helium/sf/settings/ivysettings.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/settings/ivysettings.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -42,5 +42,10 @@
         </chain>
     </resolvers>
 
+    <triggers>
+        <ant-build antfile="${source.root.dir}/sf/settings/triggers/egg-extract.ant.xml" target="egg-extract" prefix="dep"
+            event="post-retrieve-artifact"  onlyonce="false" filter="type=egg"/>
+    </triggers>
+
 </ivysettings>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/settings/triggers/egg-extract.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : egg-extract.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="egg-extract" xmlns:ac="antlib:net.sf.antcontrib">
+
+    <target name="egg-extract">
+        <ac:if>
+            <matches string="${dep.to}" pattern="^.*\.egg$" casesensitive="false" singleline="true"/>
+            <then>  
+                <ac:if>
+                    <resourcecount when="eq" count="1">
+                        <zipfileset src="${dep.to}" includes="EGG-INFO/not-zip-safe" />
+                    </resourcecount>
+                    <then>
+                        <basename property="filename" file="${dep.to}" />
+                        <dirname property="dir" file="${dep.to}" />
+                        <mkdir dir="${dir}/../zipnotsafe/${filename}" />
+                        <unzip src="${dep.to}" dest="${dir}/../zipnotsafe/${filename}" />
+                        <delete file="${dep.to}" /> 
+                    </then>
+                </ac:if>
+            </then>
+        </ac:if>
+    </target>
+
+</project>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tests/data/logs/test_helium_dev_9.1.50_targetTimesLog.csv	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,257 @@
+preprocess-sysdef-files,2
+create-canonical-sysdef-file,5
+precompile-ec,0
+run-coverity-configure,0
+precompile,0
+run-qmake,0
+genxml,0
+postprocess-genxml,0
+get-arm-license,0
+check-env-arm-license,0
+set-arm-version,0
+compile-ebs,0
+compile-genxml-ec,0
+compile-ec-helium,0
+find-freeport,0
+compile-ebs-ant,0
+compile-sbs,137
+compile-scanlog,0
+compile-configuration,0
+do-compile-main,0
+postcompile-ec,0
+check-build-duplicates,0
+integration-build-duplicates,0
+render-build-duplicates,0
+post-coverity,0
+postcompile,0
+compile-main,0
+ido-prep-clean,0
+ido-prep-clean-dfs,0
+preprocess-sysdef-files,2
+create-canonical-sysdef-file,5
+precompile-ec,0
+run-coverity-configure,0
+precompile,0
+run-qmake,0
+genxml,0
+postprocess-genxml,0
+get-arm-license,0
+check-env-arm-license,0
+set-arm-version,0
+compile-ebs,0
+compile-genxml-ec,0
+compile-ec-helium,0
+find-freeport,0
+compile-ebs-ant,0
+compile-sbs,1232
+compile-scanlog,0
+compile-configuration,0
+do-compile-main,0
+postcompile-ec,0
+check-build-duplicates,0
+integration-build-duplicates,0
+render-build-duplicates,0
+post-coverity,0
+postcompile,0
+compile-main,0
+compile-dfs,0
+ido-validate-confml,0
+ido-validate-confml,0
+ido-validate-confml,0
+ido-validate-confml,0
+ido-validate-confml,1
+ido-validate-confml,0
+ido-validate-confml,0
+ido-validate-confml,0
+ido-validate-confml,4
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,0
+ido-validate-confml,2
+ido-validate-confml,0
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,0
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+preprocess-sysdef-files,4
+create-canonical-sysdef-file,6
+precompile-ec,0
+run-coverity-configure,0
+precompile,0
+run-qmake,0
+genxml,0
+postprocess-genxml,0
+get-arm-license,0
+check-env-arm-license,0
+set-arm-version,0
+compile-ebs,0
+compile-genxml-ec,0
+compile-ec-helium,0
+find-freeport,0
+compile-ebs-ant,0
+compile-sbs,114
+compile-scanlog,0
+compile-configuration,0
+do-compile-main,0
+postcompile-ec,0
+check-build-duplicates,0
+integration-build-duplicates,0
+render-build-duplicates,0
+post-coverity,0
+postcompile,0
+compile-main,0
+ido-prep-clean,0
+ido-prep-clean-dfs,0
+preprocess-sysdef-files,2
+create-canonical-sysdef-file,5
+precompile-ec,0
+run-coverity-configure,0
+precompile,0
+run-qmake,0
+genxml,0
+postprocess-genxml,0
+get-arm-license,0
+check-env-arm-license,0
+set-arm-version,0
+compile-ebs,0
+compile-genxml-ec,0
+compile-ec-helium,0
+find-freeport,0
+compile-ebs-ant,0
+compile-sbs,1250
+compile-scanlog,0
+compile-configuration,0
+do-compile-main,0
+postcompile-ec,0
+check-build-duplicates,0
+integration-build-duplicates,0
+render-build-duplicates,0
+post-coverity,0
+postcompile,0
+compile-main,0
+compile-dfs,0
+ido-validate-confml,4
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,0
+ido-validate-confml,0
+ido-validate-confml,0
+ido-validate-confml,2
+ido-validate-confml,0
+ido-validate-confml,0
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,0
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,2
+ido-validate-confml,2
+ido-create-ado-mapping,9
+get-sources-path,0
+ido-check-sf-source-header,2
+ido-create-ado-mapping,6
+get-sources-path,0
+ido-check-sf-source-header,3
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,2
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,1
+ido-validate-confml,0
+ido-validate-confml,1
+ido-validate-confml,5
+all,0
+ido-validate-confml,1
+validate-confml-file,1
+all,0
+ido-validate-confml,1
+validate-confml-file,3
+all,0
+ido-validate-confml,1
+validate-confml-file,2
+all,0
+ido-validate-confml,1
+ido-cenrep-generation,21
+all,0
+ido-gen-cenrep,1
+validate-confml-file,0
+ido-validate-confml,2
+validate-confml-file,0
+ido-validate-confml,2
+ido-validate-confml,0
+cone-validate,0
+cone-validate,0
+cone-validate,0
+cone-validate,3
+product-cone-validate,67
+all,0
+cone-validate,3
+product-cone-validate,66
+all,0
+cone-validate,3
+product-cone-validate,66
+all,0
+cone-validate,4
+product-cone-validate,66
+all,0
+cone-validate,3
+product-cone-validate,66
+all,0
+cone-validate,3
+product-cone-validate,66
+all,0
+cone-validate,7
+ido-validate-confml,0
+validate-confml-file,2
+all,0
+ido-validate-confml,2
+product-cone-validate,67
+all,0
+cone-validate,6
+cone-validate,0
+cone-validate,0
+product-cone-validate,69
+all,0
+cone-validate,8
+cone-validate,0
+product-cone-validate,66
+all,0
+cone-validate,8
+ido-validate-confml,0
+validate-confml-file,6
+all,0
+ido-validate-confml,3
+ido-cenrep-generation,11
+all,0
+ido-gen-cenrep,1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tests/data/logs/test_helium_dev_9.2.10_test_test_compile.log	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.12.1 [2010-01-29 symbian build system 4e477ddf2eed]" xmlns="http://symbian.com/xml/build/log" xmlns:progress="http://symbian.com/xml/build/log/progress" 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.12.1 [2010-01-29 symbian build system 4e477ddf2eed]
+</info>
+<info>SBS_HOME C:/APPS/sbs</info>
+<info>Set-up C:/APPS/sbs/sbs_init.xml</info>
+<info>Current working directory Y:\</info>
+<info>Environment /S=BHTEST001</info>
+<info>Environment ALLUSERSPROFILE=C:\Documents and Settings\All Users</info>
+<info>Environment ANT_ARGS=-lib "E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\antlibs2" -lib "E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\extensions\nokia\external\antlibs" -logger com.nokia.ant.HeliumLogger   -listener com.nokia.helium.internaldata.ant.listener.Listener  -Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor  -listener com.nokia.helium.logger.ant.listener.StatusAndLogListener  -listener com.nokia.helium.core.ant.listener.TargetTimesLogGeneratorListener -listener com.nokia.helium.environment.ant.listener.ExecListener</info>
+<info>Environment ANT_CMD_LINE_ARGS=-Dhelium.dir "E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium" -Dcache.dir "e:\ec_temp\helium\username" -Dbuild.drive Y: -Dbuild.system sbs -Denabled.ats true compile-test</info>
+<info>Environment ANT_HOME=C:\APPS\ant_1.7</info>
+<info>Environment ANT_OPTS=-Xmx896M -Dlog4j.configuration=com/nokia/log4j.xml -Dlog4j.cache.dir="e:\ec_temp\helium\username"  -Dpython.path=E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\2.5\jython-2.5-py2.5.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\2.6\4Suite_XML-1.0.2-py2.6-win32.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\2.6\PyXML-0.8.4-py2.6-win32.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\2.6\lxml-2.2.1-py2.6-win32.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\4Suite_XML-1.0.2.py2.6-win32.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\Jinja2-2.2.1.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\PyRTF-0.45.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\amara-1.2.0.1.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\blockspackager-1.0.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\dp-1.0.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\iadnokia-1.0.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\jython-2.5.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\lxml-2.2.1.py2.6-win32.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\mocker-0.10.1.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\path-2.2.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\pythoncore-1.0.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\pythonnokia-1.0.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto\setuptools-0.6c5.py2.5.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\common\Amara-1.2.0.1-py2.5.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\common\Jinja-1.2-py2.5-win32.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\common\Jinja2-2.2.1-py2.5.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\common\Pygments-0.10-py2.5.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\common\coverage-2.85-py2.5.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\common\epydoc-3.0beta1-py2.5.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\common\mocker-0.10.1-py2.5.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\common\nose-0.11.1-py2.6.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\common\path-2.2-py2.5.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\common\setuptools-0.6c5-py2.5.egg;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\common\simplejson-1.9.1-py2.5-win32.egg;;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\auto;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\2.6;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\external\python\lib\common;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\tools\common\python\scripts;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\extensions\nokia\external\python\lib\2.6;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\extensions\nokia\tools\common\python\lib;C:\APPS\sbs\python</info>
+<info>Environment APPDATA=C:\Documents and Settings\username\Application Data</info>
+<info>Environment APR_ICONV_PATH=C:\apps\Subversion\iconv</info>
+<info>Environment APTLMHOST=@oupelic4.emea.nsn-net.net</info>
+<info>Environment ARMROOT=\</info>
+<info>Environment ARMV5VER=:ARM/Thumb C/C++ Compiler, RVCT2.2 [Build 686]</info>
+<info>Environment CLIENTNAME=2INL05520</info>
+<info>Environment CLUSTERLOG=C:\ETPWIN\Cluster\cluster.log</info>
+<info>Environment CMTHOME=C:\APPS\cmt</info>
+<info>Environment COMMONPROGRAMFILES=C:\Program Files\Common Files</info>
+<info>Environment COMPUTERNAME=BHWEC019</info>
+<info>Environment COMSPEC=C:\ETPWIN\system32\cmd.exe</info>
+<info>Environment COPYCMD=/y</info>
+<info>Environment CTCHOME=C:\APPS\ctc</info>
+<info>Environment CTC_AGENT_DEBUG=*</info>
+<info>Environment CYGWIN=nontsec nosmbntsec</info>
+<info>Environment DERBY_HOME=C:\APPS\jdk_1.6.0_11\JavaDB</info>
+<info>Environment EMAKEFLAGS=--emake-reg-roots=-\HKEY_CLASSES_ROOT</info>
+<info>Environment EMAKE_CM=bhwec001</info>
+<info>Environment EMAKE_EMULATION=symbian</info>
+<info>Environment EMAKE_ROOT=\;C:\apps</info>
+<info>Environment EPOCROOT=\</info>
+<info>Environment FLEXLM_BATCH=1</info>
+<info>Environment FLEXLM_TIMEOUT=900000</info>
+<info>Environment FP_NO_HOST_CHECK=NO</info>
+<info>Environment HELIUM_CACHE_DIR="e:\ec_temp\helium\username"</info>
+<info>Environment HELIUM_HOME=E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium</info>
+<info>Environment HOME=h:\</info>
+<info>Environment HOMEDRIVE=C:</info>
+<info>Environment HOMEPATH=\Documents and Settings\username</info>
+<info>Environment HOSTPLATFORM=win 32</info>
+<info>Environment HOSTPLATFORM_DIR=win32</info>
+<info>Environment INCLUDE=C:\APPS\MSVC6\VC98\ATL\Include\;C:\APPS\MSVC6\VC98\MFC\Include\;C:\APPS\MSVC6\VC98\Include\</info>
+<info>Environment INTERNAL_DATA_ANT_ARGS= -listener com.nokia.helium.internaldata.ant.listener.Listener</info>
+<info>Environment JAVA_1_3_1_HOME=C:\apps\j2sdk_1.3.1_06</info>
+<info>Environment JAVA_5_HOME=C:\APPS\jdk_1.5.0_17</info>
+<info>Environment JAVA_6_HOME=C:\APPS\jdk_1.6.0_11</info>
+<info>Environment JAVA_HOME=C:\APPS\jdk_1.6.0_11</info>
+<info>Environment LIB=C:\APPS\MSVC6\VC98\MFC\Lib\;C:\APPS\MSVC6\VC98\Lib\</info>
+<info>Environment LM_LICENSE_FILE=1727@bhlic01.apac.nokia.com;C:\APPS\licenses\apac.dat;1726@tolic01.apac.nokia.com;C:\APPS\licenses\PCLint.dat;C:\APPS\licenses\apac.dat;1726@tolic01.apac.nokia.com;C:\APPS\licenses\PCLint.dat;1707@bhlic01.apac.nokia.com;</info>
+<info>Environment LOGGING_ANT_ARGS= -listener com.nokia.helium.logger.ant.listener.StatusAndLogListener</info>
+<info>Environment LOGONSERVER=\\BHWDC101</info>
+<info>Environment MSDEVDIR=C:\APPS\MSVC6\Common\MSDev98</info>
+<info>Environment MWCSYM2INCLUDES=C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C\MSL_X86;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_C++\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Common\Include;C:\APPS\carbide\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Win32\Include;C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Headers\Win32 SDK</info>
+<info>Environment MWSYM2LIBRARIES=C:\APPS\carbide\x86Build\Symbian_Support\Win32-x86 Support\Libraries\Win32 SDK;C:\APPS\carbide\x86Build\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs</info>
+<info>Environment MWSYM2LIBRARYFILES=MSL_All_MSE_Symbian_D.lib;gdi32.lib;user32.lib;kernel32.lib;</info>
+<info>Environment NOKIA_LICENSE_FILE=C:\APPS\licenses\apac.dat;</info>
+<info>Environment NUMBER_OF_PROCESSORS=4</info>
+<info>Environment OS=Windows_NT</info>
+<info>Environment PATH=C:\APPS\sbs\win32\mingw\bin;C:\APPS\sbs\win32\cygwin\bin;C:\APPS\sbs\win32\bin;C:\APPS\jdk_1.6.0_11\bin;C:\APPS\actpython\.;c:\apps\actperl\bin\;c:\apps\rvct22_686\bin;c:\apps\atool;\epoc32\tools;\epoc32\gcc\bin;c:\apps\ue;c:\apps\ccm65\bin;c:\apps\carbide\x86Build\Symbian_Tools\Command_Line_Tools;c:\ECloud\i686_win32\bin;C:\Program Files\HP\NCU;c:\program files\windows resource kits\tools\;C:\ETPWIN\system32;C:\ETPWIN\system32\wbem;c:\progra~1\putty;c:\apps\cmt\;c:\apps\cltools;c:\apps\symrec;c:\apps\ant_1.7.0\bin;c:\apps\understand\bin\pc-win95;c:\apps\unzip;c:\apps\msvc6\common\tools\winnt;c:\apps\msvc6\common\msdev98\bin;c:\apps\msvc6\vc98\bin;c:\eesp\system32;c:\program files\subversion\bin;C:\ETPWIN\system32\WindowsPowerShell\v1.0;C:\APPS\pclint;C:\APPS\ctc;C:\APPS\prevent\bin;C:\APPS\sbs\bin;C:\APPS\blocks\bin;C:\APPS\codescanner;C:\APPS\jdk_1.6.0_11\bin;C:\APPS\7zip;C:\APPS\romtools;C:\APPS\imaker;C:\APPS\bc;\epoc32\gcc_mingw\bin;C:\ETPWIN\system32\WindowsPowerShell\v1.0;C:\APPS\symdec;C:\APPS\ant_1.7\bin;C:\APPS\MSVC6\VC98\Bin\;C:\APPS\MSVC6\Common\Tools\;C:\APPS\MSVC6\Common\MSDev98\Bin\;C:\APPS\ant_1.7\bin;C:\apps\Subversion\bin;E:\RaghuAE\Mercurial;E:\RaghuAE\coverity\bin;C:\apps\OpenSSH\bin;;\epoc32\tools;\epoc32\gcc\bin;\epoc32\tools\build;\epoc32\rombuild;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\extensions\nokia\external\unxutils;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\extensions\nokia\external\Subversion\bin;E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\extensions\nokia\external\graphviz\bin;C:\APPS\ctc</info>
+<info>Environment PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw;.PSC1</info>
+<info>Environment PERL=C:\APPS\actperl\bin\perl.exe</info>
+<info>Environment PERL5LIB=E:\RaghuAE\Helium_WorkArea\Helium_Mercurial\helium-working\helium\tools\common\packages</info>
+<info>Environment PID=4696</info>
+<info>Environment PROCESSOR_ARCHITECTURE=x86</info>
+<info>Environment PROCESSOR_IDENTIFIER=x86 Family 15 Model 65 Stepping 2, AuthenticAMD</info>
+<info>Environment PROCESSOR_LEVEL=15</info>
+<info>Environment PROCESSOR_REVISION=4102</info>
+<info>Environment PROGRAMFILES=C:\Program Files</info>
+<info>Environment PROMPT=$P$G</info>
+<info>Environment PSMODULEPATH=C:\ETPWIN\system32\WindowsPowerShell\v1.0\Modules\</info>
+<info>Environment PYTHONPATH=C:\APPS\sbs\win32\python264</info>
+<info>Environment PYTHONVERSION=2.6</info>
+<info>Environment RVCT22BIN=C:\APPS\rvct22_686\bin</info>
+<info>Environment RVCT22INC=C:\APPS\rvct22_686\include</info>
+<info>Environment RVCT22LIB=C:\APPS\rvct22_686\lib</info>
+<info>Environment RVCT22_ASMOPT=--licretry --fastlicense --sitelicense</info>
+<info>Environment RVCT22_CCOPT=--licretry --fastlicense --sitelicense</info>
+<info>Environment RVCT22_LINKOPT=--licretry --fastlicense --sitelicense</info>
+<info>Environment SBS_HOME=C:\APPS\sbs</info>
+<info>Environment SESSIONNAME=RDP-Tcp#47</info>
+<info>Environment SIGNALING_ANT_ARGS= -Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor</info>
+<info>Environment SYMSEE_VERSION=11.1.1</info>
+<info>Environment SYSTEMDRIVE=C:</info>
+<info>Environment SYSTEMROOT=C:\ETPWIN</info>
+<info>Environment TARGET_TIMES_GENERATOR= -listener com.nokia.helium.core.ant.listener.TargetTimesLogGeneratorListener</info>
+<info>Environment TEMP=e:\ec_temp</info>
+<info>Environment TESTED_ANT=C:\APPS\ant_1.7</info>
+<info>Environment TESTED_JAVA=C:\APPS\jdk_1.6.0_11</info>
+<info>Environment TMP=e:\ec_temp</info>
+<info>Environment TMPDIR=e:\ec_tmpdir</info>
+<info>Environment USERNAME=username</info>
+<info>Environment USERPROFILE=C:\Documents and Settings\username</info>
+<info>Environment WINDIR=C:\ETPWIN</info>
+<info>Environment _JAVACMD=C:\APPS\jdk_1.6.0_11\bin\java.exe</info>
+<info>Environment _USE_CLASSPATH=no</info>
+<info>Environment __CYGWIN__=C:\APPS\sbs\win32\cygwin</info>
+<info>Environment __MINGW__=C:\APPS\sbs\win32\mingw</info>
+<info>Environment __PYTHON__=C:\APPS\sbs\win32\python264\python.exe</info>
+<info>Duplicate alias 'make' (the one from 'Y:/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/APPS/sbs/lib/config\make.xml')</info>
+<info>Duplicate alias 'emake' (the one from 'Y:/epoc32/sbs_config\s60_sbs_config.xml' will override the one in 'C:/APPS/sbs/lib/config\make.xml')</info>
+<info>Buildable configuration 'armv5_urel.test'</info>
+<info>Buildable configuration 'armv5_udeb.test'</info>
+<info>System Definition file Y:/output/build/canonical_system_definition_test.xml</info>
+<info>Found 38 bld.inf references in Y:/output/build/canonical_system_definition_test.xml within 22 layers:</info>
+<info>	stubs_layer, complementary_layer, os_layer, tools_layer, bldmefirst_layer, bldmelast_layer, addon_layer, clean_only_layer, bldfirst_mw_layer, api_test_layer, unit_test_layer, perf_test_layer, module_test_layer, qt_unit_test_layer, s60_stubs_layer, s60_complementary_layer, s60_app_layer, s60_mw_layer, s60_osext_layer, s60_bldmefirst_layer, s60_bldmelast_layer, mecevo_layer</info>
+<info>Found 0 bld.inf references in layer "stubs_layer"</info>
+<info>Found 0 bld.inf references in layer "complementary_layer"</info>
+<info>Found 0 bld.inf references in layer "os_layer"</info>
+<info>Found 0 bld.inf references in layer "tools_layer"</info>
+<info>Found 0 bld.inf references in layer "bldmefirst_layer"</info>
+<info>Found 0 bld.inf references in layer "bldmelast_layer"</info>
+<info>Found 0 bld.inf references in layer "addon_layer"</info>
+<info>Found 0 bld.inf references in layer "clean_only_layer"</info>
+<info>Found 0 bld.inf references in layer "bldfirst_mw_layer"</info>
+<info>Found 15 bld.inf references in layer "api_test_layer"</info>
+<info>Found 23 bld.inf references in layer "unit_test_layer"</info>
+<info>Found 0 bld.inf references in layer "perf_test_layer"</info>
+<info>Found 0 bld.inf references in layer "module_test_layer"</info>
+<info>Found 0 bld.inf references in layer "qt_unit_test_layer"</info>
+<info>Found 0 bld.inf references in layer "s60_stubs_layer"</info>
+<info>Found 0 bld.inf references in layer "s60_complementary_layer"</info>
+<info>Found 0 bld.inf references in layer "s60_app_layer"</info>
+<info>Found 0 bld.inf references in layer "s60_mw_layer"</info>
+<info>Found 0 bld.inf references in layer "s60_osext_layer"</info>
+<info>Found 0 bld.inf references in layer "s60_bldmefirst_layer"</info>
+<info>Found 0 bld.inf references in layer "s60_bldmelast_layer"</info>
+<info>Found 0 bld.inf references in layer "mecevo_layer"</info>
+<info>Toolcheck cache Y:/epoc32/build/toolcheck_cache_.tmp ignored - environment changed
+</info>
+<info>no OS variant for the configuration "armv5_urel.test".</info>
+<info>'armv5_urel.test' uses variant hrh file 'Y:/epoc32/include/feature_settings.hrh'</info>
+<info>no OS variant for the configuration "armv5_udeb.test".</info>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tests/data/test-minibuild-sysdef3.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : sysdef3.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:
+
+============================================================================
+-->
+<SystemDefinition schema="3.0.0" id-namespace="http://www.symbian.org/system-definition" xmlns:qt="http://www.nokia.com/qt">
+<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/" qt:proFile="helloworld.pro" />
+</component>
+</collection>
+</package>
+</layer>
+<layer id="mw" name="mw">
+<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/" qt:proFile="helloworldapi.pro" qt:qmakeArgs="-nomoc" />
+</component>
+</collection>
+</package>
+</layer>
+</systemModel>
+</SystemDefinition>
--- a/buildframework/helium/tests/data/test-scanlog_helium_minibuild_ido_input_compile.log	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/data/test-scanlog_helium_minibuild_ido_input_compile.log	Fri Aug 13 14:59:05 2010 +0300
@@ -118,20 +118,20 @@
 <info>OS version "vtb92sf" determined from file "m:/epoc32/data/buildinfo.txt"</info>
 <info>applying the OS variant to the configuration "armv5_udeb".</info>
 <info>'armv5_udeb' uses variant hrh file 'm:/epoc32/include/feature_settings.hrh'</info>
-<info>Processing m:/sf/mw/HelloWorldAPI/group/bld.inf</info>
-<info>Processing m:/sf/app/HelloWorldCons/group/bld.inf</info>
-<info>Copied m:/sf/mw/HelloWorldAPI/inc/HelloWorldAPI.h to m:/epoc32/include/HelloWorldAPI.h</info>
-<info>Copied m:/sf/mw/HelloWorldAPI/rom/HelloWorldAPI.iby to m:/epoc32/rom/include/core/mw/HelloWorldAPI.iby</info>
-<whatlog bldinf='m:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='' config=''>
-<export destination='m:/epoc32/include/HelloWorldAPI.h' source='m:/sf/mw/HelloWorldAPI/inc/HelloWorldAPI.h'/>
-<export destination='m:/epoc32/rom/include/core/mw/HelloWorldAPI.iby' source='m:/sf/mw/HelloWorldAPI/rom/HelloWorldAPI.iby'/>
+<info>Processing m:/sf/mw/helloworldapi/group/bld.inf</info>
+<info>Processing m:/sf/app/helloworldcons/group/bld.inf</info>
+<info>Copied m:/sf/mw/helloworldapi/inc/helloworldapi.h to m:/epoc32/include/helloworldapi.h</info>
+<info>Copied m:/sf/mw/helloworldapi/rom/helloworldapi.iby to m:/epoc32/rom/include/core/mw/helloworldapi.iby</info>
+<whatlog bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='' config=''>
+<export destination='m:/epoc32/include/helloworldapi.h' source='m:/sf/mw/helloworldapi/inc/helloworldapi.h'/>
+<export destination='m:/epoc32/rom/include/core/mw/helloworldapi.iby' source='m:/sf/mw/helloworldapi/rom/helloworldapi.iby'/>
 </whatlog>
-<info>Copied m:/sf/app/HelloWorldCons/rom/helloworldcons.iby to m:/epoc32/rom/include/core/app/helloworldcons.iby</info>
-<whatlog bldinf='m:/sf/app/HelloWorldCons/group/bld.inf' mmp='' config=''>
-<export destination='m:/epoc32/rom/include/core/app/helloworldcons.iby' source='m:/sf/app/HelloWorldCons/rom/helloworldcons.iby'/>
+<info>Copied m:/sf/app/helloworldcons/rom/helloworldcons.iby to m:/epoc32/rom/include/core/app/helloworldcons.iby</info>
+<whatlog bldinf='m:/sf/app/helloworldcons/group/bld.inf' mmp='' config=''>
+<export destination='m:/epoc32/rom/include/core/app/helloworldcons.iby' source='m:/sf/app/helloworldcons/rom/helloworldcons.iby'/>
 </whatlog>
-<info>Processing m:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp for platform armv5_urel + armv5_udeb</info>
-<info>Processing m:/sf/app/HelloWorldCons/group/HelloWorldCons.mmp for platform armv5_urel + armv5_udeb</info>
+<info>Processing m:/sf/mw/helloworldapi/group/helloworldapi.mmp for platform armv5_urel + armv5_udeb</info>
+<info>Processing m:/sf/app/helloworldcons/group/helloworldcons.mmp for platform armv5_urel + armv5_udeb</info>
 <info>Running C:/APPS/sbs/win32/bin/talonctl.exe start</info>
 <info>Making m:/output/logs/compile/minibuild_ido_sbs_0.0.10_armv5_helium_minibuild_ido_all.export</info>
 <info>Executing 'C:/APPS/sbs/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f  "m:/output/logs/compile/minibuild_ido_sbs_0.0.10_armv5_helium_minibuild_ido_all.export"  -k  TALON_DESCRAMBLE=1  2&gt;'m:/output/logs/compile/minibuild_ido_sbs_0.0.10_armv5_helium_minibuild_ido_all.export.stderr' '</info>
@@ -147,185 +147,185 @@
 make: Nothing to_be_done for `RESOURCE'.
 <info>Making m:/output/logs/compile/minibuild_ido_sbs_0.0.10_armv5_helium_minibuild_ido_all.default</info>
 <info>Executing 'C:/APPS/sbs/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f  "m:/output/logs/compile/minibuild_ido_sbs_0.0.10_armv5_helium_minibuild_ido_all.default"  -k  TALON_DESCRAMBLE=1  2&gt;'m:/output/logs/compile/minibuild_ido_sbs_0.0.10_armv5_helium_minibuild_ido_all.default.stderr' '</info>
-<clean bldinf='m:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='m:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel'>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.prep</file>
-<file>m:/epoc32/release/armv5/urel/HelloWorldAPI.dll</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI{000a0000}.def</file>
-<file>"m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI{000a0000}.dso"</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI_urel_objects.via</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.o.d</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPIDllMain.o.d</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.o</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPIDllMain.o</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.o</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPIDllMain.o</file>
+<clean bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel'>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.prep</file>
+<file>m:/epoc32/release/armv5/urel/helloworldapi.dll</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi{000a0000}.def</file>
+<file>"m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi{000a0000}.dso"</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi_urel_objects.via</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.o.d</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapiDllMain.o.d</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.o</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapiDllMain.o</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.o</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapiDllMain.o</file>
 </clean>
-<whatlog bldinf='m:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='m:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel'>
-<build>m:/epoc32/release/armv5/lib/HelloWorldAPI.dso</build>
-<build>m:/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.dso</build>
-<build>m:/epoc32/release/armv5/lib/HelloWorldAPI.lib</build>
-<build>m:/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.lib</build>
-<build>m:/epoc32/release/armv5/urel/HelloWorldAPI.dll</build>
-<build>m:/epoc32/release/armv5/urel/HelloWorldAPI.dll.map</build>
-<build>m:/epoc32/release/armv5/urel/HelloWorldAPI.dll.map</build>
+<whatlog bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel'>
+<build>m:/epoc32/release/armv5/lib/helloworldapi.dso</build>
+<build>m:/epoc32/release/armv5/lib/helloworldapi{000a0000}.dso</build>
+<build>m:/epoc32/release/armv5/lib/helloworldapi.lib</build>
+<build>m:/epoc32/release/armv5/lib/helloworldapi{000a0000}.lib</build>
+<build>m:/epoc32/release/armv5/urel/helloworldapi.dll</build>
+<build>m:/epoc32/release/armv5/urel/helloworldapi.dll.map</build>
+<build>m:/epoc32/release/armv5/urel/helloworldapi.dll.map</build>
 </whatlog>
-<clean bldinf='m:/sf/app/HelloWorldCons/group/bld.inf' mmp='m:/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_urel'>
-<file>m:/epoc32/release/armv5/urel/HelloWorldCons.exe</file>
-<file>m:/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons{000a0000}.def</file>
-<file>"m:/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons{000a0000}.dso"</file>
-<file>m:/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons_urel_objects.via</file>
-<file>m:/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons.o.d</file>
-<file>m:/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons.o</file>
-<file>m:/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons.o</file>
+<clean bldinf='m:/sf/app/helloworldcons/group/bld.inf' mmp='m:/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_urel'>
+<file>m:/epoc32/release/armv5/urel/helloworldcons.exe</file>
+<file>m:/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons{000a0000}.def</file>
+<file>"m:/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons{000a0000}.dso"</file>
+<file>m:/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons_urel_objects.via</file>
+<file>m:/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons.o.d</file>
+<file>m:/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons.o</file>
+<file>m:/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons.o</file>
 </clean>
-<whatlog bldinf='m:/sf/app/HelloWorldCons/group/bld.inf' mmp='m:/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_urel'>
-<build>m:/epoc32/release/armv5/urel/HelloWorldCons.exe</build>
-<build>m:/epoc32/release/armv5/urel/HelloWorldCons.exe.map</build>
-<build>m:/epoc32/release/armv5/urel/HelloWorldCons.exe.map</build>
+<whatlog bldinf='m:/sf/app/helloworldcons/group/bld.inf' mmp='m:/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_urel'>
+<build>m:/epoc32/release/armv5/urel/helloworldcons.exe</build>
+<build>m:/epoc32/release/armv5/urel/helloworldcons.exe.map</build>
+<build>m:/epoc32/release/armv5/urel/helloworldcons.exe.map</build>
 </whatlog>
-<clean bldinf='m:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='m:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_udeb'>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.prep</file>
-<file>m:/epoc32/release/armv5/udeb/HelloWorldAPI.dll</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI{000a0000}.def</file>
-<file>"m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI{000a0000}.dso"</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI_udeb_objects.via</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.o.d</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPIDllMain.o.d</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.o</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPIDllMain.o</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.o</file>
-<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPIDllMain.o</file>
+<clean bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_udeb'>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.prep</file>
+<file>m:/epoc32/release/armv5/udeb/helloworldapi.dll</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi{000a0000}.def</file>
+<file>"m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi{000a0000}.dso"</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi_udeb_objects.via</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.o.d</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapiDllMain.o.d</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.o</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapiDllMain.o</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.o</file>
+<file>m:/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapiDllMain.o</file>
 </clean>
-<whatlog bldinf='m:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='m:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_udeb'>
-<build>m:/epoc32/release/armv5/lib/HelloWorldAPI.dso</build>
-<build>m:/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.dso</build>
-<build>m:/epoc32/release/armv5/lib/HelloWorldAPI.lib</build>
-<build>c:/invalid/sdk/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.lib</build>
-<build>c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldAPI.dll</build>
-<build>c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldAPI.dll.map</build>
-<build>c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldAPI.dll.map</build>
+<whatlog bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_udeb'>
+<build>m:/epoc32/release/armv5/lib/helloworldapi.dso</build>
+<build>m:/epoc32/release/armv5/lib/helloworldapi{000a0000}.dso</build>
+<build>m:/epoc32/release/armv5/lib/helloworldapi.lib</build>
+<build>c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi{000a0000}.lib</build>
+<build>c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldapi.dll</build>
+<build>c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldapi.dll.map</build>
+<build>c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldapi.dll.map</build>
 </whatlog>
-<clean bldinf='c:/sf/app/HelloWorldCons/group/bld.inf' mmp='c:/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_udeb'>
-<file>c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldCons.exe</file>
-<file>c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons{000a0000}.def</file>
-<file>"c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons{000a0000}.dso"</file>
-<file>c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons_udeb_objects.via</file>
-<file>c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons.o.d</file>
-<file>c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons.o</file>
-<file>c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons.o</file>
+<clean bldinf='m:/sf/app/helloworldcons/group/bld.inf' mmp='m:/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_udeb'>
+<file>c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldcons.exe</file>
+<file>c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons{000a0000}.def</file>
+<file>"c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons{000a0000}.dso"</file>
+<file>c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons_udeb_objects.via</file>
+<file>c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons.o.d</file>
+<file>c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons.o</file>
+<file>c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons.o</file>
 </clean>
-<whatlog bldinf='c:/sf/app/HelloWorldCons/group/bld.inf' mmp='c:/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_udeb'>
-<build>c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldCons.exe</build>
-<build>c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldCons.exe.map</build>
-<build>c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldCons.exe.map</build>
+<whatlog bldinf='m:/sf/app/helloworldcons/group/bld.inf' mmp='m:/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_udeb'>
+<build>c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldcons.exe</build>
+<build>c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldcons.exe.map</build>
+<build>c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldcons.exe.map</build>
 </whatlog>
-<recipe name='importlibtarget_prepfile' target='c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.prep' host='trwec089' layer='mw_layer' component='' bldinf='c:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='c:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='importlibtarget_prepfile' target='c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.prep' host='trwec089' layer='mw_layer' component='' bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ perl.exe c:/invalid/sdk/epoc32/tools/prepdef.pl c:/sf/mw/HelloWorldAPI/eabi/HelloWorldAPI.def c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.prep
++ perl.exe c:/invalid/sdk/epoc32/tools/prepdef.pl c:/sf/mw/helloworldapi/eabi/helloworldapi.def c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.prep
 
 ]]><time start='1269459946.07847' elapsed='0.172' />
 <status exit='ok' attempt='1' flags='FORCESUCCESS' />
 </recipe>
-<recipe name='importlibversioned' target='c:/invalid/sdk/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.dso' host='trwec089' layer='mw_layer' component='' bldinf='c:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='c:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='importlibversioned' target='c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi{000a0000}.dso' host='trwec089' layer='mw_layer' component='' bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ c:/invalid/sdk/epoc32/tools/elf2e32.exe --sid=0x06693702 --version=10.0 --definput=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.prep '--dso=c:/invalid/sdk/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.dso' '--linkas=HelloWorldAPI{000a0000}[06693702].dll'
++ c:/invalid/sdk/epoc32/tools/elf2e32.exe --sid=0x06693702 --version=10.0 --definput=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.prep '--dso=c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi{000a0000}.dso' '--linkas=helloworldapi{000a0000}[06693702].dll'
 
 ]]><time start='1269459946.25033' elapsed='0.094' />
 <status exit='ok' attempt='1' flags='FORCESUCCESS' />
 </recipe>
-<recipe name='importlibtarget' target='c:/invalid/sdk/epoc32/release/armv5/lib/HelloWorldAPI.dso' host='trwec089' layer='mw_layer' component='' bldinf='c:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='c:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='importlibtarget' target='c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi.dso' host='trwec089' layer='mw_layer' component='' bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ C:/APPS/sbs/win32/cygwin/bin/cp.exe 'c:/invalid/sdk/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.dso' c:/invalid/sdk/epoc32/release/armv5/lib/HelloWorldAPI.dso
++ C:/APPS/sbs/win32/cygwin/bin/cp.exe 'c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi{000a0000}.dso' c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi.dso
 
 ]]><time start='1269459946.35970' elapsed='0.125' />
 <status exit='ok' attempt='1' flags='FORCESUCCESS' />
 </recipe>
-<recipe name='importlibversioned_abiv1' target='c:/invalid/sdk/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.lib' host='trwec089' layer='mw_layer' component='' bldinf='c:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='c:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='importlibversioned_abiv1' target='c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi{000a0000}.lib' host='trwec089' layer='mw_layer' component='' bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ '[' -f c:/invalid/sdk/epoc32/tools/def2dll.pl -a -f c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.prep ']'
-+ perl.exe c:/invalid/sdk/epoc32/tools/def2dll.pl --path=c:/invalid/sdk/epoc32/release/armv5/lib --bldpath=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel '--import=HelloWorldAPI{000a0000}' --deffile=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.prep '--linkAs=HelloWorldAPI{000a0000}[06693702].dll' --inter
++ '[' -f c:/invalid/sdk/epoc32/tools/def2dll.pl -a -f c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.prep ']'
++ perl.exe c:/invalid/sdk/epoc32/tools/def2dll.pl --path=c:/invalid/sdk/epoc32/release/armv5/lib --bldpath=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel '--import=helloworldapi{000a0000}' --deffile=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.prep '--linkAs=helloworldapi{000a0000}[06693702].dll' --inter
 
 ]]><time start='1269459946.51595' elapsed='0.547' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='importlibtarget_abiv1' target='c:/invalid/sdk/epoc32/release/armv5/lib/HelloWorldAPI.lib' host='trwec089' layer='mw_layer' component='' bldinf='c:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='c:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='importlibtarget_abiv1' target='c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi.lib' host='trwec089' layer='mw_layer' component='' bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
 + '[' -f c:/invalid/sdk/epoc32/tools/def2dll.pl ']'
-+ C:/APPS/sbs/win32/cygwin/bin/cp.exe 'c:/invalid/sdk/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.lib' c:/invalid/sdk/epoc32/release/armv5/lib/HelloWorldAPI.lib
++ C:/APPS/sbs/win32/cygwin/bin/cp.exe 'c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi{000a0000}.lib' c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi.lib
 
 ]]><time start='1269459947.10968' elapsed='0.141' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='compile' target='c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.o' host='trwec089' layer='mw_layer' component='' bldinf='c:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='c:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='c:/sf/mw/HelloWorldAPI/src/HelloWorldAPI.cpp'>
+<recipe name='compile' target='c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.o' host='trwec089' layer='mw_layer' component='' bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='c:/sf/mw/helloworldapi/src/helloworldapi.cpp'>
 <![CDATA[
-+ C:/APPS/rvct22_686/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -DNDEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="c:/invalid/sdk/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude c:/invalid/sdk/epoc32/include/rvct/rvct.h -Jc:/sf/mw/HelloWorldAPI/src -Jc:/sf/mw/HelloWorldAPI/inc -Jc:/invalid/sdk/epoc32/include -Jc:/invalid/sdk/epoc32/include --depend_format=unix --depend c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.o.d -o c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.o c:/sf/mw/HelloWorldAPI/src/HelloWorldAPI.cpp
++ C:/APPS/rvct22_686/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -DNDEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="c:/invalid/sdk/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude c:/invalid/sdk/epoc32/include/rvct/rvct.h -Jc:/sf/mw/helloworldapi/src -Jc:/sf/mw/helloworldapi/inc -Jc:/invalid/sdk/epoc32/include -Jc:/invalid/sdk/epoc32/include --depend_format=unix --depend c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.o.d -o c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.o c:/sf/mw/helloworldapi/src/helloworldapi.cpp
 
 ]]><time start='1269459947.32842' elapsed='0.766' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='compile' target='c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPIDllMain.o' host='trwec089' layer='mw_layer' component='' bldinf='c:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='c:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='c:/sf/mw/HelloWorldAPI/src/HelloWorldAPIDllMain.cpp'>
+<recipe name='compile' target='c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapiDllMain.o' host='trwec089' layer='mw_layer' component='' bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='c:/sf/mw/helloworldapi/src/helloworldapiDllMain.cpp'>
 <![CDATA[
-+ C:/APPS/rvct22_686/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -DNDEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="c:/invalid/sdk/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude c:/invalid/sdk/epoc32/include/rvct/rvct.h -Jc:/sf/mw/HelloWorldAPI/src -Jc:/sf/mw/HelloWorldAPI/inc -Jc:/invalid/sdk/epoc32/include -Jc:/invalid/sdk/epoc32/include --depend_format=unix --depend c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPIDllMain.o.d -o c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPIDllMain.o c:/sf/mw/HelloWorldAPI/src/HelloWorldAPIDllMain.cpp
++ C:/APPS/rvct22_686/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -DNDEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="c:/invalid/sdk/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude c:/invalid/sdk/epoc32/include/rvct/rvct.h -Jc:/sf/mw/helloworldapi/src -Jc:/sf/mw/helloworldapi/inc -Jc:/invalid/sdk/epoc32/include -Jc:/invalid/sdk/epoc32/include --depend_format=unix --depend c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapiDllMain.o.d -o c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapiDllMain.o c:/sf/mw/helloworldapi/src/helloworldapiDllMain.cpp
 
 ]]><time start='1269459948.10964' elapsed='0.328' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='linkandpostlink' target='c:/invalid/sdk/epoc32/release/armv5/urel/HelloWorldAPI.dll' host='trwec089' layer='mw_layer' component='' bldinf='c:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='c:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='linkandpostlink' target='c:/invalid/sdk/epoc32/release/armv5/urel/helloworldapi.dll' host='trwec089' layer='mw_layer' component='' bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ C:/APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --dll --split --rw-base 0x400000 --symver_soname '--soname=HelloWorldAPI{000a0000}[06693702].dll' --entry=_E32Dll 'c:/invalid/sdk/epoc32/release/armv5/urel/edll.lib(uc_dll_.o)' -o c:/invalid/sdk/epoc32/release/armv5/urel/HelloWorldAPI.dll.sym --symbols --list=c:/invalid/sdk/epoc32/release/armv5/urel/HelloWorldAPI.dll.map --via c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI_urel_objects.via c:/invalid/sdk/epoc32/release/armv5/urel/edllstub.lib c:/invalid/sdk/epoc32/release/armv5/urel/usrt2_2.lib c:/invalid/sdk/epoc32/release/armv5/lib/euser.dso c:/invalid/sdk/epoc32/release/armv5/lib/scppnwdl.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfpaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfprvct2_2.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtrvct2_2.dso 'C:/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
-+ c:/invalid/sdk/epoc32/tools/elf2e32.exe --sid=0x06693702 --version=10.0 --capability=NONE '--linkas=HelloWorldAPI{000a0000}[06693702].dll' --fpu=softvfp --targettype=DLL --output=c:/invalid/sdk/epoc32/release/armv5/urel/HelloWorldAPI.dll --elfinput=c:/invalid/sdk/epoc32/release/armv5/urel/HelloWorldAPI.dll.sym --uid1=0x10000079 --uid2=0x1000008d --uid3=0x06693702 --definput=c:/sf/mw/HelloWorldAPI/eabi/HelloWorldAPI.def '--defoutput=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI{000a0000}.def' '--dso=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI{000a0000}.dso' --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=c:/invalid/sdk/epoc32/release/armv5/lib/;C:/APPS/rvct22_686/lib/armlib'
++ C:/APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --dll --split --rw-base 0x400000 --symver_soname '--soname=helloworldapi{000a0000}[06693702].dll' --entry=_E32Dll 'c:/invalid/sdk/epoc32/release/armv5/urel/edll.lib(uc_dll_.o)' -o c:/invalid/sdk/epoc32/release/armv5/urel/helloworldapi.dll.sym --symbols --list=c:/invalid/sdk/epoc32/release/armv5/urel/helloworldapi.dll.map --via c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi_urel_objects.via c:/invalid/sdk/epoc32/release/armv5/urel/edllstub.lib c:/invalid/sdk/epoc32/release/armv5/urel/usrt2_2.lib c:/invalid/sdk/epoc32/release/armv5/lib/euser.dso c:/invalid/sdk/epoc32/release/armv5/lib/scppnwdl.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfpaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfprvct2_2.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtrvct2_2.dso 'C:/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
++ c:/invalid/sdk/epoc32/tools/elf2e32.exe --sid=0x06693702 --version=10.0 --capability=NONE '--linkas=helloworldapi{000a0000}[06693702].dll' --fpu=softvfp --targettype=DLL --output=c:/invalid/sdk/epoc32/release/armv5/urel/helloworldapi.dll --elfinput=c:/invalid/sdk/epoc32/release/armv5/urel/helloworldapi.dll.sym --uid1=0x10000079 --uid2=0x1000008d --uid3=0x06693702 --definput=c:/sf/mw/helloworldapi/eabi/helloworldapi.def '--defoutput=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi{000a0000}.def' '--dso=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi{000a0000}.dso' --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=c:/invalid/sdk/epoc32/release/armv5/lib/;C:/APPS/rvct22_686/lib/armlib'
 
 ]]><time start='1269459948.64087' elapsed='0.266' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='compile' target='c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons.o' host='trwec089' layer='app_layer' component='' bldinf='c:/sf/app/HelloWorldCons/group/bld.inf' mmp='c:/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='c:/sf/app/HelloWorldCons/src/HelloWorldCons.cpp'>
+<recipe name='compile' target='c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons.o' host='trwec089' layer='app_layer' component='' bldinf='m:/sf/app/helloworldcons/group/bld.inf' mmp='m:/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='m:/sf/app/helloworldcons/src/helloworldcons.cpp'>
 <![CDATA[
-+ C:/APPS/rvct22_686/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -DNDEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="c:/invalid/sdk/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__EXE__ --preinclude c:/invalid/sdk/epoc32/include/rvct/rvct.h -Jc:/sf/app/HelloWorldCons/src -Jc:/sf/app/HelloWorldCons/inc -Jc:/invalid/sdk/epoc32/include -Jc:/invalid/sdk/epoc32/include --depend_format=unix --depend c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons.o.d -o c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons.o c:/sf/app/HelloWorldCons/src/HelloWorldCons.cpp
++ C:/APPS/rvct22_686/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -DNDEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="c:/invalid/sdk/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__EXE__ --preinclude c:/invalid/sdk/epoc32/include/rvct/rvct.h -Jm:/sf/app/helloworldcons/src -Jm:/sf/app/helloworldcons/inc -Jc:/invalid/sdk/epoc32/include -Jc:/invalid/sdk/epoc32/include --depend_format=unix --depend c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons.o.d -o c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons.o m:/sf/app/helloworldcons/src/helloworldcons.cpp
 
 ]]><time start='1269459948.96898' elapsed='0.391' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='linkandpostlink' target='c:/invalid/sdk/epoc32/release/armv5/urel/HelloWorldCons.exe' host='trwec089' layer='app_layer' component='' bldinf='c:/sf/app/HelloWorldCons/group/bld.inf' mmp='c:/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='linkandpostlink' target='c:/invalid/sdk/epoc32/release/armv5/urel/helloworldcons.exe' host='trwec089' layer='app_layer' component='' bldinf='m:/sf/app/helloworldcons/group/bld.inf' mmp='m:/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ C:/APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --dll --split --rw-base 0x400000 --symver_soname '--soname=HelloWorldCons{000a0000}[ed4525d1].exe' --entry=_E32Startup 'c:/invalid/sdk/epoc32/release/armv5/urel/eexe.lib(uc_exe_.o)' -o c:/invalid/sdk/epoc32/release/armv5/urel/HelloWorldCons.exe.sym --symbols --list=c:/invalid/sdk/epoc32/release/armv5/urel/HelloWorldCons.exe.map --via c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons_urel_objects.via c:/invalid/sdk/epoc32/release/armv5/urel/usrt2_2.lib c:/invalid/sdk/epoc32/release/armv5/lib/euser.dso c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi.dso c:/invalid/sdk/epoc32/release/armv5/lib/scppnwdl.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfpaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfprvct2_2.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtrvct2_2.dso 'C:/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
-+ c:/invalid/sdk/epoc32/tools/elf2e32.exe --sid=0xed4525d1 --version=10.0 --capability=NONE '--linkas=HelloWorldCons{000a0000}[ed4525d1].exe' --fpu=softvfp --targettype=EXE --output=c:/invalid/sdk/epoc32/release/armv5/urel/HelloWorldCons.exe --elfinput=c:/invalid/sdk/epoc32/release/armv5/urel/HelloWorldCons.exe.sym --uid1=0x1000007a --uid2=0x00000000 --uid3=0xed4525d1 --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=c:/invalid/sdk/epoc32/release/armv5/lib/;C:/APPS/rvct22_686/lib/armlib'
++ C:/APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --dll --split --rw-base 0x400000 --symver_soname '--soname=helloworldcons{000a0000}[ed4525d1].exe' --entry=_E32Startup 'c:/invalid/sdk/epoc32/release/armv5/urel/eexe.lib(uc_exe_.o)' -o c:/invalid/sdk/epoc32/release/armv5/urel/helloworldcons.exe.sym --symbols --list=c:/invalid/sdk/epoc32/release/armv5/urel/helloworldcons.exe.map --via c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons_urel_objects.via c:/invalid/sdk/epoc32/release/armv5/urel/usrt2_2.lib c:/invalid/sdk/epoc32/release/armv5/lib/euser.dso c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi.dso c:/invalid/sdk/epoc32/release/armv5/lib/scppnwdl.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfpaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfprvct2_2.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtrvct2_2.dso 'C:/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
++ c:/invalid/sdk/epoc32/tools/elf2e32.exe --sid=0xed4525d1 --version=10.0 --capability=NONE '--linkas=helloworldcons{000a0000}[ed4525d1].exe' --fpu=softvfp --targettype=EXE --output=c:/invalid/sdk/epoc32/release/armv5/urel/helloworldcons.exe --elfinput=c:/invalid/sdk/epoc32/release/armv5/urel/helloworldcons.exe.sym --uid1=0x1000007a --uid2=0x00000000 --uid3=0xed4525d1 --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=c:/invalid/sdk/epoc32/release/armv5/lib/;C:/APPS/rvct22_686/lib/armlib'
 
 ]]><time start='1269459949.54708' elapsed='0.281' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='compile' target='c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.o' host='trwec089' layer='mw_layer' component='' bldinf='c:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='c:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='c:/sf/mw/HelloWorldAPI/src/HelloWorldAPI.cpp'>
+<recipe name='compile' target='c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.o' host='trwec089' layer='mw_layer' component='' bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='c:/sf/mw/helloworldapi/src/helloworldapi.cpp'>
 <![CDATA[
-+ C:/APPS/rvct22_686/bin/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D_DEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="c:/invalid/sdk/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude c:/invalid/sdk/epoc32/include/rvct/rvct.h -Jc:/sf/mw/HelloWorldAPI/src -Jc:/sf/mw/HelloWorldAPI/inc -Jc:/invalid/sdk/epoc32/include -Jc:/invalid/sdk/epoc32/include --depend_format=unix --depend c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.o.d -o c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.o c:/sf/mw/HelloWorldAPI/src/HelloWorldAPI.cpp
++ C:/APPS/rvct22_686/bin/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D_DEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="c:/invalid/sdk/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude c:/invalid/sdk/epoc32/include/rvct/rvct.h -Jc:/sf/mw/helloworldapi/src -Jc:/sf/mw/helloworldapi/inc -Jc:/invalid/sdk/epoc32/include -Jc:/invalid/sdk/epoc32/include --depend_format=unix --depend c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.o.d -o c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.o c:/sf/mw/helloworldapi/src/helloworldapi.cpp
 
 ]]><time start='1269459949.90644' elapsed='0.500' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='compile' target='c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPIDllMain.o' host='trwec089' layer='mw_layer' component='' bldinf='c:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='c:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='c:/sf/mw/HelloWorldAPI/src/HelloWorldAPIDllMain.cpp'>
+<recipe name='compile' target='c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapiDllMain.o' host='trwec089' layer='mw_layer' component='' bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='c:/sf/mw/helloworldapi/src/helloworldapiDllMain.cpp'>
 <![CDATA[
-+ C:/APPS/rvct22_686/bin/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D_DEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="c:/invalid/sdk/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude c:/invalid/sdk/epoc32/include/rvct/rvct.h -Jc:/sf/mw/HelloWorldAPI/src -Jc:/sf/mw/HelloWorldAPI/inc -Jc:/invalid/sdk/epoc32/include -Jc:/invalid/sdk/epoc32/include --depend_format=unix --depend c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPIDllMain.o.d -o c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPIDllMain.o c:/sf/mw/HelloWorldAPI/src/HelloWorldAPIDllMain.cpp
++ C:/APPS/rvct22_686/bin/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D_DEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="c:/invalid/sdk/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude c:/invalid/sdk/epoc32/include/rvct/rvct.h -Jc:/sf/mw/helloworldapi/src -Jc:/sf/mw/helloworldapi/inc -Jc:/invalid/sdk/epoc32/include -Jc:/invalid/sdk/epoc32/include --depend_format=unix --depend c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapiDllMain.o.d -o c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapiDllMain.o c:/sf/mw/helloworldapi/src/helloworldapiDllMain.cpp
 
 ]]><time start='1269459950.42205' elapsed='0.437' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='linkandpostlink' target='c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldAPI.dll' host='trwec089' layer='mw_layer' component='' bldinf='c:/sf/mw/HelloWorldAPI/group/bld.inf' mmp='c:/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
+<recipe name='linkandpostlink' target='c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldapi.dll' host='trwec089' layer='mw_layer' component='' bldinf='m:/sf/mw/helloworldapi/group/bld.inf' mmp='m:/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ C:/APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --debug --dll --split --rw-base 0x400000 --symver_soname '--soname=HelloWorldAPI{000a0000}[06693702].dll' --entry=_E32Dll 'c:/invalid/sdk/epoc32/release/armv5/udeb/edll.lib(uc_dll_.o)' -o c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldAPI.dll.sym --symbols --list=c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldAPI.dll.map --via c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI_udeb_objects.via c:/invalid/sdk/epoc32/release/armv5/udeb/edllstub.lib c:/invalid/sdk/epoc32/release/armv5/udeb/usrt2_2.lib c:/invalid/sdk/epoc32/release/armv5/lib/euser.dso c:/invalid/sdk/epoc32/release/armv5/lib/scppnwdl.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfpaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfprvct2_2.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtrvct2_2.dso 'C:/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
-+ c:/invalid/sdk/epoc32/tools/elf2e32.exe --sid=0x06693702 --version=10.0 --capability=NONE '--linkas=HelloWorldAPI{000a0000}[06693702].dll' --fpu=softvfp --targettype=DLL --output=c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldAPI.dll --elfinput=c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldAPI.dll.sym --uid1=0x10000079 --uid2=0x1000008d --uid3=0x06693702 --definput=c:/sf/mw/HelloWorldAPI/eabi/HelloWorldAPI.def '--defoutput=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI{000a0000}.def' '--dso=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI{000a0000}.dso' --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=c:/invalid/sdk/epoc32/release/armv5/lib/;C:/APPS/rvct22_686/lib/armlib'
++ C:/APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --debug --dll --split --rw-base 0x400000 --symver_soname '--soname=helloworldapi{000a0000}[06693702].dll' --entry=_E32Dll 'c:/invalid/sdk/epoc32/release/armv5/udeb/edll.lib(uc_dll_.o)' -o c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldapi.dll.sym --symbols --list=c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldapi.dll.map --via c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi_udeb_objects.via c:/invalid/sdk/epoc32/release/armv5/udeb/edllstub.lib c:/invalid/sdk/epoc32/release/armv5/udeb/usrt2_2.lib c:/invalid/sdk/epoc32/release/armv5/lib/euser.dso c:/invalid/sdk/epoc32/release/armv5/lib/scppnwdl.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfpaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfprvct2_2.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtrvct2_2.dso 'C:/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
++ c:/invalid/sdk/epoc32/tools/elf2e32.exe --sid=0x06693702 --version=10.0 --capability=NONE '--linkas=helloworldapi{000a0000}[06693702].dll' --fpu=softvfp --targettype=DLL --output=c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldapi.dll --elfinput=c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldapi.dll.sym --uid1=0x10000079 --uid2=0x1000008d --uid3=0x06693702 --definput=c:/sf/mw/helloworldapi/eabi/helloworldapi.def '--defoutput=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi{000a0000}.def' '--dso=c:/invalid/sdk/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi{000a0000}.dso' --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=c:/invalid/sdk/epoc32/release/armv5/lib/;C:/APPS/rvct22_686/lib/armlib'
 
 ]]><time start='1269459951.04702' elapsed='0.375' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='compile' target='c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons.o' host='trwec089' layer='app_layer' component='' bldinf='c:/sf/app/HelloWorldCons/group/bld.inf' mmp='c:/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='c:/sf/app/HelloWorldCons/src/HelloWorldCons.cpp'>
+<recipe name='compile' target='c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons.o' host='trwec089' layer='app_layer' component='' bldinf='m:/sf/app/helloworldcons/group/bld.inf' mmp='m:/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='m:/sf/app/helloworldcons/src/helloworldcons.cpp'>
 <![CDATA[
-+ C:/APPS/rvct22_686/bin/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D_DEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="c:/invalid/sdk/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__EXE__ --preinclude c:/invalid/sdk/epoc32/include/rvct/rvct.h -Jc:/sf/app/HelloWorldCons/src -Jc:/sf/app/HelloWorldCons/inc -Jc:/invalid/sdk/epoc32/include -Jc:/invalid/sdk/epoc32/include --depend_format=unix --depend c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons.o.d -o c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons.o c:/sf/app/HelloWorldCons/src/HelloWorldCons.cpp
++ C:/APPS/rvct22_686/bin/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D_DEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="c:/invalid/sdk/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__EXE__ --preinclude c:/invalid/sdk/epoc32/include/rvct/rvct.h -Jm:/sf/app/helloworldcons/src -Jm:/sf/app/helloworldcons/inc -Jc:/invalid/sdk/epoc32/include -Jc:/invalid/sdk/epoc32/include --depend_format=unix --depend c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons.o.d -o c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons.o m:/sf/app/helloworldcons/src/helloworldcons.cpp
 
 ]]><time start='1269459951.48451' elapsed='0.516' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='linkandpostlink' target='c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldCons.exe' host='trwec089' layer='app_layer' component='' bldinf='c:/sf/app/HelloWorldCons/group/bld.inf' mmp='c:/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
+<recipe name='linkandpostlink' target='c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldcons.exe' host='trwec089' layer='app_layer' component='' bldinf='m:/sf/app/helloworldcons/group/bld.inf' mmp='m:/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ C:/APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --debug --dll --split --rw-base 0x400000 --symver_soname '--soname=HelloWorldCons{000a0000}[ed4525d1].exe' --entry=_E32Startup 'c:/invalid/sdk/epoc32/release/armv5/udeb/eexe.lib(uc_exe_.o)' -o c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldCons.exe.sym --symbols --list=c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldCons.exe.map --via c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons_udeb_objects.via c:/invalid/sdk/epoc32/release/armv5/udeb/usrt2_2.lib c:/invalid/sdk/epoc32/release/armv5/lib/euser.dso c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi.dso c:/invalid/sdk/epoc32/release/armv5/lib/scppnwdl.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfpaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfprvct2_2.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtrvct2_2.dso 'C:/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
-+ c:/invalid/sdk/epoc32/tools/elf2e32.exe --sid=0xed4525d1 --version=10.0 --capability=NONE '--linkas=HelloWorldCons{000a0000}[ed4525d1].exe' --fpu=softvfp --targettype=EXE --output=c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldCons.exe --elfinput=c:/invalid/sdk/epoc32/release/armv5/udeb/HelloWorldCons.exe.sym --uid1=0x1000007a --uid2=0x00000000 --uid3=0xed4525d1 --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=c:/invalid/sdk/epoc32/release/armv5/lib/;C:/APPS/rvct22_686/lib/armlib'
++ C:/APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --debug --dll --split --rw-base 0x400000 --symver_soname '--soname=helloworldcons{000a0000}[ed4525d1].exe' --entry=_E32Startup 'c:/invalid/sdk/epoc32/release/armv5/udeb/eexe.lib(uc_exe_.o)' -o c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldcons.exe.sym --symbols --list=c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldcons.exe.map --via c:/invalid/sdk/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons_udeb_objects.via c:/invalid/sdk/epoc32/release/armv5/udeb/usrt2_2.lib c:/invalid/sdk/epoc32/release/armv5/lib/euser.dso c:/invalid/sdk/epoc32/release/armv5/lib/helloworldapi.dso c:/invalid/sdk/epoc32/release/armv5/lib/scppnwdl.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfpaeabi.dso c:/invalid/sdk/epoc32/release/armv5/lib/dfprvct2_2.dso c:/invalid/sdk/epoc32/release/armv5/lib/drtrvct2_2.dso 'C:/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
++ c:/invalid/sdk/epoc32/tools/elf2e32.exe --sid=0xed4525d1 --version=10.0 --capability=NONE '--linkas=helloworldcons{000a0000}[ed4525d1].exe' --fpu=softvfp --targettype=EXE --output=c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldcons.exe --elfinput=c:/invalid/sdk/epoc32/release/armv5/udeb/helloworldcons.exe.sym --uid1=0x1000007a --uid2=0x00000000 --uid3=0xed4525d1 --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=c:/invalid/sdk/epoc32/release/armv5/lib/;C:/APPS/rvct22_686/lib/armlib'
 
 ]]><time start='1269459952.18761' elapsed='0.391' />
 <status exit='ok' attempt='1' />
--- a/buildframework/helium/tests/data/test-scanlog_linux_helium_minibuild_ido_input_compile.log	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/data/test-scanlog_linux_helium_minibuild_ido_input_compile.log	Fri Aug 13 14:59:05 2010 +0300
@@ -118,20 +118,20 @@
 <info>OS version "vtb92sf" determined from file "/invalid/location/epoc32/data/buildinfo.txt"</info>
 <info>applying the OS variant to the configuration "armv5_udeb".</info>
 <info>'armv5_udeb' uses variant hrh file '/invalid/location/epoc32/include/feature_settings.hrh'</info>
-<info>Processing /sf/mw/HelloWorldAPI/group/bld.inf</info>
-<info>Processing /sf/app/HelloWorldCons/group/bld.inf</info>
-<info>Copied /sf/mw/HelloWorldAPI/inc/HelloWorldAPI.h to /invalid/location/epoc32/include/HelloWorldAPI.h</info>
-<info>Copied /sf/mw/HelloWorldAPI/rom/HelloWorldAPI.iby to /invalid/location/epoc32/rom/include/core/mw/HelloWorldAPI.iby</info>
-<whatlog bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='' config=''>
-<export destination='/invalid/location/epoc32/include/HelloWorldAPI.h' source='/sf/mw/HelloWorldAPI/inc/HelloWorldAPI.h'/>
-<export destination='/invalid/location/epoc32/rom/include/core/mw/HelloWorldAPI.iby' source='/sf/mw/HelloWorldAPI/rom/HelloWorldAPI.iby'/>
+<info>Processing /sf/mw/helloworldapi/group/bld.inf</info>
+<info>Processing /sf/app/helloworldcons/group/bld.inf</info>
+<info>Copied /sf/mw/helloworldapi/inc/helloworldapi.h to /invalid/location/epoc32/include/helloworldapi.h</info>
+<info>Copied /sf/mw/helloworldapi/rom/helloworldapi.iby to /invalid/location/epoc32/rom/include/core/mw/helloworldapi.iby</info>
+<whatlog bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='' config=''>
+<export destination='/invalid/location/epoc32/include/helloworldapi.h' source='/sf/mw/helloworldapi/inc/helloworldapi.h'/>
+<export destination='/invalid/location/epoc32/rom/include/core/mw/helloworldapi.iby' source='/sf/mw/helloworldapi/rom/helloworldapi.iby'/>
 </whatlog>
-<info>Copied /sf/app/HelloWorldCons/rom/helloworldcons.iby to /invalid/location/epoc32/rom/include/core/app/helloworldcons.iby</info>
-<whatlog bldinf='/sf/app/HelloWorldCons/group/bld.inf' mmp='' config=''>
-<export destination='/invalid/location/epoc32/rom/include/core/app/helloworldcons.iby' source='/sf/app/HelloWorldCons/rom/helloworldcons.iby'/>
+<info>Copied /sf/app/helloworldcons/rom/helloworldcons.iby to /invalid/location/epoc32/rom/include/core/app/helloworldcons.iby</info>
+<whatlog bldinf='/sf/app/helloworldcons/group/bld.inf' mmp='' config=''>
+<export destination='/invalid/location/epoc32/rom/include/core/app/helloworldcons.iby' source='/sf/app/helloworldcons/rom/helloworldcons.iby'/>
 </whatlog>
-<info>Processing /sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp for platform armv5_urel + armv5_udeb</info>
-<info>Processing /sf/app/HelloWorldCons/group/HelloWorldCons.mmp for platform armv5_urel + armv5_udeb</info>
+<info>Processing /sf/mw/helloworldapi/group/helloworldapi.mmp for platform armv5_urel + armv5_udeb</info>
+<info>Processing /sf/app/helloworldcons/group/helloworldcons.mmp for platform armv5_urel + armv5_udeb</info>
 <info>Running /APPS/sbs/win32/bin/talonctl.exe start</info>
 <info>Making /output/logs/compile/minibuild_ido_sbs_0.0.10_armv5_helium_minibuild_ido_all.export</info>
 <info>Executing '/APPS/sbs/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f  "/output/logs/compile/minibuild_ido_sbs_0.0.10_armv5_helium_minibuild_ido_all.export"  -k  TALON_DESCRAMBLE=1  2&gt;'/output/logs/compile/minibuild_ido_sbs_0.0.10_armv5_helium_minibuild_ido_all.export.stderr' '</info>
@@ -147,185 +147,185 @@
 make: Nothing_to_be_done for `RESOURCE'.
 <info>Making /output/logs/compile/minibuild_ido_sbs_0.0.10_armv5_helium_minibuild_ido_all.default</info>
 <info>Executing '/APPS/sbs/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f  "/output/logs/compile/minibuild_ido_sbs_0.0.10_armv5_helium_minibuild_ido_all.default"  -k  TALON_DESCRAMBLE=1  2&gt;'/output/logs/compile/minibuild_ido_sbs_0.0.10_armv5_helium_minibuild_ido_all.default.stderr' '</info>
-<clean bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel'>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.prep</file>
-<file>/invalid/location/epoc32/release/armv5/urel/HelloWorldAPI.dll</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI{000a0000}.def</file>
-<file>"/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI{000a0000}.dso"</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI_urel_objects.via</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.o.d</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPIDllMain.o.d</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.o</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPIDllMain.o</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.o</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPIDllMain.o</file>
+<clean bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel'>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.prep</file>
+<file>/invalid/location/epoc32/release/armv5/urel/helloworldapi.dll</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi{000a0000}.def</file>
+<file>"/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi{000a0000}.dso"</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi_urel_objects.via</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.o.d</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapiDllMain.o.d</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.o</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapiDllMain.o</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.o</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapiDllMain.o</file>
 </clean>
-<whatlog bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel'>
-<build>/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI.dso</build>
-<build>/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.dso</build>
-<build>/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI.lib</build>
-<build>/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.lib</build>
-<build>/invalid/location/epoc32/release/armv5/urel/HelloWorldAPI.dll</build>
-<build>/invalid/location/epoc32/release/armv5/urel/HelloWorldAPI.dll.map</build>
-<build>/invalid/location/epoc32/release/armv5/urel/HelloWorldAPI.dll.map</build>
+<whatlog bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel'>
+<build>/invalid/location/epoc32/release/armv5/lib/helloworldapi.dso</build>
+<build>/invalid/location/epoc32/release/armv5/lib/helloworldapi{000a0000}.dso</build>
+<build>/invalid/location/epoc32/release/armv5/lib/helloworldapi.lib</build>
+<build>/invalid/location/epoc32/release/armv5/lib/helloworldapi{000a0000}.lib</build>
+<build>/invalid/location/epoc32/release/armv5/urel/helloworldapi.dll</build>
+<build>/invalid/location/epoc32/release/armv5/urel/helloworldapi.dll.map</build>
+<build>/invalid/location/epoc32/release/armv5/urel/helloworldapi.dll.map</build>
 </whatlog>
-<clean bldinf='/sf/app/HelloWorldCons/group/bld.inf' mmp='/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_urel'>
-<file>/invalid/location/epoc32/release/armv5/urel/HelloWorldCons.exe</file>
-<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons{000a0000}.def</file>
-<file>"/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons{000a0000}.dso"</file>
-<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons_urel_objects.via</file>
-<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons.o.d</file>
-<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons.o</file>
-<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons.o</file>
+<clean bldinf='/sf/app/helloworldcons/group/bld.inf' mmp='/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_urel'>
+<file>/invalid/location/epoc32/release/armv5/urel/helloworldcons.exe</file>
+<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons{000a0000}.def</file>
+<file>"/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons{000a0000}.dso"</file>
+<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons_urel_objects.via</file>
+<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons.o.d</file>
+<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons.o</file>
+<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons.o</file>
 </clean>
-<whatlog bldinf='/sf/app/HelloWorldCons/group/bld.inf' mmp='/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_urel'>
-<build>/invalid/location/epoc32/release/armv5/urel/HelloWorldCons.exe</build>
-<build>/invalid/location/epoc32/release/armv5/urel/HelloWorldCons.exe.map</build>
-<build>/invalid/location/epoc32/release/armv5/urel/HelloWorldCons.exe.map</build>
+<whatlog bldinf='/sf/app/helloworldcons/group/bld.inf' mmp='/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_urel'>
+<build>/invalid/location/epoc32/release/armv5/urel/helloworldcons.exe</build>
+<build>/invalid/location/epoc32/release/armv5/urel/helloworldcons.exe.map</build>
+<build>/invalid/location/epoc32/release/armv5/urel/helloworldcons.exe.map</build>
 </whatlog>
-<clean bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_udeb'>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.prep</file>
-<file>/invalid/location/epoc32/release/armv5/udeb/HelloWorldAPI.dll</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI{000a0000}.def</file>
-<file>"/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI{000a0000}.dso"</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI_udeb_objects.via</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.o.d</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPIDllMain.o.d</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.o</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPIDllMain.o</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.o</file>
-<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPIDllMain.o</file>
+<clean bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_udeb'>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.prep</file>
+<file>/invalid/location/epoc32/release/armv5/udeb/helloworldapi.dll</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi{000a0000}.def</file>
+<file>"/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi{000a0000}.dso"</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi_udeb_objects.via</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.o.d</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapiDllMain.o.d</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.o</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapiDllMain.o</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.o</file>
+<file>/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapiDllMain.o</file>
 </clean>
-<whatlog bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_udeb'>
-<build>/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI.dso</build>
-<build>/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.dso</build>
-<build>/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI.lib</build>
-<build>/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.lib</build>
-<build>/invalid/location/epoc32/release/armv5/udeb/HelloWorldAPI.dll</build>
-<build>/invalid/location/epoc32/release/armv5/udeb/HelloWorldAPI.dll.map</build>
-<build>/invalid/location/epoc32/release/armv5/udeb/HelloWorldAPI.dll.map</build>
+<whatlog bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_udeb'>
+<build>/invalid/location/epoc32/release/armv5/lib/helloworldapi.dso</build>
+<build>/invalid/location/epoc32/release/armv5/lib/helloworldapi{000a0000}.dso</build>
+<build>/invalid/location/epoc32/release/armv5/lib/helloworldapi.lib</build>
+<build>/invalid/location/epoc32/release/armv5/lib/helloworldapi{000a0000}.lib</build>
+<build>/invalid/location/epoc32/release/armv5/udeb/helloworldapi.dll</build>
+<build>/invalid/location/epoc32/release/armv5/udeb/helloworldapi.dll.map</build>
+<build>/invalid/location/epoc32/release/armv5/udeb/helloworldapi.dll.map</build>
 </whatlog>
-<clean bldinf='/sf/app/HelloWorldCons/group/bld.inf' mmp='/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_udeb'>
-<file>/invalid/location/epoc32/release/armv5/udeb/HelloWorldCons.exe</file>
-<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons{000a0000}.def</file>
-<file>"/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons{000a0000}.dso"</file>
-<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons_udeb_objects.via</file>
-<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons.o.d</file>
-<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons.o</file>
-<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons.o</file>
+<clean bldinf='/sf/app/helloworldcons/group/bld.inf' mmp='/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_udeb'>
+<file>/invalid/location/epoc32/release/armv5/udeb/helloworldcons.exe</file>
+<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons{000a0000}.def</file>
+<file>"/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons{000a0000}.dso"</file>
+<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons_udeb_objects.via</file>
+<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons.o.d</file>
+<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons.o</file>
+<file>/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons.o</file>
 </clean>
-<whatlog bldinf='/sf/app/HelloWorldCons/group/bld.inf' mmp='/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_udeb'>
-<build>/invalid/location/epoc32/release/armv5/udeb/HelloWorldCons.exe</build>
-<build>/invalid/location/epoc32/release/armv5/udeb/HelloWorldCons.exe.map</build>
-<build>/invalid/location/epoc32/release/armv5/udeb/HelloWorldCons.exe.map</build>
+<whatlog bldinf='/sf/app/helloworldcons/group/bld.inf' mmp='/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_udeb'>
+<build>/invalid/location/epoc32/release/armv5/udeb/helloworldcons.exe</build>
+<build>/invalid/location/epoc32/release/armv5/udeb/helloworldcons.exe.map</build>
+<build>/invalid/location/epoc32/release/armv5/udeb/helloworldcons.exe.map</build>
 </whatlog>
-<recipe name='importlibtarget_prepfile' target='/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.prep' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='importlibtarget_prepfile' target='/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.prep' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ perl.exe /invalid/location/epoc32/tools/prepdef.pl /sf/mw/HelloWorldAPI/eabi/HelloWorldAPI.def /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.prep
++ perl.exe /invalid/location/epoc32/tools/prepdef.pl /sf/mw/helloworldapi/eabi/helloworldapi.def /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.prep
 
 ]]><time start='1269459946.07847' elapsed='0.172' />
 <status exit='ok' attempt='1' flags='FORCESUCCESS' />
 </recipe>
-<recipe name='importlibversioned' target='/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.dso' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='importlibversioned' target='/invalid/location/epoc32/release/armv5/lib/helloworldapi{000a0000}.dso' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ /invalid/location/epoc32/tools/elf2e32.exe --sid=0x06693702 --version=10.0 --definput=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.prep '--dso=/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.dso' '--linkas=HelloWorldAPI{000a0000}[06693702].dll'
++ /invalid/location/epoc32/tools/elf2e32.exe --sid=0x06693702 --version=10.0 --definput=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.prep '--dso=/invalid/location/epoc32/release/armv5/lib/helloworldapi{000a0000}.dso' '--linkas=helloworldapi{000a0000}[06693702].dll'
 
 ]]><time start='1269459946.25033' elapsed='0.094' />
 <status exit='ok' attempt='1' flags='FORCESUCCESS' />
 </recipe>
-<recipe name='importlibtarget' target='/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI.dso' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='importlibtarget' target='/invalid/location/epoc32/release/armv5/lib/helloworldapi.dso' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ /APPS/sbs/win32/cygwin/bin/cp.exe '/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.dso' /invalid/location/epoc32/release/armv5/lib/HelloWorldAPI.dso
++ /APPS/sbs/win32/cygwin/bin/cp.exe '/invalid/location/epoc32/release/armv5/lib/helloworldapi{000a0000}.dso' /invalid/location/epoc32/release/armv5/lib/helloworldapi.dso
 
 ]]><time start='1269459946.35970' elapsed='0.125' />
 <status exit='ok' attempt='1' flags='FORCESUCCESS' />
 </recipe>
-<recipe name='importlibversioned_abiv1' target='/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.lib' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='importlibversioned_abiv1' target='/invalid/location/epoc32/release/armv5/lib/helloworldapi{000a0000}.lib' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ '[' -f /invalid/location/epoc32/tools/def2dll.pl -a -f /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.prep ']'
-+ perl.exe /invalid/location/epoc32/tools/def2dll.pl --path=/invalid/location/epoc32/release/armv5/lib --bldpath=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel '--import=HelloWorldAPI{000a0000}' --deffile=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.prep '--linkAs=HelloWorldAPI{000a0000}[06693702].dll' --inter
++ '[' -f /invalid/location/epoc32/tools/def2dll.pl -a -f /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.prep ']'
++ perl.exe /invalid/location/epoc32/tools/def2dll.pl --path=/invalid/location/epoc32/release/armv5/lib --bldpath=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel '--import=helloworldapi{000a0000}' --deffile=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.prep '--linkAs=helloworldapi{000a0000}[06693702].dll' --inter
 
 ]]><time start='1269459946.51595' elapsed='0.547' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='importlibtarget_abiv1' target='/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI.lib' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='importlibtarget_abiv1' target='/invalid/location/epoc32/release/armv5/lib/helloworldapi.lib' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
 + '[' -f /invalid/location/epoc32/tools/def2dll.pl ']'
-+ /APPS/sbs/win32/cygwin/bin/cp.exe '/invalid/location/epoc32/release/armv5/lib/HelloWorldAPI{000a0000}.lib' /invalid/location/epoc32/release/armv5/lib/HelloWorldAPI.lib
++ /APPS/sbs/win32/cygwin/bin/cp.exe '/invalid/location/epoc32/release/armv5/lib/helloworldapi{000a0000}.lib' /invalid/location/epoc32/release/armv5/lib/helloworldapi.lib
 
 ]]><time start='1269459947.10968' elapsed='0.141' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='compile' target='/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.o' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='/sf/mw/HelloWorldAPI/src/HelloWorldAPI.cpp'>
+<recipe name='compile' target='/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.o' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='/sf/mw/helloworldapi/src/helloworldapi.cpp'>
 <![CDATA[
-+ /APPS/rvct22_686/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -DNDEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="/invalid/location/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude /invalid/location/epoc32/include/rvct/rvct.h -J/sf/mw/HelloWorldAPI/src -J/sf/mw/HelloWorldAPI/inc -J/invalid/location/epoc32/include -J/invalid/location/epoc32/include --depend_format=unix --depend /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.o.d -o /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI.o /sf/mw/HelloWorldAPI/src/HelloWorldAPI.cpp
++ /APPS/rvct22_686/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -DNDEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="/invalid/location/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude /invalid/location/epoc32/include/rvct/rvct.h -J/sf/mw/helloworldapi/src -J/sf/mw/helloworldapi/inc -J/invalid/location/epoc32/include -J/invalid/location/epoc32/include --depend_format=unix --depend /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.o.d -o /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi.o /sf/mw/helloworldapi/src/helloworldapi.cpp
 
 ]]><time start='1269459947.32842' elapsed='0.766' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='compile' target='/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPIDllMain.o' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='/sf/mw/HelloWorldAPI/src/HelloWorldAPIDllMain.cpp'>
+<recipe name='compile' target='/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapiDllMain.o' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='/sf/mw/helloworldapi/src/helloworldapiDllMain.cpp'>
 <![CDATA[
-+ /APPS/rvct22_686/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -DNDEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="/invalid/location/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude /invalid/location/epoc32/include/rvct/rvct.h -J/sf/mw/HelloWorldAPI/src -J/sf/mw/HelloWorldAPI/inc -J/invalid/location/epoc32/include -J/invalid/location/epoc32/include --depend_format=unix --depend /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPIDllMain.o.d -o /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPIDllMain.o /sf/mw/HelloWorldAPI/src/HelloWorldAPIDllMain.cpp
++ /APPS/rvct22_686/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -DNDEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="/invalid/location/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude /invalid/location/epoc32/include/rvct/rvct.h -J/sf/mw/helloworldapi/src -J/sf/mw/helloworldapi/inc -J/invalid/location/epoc32/include -J/invalid/location/epoc32/include --depend_format=unix --depend /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapiDllMain.o.d -o /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapiDllMain.o /sf/mw/helloworldapi/src/helloworldapiDllMain.cpp
 
 ]]><time start='1269459948.10964' elapsed='0.328' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='linkandpostlink' target='/invalid/location/epoc32/release/armv5/urel/HelloWorldAPI.dll' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='linkandpostlink' target='/invalid/location/epoc32/release/armv5/urel/helloworldapi.dll' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ /APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --dll --split --rw-base 0x400000 --symver_soname '--soname=HelloWorldAPI{000a0000}[06693702].dll' --entry=_E32Dll '/invalid/location/epoc32/release/armv5/urel/edll.lib(uc_dll_.o)' -o /invalid/location/epoc32/release/armv5/urel/HelloWorldAPI.dll.sym --symbols --list=/invalid/location/epoc32/release/armv5/urel/HelloWorldAPI.dll.map --via /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI_urel_objects.via /invalid/location/epoc32/release/armv5/urel/edllstub.lib /invalid/location/epoc32/release/armv5/urel/usrt2_2.lib /invalid/location/epoc32/release/armv5/lib/euser.dso /invalid/location/epoc32/release/armv5/lib/scppnwdl.dso /invalid/location/epoc32/release/armv5/lib/drtaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfpaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfprvct2_2.dso /invalid/location/epoc32/release/armv5/lib/drtrvct2_2.dso '/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
-+ /invalid/location/epoc32/tools/elf2e32.exe --sid=0x06693702 --version=10.0 --capability=NONE '--linkas=HelloWorldAPI{000a0000}[06693702].dll' --fpu=softvfp --targettype=DLL --output=/invalid/location/epoc32/release/armv5/urel/HelloWorldAPI.dll --elfinput=/invalid/location/epoc32/release/armv5/urel/HelloWorldAPI.dll.sym --uid1=0x10000079 --uid2=0x1000008d --uid3=0x06693702 --definput=/sf/mw/HelloWorldAPI/eabi/HelloWorldAPI.def '--defoutput=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI{000a0000}.def' '--dso=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/HelloWorldAPI{000a0000}.dso' --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=/invalid/location/epoc32/release/armv5/lib/;/APPS/rvct22_686/lib/armlib'
++ /APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --dll --split --rw-base 0x400000 --symver_soname '--soname=helloworldapi{000a0000}[06693702].dll' --entry=_E32Dll '/invalid/location/epoc32/release/armv5/urel/edll.lib(uc_dll_.o)' -o /invalid/location/epoc32/release/armv5/urel/helloworldapi.dll.sym --symbols --list=/invalid/location/epoc32/release/armv5/urel/helloworldapi.dll.map --via /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi_urel_objects.via /invalid/location/epoc32/release/armv5/urel/edllstub.lib /invalid/location/epoc32/release/armv5/urel/usrt2_2.lib /invalid/location/epoc32/release/armv5/lib/euser.dso /invalid/location/epoc32/release/armv5/lib/scppnwdl.dso /invalid/location/epoc32/release/armv5/lib/drtaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfpaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfprvct2_2.dso /invalid/location/epoc32/release/armv5/lib/drtrvct2_2.dso '/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
++ /invalid/location/epoc32/tools/elf2e32.exe --sid=0x06693702 --version=10.0 --capability=NONE '--linkas=helloworldapi{000a0000}[06693702].dll' --fpu=softvfp --targettype=DLL --output=/invalid/location/epoc32/release/armv5/urel/helloworldapi.dll --elfinput=/invalid/location/epoc32/release/armv5/urel/helloworldapi.dll.sym --uid1=0x10000079 --uid2=0x1000008d --uid3=0x06693702 --definput=/sf/mw/helloworldapi/eabi/helloworldapi.def '--defoutput=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi{000a0000}.def' '--dso=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/urel/helloworldapi{000a0000}.dso' --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=/invalid/location/epoc32/release/armv5/lib/;/APPS/rvct22_686/lib/armlib'
 
 ]]><time start='1269459948.64087' elapsed='0.266' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='compile' target='/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons.o' host='trwec089' layer='app_layer' component='' bldinf='/sf/app/HelloWorldCons/group/bld.inf' mmp='/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='/sf/app/HelloWorldCons/src/HelloWorldCons.cpp'>
+<recipe name='compile' target='/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons.o' host='trwec089' layer='app_layer' component='' bldinf='/sf/app/helloworldcons/group/bld.inf' mmp='/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='/sf/app/helloworldcons/src/helloworldcons.cpp'>
 <![CDATA[
-+ /APPS/rvct22_686/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -DNDEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="/invalid/location/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__EXE__ --preinclude /invalid/location/epoc32/include/rvct/rvct.h -J/sf/app/HelloWorldCons/src -J/sf/app/HelloWorldCons/inc -J/invalid/location/epoc32/include -J/invalid/location/epoc32/include --depend_format=unix --depend /invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons.o.d -o /invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons.o /sf/app/HelloWorldCons/src/HelloWorldCons.cpp
++ /APPS/rvct22_686/bin/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -DNDEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="/invalid/location/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__EXE__ --preinclude /invalid/location/epoc32/include/rvct/rvct.h -J/sf/app/helloworldcons/src -J/sf/app/helloworldcons/inc -J/invalid/location/epoc32/include -J/invalid/location/epoc32/include --depend_format=unix --depend /invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons.o.d -o /invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons.o /sf/app/helloworldcons/src/helloworldcons.cpp
 
 ]]><time start='1269459948.96898' elapsed='0.391' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='linkandpostlink' target='/invalid/location/epoc32/release/armv5/urel/HelloWorldCons.exe' host='trwec089' layer='app_layer' component='' bldinf='/sf/app/HelloWorldCons/group/bld.inf' mmp='/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<recipe name='linkandpostlink' target='/invalid/location/epoc32/release/armv5/urel/helloworldcons.exe' host='trwec089' layer='app_layer' component='' bldinf='/sf/app/helloworldcons/group/bld.inf' mmp='/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ /APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --dll --split --rw-base 0x400000 --symver_soname '--soname=HelloWorldCons{000a0000}[ed4525d1].exe' --entry=_E32Startup '/invalid/location/epoc32/release/armv5/urel/eexe.lib(uc_exe_.o)' -o /invalid/location/epoc32/release/armv5/urel/HelloWorldCons.exe.sym --symbols --list=/invalid/location/epoc32/release/armv5/urel/HelloWorldCons.exe.map --via /invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/HelloWorldCons_urel_objects.via /invalid/location/epoc32/release/armv5/urel/usrt2_2.lib /invalid/location/epoc32/release/armv5/lib/euser.dso /invalid/location/epoc32/release/armv5/lib/helloworldapi.dso /invalid/location/epoc32/release/armv5/lib/scppnwdl.dso /invalid/location/epoc32/release/armv5/lib/drtaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfpaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfprvct2_2.dso /invalid/location/epoc32/release/armv5/lib/drtrvct2_2.dso '/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
-+ /invalid/location/epoc32/tools/elf2e32.exe --sid=0xed4525d1 --version=10.0 --capability=NONE '--linkas=HelloWorldCons{000a0000}[ed4525d1].exe' --fpu=softvfp --targettype=EXE --output=/invalid/location/epoc32/release/armv5/urel/HelloWorldCons.exe --elfinput=/invalid/location/epoc32/release/armv5/urel/HelloWorldCons.exe.sym --uid1=0x1000007a --uid2=0x00000000 --uid3=0xed4525d1 --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=/invalid/location/epoc32/release/armv5/lib/;/APPS/rvct22_686/lib/armlib'
++ /APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --dll --split --rw-base 0x400000 --symver_soname '--soname=helloworldcons{000a0000}[ed4525d1].exe' --entry=_E32Startup '/invalid/location/epoc32/release/armv5/urel/eexe.lib(uc_exe_.o)' -o /invalid/location/epoc32/release/armv5/urel/helloworldcons.exe.sym --symbols --list=/invalid/location/epoc32/release/armv5/urel/helloworldcons.exe.map --via /invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/urel/helloworldcons_urel_objects.via /invalid/location/epoc32/release/armv5/urel/usrt2_2.lib /invalid/location/epoc32/release/armv5/lib/euser.dso /invalid/location/epoc32/release/armv5/lib/helloworldapi.dso /invalid/location/epoc32/release/armv5/lib/scppnwdl.dso /invalid/location/epoc32/release/armv5/lib/drtaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfpaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfprvct2_2.dso /invalid/location/epoc32/release/armv5/lib/drtrvct2_2.dso '/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
++ /invalid/location/epoc32/tools/elf2e32.exe --sid=0xed4525d1 --version=10.0 --capability=NONE '--linkas=helloworldcons{000a0000}[ed4525d1].exe' --fpu=softvfp --targettype=EXE --output=/invalid/location/epoc32/release/armv5/urel/helloworldcons.exe --elfinput=/invalid/location/epoc32/release/armv5/urel/helloworldcons.exe.sym --uid1=0x1000007a --uid2=0x00000000 --uid3=0xed4525d1 --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=/invalid/location/epoc32/release/armv5/lib/;/APPS/rvct22_686/lib/armlib'
 
 ]]><time start='1269459949.54708' elapsed='0.281' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='compile' target='/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.o' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='/sf/mw/HelloWorldAPI/src/HelloWorldAPI.cpp'>
+<recipe name='compile' target='/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.o' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='/sf/mw/helloworldapi/src/helloworldapi.cpp'>
 <![CDATA[
-+ /APPS/rvct22_686/bin/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D_DEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="/invalid/location/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude /invalid/location/epoc32/include/rvct/rvct.h -J/sf/mw/HelloWorldAPI/src -J/sf/mw/HelloWorldAPI/inc -J/invalid/location/epoc32/include -J/invalid/location/epoc32/include --depend_format=unix --depend /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.o.d -o /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI.o /sf/mw/HelloWorldAPI/src/HelloWorldAPI.cpp
++ /APPS/rvct22_686/bin/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D_DEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="/invalid/location/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude /invalid/location/epoc32/include/rvct/rvct.h -J/sf/mw/helloworldapi/src -J/sf/mw/helloworldapi/inc -J/invalid/location/epoc32/include -J/invalid/location/epoc32/include --depend_format=unix --depend /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.o.d -o /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi.o /sf/mw/helloworldapi/src/helloworldapi.cpp
 
 ]]><time start='1269459949.90644' elapsed='0.500' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='compile' target='/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPIDllMain.o' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='/sf/mw/HelloWorldAPI/src/HelloWorldAPIDllMain.cpp'>
+<recipe name='compile' target='/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapiDllMain.o' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='/sf/mw/helloworldapi/src/helloworldapiDllMain.cpp'>
 <![CDATA[
-+ /APPS/rvct22_686/bin/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D_DEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="/invalid/location/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude /invalid/location/epoc32/include/rvct/rvct.h -J/sf/mw/HelloWorldAPI/src -J/sf/mw/HelloWorldAPI/inc -J/invalid/location/epoc32/include -J/invalid/location/epoc32/include --depend_format=unix --depend /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPIDllMain.o.d -o /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPIDllMain.o /sf/mw/HelloWorldAPI/src/HelloWorldAPIDllMain.cpp
++ /APPS/rvct22_686/bin/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D_DEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="/invalid/location/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__DLL__ --preinclude /invalid/location/epoc32/include/rvct/rvct.h -J/sf/mw/helloworldapi/src -J/sf/mw/helloworldapi/inc -J/invalid/location/epoc32/include -J/invalid/location/epoc32/include --depend_format=unix --depend /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapiDllMain.o.d -o /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapiDllMain.o /sf/mw/helloworldapi/src/helloworldapiDllMain.cpp
 
 ]]><time start='1269459950.42205' elapsed='0.437' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='linkandpostlink' target='/invalid/location/epoc32/release/armv5/udeb/HelloWorldAPI.dll' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/HelloWorldAPI/group/bld.inf' mmp='/sf/mw/HelloWorldAPI/group/HelloWorldAPI.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
+<recipe name='linkandpostlink' target='/invalid/location/epoc32/release/armv5/udeb/helloworldapi.dll' host='trwec089' layer='mw_layer' component='' bldinf='/sf/mw/helloworldapi/group/bld.inf' mmp='/sf/mw/helloworldapi/group/helloworldapi.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ /APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --debug --dll --split --rw-base 0x400000 --symver_soname '--soname=HelloWorldAPI{000a0000}[06693702].dll' --entry=_E32Dll '/invalid/location/epoc32/release/armv5/udeb/edll.lib(uc_dll_.o)' -o /invalid/location/epoc32/release/armv5/udeb/HelloWorldAPI.dll.sym --symbols --list=/invalid/location/epoc32/release/armv5/udeb/HelloWorldAPI.dll.map --via /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI_udeb_objects.via /invalid/location/epoc32/release/armv5/udeb/edllstub.lib /invalid/location/epoc32/release/armv5/udeb/usrt2_2.lib /invalid/location/epoc32/release/armv5/lib/euser.dso /invalid/location/epoc32/release/armv5/lib/scppnwdl.dso /invalid/location/epoc32/release/armv5/lib/drtaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfpaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfprvct2_2.dso /invalid/location/epoc32/release/armv5/lib/drtrvct2_2.dso '/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
-+ /invalid/location/epoc32/tools/elf2e32.exe --sid=0x06693702 --version=10.0 --capability=NONE '--linkas=HelloWorldAPI{000a0000}[06693702].dll' --fpu=softvfp --targettype=DLL --output=/invalid/location/epoc32/release/armv5/udeb/HelloWorldAPI.dll --elfinput=/invalid/location/epoc32/release/armv5/udeb/HelloWorldAPI.dll.sym --uid1=0x10000079 --uid2=0x1000008d --uid3=0x06693702 --definput=/sf/mw/HelloWorldAPI/eabi/HelloWorldAPI.def '--defoutput=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI{000a0000}.def' '--dso=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/HelloWorldAPI{000a0000}.dso' --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=/invalid/location/epoc32/release/armv5/lib/;/APPS/rvct22_686/lib/armlib'
++ /APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --debug --dll --split --rw-base 0x400000 --symver_soname '--soname=helloworldapi{000a0000}[06693702].dll' --entry=_E32Dll '/invalid/location/epoc32/release/armv5/udeb/edll.lib(uc_dll_.o)' -o /invalid/location/epoc32/release/armv5/udeb/helloworldapi.dll.sym --symbols --list=/invalid/location/epoc32/release/armv5/udeb/helloworldapi.dll.map --via /invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi_udeb_objects.via /invalid/location/epoc32/release/armv5/udeb/edllstub.lib /invalid/location/epoc32/release/armv5/udeb/usrt2_2.lib /invalid/location/epoc32/release/armv5/lib/euser.dso /invalid/location/epoc32/release/armv5/lib/scppnwdl.dso /invalid/location/epoc32/release/armv5/lib/drtaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfpaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfprvct2_2.dso /invalid/location/epoc32/release/armv5/lib/drtrvct2_2.dso '/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
++ /invalid/location/epoc32/tools/elf2e32.exe --sid=0x06693702 --version=10.0 --capability=NONE '--linkas=helloworldapi{000a0000}[06693702].dll' --fpu=softvfp --targettype=DLL --output=/invalid/location/epoc32/release/armv5/udeb/helloworldapi.dll --elfinput=/invalid/location/epoc32/release/armv5/udeb/helloworldapi.dll.sym --uid1=0x10000079 --uid2=0x1000008d --uid3=0x06693702 --definput=/sf/mw/helloworldapi/eabi/helloworldapi.def '--defoutput=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi{000a0000}.def' '--dso=/invalid/location/epoc32/build/helloworldapi/c_54e5c05b9f66e7e8/helloworldapi_dll/armv5/udeb/helloworldapi{000a0000}.dso' --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=/invalid/location/epoc32/release/armv5/lib/;/APPS/rvct22_686/lib/armlib'
 
 ]]><time start='1269459951.04702' elapsed='0.375' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='compile' target='/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons.o' host='trwec089' layer='app_layer' component='' bldinf='/sf/app/HelloWorldCons/group/bld.inf' mmp='/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='/sf/app/HelloWorldCons/src/HelloWorldCons.cpp'>
+<recipe name='compile' target='/invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons.o' host='trwec089' layer='app_layer' component='' bldinf='/sf/app/helloworldcons/group/bld.inf' mmp='/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='/sf/app/helloworldcons/src/helloworldcons.cpp'>
 <![CDATA[
-+ /APPS/rvct22_686/bin/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D_DEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="/invalid/location/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__EXE__ --preinclude /invalid/location/epoc32/include/rvct/rvct.h -J/sf/app/HelloWorldCons/src -J/sf/app/HelloWorldCons/inc -J/invalid/location/epoc32/include -J/invalid/location/epoc32/include --depend_format=unix --depend /invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons.o.d -o /invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons.o /sf/app/HelloWorldCons/src/HelloWorldCons.cpp
++ /APPS/rvct22_686/bin/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D_DEBUG -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="/invalid/location/epoc32/include/feature_settings.hrh"' -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__EXE__ --preinclude /invalid/location/epoc32/include/rvct/rvct.h -J/sf/app/helloworldcons/src -J/sf/app/helloworldcons/inc -J/invalid/location/epoc32/include -J/invalid/location/epoc32/include --depend_format=unix --depend /invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons.o.d -o /invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons.o /sf/app/helloworldcons/src/helloworldcons.cpp
 
 ]]><time start='1269459951.48451' elapsed='0.516' />
 <status exit='ok' attempt='1' />
 </recipe>
-<recipe name='linkandpostlink' target='/invalid/location/epoc32/release/armv5/udeb/HelloWorldCons.exe' host='trwec089' layer='app_layer' component='' bldinf='/sf/app/HelloWorldCons/group/bld.inf' mmp='/sf/app/HelloWorldCons/group/HelloWorldCons.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
+<recipe name='linkandpostlink' target='/invalid/location/epoc32/release/armv5/udeb/helloworldcons.exe' host='trwec089' layer='app_layer' component='' bldinf='/sf/app/helloworldcons/group/bld.inf' mmp='/sf/app/helloworldcons/group/helloworldcons.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
 <![CDATA[
-+ /APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --debug --dll --split --rw-base 0x400000 --symver_soname '--soname=HelloWorldCons{000a0000}[ed4525d1].exe' --entry=_E32Startup '/invalid/location/epoc32/release/armv5/udeb/eexe.lib(uc_exe_.o)' -o /invalid/location/epoc32/release/armv5/udeb/HelloWorldCons.exe.sym --symbols --list=/invalid/location/epoc32/release/armv5/udeb/HelloWorldCons.exe.map --via /invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/HelloWorldCons_udeb_objects.via /invalid/location/epoc32/release/armv5/udeb/usrt2_2.lib /invalid/location/epoc32/release/armv5/lib/euser.dso /invalid/location/epoc32/release/armv5/lib/helloworldapi.dso /invalid/location/epoc32/release/armv5/lib/scppnwdl.dso /invalid/location/epoc32/release/armv5/lib/drtaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfpaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfprvct2_2.dso /invalid/location/epoc32/release/armv5/lib/drtrvct2_2.dso '/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
-+ /invalid/location/epoc32/tools/elf2e32.exe --sid=0xed4525d1 --version=10.0 --capability=NONE '--linkas=HelloWorldCons{000a0000}[ed4525d1].exe' --fpu=softvfp --targettype=EXE --output=/invalid/location/epoc32/release/armv5/udeb/HelloWorldCons.exe --elfinput=/invalid/location/epoc32/release/armv5/udeb/HelloWorldCons.exe.sym --uid1=0x1000007a --uid2=0x00000000 --uid3=0xed4525d1 --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=/invalid/location/epoc32/release/armv5/lib/;/APPS/rvct22_686/lib/armlib'
++ /APPS/rvct22_686/bin/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --debug --dll --split --rw-base 0x400000 --symver_soname '--soname=helloworldcons{000a0000}[ed4525d1].exe' --entry=_E32Startup '/invalid/location/epoc32/release/armv5/udeb/eexe.lib(uc_exe_.o)' -o /invalid/location/epoc32/release/armv5/udeb/helloworldcons.exe.sym --symbols --list=/invalid/location/epoc32/release/armv5/udeb/helloworldcons.exe.map --via /invalid/location/epoc32/build/helloworldcons/c_7044fa8da0e80492/helloworldcons_exe/armv5/udeb/helloworldcons_udeb_objects.via /invalid/location/epoc32/release/armv5/udeb/usrt2_2.lib /invalid/location/epoc32/release/armv5/lib/euser.dso /invalid/location/epoc32/release/armv5/lib/helloworldapi.dso /invalid/location/epoc32/release/armv5/lib/scppnwdl.dso /invalid/location/epoc32/release/armv5/lib/drtaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfpaeabi.dso /invalid/location/epoc32/release/armv5/lib/dfprvct2_2.dso /invalid/location/epoc32/release/armv5/lib/drtrvct2_2.dso '/APPS/rvct22_686/lib/armlib/h_t__uf.l(switch8.o)'
++ /invalid/location/epoc32/tools/elf2e32.exe --sid=0xed4525d1 --version=10.0 --capability=NONE '--linkas=helloworldcons{000a0000}[ed4525d1].exe' --fpu=softvfp --targettype=EXE --output=/invalid/location/epoc32/release/armv5/udeb/helloworldcons.exe --elfinput=/invalid/location/epoc32/release/armv5/udeb/helloworldcons.exe.sym --uid1=0x1000007a --uid2=0x00000000 --uid3=0xed4525d1 --debuggable --codepaging=default --datapaging=default --compressionmethod=inflate '--libpath=/invalid/location/epoc32/release/armv5/lib/;/APPS/rvct22_686/lib/armlib'
 
 ]]><time start='1269459952.18761' elapsed='0.391' />
 <status exit='ok' attempt='1' />
--- a/buildframework/helium/tests/minibuilds/ats/archive.cfg.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ats/archive.cfg.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -32,21 +32,21 @@
         <config name="minibuild_archive" abstract="true">
             <set name="archives.dir" value="${zips.build.dir}"/>
             <config>
-	            <set name="root.dir" value="${build.drive}\s60\app\organizer\clock"/>
+                <set name="root.dir" value="${build.drive}\s60\app\organizer\clock"/>
                 <set name="name" value="s60_app_organizer_clock"/>
                 <set name="include" value="**"/>
                 <set name="exclude" value="**/_ccmwaid.inf"/>
             </config>
             <!--<config>
-	            <set name="root.dir" value="${build.drive}\"/>
+                <set name="root.dir" value="${build.drive}\"/>
                 <set name="name" value="s60_app_organizer_clock_binary"/>
                 <set name="scanners" value="abld.what"/>
                 <set name="abld.buildpath" value="${build.drive}\s60\app\organizer\clock\group"/>
                 <set name="include" value="**"/>
                 <set name="exclude" value="**/_ccmwaid.inf"/>
             </config>-->
-    	</config>
+        </config>
 
-	</config>
+    </config>
 </build>
   
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/ats/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ats/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -20,7 +20,7 @@
 
 ============================================================================
 -->
-<project name="minibuild.ats" default="minibuild-ats" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+<project name="minibuild.ats" default="minibuild" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <property environment="env"/>
     <import file="../site/${env.TEAM}.ant.xml" />
 
@@ -31,14 +31,14 @@
     <property name="major.version" value="0" />
     <property name="minor.version" value="0" />
     <property name="build.version" value="${major.version}.${minor.version}"/>
-    <property name="build.drive" value="z:" />
+    <!--<property name="build.drive" value="z:" />-->
     <property name="build.id" value="${build.name}_${build.version}"/>
     <property name="diamonds.host" value="diamonds.nmp.nokia.com"/>
     <property name="diamonds.port" value="80"/>
     <property name="diamonds.path" value="/diamonds/builds/"/>
     
-    <property name="enabled.ats" value="true" />
-    <property name="skip.ats.sending" value="true"/>
+    <property name="ats.enabled" value="true" />
+    <property name="ats.upload.enabled" value="false"/>
     <property name="ats.image.type" value="variant" />
     <property name="ats.product.name" value="" />
     
@@ -46,7 +46,7 @@
     <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.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"/>
@@ -61,30 +61,31 @@
 
 <!--    
     <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"/>
-	
+    
     <!-- Synergy is not configured -->
     <property name="skip.password.validation" value="1"/>
     
-<echo>
+    <!--<echo>
 DIAMONDS URL: ${diamonds.build.url}
 DIAMONDS HOST: ${diamonds.host}
 DIAMONDS BID: ${diamonds.build.id}
 
 DIAMONDS ATS TEST PAGE: http://${diamonds.host}${diamonds.build.id}#tab=4
-</echo>
+    </echo>-->
+    
     <import file="${helium.dir}/helium.ant.xml"/>
     
-    <!-- Run the full sequence of target for the minibuild. ,mini-build-prep,compile-main,zip-ee,mini-build-check-->
-    <target name="minibuild-ats" depends="mini-build-cleanup,mini-build-prep,compile-main,ats-test,ats-aste"/>
+    <!-- Run the full sequence of target for the minibuild. ,minibuild-prep,compile-main,zip-ee,minibuild-check-->
+    <target name="minibuild" depends="minibuild-cleanup,minibuild-prep,compile-main,ats-test,ats-aste,final"/>
     
     <!-- Prepare the minibuild. -->
-    <!--target name="mini-build-prep" depends="init-build-area,start-ant-log,diamonds,set-arm-version,prep-copy-symbiantools"/-->
-    <target name="mini-build-prep" depends="prep"/>
+    <!--target name="minibuild-prep" depends="init-build-area,start-ant-log,diamonds,set-arm-version,prep-copy-symbiantools"/-->
+    <target name="minibuild-prep" depends="prep"/>
     
     <!-- Stubbing few targets for easy testing with dragonfly ... -->
     <target name="prep-drive" depends="build-number"/>
@@ -94,13 +95,13 @@
     <target name="check-env-prep"/>
     <target name="prep-copy"/>
     
-    <target name="mini-build-cleanup">
+    <target name="minibuild-cleanup">
         <delete verbose="true" includeemptydirs="true">
             <fileset dir="${build.drive}/" casesensitive="false">
                 <include name="makefile"/>
                 <include name="*.mk"/>
-            	<include name="ecloud_tmp_*/**"/>
-            	<include name="emake.*"/>            	
+                <include name="ecloud_tmp_*/**"/>
+                <include name="emake.*"/>                
                 <include name="epoc32/build/**"/>
                 <include name="epoc32/rombuild/*/**"/>
                 <include name="timestart.txt"/>
@@ -109,8 +110,8 @@
         </delete>
     </target>
     
-    <target name="mini-build-check">
-    	<!-- Check if prep has set some prop correctly... -->
+    <target name="minibuild-check">
+        <!-- Check if prep has set some prop correctly... -->
         <echo>'${arm.compiler.version}'</echo>
         <au:assertMatches string="${arm.compiler.version}" pattern="RVCT2\.2 \[Build 616\]" casesensitive="false" multiline="true"/>
 
@@ -122,11 +123,11 @@
         
         <!-- 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"/>    	
+        <au:assertFileExists file="${zips.build.dir}/s60_app_organizer_clock.zip"/>        
     </target>
 
 
-	
+    
 </project>
 
     
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/ats/helium_minibuild_ats.sysdef.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ats/helium_minibuild_ats.sysdef.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -20,73 +20,77 @@
 
 ============================================================================
 -->
-<!DOCTYPE SystemDefinition SYSTEM "http://delivery.nmp.nokia.com/trac/helium/browser/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="ats_test_layer">
-			<module name="mod_tsrc_test">
-				
-			<!--STIF-->	 <unit unitID="phonebookengines" name="sortutilapi" bldFile="\sf\app\contacts\phonebookengines\VirtualPhonebook\tsrc\T_VPbkCntModel_CContact\group" mrp="" />
-			<!--EUNIT--> <!--unit unitID="mmccsubcontroller" name="sortutilapi" bldFile="\sf\mw\ipappsrv\multimediacommscontroller\mmccsubcontroller\tsrc\ut_rtpmediaclock\group" mrp="" /-->
-				
-			</module>
-	 	</layer>
-	 	<!--<layer name="qt_unit_test_layer">
-			<module name="mod_qt_test">
-				<unit unitID="qttestee" name="qttestee" bldFile="\s60\qt\unit" filter="" mrp=""/>
-			</module>
-	 	</layer> -->
-	</systemModel>
+    <systemModel>
+         <layer name="ats_test_layer">
+            <module name="mod_tsrc_test">
+                <!--STIF--> <unit unitID="phonebookengines" name="sortutilapi" bldFile="/sf/app/contacts/phonebookengines/VirtualPhonebook/tsrc/T_VPbkCntModel_CContact/group" mrp="" />
+                <!--EUNIT--> <!--unit unitID="mmccsubcontroller" name="sortutilapi" bldFile="/sf/mw/ipappsrv/multimediacommscontroller/mmccsubcontroller/tsrc/ut_rtpmediaclock/group" mrp="" /-->
+            </module>
+         </layer>
+         <layer name="tef_test_layer">
+            <module name="mod_tsrc_test2">
+                <!--TEF--> <unit unitID="bitgdi" name="bitgdi" bldFile="/sf/os/graphics/graphicsapitest/graphicssvs/bitgdi/group" mrp="" /> 
+            </module>
+         </layer>
+         <!--<layer name="qt_unit_test_layer">
+            <module name="mod_qt_test">
+                <unit unitID="qttestee" name="qttestee" bldFile="/s60/qt/unit" filter="" mrp=""/>
+            </module>
+         </layer> -->
+    </systemModel>
     <build>
         <option name="KEEPGOING" abldOption="-keepgoing" description="Causes make to keepgoing on errors" enable="Y"/>
 <!--    <option name="SAVESPACE" abldOption="-savespace" description="Causes the removal of intermediate files" enable="Y"/> -->
-    <target name="WINS" abldTarget="wins" description="MSVC Compiler"/>
-    <target name="WINS_REL" abldTarget="wins urel" description="MSVC Compiler"/>
-    <target name="WINS_DEB" abldTarget="wins udeb" description="MSVC Compiler"/>
-    <target name="WINSCW" abldTarget="winscw" description="CodeWarrior Compiler"/>
-    <target name="WINSCW_REL" abldTarget="winscw urel" description="CodeWarrior Compiler"/>
-    <target name="WINSCW_DEB" abldTarget="winscw udeb" description="CodeWarrior Compiler"/>
-    <target name="TOOLS" abldTarget="tools" description="MSVC Compiler for Tools"/>
-    <target name="TOOLS_REL" abldTarget="tools rel" description="MSVC Compiler for Tools Release mode only"/>
-    <target name="ARMV5" abldTarget="armv5" description="RVCT Compiler"/>
-    <target name="ARMV5_REL" abldTarget="armv5 urel" description="RVCT Compiler"/>
-    <target name="ARMV5_DEB" abldTarget="armv5 udeb" description="RVCT Compiler"/>
-
-    <!-- Aditional Targets -->
-    <target name="CWTOOLS" abldTarget="cwtools" description="CodeWarrior Compiler for Tools"/> <!-- Not supported -->
-    <target name="CWTOOLS_REL" abldTarget="cwtools rel" description="CodeWarrior Compiler for Tools Release mode only"/> <!-- Not supported -->
-    
-    <targetList name="default" description="Main Targets" target="WINSCW ARMV5"/>
-    <targetList name="default_winscw" description="Main Targets" target="WINSCW"/>
-    <targetList name="default_armv5" description="Main Targets" target="ARMV5"/>
-    <targetList name="default_rel" description="Main Targets for rel" target="WINSCW_REL ARMV5_REL"/>
-    <targetList name="default_deb" description="Main Targets for deb" target="WINSCW_DEB ARMV5_DEB"/>
-    <targetList name="default_tools" description="tools Targets" target="TOOLS"/>
-    <targetList name="tools" description="tools Targets" target="TOOLS"/>
+        <target name="WINS" abldTarget="wins" description="MSVC Compiler"/>
+        <target name="WINS_REL" abldTarget="wins urel" description="MSVC Compiler"/>
+        <target name="WINS_DEB" abldTarget="wins udeb" description="MSVC Compiler"/>
+        <target name="WINSCW" abldTarget="winscw" description="CodeWarrior Compiler"/>
+        <target name="WINSCW_REL" abldTarget="winscw urel" description="CodeWarrior Compiler"/>
+        <target name="WINSCW_DEB" abldTarget="winscw udeb" description="CodeWarrior Compiler"/>
+        <target name="TOOLS" abldTarget="tools" description="MSVC Compiler for Tools"/>
+        <target name="TOOLS_REL" abldTarget="tools rel" description="MSVC Compiler for Tools Release mode only"/>
+        <target name="ARMV5" abldTarget="armv5" description="RVCT Compiler"/>
+        <target name="ARMV5_REL" abldTarget="armv5 urel" description="RVCT Compiler"/>
+        <target name="ARMV5_DEB" abldTarget="armv5 udeb" description="RVCT Compiler"/>
+        
+        <!-- Aditional Targets -->
+        <target name="CWTOOLS" abldTarget="cwtools" description="CodeWarrior Compiler for Tools"/> <!-- Not supported -->
+        <target name="CWTOOLS_REL" abldTarget="cwtools rel" description="CodeWarrior Compiler for Tools Release mode only"/> <!-- Not supported -->
+        
+        <targetList name="default" description="Main Targets" target="WINSCW ARMV5"/>
+        <targetList name="default_winscw" description="Main Targets" target="WINSCW"/>
+        <targetList name="default_armv5" description="Main Targets" target="ARMV5"/>
+        <targetList name="default_rel" description="Main Targets for rel" target="WINSCW_REL ARMV5_REL"/>
+        <targetList name="default_deb" description="Main Targets for deb" target="WINSCW_DEB ARMV5_DEB"/>
+        <targetList name="default_tools" description="tools Targets" target="TOOLS"/>
+        <targetList name="tools" description="tools Targets" target="TOOLS"/>
         <targetList name="tools_rel" description="tools Release Targets" target="TOOLS_REL"/>
-    <targetList name="cwtools" description="cwtools Targets" target="CWTOOLS"/>
-    <targetList name="cwtools_rel" description="cwtools Release Targets" target="CWTOOLS_REL"/>
+        <targetList name="cwtools" description="cwtools Targets" target="CWTOOLS"/>
+        <targetList name="cwtools_rel" description="cwtools Release Targets" target="CWTOOLS_REL"/>
   
-	    <configuration name="helium_minibuild_ats_compile" description="" filter="">
-	    	<layerRef layerName="ats_test_layer"/>
-	    	
-	        <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld export" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld test build" targetList="default" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld resource" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld library" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld target" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld final" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld -what build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -check build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	    </configuration>
+        <configuration name="helium_minibuild_ats_compile" description="" filter="">
+            <layerRef layerName="ats_test_layer"/>
+            <layerRef layerName="tef_test_layer"/>
+            
+            <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+            <task><buildLayer command="abld export" unitParallel="Y"/></task>
+            <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld test build" targetList="default" unitParallel="Y"/></task>
+            <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld resource" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld library" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld target" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld final" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld -what build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -check build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+        </configuration>
     </build>
     
 </SystemDefinition>
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/ats/matti/archive.cfg.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ats/matti/archive.cfg.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -32,21 +32,21 @@
         <config name="minibuild_archive" abstract="true">
             <set name="archives.dir" value="${zips.build.dir}"/>
             <config>
-	            <set name="root.dir" value="${build.drive}\s60\app\organizer\clock"/>
+                <set name="root.dir" value="${build.drive}\s60\app\organizer\clock"/>
                 <set name="name" value="s60_app_organizer_clock"/>
                 <set name="include" value="**"/>
                 <set name="exclude" value="**/_ccmwaid.inf"/>
             </config>
             <!--<config>
-	            <set name="root.dir" value="${build.drive}\"/>
+                <set name="root.dir" value="${build.drive}\"/>
                 <set name="name" value="s60_app_organizer_clock_binary"/>
                 <set name="scanners" value="abld.what"/>
                 <set name="abld.buildpath" value="${build.drive}\s60\app\organizer\clock\group"/>
                 <set name="include" value="**"/>
                 <set name="exclude" value="**/_ccmwaid.inf"/>
             </config>-->
-    	</config>
+        </config>
 
-	</config>
+    </config>
 </build>
   
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/ats/matti/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ats/matti/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -33,23 +33,23 @@
     <property name="build.drive" value="z:" />
     
     <!-- MATTI testing parameters-->
-    <property name="enabled.matti" value="true" />
-    <property name="enabled.ats" value="true" />
-	<property name="matti.scripts" value="${helium.dir}\testconfig\ats3\matti\script" />
-	<property name="template.file" value="${helium.dir}\tools\common\python\lib\ats3\matti\template\matti_demo.xml" />
-	<property name="ats.sis.images.dir" location="${helium.dir}\testconfig\ats3\matti\sis" />
+    <property name="matti.enabled" value="true" />
+    <property name="ats.enabled" value="true" />
+    <property name="matti.scripts" value="${helium.dir}\testconfig\ats3\matti\script" />
+    <property name="template.file" value="${helium.dir}\tools\common\python\lib\ats3\matti\template\matti_demo.xml" />
+    <property name="ats.sis.images.dir" location="${helium.dir}\testconfig\ats3\matti\sis" />
     <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.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="core.build.version" value="1" />
     <property name="build.id" value="001" />
-	<property name="ats.testrun.name" value="${build.id}_${ats.product.name}_${core.build.version}" />
-	<property name="ats.test.timeout" value="60" />
+    <property name="ats.testrun.name" value="${build.id}_${ats.product.name}_${core.build.version}" />
+    <property name="ats.test.timeout" value="60" />
     <property name="ats.output.dir" location="${build.drive}\output\ats" />
     <property name="ats.sisfiles.minlimit" value="1" />
 
@@ -62,7 +62,7 @@
     <property name="ido.build.filter" value="${ta.flag.list},dfs_build"/>
    <property name="ats.server" value="4fio00105:8080"/>
     <property name="release.images.dir" value="${helium.dir}\testconfig\ats3\matti\variant_images" />
-		
+        
     <!-- build configuration -->
     <property name="sysdef.configurations.list" value="helium_minibuild_matti_compile" />
     <path id="system.definition.files">
@@ -70,24 +70,24 @@
     </path>
 <!--    
     <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"/>
     
     <import file="${helium.dir}/helium.ant.xml"/>
     
-   <!-- Run the full sequence of target for the minibuild. ,mini-build-prep,compile-main,zip-ee,mini-build-check-->
-    <!--target name="minibuild-matti" depends="mini-build-cleanup,mini-build-prep,compile-main,matti-test"/-->
-    <target name="minibuild-matti" depends="mini-build-prep,build-roms,matti-test"/>
+   <!-- Run the full sequence of target for the minibuild. ,minibuild-prep,compile-main,zip-ee,minibuild-check-->
+    <!--target name="minibuild-matti" depends="minibuild-cleanup,minibuild-prep,compile-main,matti-test"/-->
+    <target name="minibuild-matti" depends="minibuild-prep,build-roms,matti-test"/>
     
     <!-- Prepare the minibuild. -->
-    <!--target name="mini-build-prep" depends="init-build-area,start-ant-log,diamonds,set-arm-version,prep-copy-symbiantools"/-->
-    <target name="mini-build-prep" depends="prep"/>
+    <!--target name="minibuild-prep" depends="init-build-area,start-ant-log,diamonds,set-arm-version,prep-copy-symbiantools"/-->
+    <target name="minibuild-prep" depends="prep"/>
     
     <!-- Stubbing few targets for easy testing with dragonfly ... -->
     <target name="prep-drive" depends="build-number"/>
@@ -97,13 +97,13 @@
     <target name="check-env-prep"/>
     <target name="prep-copy"/>
     
-    <target name="mini-build-cleanup">
+    <target name="minibuild-cleanup">
         <delete verbose="true" includeemptydirs="true">
             <fileset dir="${build.drive}/" casesensitive="false">
                 <include name="makefile"/>
                 <include name="*.mk"/>
-            	<include name="ecloud_tmp_*/**"/>
-            	<include name="emake.*"/>            	
+                <include name="ecloud_tmp_*/**"/>
+                <include name="emake.*"/>                
                 <include name="epoc32/build/**"/>
                 <include name="epoc32/rombuild/*/**"/>
                 <include name="timestart.txt"/>
@@ -112,24 +112,24 @@
         </delete>
     </target>
     
-    <target name="mini-build-check">
-    	<!-- Check if prep has set some prop correctly... -->
+    <target name="minibuild-check">
+        <!-- Check if prep has set some prop correctly... -->
         <echo>'${arm.compiler.version}'</echo>
         <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>
     
-	
+    
 </project>
 
     
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/ats/matti/helium_minibuild_ats.sysdef.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ats/matti/helium_minibuild_ats.sysdef.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -20,15 +20,15 @@
 
 ============================================================================
 -->
-<!DOCTYPE SystemDefinition SYSTEM "http://delivery.nmp.nokia.com/trac/helium/browser/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="matti_test_layer">
-			<module name="mod_tsrc_test">
-				<unit unitID="sortutil_api" name="sortutilapi" bldFile="\sf\os\devicesrv\sysstatemgmt\tsrc\public\basic\group" mrp="" />
-			</module>
-	 	</layer>
-	</systemModel>
+    <systemModel>
+         <layer name="matti_test_layer">
+            <module name="mod_tsrc_test">
+                <unit unitID="sortutil_api" name="sortutilapi" bldFile="\sf\os\devicesrv\sysstatemgmt\tsrc\public\basic\group" mrp="" />
+            </module>
+         </layer>
+    </systemModel>
     <build>
         <option name="KEEPGOING" abldOption="-keepgoing" description="Causes make to keepgoing on errors" enable="Y"/>
 <!--    <option name="SAVESPACE" abldOption="-savespace" description="Causes the removal of intermediate files" enable="Y"/> -->
@@ -59,26 +59,26 @@
     <targetList name="cwtools" description="cwtools Targets" target="CWTOOLS"/>
     <targetList name="cwtools_rel" description="cwtools Release Targets" target="CWTOOLS_REL"/>
   
-	    <configuration name="helium_minibuild_matti_compile" description="" filter="">
-	    	<layerRef layerName="matti_test_layer"/>
-	    	
-	        <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld export" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld test build" targetList="default" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld resource" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld library" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld target" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld final" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld -what build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -check build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	    </configuration>
+        <configuration name="helium_minibuild_matti_compile" description="" filter="">
+            <layerRef layerName="matti_test_layer"/>
+            
+            <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+            <task><buildLayer command="abld export" unitParallel="Y"/></task>
+            <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld test build" targetList="default" unitParallel="Y"/></task>
+            <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld resource" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld library" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld target" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld final" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld -what build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -check build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+        </configuration>
     </build>
     
 </SystemDefinition>
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/ats/matti/test.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ats/matti/test.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -31,14 +31,14 @@
   </target>
   <plan passrate="100" enabled="true" name="MATTI test " significant="false" harness="STIF">
     <session name="session" harness="STIF" enabled="true" passrate="100"><set name="MATTI test set0" harness="STIF" enabled="true" passrate="100">
-    			<target>
-          	<device alias="STIF" rank="master"/>
-        	</target>
-    			<case name="MATTI test case" passrate="100" harness="STIF" enabled="true" significant="false"> 
+                <target>
+              <device alias="STIF" rank="master"/>
+            </target>
+                <case name="MATTI test case" passrate="100" harness="STIF" enabled="true" significant="false"> 
           <flash target-alias="STIF" images="ATS3Drop\images\test_file.fpsx" />
-          	<flash target-alias="STIF" images="ATS3Drop\images\test_file_3rd.fpsx" />
-          	<flash target-alias="STIF" images="ATS3Drop\images\test_file_another.fpsx" />
-          	
+              <flash target-alias="STIF" images="ATS3Drop\images\test_file_3rd.fpsx" />
+              <flash target-alias="STIF" images="ATS3Drop\images\test_file_another.fpsx" />
+              
           <step name="Create logs folder" harness="STIF" enabled="true" passrate="100" significant="false">
           <command>makedir</command>
                         <params>
@@ -55,8 +55,8 @@
                     </step>
 
                     <step name="Install SIS" harness="STIF" enabled="true" passrate="100" significant="false">
-	                    <command>install-software</command>
-		    								<params>
+                        <command>install-software</command>
+                                            <params>
                             <param sisPackageName="E:\another_test_file_matti_install.sis"/>
                             <param upgradeAllowed="true"/>
                             <param optionalItemsAllowed="true"/>
@@ -72,10 +72,10 @@
                             <param downloadPassword="passwd"/>
                             <param installDrive="C"/>
                             <param upgradeData="true"/>
-                            <param timeout="40"/>                       	
-										    </params>
-										</step>
-          	<step name="Copy sis" harness="STIF" enabled="true" passrate="100" significant="false">
+                            <param timeout="40"/>                           
+                                            </params>
+                                        </step>
+              <step name="Copy sis" harness="STIF" enabled="true" passrate="100" significant="false">
                         <command>install</command>
                         <params>
                             <param src="ATS3Drop\sis\test_file_matti_install.sis"/>
@@ -85,8 +85,8 @@
                     </step>
 
                     <step name="Install SIS" harness="STIF" enabled="true" passrate="100" significant="false">
-	                    <command>install-software</command>
-		    								<params>
+                        <command>install-software</command>
+                                            <params>
                             <param sisPackageName="E:\test_file_matti_install.sis"/>
                             <param upgradeAllowed="true"/>
                             <param optionalItemsAllowed="true"/>
@@ -102,20 +102,20 @@
                             <param downloadPassword="passwd"/>
                             <param installDrive="C"/>
                             <param upgradeData="true"/>
-                            <param timeout="40"/>                       	
-										    </params>
-										</step>
-          	          
+                            <param timeout="40"/>                           
+                                            </params>
+                                        </step>
+                        
           <step name="Test case" harness="STIF" enabled="true" passrate="100" significant="false">
                         <command>execute</command>
                         <params>
-    			    							<param dir="C:\ruby\bin\"/>
-    			    							<param file="C:\ruby\bin\ruby.exe"/>
+                                                <param dir="C:\ruby\bin\"/>
+                                                <param file="C:\ruby\bin\ruby.exe"/>
                             <param parameters="&#x00A7;TEST_RUN_ROOT&#x00A7;\ATS3Drop\MATTISCRIPTS\test.rb"/>
                             <param timeout="60"/>
                             <param local="true"/>
                             <param async="false"/>
-			    									<param needs-connection="true"/>
+                                                    <param needs-connection="true"/>
                         </params>
                     </step>
           </case>
@@ -124,7 +124,7 @@
   
   
   <files>
-  	<file>ATS3Drop\images\test_file.fpsx</file>
+      <file>ATS3Drop\images\test_file.fpsx</file>
     <file>ATS3Drop\images\test_file_3rd.fpsx</file>
     <file>ATS3Drop\images\test_file_another.fpsx</file>
     <file>ATS3Drop\sis\another_test_file_matti_install.sis</file>
--- a/buildframework/helium/tests/minibuilds/broom/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/broom/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,7 +22,7 @@
 -->
 <project name="minibuild.compile" default="minibuild" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium" basedir=".">
     <property environment="env"/>
-	<dirname property="config.dir" file="${ant.file.minibuild.compile}"/>
+    <dirname property="config.dir" file="${ant.file.minibuild.compile}"/>
 
     <!-- Enable Helium internal assertion checking. -->
     <property name="hlm.enable.asserts" value="1" />
@@ -32,16 +32,16 @@
     <property name="major.version" value="0" />
     <property name="minor.version" value="0" />
     <property name="publish.root.dir" location="${build.drive}/release"/>
-	<property name="ci.cleanup.env.dir" location="E:/bb/minibuild-broom/trigger"/>
+    <property name="ci.cleanup.env.dir" location="E:/bb/minibuild-broom/trigger"/>
 
-	<target name="create-ci-dir">
-		<mkdir dir="${ci.cleanup.env.dir}"/>
-	</target>
-	
-	<target name="mini-build" depends="create-ci-dir,delete-folders-from-list"/>
-	
-	<import file="${helium.dir}/helium.ant.xml"/>
-	
+    <target name="create-ci-dir">
+        <mkdir dir="${ci.cleanup.env.dir}"/>
+    </target>
+    
+    <target name="minibuild" depends="create-ci-dir,delete-folders-from-list"/>
+    
+    <import file="${helium.dir}/helium.ant.xml"/>
+    
 </project>
 
     
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/compile/archive.cfg.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/compile/archive.cfg.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -32,22 +32,22 @@
         <config name="empty_minibuild_archive" abstract="true" />
         
         <config name="minibuild_archive" abstract="true">
-        	<set name="grace.service" value="minibuild"/>
-        	<set name="grace.product" value="SF"/>
-        	<set name="grace.release" value="SF_minibuild_${build.number}"/>
-        	<set name="grace.metadata" value="true"/>
-        	<set name="grace.template" value="${config.dir}/template_release_metadata.xml"/>
-        	
+            <set name="grace.service" value="minibuild"/>
+            <set name="grace.product" value="SF"/>
+            <set name="grace.release" value="SF_minibuild_${build.number}"/>
+            <set name="grace.metadata" value="true"/>
+            <set name="grace.template" value="${config.dir}/template_release_metadata.xml"/>
+            
             <set name="archives.dir" value="${zips.build.dir}/${zipping.type}"/>
             <set name="clock.dir" value="${build.drive}\sf\app\organizer\clock2"/>
             <config>
-	            <set name="root.dir" value="${clock.dir}"/>
+                <set name="root.dir" value="${clock.dir}"/>
                 <set name="name" value="sf_app_organizer_clock"/>
                 <set name="include" value="**"/>
                 <set name="exclude" value="**/_ccmwaid.inf"/>
             </config>
             <!--config>
-	            <set name="root.dir" value="${build.drive}\"/>
+                <set name="root.dir" value="${build.drive}\"/>
                 <set name="name" value="sf_app_organizer_clock_binary"/>
                 <set name="scanners" value="abld.what"/>
                 <set name="abld.buildpath" value="${clock.dir}\group"/>
@@ -55,7 +55,7 @@
                 <set name="exclude" value="**/_ccmwaid.inf"/>
             </config-->
             <config>
-	            <set name="root.dir" value="${build.drive}/"/>
+                <set name="root.dir" value="${build.drive}/"/>
                 <set name="name" value="sf_mw_classicui_and_app_radio"/>
                 <set name="mapper" value="policy"/>
                 <set name="include" value="sf/mw/classicui/**"/>
@@ -64,7 +64,7 @@
                 <set name="policy.csv" value="${config.dir}/distribution.policy.extended_for_sf.id_status.csv"/>
             </config>
             <config>
-	            <set name="root.dir" value="${build.drive}/"/>
+                <set name="root.dir" value="${build.drive}/"/>
                 <set name="name" value="sf_os"/>
                 <set name="mapper" value="policy.remover"/>
                 <set name="include" value="test_policy/os/**"/>
@@ -72,7 +72,7 @@
                 <set name="policy.root.dir" value="${build.drive}/test_policy"/>
                 <set name="policy.csv" value="${config.dir}/distribution.policy.extended_for_sf.id_status.csv"/>
             </config>
-    	</config>
-	</config>
+        </config>
+    </config>
 </build>
   
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/compile/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/compile/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
 ============================================================================ 
-Name        : 
+Name        : build.xml
 Part of     : Helium 
 
 Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
@@ -20,82 +20,82 @@
 
 ============================================================================
 -->
-<project name="minibuild.compile" default="mini-build" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium" basedir=".">
-	<property environment="env" />
+<project name="minibuild.compile" default="minibuild" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium" basedir=".">
+    <property environment="env" />
     <import file="../site/${env.TEAM}.ant.xml" optional="true"/>
-	<dirname property="config.dir" file="${ant.file.minibuild.compile}" />
+    <dirname property="config.dir" file="${ant.file.minibuild.compile}" />
 
-	<!-- Enable Helium internal assertion checking. -->
-	<property name="hlm.enable.asserts" value="1" />
+    <!-- Enable Helium internal assertion checking. -->
+    <property name="hlm.enable.asserts" value="1" />
 
-	<property name="build.name" value="minibuild_compile" />
-	<property name="build.family" value="test_minibuilds" />
-	<property name="major.version" value="0" />
-	<property name="minor.version" value="0" />
-	<property name="publish.root.dir" location="${build.drive}/release" />
+    <property name="build.name" value="minibuild_compile" />
+    <property name="build.family" value="test_minibuilds" />
+    <property name="major.version" value="0" />
+    <property name="minor.version" value="0" />
+    <property name="publish.root.dir" location="${build.drive}/release" />
 
-	<!-- For Grace upload-->
-	<property name="hydra.service" value="Helium" />
-	<property name="hydra.product" value="minibuild_compile" />
-	<property name="release.label" value="${major.version}.${minor.version}" />
+    <!-- For Grace upload-->
+    <property name="hydra.service" value="Helium" />
+    <property name="hydra.product" value="minibuild_compile" />
+    <property name="release.label" value="${major.version}.${minor.version}" />
 
-	<!-- build configuration -->
-	<property name="sysdef.configurations.list" value="helium_minibuild_compile" />
-	<path id="system.definition.files">
-		<fileset dir="." includes="*.sysdef.xml" />
-	</path>
+    <!-- build configuration -->
+    <property name="sysdef.configurations.list" value="helium_minibuild_compile" />
+    <path id="system.definition.files">
+        <fileset dir="." includes="*.sysdef.xml" />
+    </path>
 
-	<property name="build.system" value="ec-helium" />
-	<property name="rvct.version" value="22_616" />
+    <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" />
+    <!-- Archiving configuration-->
+    <property name="zip.config.file" location="archive.cfg.xml" />
     <property name="zips.ee.spec.name" value="minibuild_archive" />
     <property name="zips.ee-empty.spec.name" value="empty_minibuild_archive" />
 
-	<!-- Synergy is not configured -->
-	<property name="skip.password.validation" value="1" />
+    <!-- Synergy is not configured -->
+    <property name="skip.password.validation" value="1" />
 
 
-	<import file="${helium.dir}/helium.ant.xml" />
+    <import file="${helium.dir}/helium.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="mini-build-cleanup,mini-build-install-new-imaker,mini-build-prep,
-                compile-main,test-ec-history-option,integration-mmp-to-target,mini-build-archive,build-roms,
-                minibuild-release,mini-build-check" />
+    <!-- Run the full sequence of target for the minibuild. ,minibuild-prep,compile-main,zip-ee,minibuild-check-->
+    <target name="do-minibuild" depends="minibuild-cleanup,minibuild-install-new-imaker,minibuild-prep,
+                compile-main,test-ec-history-option,integration-mmp-to-target,minibuild-archive,build-roms,
+                minibuild-check,final" />
 
 
-	<target name="do-mini-build-subcon" depends="mini-build-cleanup,mini-build-install-new-imaker,mini-build-prep,
-                compile-main,mini-build-archive,mini-build-check" />
+    <target name="do-minibuild-subcon" depends="minibuild-cleanup,minibuild-install-new-imaker,minibuild-prep,
+                compile-main,minibuild-archive,minibuild-check" />
 
-	<!--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" />
-		<hlm:coveragerecord name="${helium.build.dir}/temp/test_minibuild.xml" action="start" />
-		<runtarget target="do-mini-build" />
-		<hlm:coveragerecord name="${helium.build.dir}/temp/test_minibuild.xml" action="stop" />
-		<fmpp sourcefile="${helium.dir}/tools/common/templates/coveragerecord.txt.ftl" outputfile="${helium.build.dir}/temp/test_minibuild.txt">
-			<data expandProperties="yes">
+    <!--ant code coverage for minibuilds-->
+    <target name="minibuild">
+        <antcall target="database">
+            <param name="home.files.only" value="false"/>
+        </antcall>
+        <mkdir dir="${helium.build.dir}/temp" />
+        <hlm:coveragerecord name="${helium.build.dir}/temp/test_minibuild.xml" action="start" />
+        <runtarget target="do-minibuild" />
+        <hlm:coveragerecord name="${helium.build.dir}/temp/test_minibuild.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.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">
+        <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.xml)
                     database: xml(${database.file})
              </data>
-		</fmpp>
-	</target>
-	
+        </fmpp>
+    </target>
+    
     <!-- Test ec history option is create for single node build and merge is for multinode build. -->
     <target name="test-ec-history-option" if="build.system.ec-helium">
         <loadfile srcfile="${temp.build.dir}/${build.id}.${sysdef.configurations.list}_run_emake.bat" property="emake.bat.file"/>
@@ -117,27 +117,27 @@
         <echo message="ec.history.option:${ec.history.option}"/>
     </target>
     
-	<!-- Prepare the minibuild. -->
-	<!--target name="mini-build-prep" depends="init-build-area,start-ant-log,diamonds,set-arm-version,prep-copy-symbiantools"/-->
-	<target name="mini-build-prep" depends="prep" />
+    <!-- Prepare the minibuild. -->
+    <!--target name="minibuild-prep" depends="init-build-area,start-ant-log,diamonds,set-arm-version,prep-copy-symbiantools"/-->
+    <target name="minibuild-prep" depends="prep" />
 
-	<!-- Stubbing few targets for easy testing with dragonfly ... -->
-	<target name="prep-drive" depends="build-number" />
-	<target name="dragonfly-prep-drive" />
-	<target name="do-prep-work-area" />
-	<target name="create-bom" />
-	<target name="check-env-prep" />
-	<target name="prep-copy" />
+    <!-- Stubbing few targets for easy testing with dragonfly ... -->
+    <target name="prep-drive" depends="build-number" />
+    <target name="dragonfly-prep-drive" />
+    <target name="do-prep-work-area" />
+    <target name="create-bom" />
+    <target name="check-env-prep" />
+    <target name="prep-copy" />
 
-	<target name="minibuild-release">
-		<mkdir dir="${publish.release.dir}" />
-		<copy todir="${publish.release.dir}">
-			<fileset dir="${build.output.dir}">
-				<include name="release_flash_images/**" />
-			</fileset>
-		</copy>
-		<script language="jython" setbeans="false">
-			<![CDATA[
+    <target name="minibuild-release">
+        <mkdir dir="${publish.release.dir}" />
+        <copy todir="${publish.release.dir}">
+            <fileset dir="${build.output.dir}">
+                <include name="release_flash_images/**" />
+            </fileset>
+        </copy>
+        <script language="jython" setbeans="false">
+            <![CDATA[
 import os
 import fileutils
 import pathaddition.relative
@@ -146,11 +146,11 @@
 
 def sortbydate(a, b):
     if os.stat(a)[9] == os.stat(b)[9]:
-	    return 0
+        return 0
     elif os.stat(a)[9] < os.stat(b)[9]:
         return 1
     return -1
-			
+            
 if os.path.exists(rootdir):
     for name in os.listdir(rootdir):
         path = os.path.join(rootdir, name)
@@ -171,60 +171,60 @@
 print "Old subdir: %s" % old
 print "New subdir: %s" % old
 ]]>
-		</script>
-	</target>
+        </script>
+    </target>
 
-	<!-- Check that the XML data returned from Diamonds via the REST interface
+    <!-- Check that the XML data returned from Diamonds via the REST interface
     is the same as what is sent. 
         
     Currently there are some differences between the formats so some edits to the
     XML content are made before using XMLUnit to compare the content.
     -->
-	<target name="check-diamonds">
-		<loadfile srcfile="${build.log.dir}/${build.id}_diamonds-log-start.xml" property="diamonds.log.start">
-			<filterchain>
-				<tokenfilter>
-					<filetokenizer />
-					<hlm:prettyprintxml />
-				</tokenfilter>
-			</filterchain>
-		</loadfile>
-		<echo>Data sent to Diamonds:
+    <target name="check-diamonds">
+        <loadfile srcfile="${build.log.dir}/${build.id}_diamonds-log-start.xml" property="diamonds.log.start">
+            <filterchain>
+                <tokenfilter>
+                    <filetokenizer />
+                    <hlm:prettyprintxml />
+                </tokenfilter>
+            </filterchain>
+        </loadfile>
+        <echo>Data sent to Diamonds:
             
 ${diamonds.log.start}</echo>
-		<loadresource property="diamonds.log.start.output">
-			<url url="${diamonds.build.url}?fmt=xml" />
-			<filterchain>
-				<tokenfilter>
-					<filetokenizer />
-					<hlm:prettyprintxml />
-				</tokenfilter>
-			</filterchain>
-		</loadresource>
-		<echo>Data returned from Diamonds:
+        <loadresource property="diamonds.log.start.output">
+            <url url="${diamonds.build.url}?fmt=xml" />
+            <filterchain>
+                <tokenfilter>
+                    <filetokenizer />
+                    <hlm:prettyprintxml />
+                </tokenfilter>
+            </filterchain>
+        </loadresource>
+        <echo>Data returned from Diamonds:
             
 ${diamonds.log.start.output}</echo>
-		<echo file="${helium.dir}/diamonds_build.xml">${diamonds.log.start}</echo>
-		<!--xmltask source="${helium.dir}/diamonds_build.xml" dest="${helium.dir}/diamonds_build_edit.xml">
+        <echo file="${helium.dir}/diamonds_build.xml">${diamonds.log.start}</echo>
+        <!--xmltask source="${helium.dir}/diamonds_build.xml" dest="${helium.dir}/diamonds_build_edit.xml">
             
             <cut path="/diamonds-build/tool" buffer="toolElements"/>
             <cut path="/diamonds-build/locations" buffer="temp"/>
         </xmltask-->
-		<!--<loadfile srcfile="${helium.dir}/diamonds_build_edit.xml" property="diamonds.log.start.edited"/>
+        <!--<loadfile srcfile="${helium.dir}/diamonds_build_edit.xml" property="diamonds.log.start.edited"/>
         <echo>Data sent massaged to match what is received:
             
 ${diamonds.log.start.edited}</echo>-->
-		<!-- TODO: make assertXmlEqual work with direct string input -->
-		<string id="control.id" value="${diamonds.log.start}" />
-		<string id="test.id" value="${diamonds.log.start.output}" />
-		<hlm:assertXmlEqual control="control.id" test="test.id" failonerror="true" />
-	</target>
+        <!-- TODO: make assertXmlEqual work with direct string input -->
+        <string id="control.id" value="${diamonds.log.start}" />
+        <string id="test.id" value="${diamonds.log.start.output}" />
+        <hlm:assertXmlEqual control="control.id" test="test.id" failonerror="true" />
+    </target>
 
 
-	<target name="mini-build-archive" depends="mini-build-archive-ant,mini-build-archive-ec-full,mini-build-archive-ant-empty-config" />
+    <target name="minibuild-archive" depends="minibuild-archive-ant,minibuild-archive-ec-full,minibuild-archive-ant-empty-config" />
 
-	<!-- This target will copy a part of the tree structure to test policy.remover mapper. -->
-	<target name="prepare-archiving">
+    <!-- This target will copy a part of the tree structure to test policy.remover mapper. -->
+    <target name="prepare-archiving">
         <delete dir="${build.drive}/test_policy" failonerror="false" />
         <mkdir dir="${build.drive}/test_policy/os" />
         <!-- Creating a policy file under the new s60 test root. -->
@@ -238,8 +238,8 @@
         </copy>
     </target>
 
-    <target name="mini-build-archive-ec-full">
-        <antcall target="do-mini-build-archive">
+    <target name="minibuild-archive-ec-full">
+        <antcall target="do-minibuild-archive">
             <param name="build.system" value="ec-helium" />
             <param name="archive.using.ec" value="true" />
             <param name="zipping.type" value="ec" />
@@ -247,8 +247,8 @@
         </antcall>
     </target>
 
-    <target name="mini-build-archive-ant">
-        <antcall target="do-mini-build-archive">
+    <target name="minibuild-archive-ant">
+        <antcall target="do-minibuild-archive">
             <param name="build.system" value="ebs" />
             <param name="archive.using.ec" value="false" />
             <param name="zipping.type" value="ant" />
@@ -257,14 +257,14 @@
         
     </target>
  
-    <target name="mini-build-archive-ant-empty-config">
+    <target name="minibuild-archive-ant-empty-config">
         <hlm:zipContentMacro type="ee-empty" ec="false" file="${zip.config.file}" failonemptyconfig="false" />
         <au:expectfailure>
             <hlm:zipContentMacro type="ee-empty" ec="false" file="${zip.config.file}" failonemptyconfig="true" />
         </au:expectfailure>
     </target>
 
-    <target name="do-mini-build-archive">
+    <target name="do-minibuild-archive">
         <runtarget target="prepare-archiving" />
         <runtarget target="zip-ee" />
         <!-- Checking the zip generation Ant -->
@@ -288,7 +288,7 @@
     </target>
 
 
-    <target name="mini-build-cleanup">
+    <target name="minibuild-cleanup">
         <delete verbose="true" includeemptydirs="true" failonerror="false">         
             <fileset dir="${build.drive}/" casesensitive="false">
                 <include name="makefile" />
@@ -308,7 +308,7 @@
         </delete>
     </target>
 
-    <target name="mini-build-install-new-imaker">
+    <target name="minibuild-install-new-imaker">
         <!-- Export custom image configuration file. -->
         <copy file="config/image_conf_naming.mk" tofile="${build.drive}/epoc32/rom/config/image_conf_naming.mk" />
         <property name="imaker.dir" value="${helium.dir}/../external/imaker" />
@@ -324,7 +324,7 @@
         -->
     </target>
 
-    <target name="mini-build-check">
+    <target name="minibuild-check">
         <!-- Check if prep has set some prop correctly... -->
         <echo>'${arm.compiler.version}'</echo>
         <au:assertMatches string="${arm.compiler.version}" pattern="RVCT2\.2 \[Build 616\]" casesensitive="false" multiline="true" />
--- a/buildframework/helium/tests/minibuilds/compile/common.sbsinput.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/compile/common.sbsinput.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -51,7 +51,6 @@
     <!-- tools common sbs options -->
     <hlm:sbsoptions id="commonSBS">
         <arg line="-k" />
-        <arg name="--filters" value="FilterMetadataLog"/>
     </hlm:sbsoptions>
 
     <!-- tools common sbs options -->
--- a/buildframework/helium/tests/minibuilds/compile/minibuild_compile.sysdef.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/compile/minibuild_compile.sysdef.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,15 +22,15 @@
 -->
 <!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd">
 <SystemDefinition name="helium_minibuild_compile" schema="1.4.0">
-	<systemModel>
-		<layer name="clock_layer">
-			<module name="clock">
-				<component name="clock">
-					<unit unitID="S60_app_organizer_clock" name="clock" bldFile="sf\app\organizer\clock2\group" mrp=""/>
-				</component>
-			</module>
-		</layer>
-	</systemModel>
+    <systemModel>
+        <layer name="clock_layer">
+            <module name="clock">
+                <component name="clock">
+                    <unit unitID="S60_app_organizer_clock" name="clock" bldFile="sf\app\organizer\clock2\group" mrp=""/>
+                </component>
+            </module>
+        </layer>
+    </systemModel>
     <build>
         <option name="KEEPGOING" abldOption="-keepgoing" description="Causes make to keepgoing on errors" enable="Y"/>
 <!--    <option name="SAVESPACE" abldOption="-savespace" description="Causes the removal of intermediate files" enable="Y"/> -->
@@ -61,25 +61,25 @@
     <targetList name="cwtools" description="cwtools Targets" target="CWTOOLS"/>
     <targetList name="cwtools_rel" description="cwtools Release Targets" target="CWTOOLS_REL"/>
   
-	    <configuration name="helium_minibuild_compile" description="" filter="">
-	    	<layerRef layerName="clock_layer"/>
-	    	
-	        <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld export" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld resource" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld library" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld target" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld final" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld -what build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -check build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	    </configuration>
+        <configuration name="helium_minibuild_compile" description="" filter="">
+            <layerRef layerName="clock_layer"/>
+            
+            <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+            <task><buildLayer command="abld export" unitParallel="Y"/></task>
+            <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld resource" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld library" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld target" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld final" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld -what build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -check build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+        </configuration>
     </build>
     
 </SystemDefinition>
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/compile/template_release_metadata.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/compile/template_release_metadata.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -31,16 +31,16 @@
     <releaseFiles/>
     <externalFiles/>
 
-	<filters>
-		<!-- Filter definitions -->
-		<!-- 	code = code used in package attribute "filters" 
-					text = Filter name
-					description = filter description
-		-->
+    <filters>
+        <!-- Filter definitions -->
+        <!--     code = code used in package attribute "filters" 
+                    text = Filter name
+                    description = filter description
+        -->
     <filter code="foo" text="Emulator binaries" description="Files needed for emulator." /> 
     <filter code="bar" text="complementary binaries and sources" description="complementary components binaries and sources"/>
     <filter code="test" text="source files" description="symbian and S60 source files"/>
-	</filters>
+    </filters>
     
 </releaseInformation>
 
--- a/buildframework/helium/tests/minibuilds/diamonds/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/diamonds/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -20,10 +20,10 @@
 
 ============================================================================
 -->
-<project name="minibuild.diamonds" default="mini-build" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium" basedir=".">
+<project name="minibuild.diamonds" default="minibuild" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium" basedir=".">
     <property environment="env"/>
     
-	<dirname property="config.dir" file="${ant.file.minibuild.diamonds}"/>
+    <dirname property="config.dir" file="${ant.file.minibuild.diamonds}"/>
 
     <!-- Enable Helium internal assertion checking. -->
     <property name="hlm.enable.asserts" value="1" />
@@ -36,8 +36,8 @@
     
     <import file="${helium.dir}/helium.ant.xml"/>
         
-    <!--ant code coverage for mini-builds-->
-    <target name="mini-build" depends="prep-drive,init-build-area,diamonds,prebuild,compile-main"/>
+    <!--ant code coverage for minibuilds-->
+    <target name="minibuild" depends="prep-drive,init-build-area,diamonds,prebuild,compile-main,final"/>
 
     
     <!-- Stubbing few targets for easy testing with dragonfly ... -->
@@ -51,6 +51,6 @@
     </target>
     <target name="check-env-prep"/>
     <target name="prep-copy"/>
-	
+    
 </project>
 
--- a/buildframework/helium/tests/minibuilds/ido-sbs-coverity/build.sbsinput.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido-sbs-coverity/build.sbsinput.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -60,15 +60,13 @@
 
     <hlm:sbsinput id="build_input_tools">
         <sbsInput refid="tools-${build.system}" />
-        <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_rel_build.log" />
-        </sbsOptions>
+        <sbsOptions/>
     </hlm:sbsinput>
 
     <hlm:sbsinput id="build_input_armv5">
         <sbsInput refid="armv5-${build.system}" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_build.log" />
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_build.compile.log" />
         </sbsOptions>
     </hlm:sbsinput>
 
@@ -80,7 +78,7 @@
     <hlm:sbsinput id="build_input_clean_tools">
         <sbsInput refid="tools-${build.system}-clean" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_rel_build_clean.log" />
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_rel_build_clean.compile.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_rel_build_clean" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -88,7 +86,7 @@
     <hlm:sbsinput id="build_input_clean_armv5">
         <sbsInput refid="armv5-${build.system}-clean" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_build_clean.log" />
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_build_clean.compile.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_build_clean" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -101,7 +99,7 @@
     <hlm:sbsinput id="helium_minibuild_ido_input_tools">
         <sbsInput refid="tools-${build.system}" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_helium_minibuild_ido.log" />
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_helium_minibuild_ido.compile.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_helium_minibuild_ido" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -109,7 +107,7 @@
     <hlm:sbsinput id="helium_minibuild_ido_input_armv5">
         <sbsInput refid="armv5-${build.system}" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_helium_minibuild_ido.log" />
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_helium_minibuild_ido.compile.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_helium_minibuild_ido" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -131,7 +129,7 @@
     <hlm:sbsinput id="helium_minibuild_ido_input_clean_tools">
         <sbsInput refid="tools-${build.system}-clean"/>
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_helium_minibuild_ido_clean.log" />
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_helium_minibuild_ido_clean.compile.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_helium_minibuild_ido_clean" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -139,8 +137,8 @@
     <hlm:sbsinput id="helium_minibuild_ido_input_clean_armv5">
         <sbsInput refid="armv5-${build.system}-clean" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_helium_minibuild_ido_clean.log" />
-            <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_helium_minibuild_ido_clean.log" />
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_helium_minibuild_ido_clean.compile.log" />
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_helium_minibuild_ido_clean" />
         </sbsOptions>
     </hlm:sbsinput>
 
@@ -152,7 +150,6 @@
     <hlm:sbsinput id="sf_build_input_tools">
         <sbsInput refid="tools-${build.system}" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_sf_build.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_sf_build" />
         </sbsOptions>
     </hlm:sbsinput> 
@@ -160,7 +157,6 @@
     <hlm:sbsinput id="sf_build_input_armv5">
         <sbsInput refid="armv5-${build.system}" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_sf_build.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_sf_build" />
         </sbsOptions>
     </hlm:sbsinput> 
@@ -177,7 +173,6 @@
     <hlm:sbsinput id="sf_build_input_clean_tools">
         <sbsInput refid="tools-${build.system}-clean" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_sf_build_clean.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_sf_build_clean" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -185,7 +180,6 @@
     <hlm:sbsinput id="sf_build_input_armv5">
         <sbsInput refid="armv5-${build.system}-clean" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_sf_build_clean.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_sf_build_clean" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -202,7 +196,6 @@
     <hlm:sbsinput id="nonhw_input_clean_tools">
         <sbsInput refid="tools-${build.system}-clean" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_winscw_build_clean.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_winscw_build_clean" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -210,7 +203,6 @@
     <hlm:sbsinput id="nonhw_input_clean_winscw">
         <sbsInput refid="winscw-${build.system}-clean" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_winscw_winscw_build_clean.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_winscw_winscw_build_clean" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -227,7 +219,6 @@
     <hlm:sbsinput id="nonhw_input_tools">
         <sbsInput refid="tools-${build.system}" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_build.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_build" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -235,7 +226,6 @@
     <hlm:sbsinput id="nonhw_input_winscw">
         <sbsInput refid="winscw-${build.system}" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_winscw_build.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_winscw_build" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -243,7 +233,6 @@
     <hlm:sbsinput id="test_input_tools">
         <sbsInput refid="test-${build.system}" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_test.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_test" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -251,7 +240,6 @@
     <hlm:sbsinput id="test_input_armv5">
         <sbsInput refid="test-${build.system}" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_test.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_test" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -268,7 +256,6 @@
     <hlm:sbsinput id="test_input_clean_tools">
         <sbsInput refid="test-${build.system}" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_test_clean.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_test_clean" />
         </sbsOptions>
     </hlm:sbsinput>
@@ -276,7 +263,6 @@
     <hlm:sbsinput id="test_input_clean_armv5">
         <sbsInput refid="test-${build.system}" />
         <sbsOptions>
-            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_test_clean.log" />
             <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_test_clean" />
         </sbsOptions>
     </hlm:sbsinput>
--- a/buildframework/helium/tests/minibuilds/ido-sbs-coverity/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido-sbs-coverity/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -20,31 +20,39 @@
 
 ============================================================================
 -->
-<project name="minibuild.ido-sbs" default="help" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium" basedir="..\ido">
+<project name="minibuild.ido-sbs-coverity" 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="sbs"/>
-	
-	<!-- Configuring get latest env. -->
+    <!--property name="config.temp.build.dir" location="${ant.file.minibuild.ido-sbs}/../build"/ -->
+    
+    <!-- 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"/>
+    <property name="coverity.enabled" value="true"/>
+    <property name="coverity.commit.defects.enabled" value="true"/>
+    <property name="coverity.defect.manager.server" value="ousrv057.europe.nokia.com"/>
+    <property name="coverity.defect.manager.port" value="5467"/>
+    <property name="coverity.defect.manager.product" value="S60-92-Vasko"/>
+    
     <property name="publish.ccm.folder" value="bh1test#310" />
     
-    <!-- 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"/>-->
+    <dirname property="ido.sbs.coverity.dir" file="${ant.file.minibuild.ido-sbs-coverity}"/>
+    <property name="prep.delivery.file" location="${ido.sbs.coverity.dir}/delivery.xml" />
+    
+    <!-- Run the full sequence of target for the minibuild. ,minibuild-prep,compile-main,zip-ee,minibuild-check-->
+    <!--<target name="do-minibuild" depends="minibuild-cleanup,
+                                            compile-main"/>-->
 
-	<property name="build.name" value="minibuild_ido_sbs_coverity" />
+    <property name="build.name" value="minibuild_ido_sbs_coverity" />
     <property name="build.family" value="test_minibuild_ido_sbs_coverity" />
-		
-    <target name="mini-build-check">
-    	<!-- Check if prep has set some prop correctly... -->
+        
+    <target name="minibuild-check">
+        <!-- Check if prep has set some prop correctly... -->
         <echo>'${arm.compiler.version}'</echo>
         <au:assertMatches string="${arm.compiler.version}" pattern="RVCT2\.2 \[Build 686\]" casesensitive="false" multiline="true"/>
 
@@ -58,9 +66,9 @@
             </then>
         </if>
     </target>
-	
+    
 
-	<import file="../ido/build.xml"/>
+    <import file="../ido/build.xml"/>
     <import file="build.sbsinput.ant.xml" />
 </project>
 
--- a/buildframework/helium/tests/minibuilds/ido-sbs-coverity/common.sbsinput.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido-sbs-coverity/common.sbsinput.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -51,7 +51,6 @@
     <!-- tools common sbs options -->
     <hlm:sbsoptions id="commonSBS">
         <arg line="-k" />
-        <arg name="--filters" value="FilterMetadataLog"/>
     </hlm:sbsoptions>
 
     <!-- tools common sbs options -->
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tests/minibuilds/ido-sbs-coverity/delivery.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,41 @@
+<?xml version="1.0" ?>
+<!-- 
+============================================================================ 
+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:
+
+============================================================================
+-->
+<build>
+    <config name="IDOs" abstract="true">
+        <set name="database" value="${ccm.database}" />
+        <set name="dir" value="${ccm.project.wa_path}" />
+        <set name="threads" value="1" />
+        <set name="sync" value="true" />
+        <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="release" value="MinibuildDomain/next" />
+        <set name="version" value="bh1test#helium_sbs_coverity" />
+        <config name="MinibuildDomain-bh1test#helium_sbs_coverity:project:tr1test1#1" type="update"/>
+            
+        
+    </config>
+</build>
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/ido-sbs-coverity/hlm.bat	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido-sbs-coverity/hlm.bat	Fri Aug 13 14:59:05 2010 +0300
@@ -17,10 +17,8 @@
 rem
 
 setlocal
-if exist "E:\APPS\sbs" (
-set SBS_HOME=E:\APPS\sbs
-set PATH=%SBS_HOME%\bin;%PATH%
-)
+
 echo Using Raptor from: %SBS_HOME%
 ..\..\..\hlm.bat %*
+
 endlocal
--- a/buildframework/helium/tests/minibuilds/ido-sbs-sysdef3/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido-sbs-sysdef3/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,20 +22,20 @@
 -->
 <project name="minibuild.ido-sbs-sysdef3" 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="sbs"/>
-    <property name="schema.new" value="true"/>
-
+    <!--property name="config.temp.build.dir" location="${ant.file.minibuild.ido-sbs}/../build"/ -->
+    
+    <!-- Configuring raptor build system -->
+    <property name="build.system" value="sbs"/>
+    <property name="sysdef3.enabled" value="true"/>
+	<property name="qmake.enabled" value="true"/>
     <!-- Synergy project for TB92 -->
     <property name="ccm.project" value="MinibuildDomain-tr1ido#50_201013:project:tr1test1#1" />
 
 
-	<property name="build.name" value="minibuild_ido_sbs_sysdef3" />
+    <property name="build.name" value="minibuild_ido_sbs_sysdef3" />
     <property name="build.family" value="test_minibuild_ido_sbs_sysdef3" />
-			
-    <target name="mini-build-check-blocks">
+            
+    <target name="minibuild-check-blocks">
         <if>
             <istrue value="${blocks.enabled}" />
             <then>
@@ -45,7 +45,7 @@
         </if>
     </target>
 
-	<import file="../ido-sbs/build.xml"/>
+    <import file="../ido-sbs/build.xml"/>
 
     <!-- Looking for package definitions files -->
     <path id="system.definition.files">
@@ -53,17 +53,17 @@
     </path>
 
     <!-- Defining what layer to build -->
-    <patternset id="sysdef.filters.helium_minibuild_ido" >
+    <patternset id="sysdef.layers.helium_minibuild_ido" >
         <include name="mw" />
         <include name="app" />
     </patternset>
 
-    <patternset id="sysdef.filters.helium_minibuild_ido" >
+    <patternset id="sysdef.layers.helium_minibuild_ido" >
         <include name="mw" />
         <include name="app" />
     </patternset>
 
-    <patternset id="sysdef.filters.helium_minibuild_ido_clean" >
+    <patternset id="sysdef.layers.helium_minibuild_ido_clean" >
         <include name="mw" />
         <include name="app" />
     </patternset>
--- a/buildframework/helium/tests/minibuilds/ido-sbs/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido-sbs/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,10 +22,10 @@
 -->
 <project name="minibuild.ido-sbs" 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="sbs"/>
+    <!--property name="config.temp.build.dir" location="${ant.file.minibuild.ido-sbs}/../build"/ -->
+    
+    <!-- Configuring raptor build system -->
+    <property name="build.system" value="sbs"/>
 
     <!-- Configuring get latest env. -->
     <property name="s60.grace.service" value="s60_devices_sw" />
@@ -36,14 +36,14 @@
     <property name="ccm.project" value="MinibuildDomain-tr1ido#50_201012:project:tr1test1#1" />
 
 
-    <!-- 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"/>-->
+    <!-- Run the full sequence of target for the minibuild. ,minibuild-prep,compile-main,zip-ee,minibuild-check-->
+    <!--<target name="do-minibuild" depends="minibuild-cleanup,
+                                            compile-main"/>-->
 
-	<property name="build.name" value="minibuild_ido_sbs" />
+    <property name="build.name" value="minibuild_ido_sbs" />
     <property name="build.family" value="test_minibuild_ido_sbs" />
 
-    <target name="mini-build-check-blocks">
+    <target name="minibuild-check-blocks">
         <if>
             <istrue value="${blocks.enabled}" />
             <then>
@@ -53,17 +53,17 @@
         </if>
     </target>
 
-    <target name="mini-build-check" depends="mini-build-check-blocks">
-    	<!-- Check if prep has set some prop correctly... -->
+    <target name="minibuild-check" depends="minibuild-check-blocks">
+        <!-- Check if prep has set some prop correctly... -->
         <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}"/>
     </target>
-	
+    
 
-	<import file="../ido/build.xml"/>
+    <import file="../ido/build.xml"/>
     <import file="build.sbsinput.ant.xml" />
 
     <!-- We should defer the failure for raptor. -->
--- a/buildframework/helium/tests/minibuilds/ido-sbs/hlm.bat	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido-sbs/hlm.bat	Fri Aug 13 14:59:05 2010 +0300
@@ -17,10 +17,8 @@
 rem
 
 setlocal
-if exist "E:\APPS\sbs" (
-set SBS_HOME=E:\APPS\sbs
-set PATH=%SBS_HOME%\bin;%PATH%
-)
+
 echo Using Raptor from: %SBS_HOME%
 ..\..\..\hlm.bat %*
+
 endlocal
--- a/buildframework/helium/tests/minibuilds/ido/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -20,7 +20,7 @@
 
 ============================================================================
 -->
-<project name="minibuild.ido" default="help" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+<project name="minibuild.ido" default="minibuild" 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}" />
@@ -28,21 +28,20 @@
     <property name="data.drive.letter" value="E" />
     <!-- Enable Helium internal assertion checking. -->
     <property name="hlm.enable.asserts" value="1" />
-
+    <property name="cmt.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" />
+    <!-- Compatibility analyser enabling flag, causes binary check to be run -->
+    <property name="ca.enabled" value="true" />
     
     <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="iad.pkg.validation.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" /-->
 
 
@@ -60,8 +59,8 @@
 
     <!-- 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}" />
+    <property name="s60.grace.product" value="pf_5250_prd" />
+    <property name="s60.grace.release" value="pf_5250_prd_\d{2}\.\d{1}\.\d{3}" />
     
     <!-- 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" >
@@ -78,7 +77,7 @@
     <property name="skip.password.validation" value="1" />
 
     <!-- IDO robot configuration -->
-    <property name="do.robot.release" value="MinibuildDomain" />
+    <property name="robot.release.enabled" value="true" />
     <tstamp>
         <format property="ido.robot.tstamp" pattern="yyyyMMddhhmmss" />
     </tstamp>
@@ -88,25 +87,27 @@
     <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. ,minibuild-prep,compile-main,zip-ee,minibuild-check-->
+    <target name="do-minibuild" depends="ido-update-build-area,
                                             flag-ba-for-deletion,
-                                            mini-build-cleanup,
+                                            minibuild-cleanup,
                                             ido-build,
                                             check-diamonds,
-                                            mini-build-check,
-                                            run-hack" />
+                                            minibuild-check,
+                                            run-hack,
+                                            blocks-create-bundles,
+                                            final" />
 
 
-    <!--ant code coverage for mini-builds-->
-    <target name="mini-build">
-    <antcall target="database">
-        <param name="home.files.only" value="false"/>
-    </antcall>
+    <!--ant code coverage for minibuilds-->
+    <target name="minibuild">
+        <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" />
+        <runtarget target="do-minibuild" />
         <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">
@@ -129,8 +130,12 @@
 
 
     <!-- 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" />
+    <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,
+                                         ido-codescanner,iad-check-pkg-version,ats-test,publish-tasks-to-folder,
+                                         ido-sources-to-s60-build-robot" />
+    <target name="ido-build-prep" depends="ido-configure-prep,init,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">
@@ -163,7 +168,7 @@
         </xmlvalidate>
     </target>
 
-    <target name="mini-build-cleanup">
+    <target name="minibuild-cleanup">
         <delete verbose="true" includeemptydirs="true" failonerror="false">
             <fileset dir="${build.drive}/" casesensitive="false">
                 <include name="makefile" />
@@ -180,7 +185,7 @@
     </target>
 
 
-    <target name="mini-build-check">
+    <target name="minibuild-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>
@@ -207,8 +212,6 @@
         <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>
 
 
--- a/buildframework/helium/tests/minibuilds/ido/config/delivery.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido/config/delivery.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -26,9 +26,9 @@
         <set name="dir" value="${ccm.project.wa_path}" />
         <set name="threads" value="1" />
         <set name="sync" value="true" />
-		<set name="show.conflicts" value="true" />
-		<set name="fix.missing.baselines" value="true" />
-		<set name="replace.subprojects" value="true" />
+        <set name="show.conflicts" value="true" />
+        <set name="fix.missing.baselines" value="true" />
+        <set name="replace.subprojects" value="true" />
 
 
 
--- a/buildframework/helium/tests/minibuilds/ido/config/stages_config.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido/config/stages_config.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -29,7 +29,6 @@
     <hlm:stage id="preparation" starttarget="ido-build-prep" endtarget="ido-build-prep"/>
     <hlm:stage id="compilation" starttarget="compile-main" endtarget="compile-main"/>
     <hlm:stage id="test" starttarget="ats-test" endtarget="ats-test"/>
-    <hlm:stage id="localisation" starttarget="localisation-50-build" endtarget="localisation-50-build"/>
     
     
     <!-- Stage record configuration -->
@@ -39,6 +38,4 @@
     
     <hlm:stagerecord id="stage.test" stagerefid="test" output="${build.log.dir}/${build.id}_test.ant.log" loglevel="info" append="true"/>
     
-    <hlm:stagerecord id="stage.localisation" stagerefid="localisation" output="${build.log.dir}/${build.id}_localisation.ant.log" loglevel="info" append="true"/>
-    
 </project>
--- a/buildframework/helium/tests/minibuilds/ido/hack-test.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido/hack-test.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,57 +22,57 @@
 -->
 <project name="hack-test" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
 
-	<property name="hack.dir" location="${build.drive}/test_hack/"/>
-	
-	<!-- Running hack test. -->
-	<target name="run-hack" depends="prepare-hack,do-hack,cleanup-hack"/>
+    <property name="hack.dir" location="${build.drive}/test_hack/"/>
+    
+    <!-- Running hack test. -->
+    <target name="run-hack" depends="prepare-hack,do-hack,cleanup-hack"/>
 
-	<!-- Getting real file to hack. -->
-	<target name="prepare-hack">
-		<mkdir dir="${hack.dir}"/>
-		<copy file="${build.drive}\epoc32\tools\variant\variant.cfg" todir="${hack.dir}" overwrite="true"/>
-		<copy file="${build.drive}\epoc32\rom\ppd.oby" todir="${hack.dir}" overwrite="true"/>
-		<copy file="${build.drive}\epoc32\data\z\private\10202be9\101F8763.txt" todir="${hack.dir}" overwrite="true"/>
-	</target>
+    <!-- Getting real file to hack. -->
+    <target name="prepare-hack">
+        <mkdir dir="${hack.dir}"/>
+        <copy file="${build.drive}\epoc32\tools\variant\variant.cfg" todir="${hack.dir}" overwrite="true"/>
+        <copy file="${build.drive}\epoc32\rom\ppd.oby" todir="${hack.dir}" overwrite="true"/>
+        <copy file="${build.drive}\epoc32\data\z\private\10202be9\101F8763.txt" todir="${hack.dir}" overwrite="true"/>
+    </target>
 
-	<!-- Cleanup hack area. -->
-	<target name="cleanup-hack">
+    <!-- Cleanup hack area. -->
+    <target name="cleanup-hack">
         <delete verbose="true" includeemptydirs="true">
             <fileset dir="${hack.dir}/" casesensitive="false">
                 <include name="**"/>
             </fileset>
         </delete>
-	</target>
+    </target>
 
-	<!-- Testing hackMacro by hacking s60.iby and variant.cfg. -->
-	<target name="do-hack">
-		<!-- Hacking variant.cfg -->
-		<copy file="${hack.dir}/variant.cfg" tofile="${hack.dir}/variant_hacked.cfg" overwrite="true"/>
-		<hlm:hackMacro file="${hack.dir}/variant_hacked.cfg" keyword="ENABLE_ABIVX_MODE" regex="(.hrh\s*$)" replace="\1\nENABLE_ABIVX_MODE"/>
-		<copy file="${hack.dir}/variant_hacked.cfg" tofile="${hack.dir}/variant_skipped.cfg" overwrite="true"/>
-		<hlm:hackMacro file="${hack.dir}/variant_skipped.cfg" keyword="ENABLE_ABIVX_MODE" regex="(.hrh\s*$)" replace="\1\nENABLE_ABIVX_MODE"/>
+    <!-- Testing hackMacro by hacking s60.iby and variant.cfg. -->
+    <target name="do-hack">
+        <!-- Hacking variant.cfg -->
+        <copy file="${hack.dir}/variant.cfg" tofile="${hack.dir}/variant_hacked.cfg" overwrite="true"/>
+        <hlm:hackMacro file="${hack.dir}/variant_hacked.cfg" keyword="ENABLE_ABIVX_MODE" regex="(.hrh\s*$)" replace="\1\nENABLE_ABIVX_MODE"/>
+        <copy file="${hack.dir}/variant_hacked.cfg" tofile="${hack.dir}/variant_skipped.cfg" overwrite="true"/>
+        <hlm:hackMacro file="${hack.dir}/variant_skipped.cfg" keyword="ENABLE_ABIVX_MODE" regex="(.hrh\s*$)" replace="\1\nENABLE_ABIVX_MODE"/>
 
-		<au:assertFilesDiffer expected="${hack.dir}/variant.cfg" actual="${hack.dir}/variant_hacked.cfg" />
-		<au:assertFilesMatch expected="${hack.dir}/variant_skipped.cfg" actual="${hack.dir}/variant_hacked.cfg" />
+        <au:assertFilesDiffer expected="${hack.dir}/variant.cfg" actual="${hack.dir}/variant_hacked.cfg" />
+        <au:assertFilesMatch expected="${hack.dir}/variant_skipped.cfg" actual="${hack.dir}/variant_hacked.cfg" />
 
-		<!-- Hacking S60.iby -->
-		<copy file="${hack.dir}/ppd.oby" tofile="${hack.dir}/ppd_hacked.oby" overwrite="true"/>
-		<hlm:hackMacro file="${hack.dir}/ppd_hacked.oby" keyword="&lt;foo\.iby&gt;" regex="#endif" replace="#include &lt;foo.iby&gt;\n#endif"/>
-		<copy file="${hack.dir}/ppd_hacked.oby" tofile="${hack.dir}/ppd_skipped.oby" overwrite="true"/>
-		<hlm:hackMacro file="${hack.dir}/ppd_skipped.oby" keyword="&lt;foo\.iby&gt;" regex="#endif" replace="#include &lt;foo.iby&gt;\n#endif"/>
+        <!-- Hacking S60.iby -->
+        <copy file="${hack.dir}/ppd.oby" tofile="${hack.dir}/ppd_hacked.oby" overwrite="true"/>
+        <hlm:hackMacro file="${hack.dir}/ppd_hacked.oby" keyword="&lt;foo\.iby&gt;" regex="#endif" replace="#include &lt;foo.iby&gt;\n#endif"/>
+        <copy file="${hack.dir}/ppd_hacked.oby" tofile="${hack.dir}/ppd_skipped.oby" overwrite="true"/>
+        <hlm:hackMacro file="${hack.dir}/ppd_skipped.oby" keyword="&lt;foo\.iby&gt;" regex="#endif" replace="#include &lt;foo.iby&gt;\n#endif"/>
 
-		<au:assertFilesDiffer expected="${hack.dir}/ppd.oby" actual="${hack.dir}/ppd_hacked.oby" />
-		<au:assertFilesMatch expected="${hack.dir}/ppd_skipped.oby" actual="${hack.dir}/ppd_hacked.oby" />
+        <au:assertFilesDiffer expected="${hack.dir}/ppd.oby" actual="${hack.dir}/ppd_hacked.oby" />
+        <au:assertFilesMatch expected="${hack.dir}/ppd_skipped.oby" actual="${hack.dir}/ppd_hacked.oby" />
 
-		<!-- Hacking 101F8763.iby -->
-		<copy file="${hack.dir}/101F8763.txt" tofile="${hack.dir}/101F8763_hacked.txt" overwrite="true"/>
-		<hlm:hackMacro file="${hack.dir}/101F8763_hacked.txt" keyword="0xA int 0 0" regex="0xA int 1 0" replace="0xA int 0 0" encoding="UTF16"/>
-		<copy file="${hack.dir}/101F8763_hacked.txt" tofile="${hack.dir}/101F8763_skipped.txt" overwrite="true"/>
-		<hlm:hackMacro file="${hack.dir}/101F8763_skipped.txt" keyword="0xA int 0 0" regex="0xA int 1 0" replace="0xA int 0 0" encoding="UTF16"/>
+        <!-- Hacking 101F8763.iby -->
+        <copy file="${hack.dir}/101F8763.txt" tofile="${hack.dir}/101F8763_hacked.txt" overwrite="true"/>
+        <hlm:hackMacro file="${hack.dir}/101F8763_hacked.txt" keyword="0xA int 0 0" regex="0xA int 1 0" replace="0xA int 0 0" encoding="UTF16"/>
+        <copy file="${hack.dir}/101F8763_hacked.txt" tofile="${hack.dir}/101F8763_skipped.txt" overwrite="true"/>
+        <hlm:hackMacro file="${hack.dir}/101F8763_skipped.txt" keyword="0xA int 0 0" regex="0xA int 1 0" replace="0xA int 0 0" encoding="UTF16"/>
 
-		<au:assertFilesDiffer expected="${hack.dir}/101F8763.txt" actual="${hack.dir}/101F8763_hacked.txt" />
-		<au:assertFilesMatch expected="${hack.dir}/101F8763_skipped.txt" actual="${hack.dir}/101F8763_hacked.txt" />
-	</target>
+        <au:assertFilesDiffer expected="${hack.dir}/101F8763.txt" actual="${hack.dir}/101F8763_hacked.txt" />
+        <au:assertFilesMatch expected="${hack.dir}/101F8763_skipped.txt" actual="${hack.dir}/101F8763_hacked.txt" />
+    </target>
 
 </project>
 
--- a/buildframework/helium/tests/minibuilds/ido/sysdefs/minibuild_ido.sysdef.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido/sysdefs/minibuild_ido.sysdef.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,11 +22,11 @@
 -->
 <!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd">
 <SystemDefinition name="helium_minibuild_compile" schema="1.4.0">
-	<systemModel>
-		<layer name="mw_layer"/>
-		<layer name="app_layer"/>
-		<layer name="osext_layer"/>
-	</systemModel>
+    <systemModel>
+        <layer name="mw_layer"/>
+        <layer name="app_layer"/>
+        <layer name="osext_layer"/>
+    </systemModel>
     <build>
         <option name="KEEPGOING" abldOption="-keepgoing" description="Causes make to keepgoing on errors" enable="Y"/>
 <!--    <option name="SAVESPACE" abldOption="-savespace" description="Causes the removal of intermediate files" enable="Y"/> -->
@@ -57,37 +57,37 @@
     <targetList name="cwtools" description="cwtools Targets" target="CWTOOLS"/>
     <targetList name="cwtools_rel" description="cwtools Release Targets" target="CWTOOLS_REL"/>
   
-	    <configuration name="helium_minibuild_ido" description="" filter="raptor_helium_minibuild_ido">
-	    	<layerRef layerName="mw_layer"/>
-	    	<layerRef layerName="app_layer"/>
-	    	<layerRef layerName="osext_layer"/>
-	    	
-	        <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld export" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld resource" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld library" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld target" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld final" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld -what build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -check build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	    </configuration>
-	    
-	    <configuration name="helium_minibuild_ido_clean" description="" filter="raptor_helium_minibuild_ido_clean">
-	    	<layerRef layerName="mw_layer"/>
-	    	<layerRef layerName="app_layer"/>
-	    	<layerRef layerName="osext_layer"/>
-	        <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld reallyclean" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="bldmake clean" unitParallel="Y"/></task>
-	    </configuration>
+        <configuration name="helium_minibuild_ido" description="" filter="raptor_helium_minibuild_ido">
+            <layerRef layerName="mw_layer"/>
+            <layerRef layerName="app_layer"/>
+            <layerRef layerName="osext_layer"/>
+            
+            <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+            <task><buildLayer command="abld export" unitParallel="Y"/></task>
+            <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld resource" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld library" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld target" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld final" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld -what build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -check build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+        </configuration>
+        
+        <configuration name="helium_minibuild_ido_clean" description="" filter="raptor_helium_minibuild_ido_clean">
+            <layerRef layerName="mw_layer"/>
+            <layerRef layerName="app_layer"/>
+            <layerRef layerName="osext_layer"/>
+            <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+            <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld reallyclean" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="bldmake clean" unitParallel="Y"/></task>
+        </configuration>
     </build>
     
 </SystemDefinition>
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/imaker/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/imaker/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -24,7 +24,7 @@
     <property environment="env"/>
     <import file="../site/${env.TEAM}.ant.xml" />
     <dirname property="config.dir" file="${ant.file.minibuild.ido}"/>
-	
+    
     <!-- Enable Helium internal assertion checking. -->
     <property name="hlm.enable.asserts" value="1" />
 
@@ -57,28 +57,29 @@
     <import file="${helium.dir}/helium.ant.xml"/>
 
     <!-- Need to define custom preparation steps. -->
-	  <target name="ido-prep" depends="prep-drive,preparation-getenv"/>
+      <target name="ido-prep" depends="prep-drive,preparation-getenv"/>
 
-    <!-- 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,
-    										mini-build-cleanup,
-                                            mini-build-install-new-imaker,
-                                            mini-build-prepare,
+    <!-- Run the full sequence of target for the minibuild. ,minibuild-prep,compile-main,zip-ee,minibuild-check-->
+    <target name="do-minibuild" depends="ido-update-build-area,
+                                            minibuild-cleanup,
+                                            minibuild-install-new-imaker,
+                                            minibuild-prepare,
                                             build-roms,
                                             fota-a-build,
                                             build-icreatordp,
-    	                                    mini-build-check"/>
+                                            minibuild-check,
+                                            final"/>
     
     
-    <!--ant code coverage for mini-builds-->
-    <target name="mini-build">
+    <!--ant code coverage for minibuilds-->
+    <target name="minibuild">
         <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"/>
+        <runtarget target="do-minibuild"/>
         <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">
@@ -92,33 +93,33 @@
 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>
+            </data>
+        </fmpp>
     </target>
 
-    <target name="mini-build-install-new-imaker">
+    <target name="minibuild-install-new-imaker">
         <!-- Export custom image configuration file. -->
         <copy file="config/image_conf_naming.mk" tofile="${build.drive}/epoc32/rom/config/image_conf_naming.mk"/>
         <!--hlm:bldmakeBldfilesMacro dir="${build.drive}/imaker_rnd/group"/>
         <hlm:abldMacro dir="${build.drive}/imaker_rnd/group" command="cleanexport" platform=""/>
         <hlm:abldMacro dir="${build.drive}/imaker_rnd/group" command="export" platform=""/-->
     </target>
-	
-	<target name="minibuild-build-roms" depends="build-roms,imaker-merge-rom-xml"/>
-	
+    
+    <target name="minibuild-build-roms" depends="build-roms,imaker-merge-rom-xml"/>
+    
     <target name="build-roms-ec">
         <antcall target="minibuild-build-roms">
             <reference refid="imaker.rom.config" torefid="imaker.rom.config"/>
             <param name="build.system" value="ec-helium"/>
-        	<param name="release.images.dir" value="${build.output.dir}/imaker_ec"/>        	
+            <param name="release.images.dir" value="${build.output.dir}/imaker_ec"/>            
        </antcall>
     </target>
-	
+    
     <target name="build-roms-ebs">
         <antcall target="minibuild-build-roms">
             <reference refid="imaker.rom.config" torefid="imaker.rom.config"/>
@@ -126,22 +127,22 @@
             <param name="release.images.dir" value="${build.output.dir}/imaker_ebs"/>         
        </antcall>
     </target>
-	
-	<!-- test target. -->
-	<target name="imaker-build" depends="build-roms-ec,build-roms-ebs">
-	</target>
+    
+    <!-- test target. -->
+    <target name="imaker-build" depends="build-roms-ec,build-roms-ebs">
+    </target>
 
     
     <target name="check-diamonds">
-		<loadfile srcfile="${build.log.dir}/${build.id}_diamonds-log-start.xml" property="diamonds.log.start"/>
+        <loadfile srcfile="${build.log.dir}/${build.id}_diamonds-log-start.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>
+    </target>
     
-    <target name="mini-build-cleanup">
+    <target name="minibuild-cleanup">
         <delete verbose="true" includeemptydirs="true" failonerror="false">
             <fileset dir="${build.drive}/" casesensitive="false">
                 <include name="makefile"/>
@@ -155,18 +156,18 @@
                 <include name="timestop.txt"/>
             </fileset>
         </delete>
-    	<mkdir dir="${build.drive}/output/logs"/>
+        <mkdir dir="${build.drive}/output/logs"/>
     </target>
     
     
-    <target name="mini-build-prepare">
-    	<hlm:hackMacro file="${build.drive}/epoc32/rom/config/${product.platform}/${product.name}/customer/custvariant_01_test/content/variant.mk" keyword="CUSTVARIANT_COMPLP" regex="(custvariant\s*$)" replace="\1\nCUSTVARIANT_COMPLP=01 02"/>
+    <target name="minibuild-prepare">
+        <hlm:hackMacro file="${build.drive}/epoc32/rom/config/${product.platform}/${product.name}/customer/custvariant_01_test/content/variant.mk" keyword="CUSTVARIANT_COMPLP" regex="(custvariant\s*$)" replace="\1\nCUSTVARIANT_COMPLP=01 02"/>
     </target>
 
-    <target name="mini-build-check">
+    <target name="minibuild-check">
     </target>
-	
-	<!-- Rom configuration -->
+    
+    <!-- Rom configuration -->
     <hlm:imakerconfigurationset id="imaker.rom.config">
         <imakerconfiguration>
             <makefileset>
@@ -201,7 +202,7 @@
                 <variable name="TYPE" value="prd"/>
             </variableset>
         </imakerconfiguration-->
-    </hlm:imakerconfigurationset>	
+    </hlm:imakerconfigurationset>    
 </project>
 
     
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/linux-build/ido/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/linux-build/ido/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -21,186 +21,192 @@
 ============================================================================
 -->
 <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="/nokia/bh_nmp/groups/helium_dev_wa/data_drive" />
-	<!-- Enable Helium internal assertion checking. -->
-	<property name="hlm.enable.asserts" value="1" />
+    <!-- Enable Helium internal assertion checking. -->
+    <property name="hlm.enable.asserts" value="1" />
 
-	<property name="build.name" value="linux_minibld_ido" />
-	<property name="build.family" value="linux_test_minibuild_ido" />
-	<property name="major.version" value="0" />
-	<property name="minor.version" value="0" />
-	
-	<property name="ccm.project.wa_path" value="${data.drive.letter}/${env.USERNAME}/ido_wa"  />
+    <property name="build.name" value="linux_minibld_ido" />
+    <property name="build.family" value="linux_test_minibuild_ido" />
+    <property name="major.version" value="0" />
+    <property name="minor.version" value="0" />
+    <property name="codescanner.enabled" value="false" />
+    
+    <property name="ccm.project.wa_path" value="${data.drive.letter}/${env.USERNAME}/ido_wa"  />
         <property name="prep.root.dir" value="${data.drive.letter}/${env.USERNAME}/ido_ba"/>
         <property name="prep.build.dir" value="${prep.root.dir}/${build.name}"/>
-	<property name="ccm.enabled" value="true" />
-	<property name="publish.ccm.folder" value="bh1test#310" />
-	<property name="ccm.project" value="MinibuildDomain-50_200832:project:tr1test1#1" />
-	<property name="prep.delivery.file" location="config/delivery.xml" />
+    <property name="ccm.enabled" value="true" />
+    <property name="publish.ccm.folder" value="bh1test#318" />
+    <property name="prep.delivery.file" location="config/delivery.xml" />
+    <property name="publish.task.to.folder.enabled" value="true" />
+    
 
 
-	<!-- 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="sbs" />
-	<property name="rvct.version" value="22_686" />
+    <!-- Configuring the build system -->
+    <property name="build.system" value="sbs" />
+    <property name="rvct.version" value="22_686" />
 
-	<!-- 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{4}(?:\s*wk)?\d{2}_hw79" />
-	<property name="s60.grace.revision" value="(?:_\d{3})?"/>
-	<!-- Synergy is not configured -->
-	<property name="skip.password.validation" value="1" />
+    <!-- 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{4}(?:\s*wk)?\d{2}_hw79" />
+    <property name="s60.grace.revision" value="(?:_\d{3})?"/>
+    <!-- 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="robot.release.enabled" value="true" />
+    <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" />
+    <import file="config/build.sbsinput.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. ,minibuild-prep,compile-main,zip-ee,minibuild-check-->
+    <target name="do-minibuild" depends="ido-update-build-area,
                                             flag-ba-for-deletion,
-    										mini-build-cleanup,
-    										ido-build,
-                							check-diamonds,
-    	                                    mini-build-check,
-    										run-hack" />
+                                            minibuild-cleanup,
+                                            ido-build,
+                                            check-diamonds,
+                                            minibuild-check,
+                                            run-hack,
+                                            final" />
 
 
-	<!--ant code coverage for mini-builds-->
-	<target name="mini-build">
+    <!--ant code coverage for minibuilds-->
+    <target name="minibuild">
     <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-minibuild" />
+        <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,ido-codescanner,ats-test,publish-tasks-to-folder,ido-sources-to-s60-build-robot" />
+    <target name="ido-build-prep" depends="ido-configure-prep,init,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="minibuild-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="minibuild-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" />
+    </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>
+    
+    <hlm:signalInput id="compileSignalInput" failbuild="never">
+        <hlm:notifierListRef refid="defaultFailNotifier" />
+    </hlm:signalInput>
 
 </project>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tests/minibuilds/linux-build/ido/config/build.sbsinput.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,275 @@
+<?xml version="1.0"?>
+<!-- 
+============================================================================ 
+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="ido_sbs_input" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>
+        ido sbs input
+    </description>
+
+    <import file="common.sbsinput.ant.xml" />
+    <patternset id="build_layers" >
+        <include name="os_layer" />
+        <include name="bldfirst_mw_layer" />
+        <include name="bldfirst_app_layer" />
+        <include name="mw_layer" />
+        <include name="complementary_layer" />
+        <include name="app_layer" />
+        <include name="tools_layer" />
+        <include name="stubs_layer" />
+        <include name="addon_layer" />
+    </patternset>
+
+    <patternset id="dfs_build_layers" >
+        <include name="os_layer" />
+        <include name="bldfirst_mw_layer" />
+        <include name="bldfirst_app_layer" />
+        <include name="mw_layer" />
+        <include name="complementary_layer" />
+        <include name="app_layer" />
+        <include name="tools_layer" />
+        <include name="addon_layer" />
+    </patternset>
+
+    <patternset id="test_layers" >
+        <include name="api_test_layer" />
+        <include name="unit_test_layer" />
+        <include name="perf_test_layer" />
+        <include name="module_test_layer" />
+        <include name="qt_unit_test_layer" />
+    </patternset>
+
+
+    <hlm:sbsinput id="build_input_tools">
+        <sbsInput refid="tools-${build.system}" />
+        <sbsOptions/>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="build_input_armv5">
+        <sbsInput refid="armv5-${build.system}" />
+        <sbsOptions>
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_build.compile.log" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="build_input">
+        <sbsInput refid="build_input_tools" />
+        <sbsInput refid="build_input_armv5" />
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="build_input_clean_tools">
+        <sbsInput refid="tools-${build.system}-clean" />
+        <sbsOptions>
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_rel_build_clean.compile.log" />
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_rel_build_clean" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="build_input_clean_armv5">
+        <sbsInput refid="armv5-${build.system}-clean" />
+        <sbsOptions>
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_build_clean.compile.log" />
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_build_clean" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsbuild id="sbs.build_clean">
+        <sbsInput refid="build_input_clean_tools" />
+        <sbsInput refid="build_input_clean_armv5" />
+    </hlm:sbsbuild>
+
+    <hlm:sbsinput id="helium_minibuild_ido_input_tools">
+        <sbsInput refid="tools-${build.system}" />
+        <sbsOptions>
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_helium_minibuild_ido.compile.log" />
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_helium_minibuild_ido" />
+        </sbsOptions>
+    </hlm:sbsinput>
+        
+    <hlm:sbsinput id="helium_minibuild_ido_input_armv5">
+        <sbsInput refid="armv5-${build.system}" />
+        <sbsOptions>
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_helium_minibuild_ido.compile.log" />
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_helium_minibuild_ido" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="helium_minibuild_ido_input">
+        <sbsInput refid="helium_minibuild_ido_input_armv5" />
+    </hlm:sbsinput>
+    
+    <hlm:sbsbuild id="sbs.helium_minibuild_ido">
+        <sbsInput refid="helium_minibuild_ido_input" />
+    </hlm:sbsbuild> 
+
+    <hlm:sbsinput id="helium_minibuild_ido_input_clean">
+        <sbsInput refid="helium_minibuild_ido_clean_armv5" />
+    </hlm:sbsinput>
+    
+    <hlm:sbsinput id="helium_minibuild_ido_input_clean_tools">
+        <sbsInput refid="tools-${build.system}-clean"/>
+        <sbsOptions>
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_tools_helium_minibuild_ido_clean.compile.log" />
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_helium_minibuild_ido_clean" />
+        </sbsOptions>
+    </hlm:sbsinput>
+        
+    <hlm:sbsinput id="helium_minibuild_ido_input_clean_armv5">
+        <sbsInput refid="armv5-${build.system}-clean" />
+        <sbsOptions>
+            <arg name="--logfile" value="${compile.log.dir}/${build.id}_armv5_helium_minibuild_ido_clean.compile.log" />
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_helium_minibuild_ido_clean" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsbuild id="sbs.helium_minibuild_ido_clean">
+        <sbsInput refid="helium_minibuild_ido_input_clean_armv5" />
+    </hlm:sbsbuild> 
+
+    <hlm:sbsinput id="sf_build_input_tools">
+        <sbsInput refid="tools-${build.system}" />
+        <sbsOptions>
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_sf_build" />
+        </sbsOptions>
+    </hlm:sbsinput> 
+
+    <hlm:sbsinput id="sf_build_input_armv5">
+        <sbsInput refid="armv5-${build.system}" />
+        <sbsOptions>
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_sf_build" />
+        </sbsOptions>
+    </hlm:sbsinput> 
+
+    <hlm:sbsinput id="sf_build_input">
+        <sbsInput refid="sf_build_input_tools" />
+        <sbsInput refid="sf_build_input_armv5" />
+    </hlm:sbsinput>
+    
+    <hlm:sbsbuild id="sbs.sf_build">
+        <sbsInput refid="sf_build_input" />
+    </hlm:sbsbuild>
+
+    <hlm:sbsinput id="sf_build_input_clean_tools">
+        <sbsInput refid="tools-${build.system}-clean" />
+        <sbsOptions>
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_sf_build_clean" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="sf_build_input_armv5">
+        <sbsInput refid="armv5-${build.system}-clean" />
+        <sbsOptions>
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_sf_build_clean" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="sf_build_input_clean">
+        <sbsInput refid="sf_build_input_clean_tools" />
+        <sbsInput refid="sf_build_input_clean_armv5" />
+    </hlm:sbsinput>
+    
+    <hlm:sbsbuild id="sbs.sf_build_clean">
+        <sbsInput refid="sf_build_input_clean" />
+    </hlm:sbsbuild>
+
+    <hlm:sbsinput id="nonhw_input_clean_tools">
+        <sbsInput refid="tools-${build.system}-clean" />
+        <sbsOptions>
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_winscw_build_clean" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="nonhw_input_clean_winscw">
+        <sbsInput refid="winscw-${build.system}-clean" />
+        <sbsOptions>
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_winscw_winscw_build_clean" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="nonhw_input_clean">
+        <sbsInput refid="nonhw_input_clean_tools" />
+        <sbsInput refid="nonhw_input_clean_winscw" />
+    </hlm:sbsinput>
+    
+    <hlm:sbsbuild id="sbs.nonhw_clean">
+        <sbsInput refid="nonhw_input_clean" />
+    </hlm:sbsbuild>
+
+    <hlm:sbsinput id="nonhw_input_tools">
+        <sbsInput refid="tools-${build.system}" />
+        <sbsOptions>
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_build" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="nonhw_input_winscw">
+        <sbsInput refid="winscw-${build.system}" />
+        <sbsOptions>
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_winscw_build" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="test_input_tools">
+        <sbsInput refid="test-${build.system}" />
+        <sbsOptions>
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_test" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="test_input_armv5">
+        <sbsInput refid="test-${build.system}" />
+        <sbsOptions>
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_test" />
+        </sbsOptions>
+    </hlm:sbsinput>
+    
+    <hlm:sbsinput id="test_input">
+        <sbsInput refid="test_input_tools" />
+        <sbsInput refid="test_input_armv5" />
+    </hlm:sbsinput>
+    
+    <hlm:sbsbuild id="sbs.test">
+        <sbsInput refid="test_input" />
+    </hlm:sbsbuild>
+
+    <hlm:sbsinput id="test_input_clean_tools">
+        <sbsInput refid="test-${build.system}" />
+        <sbsOptions>
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_tools_test_clean" />
+        </sbsOptions>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="test_input_clean_armv5">
+        <sbsInput refid="test-${build.system}" />
+        <sbsOptions>
+            <arg name="--makefile" value="${compile.log.dir}/${build.id}_armv5_test_clean" />
+        </sbsOptions>
+    </hlm:sbsinput>
+    
+    <hlm:sbsinput id="test_input_clean">
+        <sbsInput refid="test_input_clean_tools" />
+        <sbsInput refid="test_input_clean_armv5" />
+    </hlm:sbsinput>
+    
+    <hlm:sbsbuild id="sbs.test_clean">
+        <sbsInput refid="test_input_clean" />
+    </hlm:sbsbuild>    
+</project>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tests/minibuilds/linux-build/ido/config/common.sbsinput.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,184 @@
+<?xml version="1.0"?>
+<!-- 
+============================================================================ 
+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="common_sbs_input" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>
+        Common sbs input config.
+    </description>
+    <!-- Common make options for particular engine values of it could be overridden by referencing it-->
+    <hlm:sbsmakeoptions id="commonEMakeOptions" engine="emake">
+        <arg name="--emake-emulation" value="gmake" />
+        <arg name="--emake-annodetail" value="basic,history,waiting" />
+        <arg name="--emake-class" value="${ec.build.class}" />
+        <arg name="--emake-historyfile" value="${build.log.dir}/ec_history/raptor_clean.emake.data" />
+        <arg name="--case-sensitive" value="0" />
+        <arg name="--emake-root" value="${env.EMAKE_ROOT};${helium.dir};${env.SBS_HOME}" />
+    </hlm:sbsmakeoptions>
+
+    <hlm:sbsmakeoptions id="commonGmakeOptions" engine="gmake" />
+    <hlm:sbsmakeoptions id="commonPVMGmakeOptions" engine="pvmgmake" />
+
+    <!-- Tools specific make options inheriting the commone make option-->
+    <hlm:sbsmakeoptions id="toolsmake-sbs-ec">
+        <sbsmakeoptions refid="commonEMakeOptions" />
+        <arg name="--emake-maxagents" value="1" />
+    </hlm:sbsmakeoptions>
+            
+    <!-- Main build make option directly refering to common emake option -->
+    <hlm:sbsmakeoptions id="mainbuildmake-sbs-ec">
+        <sbsmakeoptions refid="commonEMakeOptions" />
+    </hlm:sbsmakeoptions>
+
+    <!-- tools common sbs options -->
+    <hlm:sbsoptions id="commonSBS">
+        <arg line="-k" />
+    </hlm:sbsoptions>
+
+    <!-- tools common sbs options -->
+    <hlm:sbsoptions id="toolsCommonSBS">
+        <argset refid="commonSBS" />
+        <arg line="-c tools_rel -c tools2_rel" />
+        <arg line="-j 1" />
+    </hlm:sbsoptions>
+
+    <hlm:sbsoptions id="winscwSBSOptions">
+        <argset refid="commonSBS" />
+        <arg line="-c winscw" />
+    </hlm:sbsoptions>
+
+    <!-- Mainbuild common sbs options -->
+    <hlm:sbsoptions id="armv5CommonSBS">
+            <argset refid="commonSBS" />
+            <arg line="-c armv5" />
+    </hlm:sbsoptions>
+
+    <hlm:sbsoptions id="testCommonSBS">
+            <argset refid="commonSBS" />
+            <arg line="-c armv5.test" />
+    </hlm:sbsoptions>
+
+
+    <hlm:sbsoptions id="testCleanSBS">
+        <argset refid="testcommonSBS" />
+        <argset refid="cleanCommon" />
+    </hlm:sbsoptions>
+
+    <hlm:sbsoptions id="cleanCommon">
+            <arg line="REALLYCLEAN" />
+    </hlm:sbsoptions>
+
+    <!-- Mainbuild common sbs options -->
+    <hlm:sbsoptions id="armv5Clean">
+        <argset refid="armv5CommonSBS"/>
+        <argset refid="cleanCommon" />
+    </hlm:sbsoptions>
+
+
+    <!-- Mainbuild common sbs options -->
+    <hlm:sbsoptions id="toolsClean">
+        <argset refid="toolsCommonSBS"/>
+        <argset refid="cleanCommon" />
+    </hlm:sbsoptions>
+
+    <!-- Mainbuild common sbs options -->
+    <hlm:sbsoptions id="winscwClean">
+        <argset refid="winscwSBSOptions"/>
+        <argset refid="cleanCommon" />
+    </hlm:sbsoptions>
+
+    <!-- sbs input consists of sbs options and sbs make options, the sbs options remains same for all
+    the build system, the make options varies
+     -->
+    <hlm:sbsinput id="tools-sbs">
+        <sbsoptions refid="toolsCommonSBS" />
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="tools-sbs-clean">
+        <sbsoptions refid="toolsClean" />
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="tools-sbs-ec">
+        <sbsoptions refid="toolsCommonSBS" />
+        <sbsmakeoptions refid="toolsmake-sbs-ec" ppThreads="20"/>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="tools-sbs-ec-clean">
+        <sbsoptions refid="toolsClean" />
+        <sbsmakeoptions refid="toolsmake-sbs-ec" ppThreads="20"/>
+    </hlm:sbsinput>
+
+    <!-- sbs input for main build.
+     -->
+    <hlm:sbsinput id="armv5-sbs">
+        <sbsoptions refid="armv5CommonSBS" />
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="armv5-sbs-clean">
+        <sbsoptions refid="armv5Clean" />
+    </hlm:sbsinput>
+
+    <!-- sbs input for main build.
+     -->
+    <hlm:sbsinput id="armv5-sbs-ec">
+        <sbsoptions refid="armv5CommonSBS" />
+        <sbsmakeoptions refid="mainbuildmake-sbs-ec" ppThreads="20"/>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="armv5-sbs-ec-clean">
+        <sbsoptions refid="armv5Clean" />
+        <sbsmakeoptions refid="mainbuildmake-sbs-ec" ppThreads="20" />
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="winscw-sbs">
+        <sbsoptions refid="winscwSBSOptions" />
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="winscw-sbs-clean">
+        <sbsoptions refid="winscwClean" />
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="winscw-sbs-ec-clean">
+        <sbsoptions refid="winscwClean" />
+        <sbsmakeoptions refid="mainbuildmake-sbs-ec" ppThreads="20"/>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="test-sbs">
+        <sbsoptions refid="testCommonSBS" />
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="test-sbs-clean">
+        <sbsoptions refid="testCleanSBS" />
+    </hlm:sbsinput>
+
+    <!-- sbs input for main build.
+     -->
+    <hlm:sbsinput id="test-sbs-ec">
+        <sbsoptions refid="testCommonSBS" />
+        <sbsmakeoptions refid="mainbuildmake-sbs-ec" ppThreads="20"/>
+    </hlm:sbsinput>
+
+    <hlm:sbsinput id="test-sbs-ec-clean">
+        <sbsoptions refid="testCleanSBS" />
+        <sbsmakeoptions refid="mainbuildmake-sbs-ec" ppThreads="20" />
+    </hlm:sbsinput>
+
+</project>
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/linux-build/ido/config/delivery.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/linux-build/ido/config/delivery.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -26,17 +26,15 @@
         <set name="dir" value="${ccm.project.wa_path}" />
         <set name="threads" value="1" />
         <set name="sync" value="true" />
-		<set name="show.conflicts" value="true" />
-		<set name="fix.missing.baselines" value="true" />
-		<set name="replace.subprojects" value="true" />
-		
-
-
+        <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="release" value="MinibuildDomain/next" />
 
-        <config name="${ccm.project}" type="checkout"/>
+        <set name="version" value="bh1test#eswaraia"/>
+        <config name="MinibuildDomain-bh1test#eswaraia:project:tr1test1#1" type="update"/>
         
     </config>
 </build>
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/linux-build/ido/config/stages_config.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/linux-build/ido/config/stages_config.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -29,7 +29,6 @@
     <hlm:stage id="preparation" starttarget="ido-build-prep" endtarget="ido-build-prep"/>
     <hlm:stage id="compilation" starttarget="compile-main" endtarget="compile-main"/>
     <hlm:stage id="test" starttarget="ats-test" endtarget="ats-test"/>
-    <hlm:stage id="localisation" starttarget="localisation-50-build" endtarget="localisation-50-build"/>
     
     
     <!-- Stage record configuration -->
@@ -39,6 +38,5 @@
     
     <hlm:stagerecord id="stage.test" stagerefid="test" output="${build.log.dir}/${build.id}_test.ant.log" loglevel="info" append="true"/>
     
-    <hlm:stagerecord id="stage.localisation" stagerefid="localisation" output="${build.log.dir}/${build.id}_localisation.ant.log" loglevel="info" append="true"/>
     
 </project>
--- a/buildframework/helium/tests/minibuilds/linux-build/ido/hack-test.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/linux-build/ido/hack-test.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,57 +22,57 @@
 -->
 <project name="hack-test" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
 
-	<property name="hack.dir" location="${build.drive}/test_hack/"/>
-	
-	<!-- Running hack test. -->
-	<target name="run-hack" depends="prepare-hack,do-hack,cleanup-hack"/>
+    <property name="hack.dir" location="${build.drive}/test_hack/"/>
+    
+    <!-- Running hack test. -->
+    <target name="run-hack" depends="prepare-hack,do-hack,cleanup-hack"/>
 
-	<!-- Getting real file to hack. -->
-	<target name="prepare-hack">
-		<mkdir dir="${hack.dir}"/>
-		<copy file="${build.drive}\epoc32\tools\variant\variant.cfg" todir="${hack.dir}" overwrite="true"/>
-		<copy file="${build.drive}\epoc32\rom\ppd.oby" todir="${hack.dir}" overwrite="true"/>
-		<copy file="${build.drive}\epoc32\data\z\private\10202be9\101F8763.txt" todir="${hack.dir}" overwrite="true"/>
-	</target>
+    <!-- Getting real file to hack. -->
+    <target name="prepare-hack">
+        <mkdir dir="${hack.dir}"/>
+        <copy file="${build.drive}\epoc32\tools\variant\variant.cfg" todir="${hack.dir}" overwrite="true"/>
+        <copy file="${build.drive}\epoc32\rom\ppd.oby" todir="${hack.dir}" overwrite="true"/>
+        <copy file="${build.drive}\epoc32\data\z\private\10202be9\101F8763.txt" todir="${hack.dir}" overwrite="true"/>
+    </target>
 
-	<!-- Cleanup hack area. -->
-	<target name="cleanup-hack">
+    <!-- Cleanup hack area. -->
+    <target name="cleanup-hack">
         <delete verbose="true" includeemptydirs="true">
             <fileset dir="${hack.dir}/" casesensitive="false">
                 <include name="**"/>
             </fileset>
         </delete>
-	</target>
+    </target>
 
-	<!-- Testing hackMacro by hacking s60.iby and variant.cfg. -->
-	<target name="do-hack">
-		<!-- Hacking variant.cfg -->
-		<copy file="${hack.dir}/variant.cfg" tofile="${hack.dir}/variant_hacked.cfg" overwrite="true"/>
-		<hlm:hackMacro file="${hack.dir}/variant_hacked.cfg" keyword="ENABLE_ABIVX_MODE" regex="(.hrh\s*$)" replace="\1\nENABLE_ABIVX_MODE"/>
-		<copy file="${hack.dir}/variant_hacked.cfg" tofile="${hack.dir}/variant_skipped.cfg" overwrite="true"/>
-		<hlm:hackMacro file="${hack.dir}/variant_skipped.cfg" keyword="ENABLE_ABIVX_MODE" regex="(.hrh\s*$)" replace="\1\nENABLE_ABIVX_MODE"/>
+    <!-- Testing hackMacro by hacking s60.iby and variant.cfg. -->
+    <target name="do-hack">
+        <!-- Hacking variant.cfg -->
+        <copy file="${hack.dir}/variant.cfg" tofile="${hack.dir}/variant_hacked.cfg" overwrite="true"/>
+        <hlm:hackMacro file="${hack.dir}/variant_hacked.cfg" keyword="ENABLE_ABIVX_MODE" regex="(.hrh\s*$)" replace="\1\nENABLE_ABIVX_MODE"/>
+        <copy file="${hack.dir}/variant_hacked.cfg" tofile="${hack.dir}/variant_skipped.cfg" overwrite="true"/>
+        <hlm:hackMacro file="${hack.dir}/variant_skipped.cfg" keyword="ENABLE_ABIVX_MODE" regex="(.hrh\s*$)" replace="\1\nENABLE_ABIVX_MODE"/>
 
-		<au:assertFilesDiffer expected="${hack.dir}/variant.cfg" actual="${hack.dir}/variant_hacked.cfg" />
-		<au:assertFilesMatch expected="${hack.dir}/variant_skipped.cfg" actual="${hack.dir}/variant_hacked.cfg" />
+        <au:assertFilesDiffer expected="${hack.dir}/variant.cfg" actual="${hack.dir}/variant_hacked.cfg" />
+        <au:assertFilesMatch expected="${hack.dir}/variant_skipped.cfg" actual="${hack.dir}/variant_hacked.cfg" />
 
-		<!-- Hacking S60.iby -->
-		<copy file="${hack.dir}/ppd.oby" tofile="${hack.dir}/ppd_hacked.oby" overwrite="true"/>
-		<hlm:hackMacro file="${hack.dir}/ppd_hacked.oby" keyword="&lt;foo\.iby&gt;" regex="#endif" replace="#include &lt;foo.iby&gt;\n#endif"/>
-		<copy file="${hack.dir}/ppd_hacked.oby" tofile="${hack.dir}/ppd_skipped.oby" overwrite="true"/>
-		<hlm:hackMacro file="${hack.dir}/ppd_skipped.oby" keyword="&lt;foo\.iby&gt;" regex="#endif" replace="#include &lt;foo.iby&gt;\n#endif"/>
+        <!-- Hacking S60.iby -->
+        <copy file="${hack.dir}/ppd.oby" tofile="${hack.dir}/ppd_hacked.oby" overwrite="true"/>
+        <hlm:hackMacro file="${hack.dir}/ppd_hacked.oby" keyword="&lt;foo\.iby&gt;" regex="#endif" replace="#include &lt;foo.iby&gt;\n#endif"/>
+        <copy file="${hack.dir}/ppd_hacked.oby" tofile="${hack.dir}/ppd_skipped.oby" overwrite="true"/>
+        <hlm:hackMacro file="${hack.dir}/ppd_skipped.oby" keyword="&lt;foo\.iby&gt;" regex="#endif" replace="#include &lt;foo.iby&gt;\n#endif"/>
 
-		<au:assertFilesDiffer expected="${hack.dir}/ppd.oby" actual="${hack.dir}/ppd_hacked.oby" />
-		<au:assertFilesMatch expected="${hack.dir}/ppd_skipped.oby" actual="${hack.dir}/ppd_hacked.oby" />
+        <au:assertFilesDiffer expected="${hack.dir}/ppd.oby" actual="${hack.dir}/ppd_hacked.oby" />
+        <au:assertFilesMatch expected="${hack.dir}/ppd_skipped.oby" actual="${hack.dir}/ppd_hacked.oby" />
 
-		<!-- Hacking 101F8763.iby -->
-		<copy file="${hack.dir}/101F8763.txt" tofile="${hack.dir}/101F8763_hacked.txt" overwrite="true"/>
-		<hlm:hackMacro file="${hack.dir}/101F8763_hacked.txt" keyword="0xA int 0 0" regex="0xA int 1 0" replace="0xA int 0 0" encoding="UTF16"/>
-		<copy file="${hack.dir}/101F8763_hacked.txt" tofile="${hack.dir}/101F8763_skipped.txt" overwrite="true"/>
-		<hlm:hackMacro file="${hack.dir}/101F8763_skipped.txt" keyword="0xA int 0 0" regex="0xA int 1 0" replace="0xA int 0 0" encoding="UTF16"/>
+        <!-- Hacking 101F8763.iby -->
+        <copy file="${hack.dir}/101F8763.txt" tofile="${hack.dir}/101F8763_hacked.txt" overwrite="true"/>
+        <hlm:hackMacro file="${hack.dir}/101F8763_hacked.txt" keyword="0xA int 0 0" regex="0xA int 1 0" replace="0xA int 0 0" encoding="UTF16"/>
+        <copy file="${hack.dir}/101F8763_hacked.txt" tofile="${hack.dir}/101F8763_skipped.txt" overwrite="true"/>
+        <hlm:hackMacro file="${hack.dir}/101F8763_skipped.txt" keyword="0xA int 0 0" regex="0xA int 1 0" replace="0xA int 0 0" encoding="UTF16"/>
 
-		<au:assertFilesDiffer expected="${hack.dir}/101F8763.txt" actual="${hack.dir}/101F8763_hacked.txt" />
-		<au:assertFilesMatch expected="${hack.dir}/101F8763_skipped.txt" actual="${hack.dir}/101F8763_hacked.txt" />
-	</target>
+        <au:assertFilesDiffer expected="${hack.dir}/101F8763.txt" actual="${hack.dir}/101F8763_hacked.txt" />
+        <au:assertFilesMatch expected="${hack.dir}/101F8763_skipped.txt" actual="${hack.dir}/101F8763_hacked.txt" />
+    </target>
 
 </project>
 
--- a/buildframework/helium/tests/minibuilds/linux-build/ido/sysdefs/minibuild_ido.sysdef.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/linux-build/ido/sysdefs/minibuild_ido.sysdef.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -20,13 +20,13 @@
 
 ============================================================================
 -->
-<!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"/>
-		<layer name="app_layer"/>
-		<layer name="osext_layer"/>
-	</systemModel>
+    <systemModel>
+        <layer name="mw_layer"/>
+        <layer name="app_layer"/>
+        <layer name="osext_layer"/>
+    </systemModel>
     <build>
         <option name="KEEPGOING" abldOption="-keepgoing" description="Causes make to keepgoing on errors" enable="Y"/>
 <!--    <option name="SAVESPACE" abldOption="-savespace" description="Causes the removal of intermediate files" enable="Y"/> -->
@@ -57,37 +57,37 @@
     <targetList name="cwtools" description="cwtools Targets" target="CWTOOLS"/>
     <targetList name="cwtools_rel" description="cwtools Release Targets" target="CWTOOLS_REL"/>
   
-	    <configuration name="helium_minibuild_ido" description="" filter="raptor_helium_minibuild_ido">
-	    	<layerRef layerName="mw_layer"/>
-	    	<layerRef layerName="app_layer"/>
-	    	<layerRef layerName="osext_layer"/>
-	    	
-	        <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld export" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld resource" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld library" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld target" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld final" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
-	        <task><buildLayer command="abld -what build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld -check build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	    </configuration>
-	    
-	    <configuration name="helium_minibuild_ido_clean" description="" filter="raptor_helium_minibuild_ido_clean">
-	    	<layerRef layerName="mw_layer"/>
-	    	<layerRef layerName="app_layer"/>
-	    	<layerRef layerName="osext_layer"/>
-	        <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
-	        <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="abld reallyclean" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
-	        <task><buildLayer command="bldmake clean" unitParallel="Y"/></task>
-	    </configuration>
+        <configuration name="helium_minibuild_ido" description="" filter="raptor_helium_minibuild_ido">
+            <layerRef layerName="mw_layer"/>
+            <layerRef layerName="app_layer"/>
+            <layerRef layerName="osext_layer"/>
+            
+            <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+            <task><buildLayer command="abld export" unitParallel="Y"/></task>
+            <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="Y"/></task>
+            <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld resource" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld library" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld target" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld final" targetList="default_armv5" unitParallel="N" targetParallel="N"/></task>
+            <task><buildLayer command="abld -what build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld -check build" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+        </configuration>
+        
+        <configuration name="helium_minibuild_ido_clean" description="" filter="raptor_helium_minibuild_ido_clean">
+            <layerRef layerName="mw_layer"/>
+            <layerRef layerName="app_layer"/>
+            <layerRef layerName="osext_layer"/>
+            <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+            <task><buildLayer command="abld makefile" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="abld reallyclean" targetList="default_armv5" unitParallel="Y" targetParallel="Y"/></task>
+            <task><buildLayer command="bldmake clean" unitParallel="Y"/></task>
+        </configuration>
     </build>
     
 </SystemDefinition>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tests/minibuilds/linux-build/ido/sysdefs/sysdef_1_4_0.dtd	Fri Aug 13 14:59:05 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>  
--- a/buildframework/helium/tests/minibuilds/prep-wa-synergy71/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/prep-wa-synergy71/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -22,10 +22,10 @@
 -->
 <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"/>
+    <!--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" />
@@ -34,59 +34,59 @@
     
     
     <!-- Synergy configuration -->
-	<property name="ccm.database" value="sa1bm1" />
+    <property name="ccm.database" value="sa1bm1" />
     <property name="ccm.project" value="MinibuildDomain-1_20100428" />
-	<property name="publish.ccm.folder" value="sa1bm1#36" />
+    <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"/>-->
+    <!-- Run the full sequence of target for the minibuild. ,minibuild-prep,compile-main,zip-ee,minibuild-check-->
+    <!--<target name="do-minibuild" depends="minibuild-cleanup,
+                                            compile-main"/>-->
 
-	<property name="build.name" value="minibuild_ido_synergy71" />
+    <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">
+    <!--ant code coverage for minibuilds-->
+    <target name="minibuild">
+        <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">
+        <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-minibuild" />
+        <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>
-		
-		<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"/>
+            </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-minibuild" 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>
--- a/buildframework/helium/tests/minibuilds/qt/build.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/qt/build.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -20,7 +20,7 @@
 
 ============================================================================
 -->
-<project name="minibuild.qt" default="mini-build" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium" basedir=".">
+<project name="minibuild.qt" default="minibuild" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium" basedir=".">
     <property environment="env" />
     <import file="../site/${env.TEAM}.ant.xml" optional="true"/>
     <dirname property="config.dir" file="${ant.file.minibuild.qt}" />
@@ -60,20 +60,20 @@
 
     <import file="${helium.dir}/helium.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="mini-build-cleanup,mini-build-prep,export-tools,
-      compile-main,zip-ee, mini-build-check" />
+    <!-- Run the full sequence of target for the minibuild. ,minibuild-prep,compile-main,zip-ee,minibuild-check-->
+    <target name="do-minibuild" depends="minibuild-cleanup,minibuild-prep,export-tools,
+      compile-main,zip-ee, minibuild-check,final" />
 
 
 
-    <!--ant code coverage for mini-builds-->
-    <target name="mini-build">
+    <!--ant code coverage for minibuilds-->
+    <target name="minibuild">
         <antcall target="database">
             <param name="home.files.only" value="false"/>
         </antcall>
         <mkdir dir="${helium.build.dir}/temp" />
         <hlm:coveragerecord name="${helium.build.dir}/temp/test_minibuild.xml" action="start" />
-        <runtarget target="do-mini-build" />
+        <runtarget target="do-minibuild" />
         <hlm:coveragerecord name="${helium.build.dir}/temp/test_minibuild.xml" action="stop" />
         <fmpp sourcefile="${helium.dir}/tools/common/templates/coveragerecord.txt.ftl" outputfile="${helium.build.dir}/temp/test_minibuild.txt">
             <data expandProperties="yes">
@@ -95,7 +95,7 @@
     </target>
         
     <!-- Prepare the minibuild. -->
-    <target name="mini-build-prep" depends="prep" />
+    <target name="minibuild-prep" depends="prep" />
 
     <!-- Stubbing few targets for easy testing with dragonfly ... -->
     <target name="prep-drive" depends="build-number" />
@@ -159,7 +159,7 @@
         </antcall>
     </target>
 
-    <target name="mini-build-cleanup">
+    <target name="minibuild-cleanup">
         <delete verbose="true" includeemptydirs="true" failonerror="false">         
             <fileset dir="${build.drive}/" casesensitive="false">
                 <include name="makefile" />
@@ -185,7 +185,7 @@
         </delete>
     </target>
 
-    <target name="mini-build-check">
+    <target name="minibuild-check">
         <!-- Checking that the qmake command line have been generated correctly -->
         <if>
             <equals arg1="${build.system}" arg2="ec-helium" />
--- a/buildframework/helium/tools/common/common.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/common.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -67,7 +67,15 @@
         </echo>
         <runtarget target="config"/>
         <diagnostics/>
-        <hlm:database/>
+        <echo>
+            
+Java properties
+---------------
+        </echo>
+        <script language="beanshell">
+            properties = System.getProperties();
+            properties.list(System.out);
+        </script>
     </target>
     
     <!-- Sets the properties that are dependent on build.number -property. 
@@ -252,12 +260,12 @@
             </then>
         </if>
         <if>
-            <isset property="help.target"/>
+            <isset property="help.item"/>
             <then>
                 <fmpp sourcefile="${helium.dir}/tools/common/templates/help_text.txt.ftl" outputfile="build/help_text.txt" quiet="true">
                     <data expandProperties="yes">
                         xml: xml(${database.file})
-                        helpTarget: ${help.target}
+                        helpItem: ${help.item}
                     </data>
                 </fmpp>
                 <loadfile srcfile="build/help_text.txt" property="help.text"/>
@@ -333,14 +341,7 @@
         
     This lists all the targets and information about them. -->
     <target name="database">
-        <mkdir dir="${basedir}/build"/>
-        <hlm:database output="${database.file}">
-            <fileset dir="${helium.dir}">
-                <include name="config/signaling_config_default.ant.xml"/>
-                <include name="config/stages_config_default.ant.xml"/>
-                <include name="config/metadata_filter_config_default.ant.xml"/>
-            </fileset>
-        </hlm:database>
+        <hlm:databaseMacro file="${database.file}" scope="private"/>
     </target>
     
     
@@ -362,26 +363,27 @@
                 <exclude name="**/tests/data/**"/>
                 <exclude name="build/**"/>
             </fileset>
-            <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"/>
+            <hlm:checkTabCharacter severity="error" />
+            <hlm:checkPropertyName severity="warning" regexp="([a-z0-9[\\d\\_\\.\\@\\{\\}\\$]]*)" />
+            <hlm:checkTargetName severity="warning" regexp="([a-z0-9[\\d\\-]]*)" />
+            <hlm:checkIndentation severity="error" />
+            <hlm:checkPresetDefMacroDefName severity="warning" regexp="([a-z0-9][a-zA-Z0-9]*)" />       
+            <hlm:checkProjectName severity="warning" regexp="([a-z0-9[\\d\\.\\_\\-]]*)" />
+            <hlm:checkDescription severity="warning" />
+            <hlm:checkFileName severity="warning" regexp="^build.xml$|ant.xml$|antlib.xml$" />
+            <hlm:checkRunTarget severity="warning" />
+            <hlm:checkAntCall severity="warning" />
+            <hlm:checkScriptSize severity="warning" />
+            <hlm:checkUseOfIfInTargets severity="warning" />
+            <hlm:checkJythonScript severity="error" outputDir="${helium.build.dir}/jep"/>
+            <hlm:checkScriptCondition severity="warning" outputDir="${helium.build.dir}/scriptcondition"/>
+            <hlm:checkPythonTasks severity="warning" outputDir="${helium.build.dir}/python"/>
+            <hlm:checkUseOfEqualsTask severity="warning" />
+            <hlm:checkScriptDefNameAttributes severity="error" />
+            <hlm:checkScriptDefStyle severity="warning" />
+            <hlm:checkScriptDef severity="error" outputDir="${helium.build.dir}/beanshell"/>
+            <hlm:checkDuplicateNames severity="warning" />
+            <hlm:checkTryCatchBlock severity="warning" />
             
             <!-- Reporters -->
             <hlm:antlintCheckstyleReporter file="${helium.build.dir}/report/antlint/antlint_report.xml" />
@@ -391,9 +393,9 @@
             <include name="jep/**/*.py"/>
             <include name="python/**/*.py"/>
         </fileset>
-        <antcall target="pylint" inheritRefs="true">
+        <!--<antcall target="pylint" inheritRefs="true">
             <reference refid="jep.files" torefid="python.files" />
-        </antcall>
+        </antcall>-->
         <cs:checkstyle config="builder/java/config/java_checkstyle_config.xml">
             <fileset dir="${helium.build.dir}/beanshell" includes="**/*.java"/>
             <formatter type="plain"/>
@@ -448,6 +450,14 @@
         <hlm:fooMacro/>
     </target>
 
+   <!--* @property hlm.final.target
+   This property defines a target that will be run after build completion, whatever the 
+   status of the build is.   
+   @type string
+   @scope public
+   @since 10.0
+   -->
+
 </project>
     
 
--- a/buildframework/helium/tools/common/common.antlib.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/common.antlib.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -62,17 +62,18 @@
         <attribute name="file"/>
         <element name="path" type="path"/>
         <![CDATA[
-    import java.io.FileWriter;
-    FileWriter out = new FileWriter(attributes.get("file"));
-    paths = elements.get("path");
-    for (int i = 0 ; i < paths.size() ; i++) {
-        String[] files = paths.get(i).list();
-        for (int l = 0; l < files.length ; l++) {
-            out.write(files[l] + "\n");
-        }
+import java.io.FileWriter;
+FileWriter out = new FileWriter(attributes.get("file"));
+
+paths = elements.get("path");
+for (int i = 0 ; i < paths.size() ; i++) {
+    String[] files = paths.get(i).list();
+    for (int j = 0; j < files.length ; j++) {
+        out.write(files[j] + "\n");
     }
+}
 out.close();
-]]>   
+    ]]>   
     </scriptdef>
 
     
@@ -91,47 +92,50 @@
     <scriptdef name="toolMacro" language="beanshell" uri="http://www.nokia.com/helium">
         <element name="toolvarset" classname="com.nokia.helium.core.ant.types.VariableSet"/>
         <attribute name="name"/>
-<![CDATA[
+        <![CDATA[
 import com.nokia.ant.util.ToolsProcess;
 import com.nokia.tools.*;
 import com.nokia.helium.core.ant.types.VariableSet;
 import org.apache.tools.ant.types.Reference;
-    Reference ref;
-    java.lang.String toolName = attributes.get("name");
-    confTool =  ToolsProcess.getTool(toolName);
-    varSets = elements.get("toolvarset");
-    for (i = 0; i < varSets.size(); ++i) {
-        try {
-            varSet = (VariableSet)varSets.get(i);
-            if (varSet.isReference()) {
-                varSet = varSet.getRefid().getReferencedObject(project);
-            }
-            confTool.execute(varSet,project);
-        } catch (BuildException e) {
-            self.log("Error: " + e);
-            //self.log("Tool Argument Validation failure");
-            throw e;
+
+Reference ref;
+java.lang.String toolName = attributes.get("name");
+confTool =  ToolsProcess.getTool(toolName);
+varSets = elements.get("toolvarset");
+for (i = 0; i < varSets.size(); ++i) {
+    try {
+        varSet = (VariableSet)varSets.get(i);
+        if (varSet.isReference()) {
+            varSet = varSet.getRefid().getReferencedObject(project);
         }
-  }
-]]>
+        confTool.execute(varSet,project);
+    }
+    catch (BuildException e) {
+        self.log("Error: " + e);
+        //self.log("Tool Argument Validation failure");
+        throw e;
+    }
+}
+    ]]>
     </scriptdef>
     
     <!-- ConE tool macro to run the command for each argument -->
     <scriptdef name="conEToolMacro" language="beanshell" uri="http://www.nokia.com/helium">
-        <element name="arg" classname="com.nokia.ant.types.Variable"/>
+        <element name="arg" classname="com.nokia.helium.core.ant.types.VariableImpl"/>
         <attribute name="name"/>
-<![CDATA[
+        <![CDATA[
 import com.nokia.ant.util.ToolsProcess;
 import com.nokia.tools.*;
-import com.nokia.ant.types.Variable;
-    conETool =  ToolsProcess.getTool("ConE");
-    vars = elements.get("arg");
-    for (i = 0; i < vars.size(); ++i) {
-        var = (Variable)vars.get(i);
-        conETool.storeVariables(var.getName(), var.getValue());
-  }
-  conETool.execute(project);
-]]>
+import com.nokia.helium.core.ant.types.VariableImpl;
+
+conETool =  ToolsProcess.getTool("ConE");
+vars = elements.get("arg");
+for (i = 0; i < vars.size(); ++i) {
+    var = (VariableImpl)vars.get(i);
+    conETool.storeVariables(var.getName(), var.getValue());
+}
+conETool.execute(project);
+    ]]>
     </scriptdef>
     
     
@@ -140,14 +144,15 @@
         <attribute name="filename"/>
         <attribute name="output"/>
         <attribute name="regexp"/>
-<![CDATA[
+        <![CDATA[
 import java.util.*;
 import java.io.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-if (attributes.get("filename") == null ||  attributes.get("output") == null || attributes.get("regexp") == null)
+if (attributes.get("filename") == null ||  attributes.get("output") == null || attributes.get("regexp") == null) {
     throw new BuildException("Filename/output/regexp attribute is not set for readLineMacro");
+}
     
 String search = attributes.get("regexp");
 String output = "";
@@ -155,24 +160,25 @@
 
 BufferedReader input =  new BufferedReader(new FileReader(attributes.get("filename")));
 try {
-        String line = null;
-        Matcher match = null;
-        while (( line = input.readLine()) != null) {
-             match = pattern.matcher(line);
-            if (match.find()) {
-                //self.log("Line containg " + search + " is = " + line + " returned vaue = " + match.group(1));
-                int checkIndex = output.indexOf(match.group(1), 0);
-                if (checkIndex == -1 ) {
-                   output = output + match.group(1) + ",";
-                }
+    String line = null;
+    Matcher match = null;
+    while (( line = input.readLine()) != null) {
+        match = pattern.matcher(line);
+        if (match.find()) {
+            //self.log("Line containg " + search + " is = " + line + " returned vaue = " + match.group(1));
+            int checkIndex = output.indexOf(match.group(1), 0);
+            if (checkIndex == -1 ) {
+                output = output + match.group(1) + ",";
             }
         }
-    } catch (IOException ex) {
-      ex.printStackTrace();
     }
-    project.setNewProperty(attributes.get("output") , output);
+}
+catch (IOException ex) {
+    ex.printStackTrace();
+}
+project.setNewProperty(attributes.get("output") , output);
 
-]]>
+        ]]>
     </scriptdef>
 
     
@@ -180,16 +186,17 @@
     <scriptdef name="echoFileMacro" language="beanshell" uri="http://www.nokia.com/helium">
         <attribute name="file"/>
         <![CDATA[        
-        //Open the file for reading
-         try {
-            java.io.BufferedReader in = new java.io.BufferedReader(new java.io.FileReader(attributes.get("file")));
-            while ((thisLine = in.readLine()) != null) { // while loop begins here
-                 self.log(thisLine);
-            } // end while 
-        } catch (java.io.IOException e) {
-            self.log("Error: " + e);
-            throw e;
-        }        
+//Open the file for reading
+try {
+    java.io.BufferedReader in = new java.io.BufferedReader(new java.io.FileReader(attributes.get("file")));
+    while ((thisLine = in.readLine()) != null) {
+        self.log(thisLine);
+    }
+}
+catch (java.io.IOException e) {
+    self.log("Error: " + e);
+    throw e;
+}        
         ]]>
     </scriptdef>
     
@@ -474,47 +481,36 @@
         <attribute name="result" default="not-set"/>
         <sequential>
             <var name="signal.errors.total" value="" unset="true"/>
-            <var name="base.signal.log.file" value="" unset="true"/>
-            <basename property="base.signal.log.file" file="@{logfile}"/>
             <if>
                 <isfalse value="@{skip.count}" />
                 <then>
                     <hlm:metadataCountSeverity severity="error" 
                         log="@{logfile}"
-                        db="${metadata.dbfile}" property="signal.errors.total"/>
+                        database="${metadata.dbfile}" property="signal.errors.total"/>
                 </then>
                 <else>
                     <if>
                         <equals arg1="@{result}" arg2="not-set"/>
                         <then>
-                            <fail message="result parameter is missing for signa macro" />
+                            <fail message="The result attribute is missing for signalMacro." />
                         </then>
                     </if>
                     <var name="signal.errors.total" value="@{result}" />
                 </else>
             </if>
-            <if>
-                <isset property="@{phase}.log.dir" />
-                <then>
-                    <var name="signal.log.dir" value="" unset="true"/>
-                    <property name="signal.log.dir" value="${@{phase}.log.dir}"/>
-                    <echo>signal.log.dir = ${signal.log.dir}</echo>
-                </then>
-                <else>
-                    <var name="signal.log.dir" value="" unset="true"/>
-                    <property name="signal.log.dir" value="${build.log.dir}"/>
-                </else>
-            </if>
             <hlm:generateBuildStatus output-dir="${build.signal.status.dir}/" 
-                file="${base.signal.log.file}" />
+                file="@{logfile}" />
+
             <!-- signal for errors -->
-            <hlm:signal name="@{signal.input}" result="${signal.errors.total}" >
+            <var name="internal.signal.macro.log.basename" value="" unset="true"/> 
+            <basename property="internal.signal.macro.log.basename" file="@{logfile}" />
+            <hlm:signal name="@{signal.input}" result="${signal.errors.total}"
+                message="Found ${signal.errors.total} errors under @{logfile}.">
                 <signalNotifierInput>
                     <signalInput refid="@{signal.input}" />
                     <notifierInput>
-                        <fileset casesensitive="false" dir="${build.log.dir}" >
-                            <include name="**/${base.signal.log.file}*" />
-                        </fileset>
+                        <fileset casesensitive="false" dir="${build.signal.status.dir}"
+                            includes="${internal.signal.macro.log.basename}.status.html" />
                     </notifierInput>
                 </signalNotifierInput>
             </hlm:signal>
@@ -621,4 +617,122 @@
         ]]>
     </scriptdef>
     
+    <!--
+        The fileBackupMacro enables the user to take the backup of any file(s).
+        By default it will back up log files from srcdir to destdir.
+        e.g
+        <pre>
+            <hlm:fileBackupMacro srcDir="${compile.log.dir}" destDir="${compile.log.dir}/backuplogs" regExp="(.*?_compile.log)$"/>
+            <hlm:fileBackupMacro file="${compile.log.dir}/${build.id}.clean.cmaker.log"/>
+        </pre>
+    -->
+    <macrodef name="fileBackupMacro" uri="http://www.nokia.com/helium">
+        <attribute name="regExp" default=""/>
+        <attribute name="file" default=""/>
+        <attribute name="srcDir" default=""/>
+        <attribute name="destDir" default=""/>
+        <sequential>
+            <!--Check is it required to do failback up or need to take backup log files
+                from specified source dir to destination dir -->
+            <if>
+                <and>
+                    <not>
+                        <length string="@{file}" trim="true" length="0" when="greater"/>
+                    </not>
+                    <not>
+                        <length string="@{srcDir}" trim="true" length="0" when="greater"/>
+                    </not>
+                </and>
+                <then>
+                    <fail message="'fileBackupMacro' requires 'file' or 'srcdir' attributes set"/>
+                </then>
+            </if>
+            
+            <!-- Set the backup format for taking back up -->
+            <var name="files.backup.format" unset="true"/>
+            <tstamp>
+                <format property="files.backup.format" pattern="ddMMyyyyHHmmssSS" unit="millisecond"/>
+            </tstamp>
+            
+            <!-- Set dest dir if not set -->
+            <var name="files.dest.dir" unset="true"/>
+            <if>
+                <length string="@{destDir}" trim="true" length="0" when="greater"/>
+                <then>
+                    <property name="files.dest.dir" value="@{destDir}"/>
+                </then>
+                <else>
+                    <property name="files.dest.dir" value="@{srcDir}"/>
+                </else>
+            </if>
+            
+            <!-- Set dest dir if not set -->
+            <var name="files.regular.exp" unset="true"/>
+            <if>
+                <length string="@{regExp}" trim="true" length="0" when="greater"/>
+                <then>
+                    <property name="files.regular.exp" value="@{regExp}"/>
+                </then>
+                <else>
+                    <property name="files.regular.exp" value="^(.*?\.log)$"/>
+                </else>
+            </if>
+            
+            <!-- To validate the unittest cases.-->
+            <script language="beanshell"> <![CDATA[
+                backupFormat = project.getProperty("files.backup.format"); 
+                project.setProperty("file.backup.format",backupFormat);
+                ]]>
+            </script>
+                 
+            <!-- Check need to do file back up -->
+            <if>
+                <and>
+                    <length string="@{file}" trim="true" length="0" when="greater"/>
+                    <available file="@{file}"/>
+                </and>
+                <then>
+                    <basename property="file.name" file="@{file}"/>
+                    <dirname property="file.dir.path" file="@{file}"/>
+                    <copy file="@{file}" tofile="${file.dir.path}/${file.name}.${files.backup.format}.bak" overwrite="true" failonerror="${failonerror}"/>
+                </then>
+            </if>
+            
+            <!-- Check need to do mutliple files back up -->
+            <if>
+                <and>
+                    <length string="@{srcDir}" trim="true" length="0" when="greater"/>
+                    <available file="@{srcDir}" type="dir"/>
+                </and>
+                <then>
+                    <mkdir dir="${files.dest.dir}"/>
+                    <copy todir="${files.dest.dir}" overwrite="true" failonerror="${failonerror}">
+                        <regexpmapper from="${files.regular.exp}" to="\1.${files.backup.format}.bak" casesensitive="false"/>
+                        <fileset dir="@{srcDir}"/>
+                    </copy>
+                </then>
+            </if>
+        </sequential>
+    </macrodef>
+    
+    <!-- Macro to generate an Ant database file for Helium. 
+        
+    @scope private
+    -->
+    <macrodef name="databaseMacro" uri="http://www.nokia.com/helium">
+        <attribute name="file"/>
+        <attribute name="scope"/>
+        <sequential>
+            <mkdir dir="${basedir}/build"/>
+            <hlm:database output="@{file}" scope="@{scope}">
+                <fileset dir="${helium.dir}">
+                    <include name="config/signaling_config_default.ant.xml"/>
+                    <include name="config/stages_config_default.ant.xml"/>
+                    <include name="config/metadata_filter_config_default.ant.xml"/>
+                    <include name="tools/**/*.antlib.xml"/>
+                </fileset>
+            </hlm:database>
+        </sequential>
+    </macrodef>
+    
 </antlib>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/default_config.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,594 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : default_config.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="default_config" xmlns:hlm="http://www.nokia.com/helium">
+    <description>
+    Default Helium configuration.
+    </description>
+    
+    <!-- The path where Helium-specific outputs are written to.
+    @type string
+    @scope private
+    -->
+    <property name="helium.build.dir" location="${helium.dir}/build"/>
+   
+    <!-- Location of generated logging config.
+    @type string
+    @scope private
+    -->
+    <property name="logging.output.file" location="${cache.dir}/logging.${env.PID}.conf" />
+    <fmpp sourceFile="${helium.dir}/config/logging.conf.ftl" outputFile="${logging.output.file}" quiet="true">
+        <data expandProperties="yes">
+            ant: antProperties()
+        </data>
+    </fmpp>
+     
+    <!-- Properties
+    ======================================================================-->
+    <!-- Used to specify which team configuration is being used. These configuration files are under /mc/mc_build/teams.
+    @type string
+    -->
+    <property name="team" value="${env.TEAM}"/>
+
+    <!-- See if 'bn' is defined as a shortcut for build.number. -->
+    <if>
+        <isset property="bn"/>
+        <then>
+            <!-- Build number
+            @type integer
+            @scope public
+            -->
+            <property name="build.number" value="${bn}"/>
+        </then>
+    </if>
+    
+    <!-- If build.drive not define then search the next free drive -->
+    <if>
+        <and>
+            <not>
+                <isset property="build.drive"/>
+            </not>    
+            <os family="windows"/>
+        </and>
+        <then>
+            <!-- used to track if build.drive has predefined or not
+            @type flag
+            @scope private
+            -->
+            <property name="build.drive.notdefined" value="true"/> 
+            <exec osfamily="windows" executable="python" failonerror="true" outputproperty="build.drive">
+                <arg line="-m searchnextdrive"/>               
+            </exec>
+            <if>
+                <equals arg1="${build.drive}" arg2="Error: No free drive!"/>
+                <then>            
+                    <fail message="ERROR: Failed to assign build drive, please check you are not running out of drives." />    
+                </then>
+            </if>
+            <mkdir dir="${env.TEMP}/helium/temp_drive"/>
+            <exec osfamily="windows" executable="subst" failonerror="false">
+                <arg value="${build.drive}" />
+                <arg value="${env.TEMP}/helium/temp_drive" />
+            </exec>
+            <script language="jython" setbeans="false">
+                <![CDATA[
+import os
+import java.lang.Runtime
+import java.lang.Thread
+class UnsubstListener(java.lang.Thread):
+    def run(self):
+        java.lang.Runtime.getRuntime().exec("subst /d " + project.getProperty("build.drive"))
+if os.sep == '\\':
+    java.lang.Runtime.getRuntime().addShutdownHook(UnsubstListener())
+              ]]>
+            </script>
+            <echo> Using build drive ${build.drive} </echo>
+        </then>
+    </if>
+    
+    <!-- For unix os prep.build.dir is equivalent to build.drive -->
+    <condition property="prep.build.dir" value="${build.drive}">
+        <and>
+            <isset property="build.drive"/>
+            <os family="unix"/>
+        </and>
+    </condition>
+    
+    <!--* @property core.build.version
+    This Defaults to the ${major.version}.${minor.version} combo and is available so that 1 number can be used (dot can be removed)
+    @type string
+    @scope private
+    -->
+    
+    <!-- Set core build version depending the value set for ${major.version}.${minor.version} -->
+    <condition property="core.build.version" value="${major.version}.${minor.version}" else="${env.USERNAME}">
+        <and>
+            <isset property="major.version"/>
+            <isset property="minor.version"/>
+        </and>
+    </condition>
+    
+    <!--* @property read.build.int
+    If defined, indicates that the build number should be read from an incrementing text file.
+    @type string
+    @scope public
+    -->
+    <!--* @property build.tag
+    If defined, defines the prefix for the build number when it is read from an incrementing text file.
+    @type string
+    @scope public
+    -->
+    <if>
+        <and>
+            <isset property="read.build.int"/>
+            <not>
+                <isset property="build.number"/>
+            </not>
+        </and>
+        <then>
+            <if>
+                <isset property="build.tag"/>
+                <then>
+                    <property name="build.tag.ext" value="${build.tag}."/>
+                </then>
+                <else>
+                    <property name="build.tag.ext" value=""/>
+                    <property name="build.tag" value=""/>
+                </else>
+            </if>
+            <!-- Use an internal directory to store text files for assigning build number information. -->
+            <!-- The directory where the build integer database text files are stored.
+            @type string
+            @scope private
+            -->
+            <property name="build.int.db.dir" location="${publish.root.dir}/internal/build_int_db"/>
+            <mkdir dir="${build.int.db.dir}"/>
+            <property name="build.int.db.file" value="${build.int.db.dir}/${build.name}_${core.build.version}_${build.tag}_build_int_db.txt"/>
+            <if>
+                <available file="${build.int.db.file}"/>
+                <then>
+                    <echo>Reading from existing build number property file.</echo>
+                    <property file="${build.int.db.file}"/>
+                    <echo>Build int = ${build.int}</echo>
+                    <!-- Read the comments in the file too, for history information. -->
+                    <loadfile property="build.int.db.file.comments" srcFile="${build.int.db.file}">
+                        <filterchain>
+                            <linecontains>
+                                <contains value="# history: "/>
+                            </linecontains>
+                        </filterchain>
+                    </loadfile>
+                    <!-- Set the property in case nothing was found. -->
+                    <property name="build.int.db.file.comments" value=""/>
+                    <echo>History comments:
+${build.int.db.file.comments}</echo>
+                    <!-- Build number
+                    @type integer
+                    @scope public
+                    -->
+                    <property name="build.number" value="${build.tag.ext}${build.int}"/>
+                    <echo>Writing incremented build int back to file.</echo>
+                    <propertyfile file="${build.int.db.file}" comment="build.int database file">
+                        <entry key="build.int" type="int" default="001" operation="+" pattern="000"/>
+                    </propertyfile>
+                    <tstamp>
+                        <format property="build.int.db.file.tstamp" pattern="dd/MM/yyyy-HH:mm:ss"/>
+                    </tstamp>
+                    <concat destfile="${build.int.db.file}" append="true">
+${build.int.db.file.comments}
+# history: ${env.COMPUTERNAME};${env.USERNAME};${build.int.db.file.tstamp};${build.int}
+                    </concat>
+                </then>
+                <else>
+                    <echo>Build number property file not found. Creating a new one.</echo>
+                    <property name="new.build.int" value="001"/>
+                    <!-- Build number
+                    @type integer
+                    @scope public
+                    -->
+                    <property name="build.number" value="${build.tag.ext}${new.build.int}"/>
+                    <echo>Build number = ${build.number}</echo>
+                    <propertyfile file="${build.int.db.file}" comment="build.int database file">
+                        <entry key="build.int" type="int" default="001" operation="+" pattern="000"/>
+                    </propertyfile>
+                </else>
+            </if>
+        </then>
+    </if>
+
+
+    <!-- Define a number of properties that should be consistent amongst all builds. They can be overridden
+    within any config or team Ant file though. -->
+    <!-- A general label for this type of build. Currently if not defined, product.name will be used to set this property, but this will likely be removed in future.
+    @type string
+    @editable required
+    -->
+    <property name="build.name" value="helium"/>
+    
+    <!--* @property build.version
+    Version of the build.
+    @type string
+    @scope private
+    -->
+    <!-- Set build version depending the value set to core.build.version and build.number -->
+    <condition property="build.version" value="${core.build.version}.${build.number}" else="${env.USERNAME}">
+        <and>
+            <isset property="core.build.version"/>
+            <isset property="build.number"/>
+        </and>
+    </condition>
+    
+    
+    <!-- A unique ID for the build.
+    @type string
+    @scope private
+    -->
+    <property name="build.id" value="${build.name}_${build.version}"/>
+    <!-- The general type of the build. This is used for checking the tools environment. Potential values include core, ido, product.
+    @type string
+    -->
+    <property name="build.type" value="core"/>
+    <condition property="epocroot" value="${env.EPOCROOT}" else="${env.EPOCROOT}/">
+        <matches pattern="^.*[\\/]$" string="${env.EPOCROOT}" />
+    </condition>
+    <!-- The data model XML file for the Ant configuration.
+    @type string
+    @scope private
+    -->
+    <property name="data.model.file" location="${helium.dir}/config/helium_data_model.xml"/>
+    <!-- The data model XML file for the Ant configuration parsed.
+    @type string
+    @scope private
+    -->
+    <property name="data.model.parsed" location="${helium.build.dir}/datamodel.out"/>
+    <condition property="data.model.xsl" value="${helium.dir}/extensions/nokia/config/helium_nokia_data_model.xsl" else="${helium.dir}/config/helium_data_model.xsl">
+        <available file="${helium.dir}/extensions/nokia/config/helium_nokia_data_model.xsl"/>
+    </condition>
+    <!-- Location of helium database
+    @type string
+    @scope private
+    -->
+    <property name="database.file" location="${basedir}/build/database.xml"/>
+    <!-- Directory where CCM operations will be performed.
+    @type string
+    -->
+    <property name="ccm.base.dir" location="${ccm.home.dir}\${minor.version}"/>
+    <!-- This is the directory where the build area is prepared. Once created it is substed to the build.drive.
+    @type string
+    @scope private
+    -->
+    <property name="prep.build.dir" location="${prep.root.dir}/${build.id}"/>
+    <!-- This is the directory where build output is placed.
+    @type string
+    @scope private
+    -->
+    
+    <!-- If build.drive not define then prep.buil.dir is the value for build.drive for unix os -->
+    <condition property="build.drive" value="${prep.build.dir}">
+        <and>
+            <not>
+                <isset property="build.drive"/>
+            </not>    
+            <os family="unix"/>
+        </and>
+    </condition>
+    
+    <property name="build.output.dir" location="${build.drive}/output"/>
+    <!-- This is where the diamonds output XML files are stored.
+    @type string
+    @scope private
+    -->
+    <property name="diamonds.build.output.dir" location="${build.output.dir}/diamonds"/>
+    <!-- This is the directory where sisfiles are placed.
+    @type string
+    @scope private
+    -->
+    <property name="build.sisfiles.dir" location="${build.output.dir}/sisfiles"/>
+    <!-- This is the directory where build area is archived after the build has finished.
+    @type string
+    @scope private
+    -->
+    <property name="zips.build.dir" location="${build.output.dir}/build_area/engineering_english"/>
+    <!-- This is the directory where build area is archived after the localisation.
+    @type string
+    @scope private
+    -->
+    <property name="zips.loc.dir" location="${build.output.dir}/build_area/localised"/>
+    <!-- The directory where subcon zips are stored.
+    @type string
+    @scope private
+    -->
+    <property name="subcon.zips.dir" location="${build.output.dir}/build_area/subcon"/>
+    <!-- This is the directory where flash files are archived.
+    @type string
+    @scope private
+    -->
+    <property name="zips.flashfiles.dir" location="${build.output.dir}/zips_flashfiles"/>
+    <!-- This is where the build logs are stored.
+    @type string
+    @scope private
+    -->
+    <property name="build.log.dir" location="${build.output.dir}/logs"/>
+    <!-- This is where the signal related files are stored.
+    @type string
+    @scope private
+    -->
+    <property name="build.signal.status.dir" location="${build.log.dir}/signals"/>
+    <!-- This is the email template path where it updates the build status based on metadata database contents. The default file could (email_status_orm.html.ftl under tools\common\template\log)be used as the base and any additional info could be added
+    @type string
+    -->
+    <property name="build.status.email.template" location="${helium.dir}/tools/common/templates/log/email_status_orm.html.ftl" />
+    <!-- Location of build metadata database.
+    @type string
+    @scope private
+    -->
+    <condition property="metadata.dbfile" value="${build.log.dir}/${build.id}_metadata_db" else="${build.log.dir}/${build.id}${env.PID}_metadata_db">
+        <isset property="build.number"/>
+    </condition>
+    
+    <!-- Directory to store temporary files generated during the process.
+    @type string
+    @scope private
+    -->
+    <property name="temp.build.dir" location="${build.output.dir}/temp_build_files"/>
+    <!-- The 'failonerror' attribute for exec tasks.
+    @type boolean
+    @scope public
+    -->
+    <property name="failonerror" value="false"/>
+    <!-- Maximum allowable errors in a build.
+    @type number
+    -->
+    <property name="build.errors.limit" value="0"/>
+    <!-- Unsubsted drive after build finished. If not defined then helium should left the drive as subst. Set the value as "yes" if you want to unsubst after build finished.
+    @type string
+    -->
+    <property name="unsubst.after.build" value="no"/>
+    <!-- display warnings at build startup if required properties are not defined.
+    @type string
+    @scope private
+    -->
+    <property name="validate.properties.at.startup" value="yes"/>
+    <!-- A unique name for the WA Sources ZIP file.
+    @type string
+    @scope private
+    -->
+    <property name="zip.wa.file" value="${build.drive}/output/src/${build.id}_sources.zip"/>
+    <!-- The location and name of the target times log file. Default value is: ${build.log.dir}/${build.id}_targetTimesLog.csv
+    @type string
+    -->
+    <property name="target.times.log.file" value="${build.log.dir}/${build.id}_targetTimesLog.csv"/>
+
+    <!-- Cache related properties. -->
+    <!-- Directory where Helium can store files on a temporary basis for a user per build.
+    @type string
+    @scope private
+    -->
+    <property name="build.cache.dir" location="${cache.dir}/${build.id}"/>
+    <!-- Directory where Helium can store log files on a temporary basis for a user per build.
+    @type string
+    @scope private
+    -->
+    <property name="build.cache.log.dir" location="${build.cache.dir}/logs"/>
+    <mkdir dir="${build.cache.log.dir}"/>
+    
+    <!-- Path location for the memory tracing data captured by the TracingLogger.
+    @type string
+    @scope private
+    -->
+    <property name="tracing.csv.file" location="${build.cache.dir}/logs/${build.id}_traces.csv"/>
+    
+    <!-- Publish dir configuration. Defines subdir first and next toplevel properties. -->
+    <!-- Subdir part of the publish dir, relative to publish.root.dir
+    @type string
+    -->
+    <property name="publish.subdir" value="${build.name}/builds/${core.build.version}/${build.id}"/>
+    <!-- Subdir part of the publish release dir, relative to publish.root.dir
+    @type string
+    @scope private
+    -->
+    <property name="publish.release.subdir" value="${build.name}/releases/${core.build.version}/${build.id}"/>
+    <!-- Directory where the build is published (includes build.id)
+    @type string
+    -->
+    <property name="publish.dir" location="${publish.root.dir}/${publish.subdir}"/>
+    <!-- The directory where the release of this build is published to on the local network.
+    @type string
+    @scope private
+    -->
+    <property name="publish.release.dir" location="${publish.root.dir}/${publish.release.subdir}"/>
+    <condition property="is.published" else="false">
+        <or>
+            <istrue value="${publish.enabled}"/>
+            <isset property="publish"/>
+        </or>
+    </condition>
+    
+    <!-- The directory where flash images of build can be found
+    @type string
+    @scope private
+    -->
+    <property name="release.images.dir" value="${build.output.dir}/release_flash_images"/>
+    <!-- Defines location of binaries created in build. Used in check-capability target while generating capability scan report.
+    @type string
+    @scope private
+    -->
+    <property name="binary.root" value="${build.drive}/epoc32/release/armv5/urel" />
+    <!-- Location of python library
+    @type string
+    @scope private
+    -->
+    <property name="python.dir" value="${helium.dir}/external/python/lib"/>
+    <!-- @type string
+    @scope private
+    -->
+    <property name="python.tools" value="${helium.dir}/external/python/bin"/>
+
+    <!-- EBS is selected as the default build system, but ec for Electric Cloud could be used. -->
+    <!-- This specifies which build system is used. Default for this is ebs You can use ec for Electric Cloud..
+    @type string
+    -->
+    <property name="build.system" value="ebs"/>
+    <!-- Path for the output XML file generated by genxml used as input to EBS or EC.
+    @type string
+    @scope private
+    -->
+    <property name="genxml.output.file" location="${temp.build.dir}/${build.id}.${sysdef.configuration}.xml" />
+    <!-- The path of the generated canonical System Definition file that contains all the input System Definition file content.
+    @type string
+    @scope private
+    -->
+    <property name="canonical.sysdef.file" value="${build.output.dir}/build/canonical_system_definition.xml"/>
+    <!-- @type string
+    @scope private
+    -->
+    <property name="build.system.${build.system}" value="Not used"/>
+    <!-- This is the file where build summary is stored.
+    @type string
+    @scope private
+    -->
+    <property name="build.summary.file" location="${build.log.dir}/summary/${build.id}_summary.log.xml"/>
+    <property name="error.summary.file" location="${build.log.dir}/summary/${build.id}_error_summary.log.xml"/>
+    <!-- Defines name of the log file.
+    @type string
+    @scope private
+    -->
+    <property name="build.log" value="${build.log.dir}/${build.id}_main.ant.log"/>
+
+    <!-- Path where ant XML files dynamically downloaded from jar file.
+    @type string
+    @scope private
+    -->
+    <property name="antlib.import.module.path" location="${helium.dir}/tools/hlm-antlib-imports"/>
+    
+    <!-- Following are temporarily defined here until global tools available-->
+    <!-- This specifies the directory where Electric Cloud history files are stored. Currently defined in helium.ant.xml and mapped related to publish.root.dir
+    @type string
+    @scope private
+    -->
+    <property name="ec.history.dir" location="${publish.root.dir}\${product.family}\ec_history"/>
+    <!-- Version of build
+    @type string
+    -->
+    <property name="release.label" value="${build.version}"/>
+    <!-- mode is either serial / parallel - default is parallel
+    @type string
+    -->
+    <property name="ec.mode" value="parallel" />
+    <!-- Setting this to "1" will force xml2mak to generate only warnings (instead of errors) for duplicate components in the component list
+    @type string
+    @scope private
+    -->
+    <property name="ec.allow.duplicates" value="0" />
+    <!-- Defines log file where to record archiving of engineering english area.
+    @type string
+    @scope private
+    -->
+    <property name="zip.ee.log.file" location="${build.log.dir}/${build.id}_ee_zip.log" />
+    <!-- The path to the localization zipping log file.
+    @type string
+    @scope private
+    -->
+    <property name="zip.localised.log.file" location="${build.log.dir}/${build.id}_localised_zip.log" />
+    <!-- Defines log file where to record archiving of subcon environment.
+    @type string
+    @scope private
+    -->
+    <property name="zip.subcon.log.file" value="${build.log.dir}/${build.id}_subcon_zip.log" />
+    <!-- The log file name for zipping subcon_roms.
+    @type string
+    @scope private
+    -->
+    <property name="zip.subcon_roms.log.file" location="${build.log.dir}/${build.id}_subcon_roms_zip.log" />
+    <!-- The log file name for zipping trace_roms.
+    @type string
+    @scope private
+    -->
+    <property name="zip.trace_roms.log.file" location="${build.log.dir}/${build.id}_trace_roms_zip.log" />
+    <!-- target to be executed in case of exceptions (mainly to generate the summary and raise signal).
+    @type string
+    @scope private
+    -->
+    <property name="exceptions.target" value="hlm-exception-handler"/>
+    <!-- The tools dependencies Ivy settings configuration file.
+    @type string
+    -->
+    <property name="tools.ivy.config.file" location="${helium.dir}/config/ivy/tools_ivy_settings.xml" />
+    
+    <!-- A file where persistent properties for a build should be stored.
+    @type string
+    @scope private
+    -->
+    <property name="build.property.cache.file" location="${diamonds.build.output.dir}/build_properties_cache.txt" />
+    
+    <!-- Level of ant logging.
+    @type string
+    -->
+    <property name="ant.loglevel" value="verbose"/>
+    
+    <!-- Default number of threads is 2 * NUMBER_OF_PROCESSORS, but this can be overridden by defining the
+    property manually. -->
+    <if>
+        <not>
+            <isset property="number.of.threads"/>
+        </not>
+        <then>
+            <if>
+                <isset property="env.NUMBER_OF_PROCESSORS"/>
+                <then>
+                    <math result="number.of.threads" operand1="${env.NUMBER_OF_PROCESSORS}" operation="*" operand2="2" datatype="int"/>
+                </then>
+                <else>
+                    <!-- how many parallel threads can run
+                    @type string
+                    @scope public
+                    -->
+                    <property name="number.of.threads" value="2"/>
+                </else>
+            </if>
+        </then>
+    </if>
+    
+    <!--* @property product.family
+    In product builds defines the product family that the build product belong to.
+    @type string
+    @editable required
+    @scope public
+    -->
+    
+    <!--* @property product.list
+    In product builds defines the list of products that are build in the configuration. Property is used in rom image creation, localisation release notes creation and data packaging.
+    @type string
+    @editable required
+    @scope public
+    -->
+     
+    <!--* @property diamonds.build.tags
+    
+    @type string
+    @editable optional
+    @scope public
+    -->
+
+</project>
+
+
--- a/buildframework/helium/tools/common/docs.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/docs.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -44,6 +44,13 @@
     -->
     <property name="api.rst.doc.src.dir" location="${helium.dir}/doc/api_rst" />
     
+    <!-- Location of helium database
+    @type string
+    @scope private
+    -->
+    <property name="public.database.file" location="${basedir}/build/public_database.xml"/>
+    
+    
     <!-- A list of source paths for RST documentation to be built. -->
     <resources id="textdoc.paths">
         <path>
@@ -80,6 +87,19 @@
     </target>
     
     
+    <!-- Generates an Ant XML database file showing only public content.
+    @scope private    
+    -->    
+    <target name="docs-database">
+        <hlm:database output="${public.database.file}" scope="public" filesetonly="true">
+            <fileset dir=".">
+                <include name="**/*.ant.xml"/>
+                <include name="**/build.xml"/>
+            </fileset>
+        </hlm:database>
+    </target>
+    
+    
     <!-- Creates images of the dependencies for all Ant targets.
         
     This includes creating a cmap file that is included in the HTML document,
@@ -90,7 +110,7 @@
         <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})
+                doc: xml(${public.database.file})
             </data>
         </fmpp>
         <for param="dot.file" parallel="true" threadCount="${number.of.threads}">
@@ -122,7 +142,7 @@
               replaceExtension="html.ftl, html">
             <data expandProperties="yes">
                 ant: antProperties()
-                doc: xml(${database.file})
+                doc: xml(${public.database.file})
             </data>
         </fmpp>
     </target>
@@ -136,14 +156,14 @@
               replaceExtension="rst.ftl, rst">
             <data expandProperties="yes">
                 ant: antProperties()
-                doc: xml(${database.file})
+                doc: xml(${public.database.file})
             </data>
         </fmpp>
     </target>
     
     
     <!-- Builds the Helium API documentation. -->
-    <target name="helium-apidocs" depends="clean-helium-apidocs,database,
+    <target name="helium-apidocs" depends="clean-helium-apidocs,docs-database,
                     helium-api-dependency-images,helium-api-rst-docs"/>
 
     
@@ -166,6 +186,7 @@
                         <data expandProperties="yes">
                             ant: antProperties()
                             project: antProject()
+                            doc: xml(${public.database.file})
                         </data>
                     </fmpp>
                 </sequential>
@@ -282,7 +303,7 @@
     
     
     <!-- Generate rst files for docs -->
-    <target name="prep-textdocs">
+    <target name="prep-textdocs" depends="docs-database">
         <echo>Building docs into ${doc.build.dir}.</echo>
         
         <delete dir="${doc.build.dir}/.doctrees"/>
@@ -292,6 +313,7 @@
             <!-- default doc content is always processed first -->
             <path>
                 <pathelement path="${helium.dir}/doc/default"/>
+                <pathelement path="${helium.dir}/doc/src/manual"/>
             </path>
             <resources refid="textdoc.paths"/>
         </resources>
@@ -323,8 +345,6 @@
     -->
     <target name="build-textdocs">
         <hlm:rstMacro />
-        
-        <copy file="${database.file}" todir="${doc.build.dir}"/>
     </target>
     
     
--- a/buildframework/helium/tools/common/helium_docs.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/helium_docs.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -42,68 +42,7 @@
             </data>
         </fmpp>
     </target>
-
-    
-    <!-- Macro to generate the tools dependency xml output. -->
-    <macrodef name="createToolsTableMacro" uri="http://www.nokia.com/helium">
-        <attribute name="dir"/>
-        <attribute name="failonerror"/>
-        <attribute name="configs"/>
-        <sequential>
-            <ivy:configure file="${tools.ivy.config.file}" override="true"/>
-            <ivy:resolve file="${helium.dir}/config/ivy/ivy.xml" conf="@{configs}" haltonfailure="@{failonerror}"/>
-            <ivy:report todir="@{dir}" outputpattern="tool-dependencies-[conf].xml"
-                        conf="@{configs}" xml="true" graph="false" xsl="false"/>
-        </sequential>
-    </macrodef>
-
-    
-    <!-- Generates the tools dependency xml output. used in the retrieving Helium section to
-    list the tools used within Helium. -->
-    <target name="tools-rst-table">
-        <hlm:createToolsTableMacro dir="${doc.build.dir}/ivy" failonerror="false" 
-            configs="core,ido"/>
-        <fmpp sourceFile="${helium.doc.src.dir}/helium_custom/manual/tool-dependencies.rst.ftl" includes="*.dot.ftl"
-              outputFile="${doc.temp.dir}/manual/tool-dependencies.rst_include"
-              replaceExtension="dot.ftl, dot">
-            <data expandProperties="yes">
-                doc: xml(${doc.build.dir}/ivy/tool-dependencies-ido.xml)
-            </data>
-        </fmpp>
-    </target>
-    
-    
-    <!-- Create a complete dependency graph of Helium libraries. 
         
-    Currently this does not work correctly but it is useful for future testing of repreport. -->
-    <target name="libraries-dependencies">
-        <ivy:settings file="${tools.ivy.config.file}"/>
-        <!--<ivy:resolve file="${helium.dir}/config/ivy/ivy.xml" conf="" haltonfailure="false"/>-->
-        <delete file="@{dir}/ivy-repository-report.xml"/>
-        <ivy:repreport todir="${doc.build.dir}/ivy" organisation="S60_SAM"
-                    xml="true" graph="false" xsl="false"/>
-    </target>
-    
-    <!-- Generate Python API documentation using epydoc. -->
-    <target name="python-apidocs">
-        <fileset id="python.library.files" dir="${helium.dir}">
-            <include name="extensions/nokia/tools/common/python/lib/**/*.py"/>
-            <include name="sf/python/**/*.py"/>
-            <include name="nokia/python/**/*.py"/>
-        </fileset>
-        <mkdir dir="${doc.build.dir}/api/python"/>
-        <pathconvert pathsep=" " property="epydoc.python.modules.path">
-            <fileset refid="python.library.files"/>
-        </pathconvert>
-        <echo>Python modules path: ${epydoc.python.modules.path}</echo>
-        <exec executable="python" dir="${doc.build.dir}" failonerror="true">        
-            <arg line="${python.tools}/epydoc"/>
-            <arg value="-v"/>
-            <arg value="--config=${helium.dir}/config/epydoc.conf"/>
-            <arg value="--exclude=sgmllib"/>
-            <arg line="${epydoc.python.modules.path}"/>
-        </exec>
-    </target>
         
     <!-- Builds the Helium API documentation. -->
     <target name="helium-apidocs" depends="clean-helium-apidocs,database,
@@ -138,10 +77,11 @@
                 <include name="*/python/*" />
             </dirset>
             <sequential>
-                <copy todir="${doc.temp.dir}/helium-antlib">
+                <copy todir="${doc.temp.dir}/helium-antlib" flatten="true">
                     <fileset dir="@{dir}/">
                         <include name="*.rst"/>
                     </fileset>
+                    <fileset dir="@{dir}/" includes="doc/*" excludes="**/distribution.policy.S60" />
                 </copy>
             </sequential>
         </for>
@@ -170,7 +110,7 @@
 import helium.documentation
 
 old_db_file = urllib.urlopen(r'${last.major.release.database.url}')
-writer = helium.documentation.APIDeltaWriter(old_db_file, r'${database.file}')
+writer = helium.documentation.APIDeltaWriter(old_db_file.read(), open(r'${database.file}').read())
 writer.write(r'${doc.build.dir}/api_changes.xml')
         </hlm:python>
         <if>
@@ -386,7 +326,7 @@
         <script language="jython" setbeans="false">
 import java.io
 import java.util.jar
-antlibsDir = java.io.File('external/antlibs')
+antlibsDir = java.io.File('external/antlibs2')
 print antlibsDir
 jarFiles = antlibsDir.listFiles()
 for jar in jarFiles:
@@ -415,8 +355,7 @@
     
     
     <fileset id="jar.files" dir="${helium.dir}">
-        <include name="external/antlibs2/**/*.jar"/>
-        <include name="extensions/nokia/external/antlibs/**/*.jar"/>
+        <include name="external/antlibs2/*.jar"/>
     </fileset>
     
     
--- a/buildframework/helium/tools/common/libs.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/libs.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -25,7 +25,6 @@
     <description>
         Ant task definition declarations.
     </description>
-
     
     <path id="lib.path">
         <fileset dir="${helium.dir}/external/antlibs2" includes="**/*.jar"/>
@@ -48,7 +47,20 @@
     <!-- Nokia internal tasks. -->
     <taskdef resource="com/nokia/ant/antlib.xml" classpathref="lib.path" uri="http://www.nokia.com/helium"/>
     <taskdef resource="com/nokia/helium/ant/data/antlib.xml" classpathref="lib.path" uri="http://www.nokia.com/helium"/>
-    
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    <taskdef resource="com/nokia/helium/environment/ant/antlib.xml" classpathref="lib.path" uri="http://www.nokia.com/helium"/>
+    <taskdef resource="com/nokia/helium/signal/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    <taskdef resource="com/nokia/helium/scm/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    <taskdef resource="com/nokia/helium/metadata/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    <taskdef resource="com/nokia/helium/quality/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    <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" />
+    <taskdef resource="com/nokia/helium/sysdef/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef resource="com/nokia/helium/internaldata/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+
     <!-- Nokia internal types. -->
     <typedef resource="com/nokia/helium/ant/coverage/antlib.xml" uri="http://www.nokia.com/helium"/>
         
--- a/buildframework/helium/tools/common/python/scripts/filter_metadatalog.py	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-#============================================================================ 
-#Name        : filter_metadatalog.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:
-#===============================================================================
-""" plugin that gets copied to raptor folder so that when raptor (SBS) runs it
-    knows the format of the log files.
-"""
-
-import os
-import sys
-import filter_interface
-from sbsscanlogmetadata import SBSScanlogMetadata
-
-class FilterMetadataLog(filter_interface.Filter):
-    """filter used by raptor for scanning metadata logs"""
-
-    def open(self, raptor_instance):
-        """Open a log file for the various I/O methods to write to."""
-        self.raptor = raptor_instance
-        self.logFileName = self.raptor.logFileName
-        self.scanlog = SBSScanlogMetadata()
-
-        # insert the time into the log file name
-        if self.logFileName:
-            self.logFileName.path = self.logFileName.path.replace("%TIME",
-                    self.raptor.timestring)
-            try:
-                dirname = str(self.raptor.logFileName.Dir())
-                if dirname and not os.path.isdir(dirname):
-                    os.makedirs(dirname)
-            except Exception:
-                return False
-            return  self.scanlog.initialize(self.logFileName)
-        else:
-            self.out = sys.stdout
-        return True
-
-    def write(self, text):
-        """write the text to the opened file"""
-        return self.scanlog.write(text)
-
-    def summary(self):
-        """write the summary file"""
-        return self.scanlog.summary()
-
-    def close(self):
-        """close the log file"""
-        return self.scanlog.close()
--- a/buildframework/helium/tools/common/python/scripts/sbsscanlogmetadata.py	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-#============================================================================ 
-#Name        : sbsscanlogmetadata.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:
-#===============================================================================
-"""parses the raptor metadata logs and separates the info out into HTML and XML
-   logs for writing to diamonds and other logs"""
-    
-import os
-import sys
-import re
-import datetime
-from optparse import OptionParser
-
-
-IGNORE_TEXT_REG_EX = "warning: no newline at end of file"
-
-STREAM_REGEX =  {   "clean" : [r'<clean', r'</clean'],
-                    "what" : [r'<whatlog', r'</whatlog'],
-                    "warning" : [r'<warning', r'</warning']
-                }
-
-class SBSScanlogMetadata(object):
-    """parses the raptor metadata logs and separates the info out into HTML and 
-    XML logs for writing to diamonds and other logs"""
-
-    def initializeLogPath(self):
-        """retrieve the log file names from the environment variables """
-        index = self.logFileName.rfind(".")
-        if index < 0:
-            index = len(self.logFileName)
-        for stream in STREAM_REGEX.keys():
-            self.stream_path[stream] = self.logFileName[:index] + "." + stream + \
-                        self.logFileName[index:]
-        if os.environ.has_key('SBS_CLEAN_LOG_FILE'):
-            self.stream_path['clean'] = os.environ['SBS_CLEAN_LOG_FILE']
-        if os.environ.has_key('SBS_WHAT_LOG_FILE'):
-            self.stream_path['what'] = os.environ['SBS_WHAT_LOG_FILE']
-            
-    def initialize(self, logFile):
-        """Initialize helium log filter"""
-        self.ignoreTextCompileObject = re.compile(IGNORE_TEXT_REG_EX);
-        self.logFileName = str(logFile)
-        self.streamStatus = {}
-        self.streams = {}
-        self.stream_path = {}
-        self.start_time = datetime.datetime.now()
-        self.loggerout = open(self.logFileName,"w")
-        self.compiled_stream_object = {}
-        print "logName: %s\n" % self.logFileName
-        self.initializeLogPath()
-        for stream in STREAM_REGEX.keys():
-            self.compiled_stream_object[stream] = []
-            self.streams[stream] = open(self.stream_path[stream], "w")
-            self.streamStatus[stream] = False
-            self.streams[stream].write(\
-"""<?xml version="1.0" encoding="ISO-8859-1" ?>
-<buildlog sbs_version="" xmlns="http://symbian.com/xml/build/log" xmlns:progress="http://symbian.com/xml/build/log/progress" 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">""")
-            for  searchString in STREAM_REGEX[stream]:
-                self.compiled_stream_object[stream].append(re.compile(searchString))
-        return True
-
-    def open(self, logFile):
-        """ open the log file"""
-        self.logFileName = str(logFile)
-        return self.initialize(logFile)
-        
-        
-    def write(self, text):
-        """ callback function which is to process the logs"""
-        stream_list = STREAM_REGEX.keys()
-        for textLine in text.splitlines():
-            textLine = textLine + '\n'
-            if textLine.startswith("<?xml ") or textLine.startswith("<buildlog ") \
-                or textLine.startswith("</buildlog"):
-                self.loggerout.write(textLine)
-                continue
-            if(self.ignoreTextCompileObject.search(textLine)):
-                continue
-            for stream in stream_list:
-                if( (not self.streamStatus[stream]) and self.compiled_stream_object[stream][0].search(textLine)!= None):
-                    self.streamStatus[stream] = True
-                if (self.streamStatus[stream] and self.compiled_stream_object[stream][1].search(textLine)!= None):
-                    self.streams[stream].write(textLine)
-                    self.streamStatus[stream] = False
-                    break
-    
-                if(self.streamStatus[stream]):
-                    if textLine.startswith("<?xml ") or textLine.startswith("<buildlog ") \
-                        or textLine.startswith("</buildlog"):
-                        continue
-                    self.streams[stream].write(textLine)
-                    break
-
-            self.loggerout.write(textLine)
-        return True
-        
-    def summary(self):
-        """Write Summary"""
-        sys.stdout.write("sbs: build log in %s\n" % str(self.logFileName))
-        return False
-
-    def close(self):
-        """Close the log file"""
-
-        try:
-            self.loggerout.close()
-            for stream in self.streams.keys():
-                self.streams[stream].write('</buildlog>')
-                self.streams[stream].close()
-            return True
-        except:
-            self.loggerout = None
-            self.streams = None
-        return False
-
-if __name__ == "__main__":
-    # standalone app
-    _cli = OptionParser(usage="%prog [options]")
-    _cli.add_option("--log", help="Raptor log file")
-    _cli.add_option("--output", help="Raptor log file")
-                   
-    _opts, _ = _cli.parse_args()
-    if not _opts.log:
-        _cli.print_help()
-        sys.exit(-1)
-
-    _sbsFilter = SBSScanlogMetadata()
-    _sbsFilter.open(_opts.output)
-
-    _logFile = open(_opts.log, 'r')
-
-    for line in _logFile:
-        _sbsFilter.write(line)
-
-    _sbsFilter.summary()
-    _sbsFilter.close()
\ No newline at end of file
--- a/buildframework/helium/tools/common/python/scripts/scripttests/__init__.py	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-#============================================================================ 
-#Name        : __init__.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:
-#===============================================================================
--- a/buildframework/helium/tools/common/python/scripts/scripttests/test_filter_metadatalog.py	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,257 +0,0 @@
-#============================================================================ 
-#Name        : test_filter_metadatalog.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:
-#===============================================================================
-
-""" Test cases for filter meta data logs.
-
-"""
-
-# pylint: disable-msg=E1101
-
-import logging
-import os
-import sys
-import time
-import mocker
-import re
-import tempfile
-import shutil
-
-_logger = logging.getLogger('test.test_filter_metadatalog')
-logging.basicConfig(level=logging.DEBUG)
-
-TEMP_PATH = tempfile.mkdtemp()
-#NOTE: THE COMMENTED OUT CODE IS REQUIRED WHEN RUNNING THIS TEST USING THE PT TARGET
-#WITH THE COMMENTED OUT CODE IT DOES NOT WORK IN THE FULL UNITTEST TARGET DUE TO RAPTOR.PY
-#FILE BEING CALLED WITHOUT ALL THE ENVIRONMENT VARIABLES SET WHEN RUN SINGLY AND THEY ARE SET WHEN
-#RUN AS PART OF THE UNITTEST TARGET.
-
-PYTHON_FILE_NAME = os.path.join(TEMP_PATH, 'raptor.py')
-FILTER_FILE_NAME = os.path.join(TEMP_PATH, 'filter_interface.py')
-
-sys.path = [TEMP_PATH] + sys.path
-
-def setup_module():
-    """ Setup for test_filter_metadata """
-    #in order to allow the filter_metadata.py file to compile we need to create a dummy 
-    #raptor.py file as this is part of SBS and not present here, the classes and objects 
-    #it uses from raptor.py file are created in this file, the same goes for the file filter_interface.py
-    #does not exist so create empty python.py file
-    f_handle = open(PYTHON_FILE_NAME, "w")
-    f_handle.write("class testRaptor():\n")
-    f_handle.write("    def testRaptorFunc(self):\n")
-    f_handle.write("        return True \n")
-    f_handle.close()
-    #does not exist so create empty python.py file
-    f_handle = open(FILTER_FILE_NAME, "w")
-    f_handle.write("class Filter():\n")
-    f_handle.write("    def testFilterFunc(self):\n")
-    f_handle.write("        return True \n")
-    f_handle.close()
-
-
-def teardown_module():
-    """ Teardown test_filter_metadata. """
-    print("teardown called")
-    if os.path.exists(TEMP_PATH):
-        shutil.rmtree(TEMP_PATH)
-
-# regex for "bare" drive letters  
-DRIVERE = re.compile('^[A-Za-z]:$')
-
-# are we on windows, and if so what is the current drive letter
-ISWIN = sys.platform.lower().startswith("win")
-if ISWIN:
-    DRIVE = re.match('^([A-Za-z]:)', os.getcwd()).group(0)
-
-# Base class
-class Path(object):
-    """This class represents a file path.                                      
-                                                                               
-    A generic path object supports operations without needing to know          
-    about Windows and Linux differences. The standard str() function can       
-    obtain a string version of the path in Local format for use by             
-    platform-specific functions (file opening for example).                    
-                                                                               
-    We use forward slashes as path separators (even on Windows).               
-                                                                               
-    For example,                                                               
-                                                                               
-      path1 = generic_path.Path("/foo")                                        
-      path2 = generic_path.Path("bar", "bing.bang")                            
-                                                                               
-      print str(path1.Append(path2))                                           
-                                                                               
-    Prints /foo/bar/bing.bang   on Linux                                       
-    Prints c:/foo/bar/bing.bang   on Windows (if c is the current drive)       
-    """                                                                        
-
-    def __init__(self, *arguments):
-        """construct a path from a list of path elements"""
-        
-        if len(arguments) == 0:
-            self.path = ""
-            return
-        
-        list = []
-        for i, arg in enumerate(arguments):
-            if ISWIN:
-                if i == 0:
-                    # If the first element starts with \ or / then we will
-                    # add the current drive letter to make a fully absolute path
-                    if arg.startswith("\\\\"):
-                        list.append(arg) # A UNC path - don't mess with it
-                    elif arg.startswith("\\") or arg.startswith("/"):
-                        list.append(DRIVE + arg)
-                    # If the first element is a bare drive then dress it with a \
-                    # temporarily otherwise "join" will not work properly.
-                    elif DRIVERE.match(arg):
-                        list.append(arg + "\\")
-                    # nothing special about the first element
-                    else:
-                        list.append(arg)
-                else:
-                    if arg.startswith("\\\\"):
-                        raise ValueError("non-initial path components must not start with \\\\ : %s" % arg)
-                    else:
-                        list.append(arg)
-                if ";" in arg:
-                    raise ValueError("An individual windows Path may not contain ';' : %s" % arg)
-            else:
-                list.append(arg)
-      
-        self.path = os.path.join(*list)
-        
-        # normalise to avoid nastiness with dots and multiple separators
-        # but do not normalise "" as it will become "."
-        if self.path != "":
-            self.path = os.path.normpath(self.path)
-        
-        # always use forward slashes as separators
-        self.path = self.path.replace("\\", "/")
-        
-        # remove trailing slashes unless we are just /
-        if self.path != "/":
-            self.path = self.path.rstrip("/")
-
-    def Dir(self):
-        "return an object for the directory part of this path"
-        if DRIVERE.match(self.path):
-            return Path(self.path)
-        else:
-            return Path(os.path.dirname(self.path))
-    def __str__(self):
-        return self.path
-
-
-class Raptor(object):
-    """An instance of a running Raptor program.
-
-    When operated from the command-line there is a single Raptor object
-    created by the Main function. When operated by an IDE several Raptor
-    objects may be created and operated at the same time."""
-
-    def defaultSetUp(self):
-        """ setup some variables for use by the unit under test """
-        self.logFile = None #self.mocker.proxy(generic_path.Join)
-        self.summary = True
-        # things to initialise
-        self.starttime = time.time()
-        self.timestring = time.strftime("%Y-%m-%d-%H-%M-%S")
-        self.logFileName = Path(os.path.join(TEMP_PATH, 'makefile_2009-11-12-12-32-34.log'))
-
-class FilterMetaDataLogTest(mocker.MockerTestCase):
-    """ Tests the filter_metadataLog wrapper to the SBS plugin. 
-    The plugin uses the SBS API of open, write, summary and close. """
-
-#    def test_a_setupOK(self):       #need to call it this to get it executed in the right order (alphabetical)
-#        """test_a_setupOK: tests that we have imported the correct files and that they are present 
-#        before importing the file to be tested and having it fail due to missing files"""
-#        print("got to test-a-setup ")
-#        import filter_metadatalog
-#        print("got passed import filter file to test-a-setup ")
-#        #setup an instance of the class and test it exists OK
-#        obj = filter_metadatalog.raptor.testRaptor()
-#        result = obj.testRaptorFunc()
-#        assert result == True
-#        obj = filter_metadatalog.filter_interface.Filter()
-#        result = obj.testFilterFunc()
-#        assert result == True
-
-    def test_openWriteSummaryCloseInvalidData(self):
-        """test_openWriteSummaryCloseInvalidData: test the opening writing, summary and 
-        closing of the log file with invalid data."""
-        import filter_metadatalog
-        obj = self.mocker.patch(filter_metadatalog.SBSScanlogMetadata)
-        obj.initialize(mocker.ANY)
-        self.mocker.result(False)
-        self.mocker.replay()
-        
-        raptor_instance = Raptor()
-        raptor_instance.defaultSetUp()
-        raptor_instance.logFileName = Path("..")
-        filter_mLog = filter_metadatalog.FilterMetadataLog()
-        result = filter_mLog.open(raptor_instance)
-        assert result == False
-        result = filter_mLog.close()
-        assert result == False
-
-    def test_openValidData_default(self):
-        """test_openValidData_default: test the opening of the log file with valid data."""
-        import filter_metadatalog
-        obj = self.mocker.patch(filter_metadatalog.SBSScanlogMetadata)
-        obj.initialize(mocker.ANY)
-        self.mocker.result(True)
-        self.mocker.replay()
-        
-        raptor_instance = Raptor()
-        raptor_instance.defaultSetUp()
-        filter_mLog = filter_metadatalog.FilterMetadataLog()
-        result = filter_mLog.open(raptor_instance)
-        assert result == True
-
-    def test_openValidData_empty(self):
-        """test_openValidData_empty: test the opening of the log file with valid data."""
-        import filter_metadatalog
-        obj = self.mocker.patch(filter_metadatalog.SBSScanlogMetadata)
-        obj.initialize(mocker.ANY)
-        self.mocker.result(True)
-        self.mocker.replay()
-        
-        raptor_instance = Raptor()
-        raptor_instance.defaultSetUp()
-        raptor_instance.logFileName = Path("")
-        filter_mLog = filter_metadatalog.FilterMetadataLog()
-        result = filter_mLog.open(raptor_instance)
-        assert result == True
-
-    def test_openValidData_stdout(self):
-        """test_openValidData_stdout: test the opening of the log file with valid data."""
-        import filter_metadatalog
-        obj = self.mocker.patch(filter_metadatalog.SBSScanlogMetadata)
-        obj.initialize(mocker.ANY)
-        self.mocker.count(0, 0)
-        self.mocker.replay()
-        
-        raptor_instance = Raptor()
-        raptor_instance.defaultSetUp()
-        raptor_instance.logFileName = None
-        filter_mLog = filter_metadatalog.FilterMetadataLog()
-        result = filter_mLog.open(raptor_instance)
-        assert result == True
-
--- a/buildframework/helium/tools/common/python/scripts/scripttests/test_sbs.py	Wed Jun 16 16:51:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-#============================================================================ 
-#Name        : test_sbs.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:
-#===============================================================================
-"""Tests Raptor (SBS) log creation/scanning """
-import unittest
-import logging
-import sys
-import os
-import tempfile
-
-_logger = logging.getLogger('test.sbs')
-logging.basicConfig(level=logging.INFO)
-
-class SBSTest(unittest.TestCase):
-    """SBSTest: tests for raptor log creation"""
-        
-    def setUp(self):
-        """setUp: setup any params or variable required by all tests later"""
-        sys.path.append(os.path.join(os.environ['HELIUM_HOME'], 'tools/common/python/scripts'))
-        
-    def test_sbs(self):
-        """test_sbs: test SBSScanlogMetadata """
-        #import filter_metadatalog
-        import sbsscanlogmetadata
-        sbs = sbsscanlogmetadata.SBSScanlogMetadata()
-        (_, filename) = tempfile.mkstemp()
-        sbs.open(filename)
-        sbs.write(open(os.path.join(os.environ['TEST_DATA'], 'data/scanlog/all_regex_type.log')).read())
-        sbs.close()
\ No newline at end of file
--- a/buildframework/helium/tools/common/templates/db2xml.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/db2xml.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -24,8 +24,8 @@
 <log filename="${log}">
 <build>
 
-<#list table_info['select * from metadata INNER JOIN logfiles ON logfiles.id=metadata.logpath_id INNER JOIN priority ON priority.id=metadata.priority_id where priority=\'ERROR\' and path like \'${r\'%\'}${log}\''] as recordentry >
-<message priority="error"><![CDATA[${recordentry['data']}]]></message>
+<#list table_info['select * from metadata INNER JOIN logfiles ON logfiles.id=metadata.logfile_id INNER JOIN severity ON severity.id=metadata.severity_id where severity=\'ERROR\' and path like \'${r\'%\'}${log}\''] as recordentry >
+<message severity="error"><![CDATA[${recordentry['data']}]]></message>
 </#list>
 
 </build>
--- a/buildframework/helium/tools/common/templates/diamonds/build_roms_diamonds.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/diamonds/build_roms_diamonds.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -24,37 +24,40 @@
 
 <#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>
+    <images>
+        <#assign overallStatus = "ok">
         
-        <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 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.severity as p JOIN m.component as c where p.severity=\'ERROR\' and c.component=\'${component}\''] as m>
+            <#assign match = m.text?matches(".*?fpsx' - DOESN'T EXIST")>
+            <#if match>
+            <#assign status = "failed">
+            <#assign overallStatus = "failed">
+            </#if>
             </#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>
+            <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.severity as p JOIN m.component as c where p.severity=\'ERROR\' and c.component=\'${component}\''][0]}">
+                <#list db['jpa']['select m from MetadataEntry m JOIN m.logFile as l JOIN m.severity as p JOIN m.component as c where p.severity=\'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.severity as p JOIN m.component as c where p.severity=\'WARNING\' and c.component=\'${component}\''][0]}">
+                <#list db['jpa']['select m from MetadataEntry m JOIN m.logFile as l JOIN m.severity as p JOIN m.component as c where p.severity=\'WARNING\' and c.component=\'${component}\''] as m>
+                <warning>${m.text}</warning>
+                </#list>
+            </warnings>
+        </image>
+        </#list>
+        
+        <status>${overallStatus}</status>
+    </images>
 
 <#include "diamonds_footer.ftl">
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/templates/diamonds/confml-validate.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,30 @@
+  <#--
+============================================================================ 
+Name        : confml-validate.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">
+    <quality aspect="SW Configurability"> 
+        <#if (doc)?? >
+            <#list doc["diamonds-build/quality/summary"] as summary>
+                <summary message="${summary.@message}" value="${summary.@value}"/> 
+            </#list>
+        </#if>
+    </quality>
+<#include "diamonds_footer.ftl">
--- a/buildframework/helium/tools/common/templates/diamonds/diamonds_build.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/diamonds/diamonds_build.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -22,8 +22,15 @@
 <build>
     <category>${ant["build.family"]}</category>
     <name>${ant["build.id"]}</name>
-    <#if diamonds?keys?seq_contains("build.start.time")><started>${diamonds["build.start.time"]}</started></#if>
-    <#if diamonds?keys?seq_contains("build.end.time")><finished>${diamonds["build.end.time"]}</finished></#if>
+    <#if ant?keys?seq_contains("ecc.project")>
+    <project>${ant["ecc.project"]}</project>
+    <schedule>${ant["ecc.schedule"]}</schedule>
+    <timebox>${ant["ecc.ido.branch"]}</timebox>
+    <procedure>${ant["ecc.procedure"]}</procedure>
+    <includeinstats>${ant["ecc.include.in.stats"]}</includeinstats>
+    </#if>
+    <#if ant?keys?seq_contains("build.start.time")><started>${ant["build.start.time"]}</started></#if>
+    <#if ant?keys?seq_contains("build.end.time")><finished></finished></#if>
         <creator>${ant["env.USERNAME"]}</creator>
         <hostname>${ant["env.COMPUTERNAME"]}</hostname>
         <product>${ant["build.name"]}</product>
--- a/buildframework/helium/tools/common/templates/diamonds/diamonds_finish.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/diamonds/diamonds_finish.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -21,6 +21,6 @@
 -->
 <#include "diamonds_header.ftl"> 
   <build>
-    <#if diamonds?keys?seq_contains("build.end.time")><finished>${diamonds["build.end.time"]}</finished></#if>
+    <#if ant?keys?seq_contains("build.end.time")><finished>${ant["build.end.time"]}</finished></#if>
   </build>
 <#include "diamonds_footer.ftl"> 
\ No newline at end of file
--- a/buildframework/helium/tools/common/templates/diamonds/diamonds_macro.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/diamonds/diamonds_macro.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -102,4 +102,4 @@
         </components>
     </#if>
 </#macro>
-<#assign schema_version=21/>
\ No newline at end of file
+<#assign schema_version = 24/>
\ No newline at end of file
--- a/buildframework/helium/tools/common/templates/diamonds/diamonds_signal.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/diamonds/diamonds_signal.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -1,6 +1,6 @@
 <#--
 ============================================================================ 
-Name        : finish.xml.ftl 
+Name        : diamonds_signal.xml.ftl 
 Part of     : Helium 
 
 Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
@@ -21,21 +21,13 @@
 -->
 <#include "diamonds_header.ftl"> 
   <signals>
-      <#assign diamondsignalname = ""/>
-      <#assign diamondkeys = diamondSignal?keys>
-      <#list diamondkeys as diamondkey>
-      <#if diamondkey?contains("diamond.signal.name")>
-      <#list diamondkey?split(".") as index>
-      <#assign signalIndex = index/>
-      </#list>
+      <#list ant?keys as diamondskey>
+      <#if diamondskey?starts_with("diamond.signal.name.")>
+      <#assign signalIndex = diamondskey?split(".")?last />
       <signal>
-      <#list diamondkeys as diamondkey>
-      <#if diamondkey?contains("${signalIndex}")>
-          <#if diamondkey?contains("diamond.signal.name.${signalIndex}")><name>${diamondSignal[diamondkey]}</name></#if>
-          <#if diamondkey?contains("diamond.error.message.${signalIndex}")><message>${diamondSignal[diamondkey]}</message></#if>
-          <#if diamondkey?contains("diamond.time.stamp.${signalIndex}")><timestamp>${diamondSignal[diamondkey]}</timestamp></#if>
-      </#if>
-      </#list>
+          <#if ant?keys?seq_contains("diamond.signal.name.${signalIndex}")><name>${ant["diamond.signal.name.${signalIndex}"]?xml}</name></#if>
+          <#if ant?keys?seq_contains("diamond.error.message.${signalIndex}")><message>${ant["diamond.error.message.${signalIndex}"]?xml}</message></#if>
+          <#if ant?keys?seq_contains("diamond.time.stamp.${signalIndex}")><timestamp>${ant["diamond.time.stamp.${signalIndex}"]?xml}</timestamp></#if>
       </signal>
       </#if>
       </#list>
--- a/buildframework/helium/tools/common/templates/diamonds/diamonds_status.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/diamonds/diamonds_status.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -21,6 +21,6 @@
 -->
 <#include "diamonds_header.ftl"> 
   <build>
-    <#if diamonds?keys?seq_contains("build.status")><status>${diamonds["build.status"]}</status></#if>
+    <#if ant?keys?seq_contains("build.status")><status>${ant["build.status"]}</status></#if>
   </build>
 <#include "diamonds_footer.ftl"> 
\ No newline at end of file
--- a/buildframework/helium/tools/common/templates/diamonds/faults_metadata_orm.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/diamonds/faults_metadata_orm.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -31,27 +31,34 @@
     </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 \'%\\_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>
+        <total severity="error">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.severity 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.severity=\'ERROR\''][0]}</total>
+        <total severity="warning">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.severity 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.severity = \'WARNING\''][0]}</total>
+        <total severity="warning_rvct_other">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.severity 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.severity = \'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 \'%\\_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>
+        <total severity="warning_rvct_bad">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.severity 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.severity=\'CRITICAL\''][0]}</total>
+    <#list table_info['native:java.lang.String']['select DISTINCT component.component from component INNER JOIN logfile ON logfile.logfile_id=component.logfile_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)=\'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>
+            <total severity="error">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.logFile as l JOIN m.severity as p JOIN m.component as c where UPPER(p.severity)=\'ERROR\' 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="warning">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.logFile as l JOIN m.severity as p JOIN m.component as c where UPPER(p.severity)=\'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.severity as p JOIN m.component as c where UPPER(p.severity)=\'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 \'%\\_clean\\_%compile.log\''] as component>
-        <component>${component}</component>
+    <#assign components = pp.newWritableSequence()>
+    <#list table_info['jpa']['select c from Component c JOIN c.logFile l WHERE l.path like \'%_compile.log\' and l.path not like \'%\\_clean\\_%compile.log\''] as component>
+        <#if (!components?seq_contains(component.component))>
+        <@pp.add seq=components value=component.component />
+        <component>
+            <name>${component.component}</name>
+            <#if component.sysdefUnit??>
+            <package>${component.sysdefUnit.sysdefComponent.sysdefCollection.sysdefPackage.packageId}</package>
+            </#if>
+        </component>
+        </#if>
     </#list>
     </components>
 <#include "diamonds_footer.ftl"> 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/templates/diamonds/iad-check-pkg-version_fmpp.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,31 @@
+<#--
+============================================================================ 
+Name        : iad-check-pkg-version_fmpp.xml.ftl
+Part of     : Helium
+
+Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+All rights reserved.
+This component and the accompanying materials are made available
+under the terms of the License "Eclipse Public License v1.0"
+which accompanies this distribution, and is available
+at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+Initial Contributors:
+Nokia Corporation - initial contribution.
+
+Contributors:
+
+Description:
+
+============================================================================
+-->
+<#include "diamonds_header.ftl">
+<#assign db = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "${dbPath}") >
+    <quality aspect="iad">
+        <summary message="IAD errors" value="${db['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.logFile as l JOIN m.severity as p where UPPER(p.severity)=\'ERROR\' and l.path LIKE \'%_iad_validation.log\''][0]}"/>
+        <#list db['jpa']['select m from MetadataEntry m JOIN m.logFile as l JOIN m.severity as p where UPPER(p.severity)=\'ERROR\' and l.path LIKE \'%_iad_validation.log\''] as m>
+        <message severity="error" type="IAD" message="${m.text}" />
+        </#list>
+    </quality>
+<#include "diamonds_footer.ftl">
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/templates/diamonds/publish.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,43 @@
+<#--
+============================================================================ 
+Name        : .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">
+<#if ant?keys?seq_contains("diamonds.files")>
+<files>
+    <#list ant['diamonds.files']?split(" ") as line>
+        <#if line?split(".")?last == "fpsx">
+    <file>
+        <name>${line?split("\\")?last}</name>
+        <url>${line}</url>
+        <type>flash_image</type>
+    </file>
+        </#if>
+        <#if line?split(".")?last == "html" || line?split(".")?last == "log">
+    <file>
+        <name>${line?split("\\")?last}</name>
+        <url>${line}</url>
+        <type>log</type>
+    </file>
+        </#if>
+    </#list>
+</files> 
+</#if>
+<#include "diamonds_footer.ftl"> 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/templates/diamonds/sbs-checksource_fmpp.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,31 @@
+<#--
+============================================================================ 
+Name        : sbs-checksource_fmpp.xml.ftl
+Part of     : Helium
+
+Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+All rights reserved.
+This component and the accompanying materials are made available
+under the terms of the License "Eclipse Public License v1.0"
+which accompanies this distribution, and is available
+at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+Initial Contributors:
+Nokia Corporation - initial contribution.
+
+Contributors:
+
+Description:
+
+============================================================================
+-->
+<#include "diamonds_header.ftl">
+<#assign db = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "${dbPath}") >
+    <quality aspect="checksource">
+        <summary message="Checksource errors" value="${db['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.logFile as l JOIN m.severity as p where UPPER(p.severity)=\'ERROR\' and l.path LIKE \'%.checksource.log\''][0]}"/>
+        <#list db['jpa']['select m from MetadataEntry m JOIN m.logFile as l JOIN m.severity as p where UPPER(p.severity)=\'ERROR\' and l.path LIKE \'%.checksource.log\''] as m>
+        <message severity="error" type="IAD" message="${m.text}" />
+        </#list>
+    </quality>
+<#include "diamonds_footer.ftl">
+
--- a/buildframework/helium/tools/common/templates/diamonds/tool.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/diamonds/tool.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -21,24 +21,26 @@
 -->
 <#include "diamonds_header.ftl"> 
 <#include "diamonds_macro.ftl">
-       <tools>        
+    <tools>
 <#if ant?keys?seq_contains("env.SYMSEE_VERSION")>         
         <tool>
-           <name>SymSEE</name>
-           <version>${ant["env.SYMSEE_VERSION"]}</version>
-         </tool>
+            <name>SymSEE</name>
+            <version>${ant["env.SYMSEE_VERSION"]}</version>
+        </tool>
 </#if>
 <#if (doc)??>
-<#list doc["ivy-report/dependencies/module"] as module>
-         <tool>
-           <name>${module.@name}</name>
-           <version>${module.revision.@name}</version>
-         </tool>
+<#list doc["environment/tool"] as tool>
+        <#if tool.path?length &gt; 0>
+        <tool>
+            <name>${tool.name}</name>
+            <version>${tool.version}</version>
+        </tool>
+        </#if>
 </#list>
 </#if>
-         <tool>
-           <name>Helium</name>
-           <version>${ant["helium.version"]}</version>
-         </tool>
-       </tools>
-<#include "diamonds_footer.ftl">        
\ No newline at end of file
+        <tool>
+            <name>Helium</name>
+            <version>${ant["helium.version"]}</version>
+        </tool>
+    </tools>
+<#include "diamonds_footer.ftl">
--- a/buildframework/helium/tools/common/templates/diamonds/validate-policy-log.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/diamonds/validate-policy-log.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -20,11 +20,11 @@
 ============================================================================
 -->
 <#include "diamonds_header.ftl"> 
-<policyvalidation>
+<quality aspect="policy">
 <#if (doc)??!""?keys?seq_contains('policyvalidation')>
 <#list doc['policyvalidation'].error as error>
-      <error type="${error.@type}" message="${error.@message}" value="${error.@value}"/>
+    <message severity="error" type="${error.@type}" message="${error.@message}" value="${error.@value}"/>
 </#list>
 </#if>
-</policyvalidation>
+</quality>
 <#include "diamonds_footer.ftl"> 
\ No newline at end of file
--- a/buildframework/helium/tools/common/templates/help_text.txt.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/help_text.txt.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -18,24 +18,29 @@
 Description:
 
 ============================================================================
---> 
-<#list xml["//target[name='${helpTarget}']"] as target>
+-->
+<#assign itemList = xml["//*[name='${helpItem}']"]/>
+<#if itemList?size &gt; 0>
+<#list itemList as item>
 
-Target ${target.name}:
+${item.name}
 -----------------------------
-Location: ${target.location}
+Location: ${item.location}
 
-<#if target.description?length &gt; 0>
+<#if (item.description)?has_content>
 Description:
-${target.description}
+${item.description}
 </#if>
-Documentation:<#recurse target.documentation>
+Documentation:<#recurse item.documentation>
+
+</#list>
 
-Property dependencies:
-<#list target.propertyDependency as property>
-* ${property}
-</#list>
-</#list>
+<#else>
+
+${helpItem}
+Documentation not found.
+</#if>
+
 
 <#macro tt> "<#recurse>" </#macro>
 
@@ -50,7 +55,12 @@
 <#macro li> * <#recurse>
 </#macro>
 
-<#macro b><#recurse>*</#macro>
+<#macro b><#recurse></#macro>
 
 <#macro @text>${.node?trim}</#macro>
 
+<#macro pre>
+
+
+    <#recurse></#macro>
+
--- a/buildframework/helium/tools/common/templates/ido/ido-ant-copy.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/ido/ido-ant-copy.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -25,7 +25,7 @@
         <parallel threadCount="${r'$'}{number.of.threads}">
         <#list data?keys as component>
             <sequential>
-                <#if ant?keys?seq_contains('ido.keep.old')>
+                <#if ((ant['keep.old.source.enabled']=="true") || ant?keys?seq_contains('ido.keep.old'))>
                 <delete dir="${data[component]}_old" failonerror="false"/>
                 <move file="${data[component]}" todir="${data[component]}_old" failonerror="false"/>
                 <#else>
@@ -46,7 +46,8 @@
                 <copy todir="${data[component]}" verbose="false" failonerror="false" overwrite="true">
                     <fileset dir="${component}" casesensitive="false" >
                         <exclude name="**/_ccmwaid.inf"/>
-                        <#if (!ant?keys?seq_contains('keep.internals'))>
+                        <exclude name="**/.ccmwaid.inf"/>
+                        <#if ((ant['keep.internal.folders.enabled'] == "false")&& (!ant?keys?seq_contains('keep.internals')))>
                         <exclude name="**/internal/**"/>
                         </#if>
                         <exclude name="**/.hg/**"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/templates/ido/ido-cenrep-gen.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,58 @@
+<#--
+============================================================================ 
+Name        : ido-cenrep-gen.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:
+
+============================================================================
+-->
+<#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader',
+        "${dbPath}") >
+
+<project name="cenrep-generation" default="all">
+    <#if os?lower_case?starts_with('win')>
+        <#assign exe_file="cmd.exe"/>
+    <#else>
+        <#assign exe_file="bash"/>
+    </#if>
+    <target name="ido-cenrep-generation">
+        <sequential>
+            <#list table_info['native:java.lang.String']['select distinct w.member FROM WhatLogEntry w where w.member like \'%.confml\''] as confmlfile>
+            <exec executable="${exe_file}" dir="${ant['build.drive']}/epoc32/tools" failonerror="false" output="${ant['post.log.dir']}/${ant['build.id']}_cenrep.cone.log">
+                <#if os?lower_case?starts_with('win')>
+                <arg value="/c"/>
+                <arg value="cone.cmd"/>
+                <#else>
+                <arg value="cone"/>
+                </#if>
+                <arg value="generate" />                            
+                <arg value="-p"/>
+                <arg value="${ant['build.drive']}\epoc32\rom\config\assets\s60" />
+                <arg value="-o" />
+                <arg value="${ant['build.drive']}\epoc32\release\winscw\urel\z" />
+                <arg value="-c"/>
+                <arg value="root.confml" />
+                <arg value="-i"/> 
+                <arg value="${confmlfile}" />
+            </exec>
+            </#list>
+        </sequential>
+    </target>
+    
+    <target name="all" depends="ido-cenrep-generation" />
+</project>
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/templates/ido/ido-confml-validate.ant.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,60 @@
+<#--
+============================================================================ 
+Name        : ido-confml-validate.ant.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:
+
+============================================================================
+-->
+<#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader',
+        "${dbPath}") >
+<?xml version="1.0"?>
+<project name="validate-confml" default="validate-confml-file">
+    
+    <target name="validate-confml-file">
+        <#if os?lower_case?starts_with('win')>
+            <#assign exe_file="cmd.exe"/>
+        <#else>
+            <#assign exe_file="bash"/>
+        </#if>
+        <sequential>
+            <exec executable="${exe_file}" dir="${ant['build.drive']}/epoc32/tools" failonerror="false" output="${ant['post.log.dir']}/${ant['build.id']}_validate_confml.log">
+                <#if os?lower_case?starts_with('win')>
+                <arg value="/c"/>
+                <arg value="cone.cmd"/>
+                <#else>
+                <arg value="cone"/>
+                </#if>
+                <arg value="validate" />                            
+                <#list table_info['native:java.lang.String']['select distinct w.member FROM WhatLogEntry w where w.member like \'%.confml\''] as confmlfile>
+                <arg value="--confml-file"/> 
+                <arg value="${confmlfile}" />
+                </#list>
+                <#list table_info['native:java.lang.String']['select distinct w.member FROM WhatLogEntry w where w.member like \'%.crml\''] as crmlfile>
+                <arg value="--implml-file"/> 
+                <arg value="${crmlfile}" />
+                </#list>
+                <arg value="--report-type"/> 
+                <arg value="xml" />
+                <arg value="--report"/>
+                <arg value="${ant['post.log.dir']}/${ant['build.id']}_validate_confml.xml" />
+            </exec>
+        </sequential>
+    </target>
+    
+</project>
+
+
--- a/buildframework/helium/tools/common/templates/ido/ido-robot-zip.ant.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/ido/ido-robot-zip.ant.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -23,9 +23,9 @@
 <project name="ido-zip" default="all">
     <target name="all">
         <delete file="${ant['build.output.dir']}/s60Sources.7z" failonerror="false"/>
-        <#if ((data?keys?size > 0) && (ant['do.robot.release']?split(';')?size > 0))>
+        <#if ((data?keys?size > 0) && (ant['robot.release.project']?split(';')?size > 0))>
             <#list data?keys as name>
-                <#list ant['do.robot.release']?split(',') as project>
+                <#list ant['robot.release.project']?split(',') as project>
                     <#if name?replace('\\', '/')?lower_case?contains("/${project}/${project}"?lower_case)>
                     <#-- 7za u test.7z  output/analysisdata/ -->
                     <exec executable="7za" dir="${name}/../">
--- a/buildframework/helium/tools/common/templates/log/build_status_orm.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/log/build_status_orm.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -23,10 +23,11 @@
 <build-status>
     <#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader',
         "${dbPath}") >
-    <#list table_info['jpa']['select p from Priority p'] as priority>
-        <#assign priority_count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN  m.logFile  as l JOIN m.priority as p where LOWER(l.path) like \'%${logpath?lower_case}%\' and UPPER(p.priority) like \'%${priority.priority}%\''][0]>
-        <#if (priority_count >= 0)>
-            <${priority.priority?lower_case} count= "${priority_count}" />
+    <#assign convertedLogFile = "${logpath}"?replace("\\","/")>
+    <#list table_info['jpa']['select p from Severity p'] as severity>
+        <#assign severity_count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN  m.logFile l where LOWER(l.path)=\'${convertedLogFile?lower_case}\' and m.severityId=${severity.id}'][0]>
+        <#if (severity_count >= 0)>
+            <${severity.severity?lower_case} count="${severity_count}" />
         </#if>
     </#list>
 </build-status>
\ No newline at end of file
--- a/buildframework/helium/tools/common/templates/log/cc_summary_metadata_orm.html.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/log/cc_summary_metadata_orm.html.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -25,7 +25,7 @@
  
 <h1>${ant['build.id']}</h1>
 
-<#if ant?keys?seq_contains('publish')>
+<#if ant?keys?seq_contains('publish.enabled') || ant?keys?seq_contains('publish')>
     <#if ant?keys?seq_contains('publish.dir.list')>
         <h2>Publish locations</h2>
         <p>
@@ -41,10 +41,10 @@
     </#if>
 </#if>
 
-<#list table_info['jpa']['select l from LogFile l where LOWER(l.path) like \'%_ccm_get_input.log%\''] as logfile>
+<#list table_info['jpa']['select l from LogFile l where LOWER(l.path) like \'%_ccm_get_input.log\''] as logfile>
 <h2>Synergy errors</h2>
     <p>
-    <#list table_info['native:com.nokia.helium.jpa.entity.metadata.MetadataEntry']['select * from metadataentry m INNER JOIN priority p ON p.priority_id=m.priority_id where m.logpath_id=${logfile.id} and ( UPPER(p.priority) like \'ERROR\' or UPPER(p.priority) like \'WARNING\' )'] as entry >
+    <#list table_info['jpa']['select m from MetadataEntry m JOIN m.severity p where m.logFileId=${logfile.id} and (p.severity=\'ERROR\' or p.severity=\'WARNING\' )'] as entry>
         ${entry.text}<br/>
     </#list>
     </p>
@@ -63,15 +63,11 @@
     <th width="15%">Notes</th>
 </tr>
 
-<#list table_info['jpa']['select c from Component c where c.logPathID=${logfile.id} ORDER BY c.component'] as component>
+<#list table_info['jpa']['select c from Component c where c.logFileId=${logfile.id} ORDER BY c.component'] as component>
 <tr>
 <td>${component.component}</td>
     <#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 c.id=${component.id} and w.missing=\'true\''][0]> 
-            <#assign count = count?number + count_missing?number>
-        </#if>
+        <#assign count =  table_info['jpasingle']['select count(m.id) from MetadataEntry m JOIN  m.severity as p JOIN m.component as c where (p.severity=\'${type?upper_case}\' and c.id=${component.id})'][0] >    
         <#if (count?number > 0)>
 <td align="center" bgcolor="#${colors[type]}">${count}</td>
         <#else>
@@ -86,7 +82,7 @@
 <#list table_info['jpa']['select l from LogFile l where LOWER(l.path) like \'%roms.log\''] as logfile>
     <h2>ROMs ${logfile.path}</h2>
         <p>
-    <#list table_info['native:com.nokia.helium.jpa.entity.metadata.MetadataEntry']['select * from metadataentry m where m.logpath_id=${logfile.id}'] as entry >
+    <#list table_info['jpa']['select m from MetadataEntry m where m.logFileId=${logfile.id}'] as entry>
         ${entry.text}<br/>
     </#list>
         </p>
@@ -95,7 +91,7 @@
 <#list table_info['jpa']['select l from LogFile l where LOWER(l.path) like \'%validate-policy.summary.xml\''] as logfile>
 <h2>Distribution Policy validation</h2>
         <p>
-        <#list table_info['native:com.nokia.helium.jpa.entity.metadata.MetadataEntry']['select * from metadataentry m where m.logpath_id=${logfile.id}'] as entry >
+        <#list table_info['jpa']['select m from MetadataEntry m where m.logFileId=${logfile.id}'] as entry>
             ${entry.text}<br/>
         </#list>
         </p>
--- a/buildframework/helium/tools/common/templates/log/email_status_orm.html.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/log/email_status_orm.html.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -88,10 +88,10 @@
         "${dbPath}") >
 
     <#assign convertedLogFile = "${logpath}"?replace("\\","/")>
-    <#assign logfile =  table_info['jpasingle']['select l from LogFile l where LOWER(l.path) like \'%${convertedLogFile?lower_case}\''][0]>
+    <#list table_info['jpa']['select l from LogFile l where LOWER(l.path)=\'${convertedLogFile?lower_case}\''] as logfile>
 
 
-<#assign error_count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority as p where m.logPathId=${logfile.id} and p.priority like \'%ERROR%\''][0]> 
+<#assign error_count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.severity as p where m.logFileId=${logfile.id} and p.severity=\'ERROR\''][0]> 
     <!-- section -->
     <#macro create_section title type>
            <div id="foldername">
@@ -105,19 +105,15 @@
 <#if (error_count > 0)>
         <span class="errormessage">
             ${logfile.path}...FAIL<br/>
-            <#list table_info['native:com.nokia.helium.jpa.entity.metadata.MetadataEntry']['select * from metadataentry INNER JOIN priority ON priority.priority_id=metadataentry.priority_id where UPPER(priority.priority) like \'%ERROR%\' and logpath_id=${logfile.id}'] as entry >
+            <#list table_info['jpa']['select e from MetadataEntry e JOIN e.severity s where s.severity=\'ERROR\' and e.logFileId=${logfile.id}'] as entry >
             <ul>
             ${entry.text}<br/>
             </ul>
             </#list>
-<#list table_info['jpa']['select distinct w FROM Component c, WhatLogEntry w WHERE c.logPathID=${logfile.id} AND c.id=w.componentID AND w.missing=1'] as entry>
-            <ul>
-MISSING: ${entry.member}<br/>
-            </ul>
-</#list>
         </span>
 <#else>
     <span class="okmessage">${logfile.path}...OK<br/></span>
 </#if>
+</#list>
 </body>
 </html>
\ No newline at end of file
--- a/buildframework/helium/tools/common/templates/log/scan2_orm.html.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/log/scan2_orm.html.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -37,15 +37,11 @@
     <td>${component.component}</td>
 <#--write each of the component tables information -->
 <td align="center">${hours?string?left_pad(2, "0")}:${minutes?string?left_pad(2, "0")}:${seconds?string?left_pad(2, "0")}</td>
-<#list color_list?keys as priority>
-    <#assign count =  table_info['jpasingle']['select count(m.id) from MetadataEntry as m JOIN  m.priority as p JOIN m.component as c where UPPER(p.priority) like \'%${priority?upper_case}%\' and c.id=${component.id}'][0] >
-    <#if priority == 'error' && !logfile?contains('_clean_')>
-        <#assign count_check_missing_files = table_info['jpasingle']['select Count(w.id) from WhatLogEntry w, Component c where c.component=\'${component.component}\' and c.logPathID=${logpath.id} and w.componentID=c.id and w.missing=1'][0]>
-        <#assign count = count + count_check_missing_files>
-    </#if>
+<#list color_list?keys as severity>
+    <#assign count =  table_info['jpasingle']['select count(m.id) from MetadataEntry as m JOIN  m.severity as p JOIN m.component as c where p.severity=\'${severity?upper_case}\' and c.id=${component.id}'][0] >
     <#if count &gt; 0>
-        <#assign color = color_list['${priority}']>
-        <td align="center" bgcolor="${color}"><a href="#section${priority}${href_c_id}">${count}</a></td>
+        <#assign color = color_list['${severity}']>
+        <td align="center" bgcolor="${color}"><a href="#section${severity}${href_c_id}">${count}</a></td>
     <#else>
         <td align="center">${count}</td>
     </#if>
@@ -56,33 +52,21 @@
 
 <#macro converttime time>${((time/3660)%60)?string?left_pad(2, "0")}:${((time/60)%60)?string?left_pad(2, "0")}:${(time%60)?string?left_pad(2, "0")}</#macro>
 
-<#macro print_list_text priority component href_id>
-<#assign count =  table_info['jpasingle']['select count(m.id) from MetadataEntry as m JOIN m.priority as p JOIN m.component as c where  UPPER(p.priority) like \'%${priority?upper_case}%\' and c.id=${component.id}'][0] >
-<#if priority == 'error' && !logfile?contains('_clean_')>
-    <#assign count_check_missing_files = table_info['jpasingle']['select Count(w.id) from WhatLogEntry w, Component c where c.component=\'${component.component}\' and c.logPathID=${logpath.id} and w.componentID=c.id and w.missing=1'][0]>
-    <#assign count = count + count_check_missing_files>
-</#if>
+<#macro print_list_text severity component href_id>
+<#assign count =  table_info['jpasingle']['select count(m.id) from MetadataEntry as m JOIN m.severity as p JOIN m.component as c where p.severity=\'${severity?upper_case}\' and c.id=${component.id}'][0] >
 <#if count?? && count?number &gt; 0>
 <#if "${component.component}" != "general">
         <h3><a name="section${href_id}">${component.component}(${count})</a></h3>
     <#else>
         <h3><a name="section${href_id}">Uncategorized(${count})</a></h3>
     </#if>
-<#list table_info['native:com.nokia.helium.jpa.entity.metadata.MetadataEntry']['select * from metadataentry INNER JOIN component ON component.component_id=metadataentry.component_id INNER JOIN priority ON priority.priority_id=metadataentry.priority_id where component.component_id=${component.id} and UPPER(priority.priority) like \'%${priority?upper_case}%\''] as entry >
-${logfile}:${entry.lineNumber}>${entry.text}<br />
-</#list>
-<#list table_info['jpa']['select distinct w FROM Component c, WhatLogEntry w, LogFile l WHERE c.logPathID = l.id and LOWER(l.path) not like \'%_clean_%\' and c.component=\'${component.component}\' AND c.logPathID=${logpath.id} AND c.id=w.componentID AND w.missing=1'] as entry>
-${logfile}: MISSING: ${entry.member}<br/>
+<#list table_info['jpa']['select e from MetadataEntry e JOIN e.severity s where e.componentId=${component.id} and s.severity=\'${severity?upper_case}\''] as entry>
+${logfile.path}:${entry.lineNumber}>${entry.text}<br />
 </#list>
 </#if>
 </#macro>
 
 <#macro component_check_error component count >
-<#if count &gt; 0>
-<#list table_info['native:com.nokia.helium.jpa.entity.metadata.WhatLogEntry']['select * from whatlogentry where COMPONENT_ID=${component.id} and missing=1'] as whatlogentry>
-${logpath.id}:${whatlogentry.member}<br/><br/>
-</#list>
-</#if>
 </#macro>
 
 <#macro add_severity_count severity, color, count>
@@ -97,14 +81,14 @@
 
 
 <#if (logfilename)??>
-    <#assign logfile = "${logfilename}"?replace("\\","/") >
+    <#assign logfilename_cleaned = "${logfilename}"?replace("\\","/") >
     <#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader',
         "${dbPath}") >
 <#-- overall summary -->
-<#assign logpath = table_info['jpasingle']['select l from LogFile l where LOWER(l.path) like \'%${logfile?lower_case}\''][0] >
-<#assign time = table_info['jpasingle']['select et from ExecutionTime et where et.logPathID=${logpath.id}'][0] >
+<#assign logfile = table_info['jpasingle']['select l from LogFile l where LOWER(l.path)=\'${logfilename_cleaned?lower_case}\''][0] >
+<#assign time = table_info['jpasingle']['select et from ExecutionTime et where et.logFileId=${logfile.id}'][0] >
 <html>
-<head><title>${logfile}</title></head>
+<head><title>${logfile.path}</title></head>
 <body>
 <h2>Overall</h2>
 <table border="1" cellpadding="0" cellspacing="0" width="100%%">
@@ -121,16 +105,16 @@
 <#-- need to create variables for the items to be displayed in the comment title Overall_Total
 doing this the long winded way because I could not find a way to add items to a hash in a loop -->
 <#assign color_list={'error': 'FF0000', 'warning': 'FFF000', 'critical': 'FF7000', 'remark': 'FFCCFF', 'info': 'FFFFFF'}>
-<#assign priority_ids = color_list?keys>
+<#assign severity_ids = color_list?keys>
 <td width="22%%">Total</td>
 <td width="12%%" align="center"><@converttime time=time.time /></td>
-<#assign count_check_errors = table_info['jpasingle']['select Count(w.id) from WhatLogEntry w JOIN w.component c where c.logPathID=${logpath.id} and w.missing=\'true\''][0]> 
-<#list priority_ids as priority>
-    <#assign count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority p where m.logPathId=${logpath.id} and UPPER(p.priority) like \'%${priority?upper_case}%\''][0]>
-    <#if  '${priority}' == 'error'  && !logfile?contains('_clean_')>
-        <#assign count = count + count_check_errors>
+<#assign count_check_errors = table_info['jpasingle']['select Count(w.id) from WhatLogEntry w JOIN w.component c where c.logFileId=${logfile.id} and w.missing=\'true\''][0]> 
+<#list severity_ids as severity>
+    <#assign count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.severity p where m.logFileId=${logfile.id} and p.severity=\'${severity?upper_case}\''][0]>
+    <#if  '${severity}' == 'error'  && !logfile.path?contains('_clean_')>
+        <#assign count = count>
     </#if>
-    <@add_severity_count severity='${priority}' color=color_list['${priority}'] 
+    <@add_severity_count severity='${severity}' color=color_list['${severity}'] 
         count = count />
 </#list>
 </tr>
@@ -138,7 +122,7 @@
 
 <#-- Summary for each component -->
 
-<h1>${logfile}</h1>
+<h1>${logfile.path}</h1>
 <h2>By Component</h2>
     <table border="1" cellpadding="0" cellspacing="0" width="100%%">
         <tr>
@@ -152,13 +136,13 @@
         </tr>
 
 <#assign c_id = 0>
-<#assign general_component_list = table_info['jpasingle']['select c from Component c where LOWER(c.component) like \'%general%\' and c.logPathID=${logpath.id}']>
+<#assign general_component_list = table_info['jpasingle']['select c from Component c where LOWER(c.component) like \'%general%\' and c.logFileId=${logfile.id}']>
 <#if general_component_list[0]?? >
 <#assign general_component = general_component_list[0] >
 <@print_component_summary component=general_component  href_c_id="${c_id}"/>
 <#assign c_id = c_id + 1>
 </#if>
-<#list table_info['jpa']['select c from Component c where c.logPathID=${logpath.id} and LOWER(c.component) not like \'%general%\' ORDER BY c.component'] as componentEntry>
+<#list table_info['jpa']['select c from Component c where c.logFileId=${logfile.id} and LOWER(c.component) not like \'%general%\' ORDER BY c.component'] as componentEntry>
 <@print_component_summary component=componentEntry href_c_id="${c_id}"/>
 <#assign c_id = c_id + 1>
 
@@ -166,18 +150,18 @@
 </table>
 
 <#-- Individual components status -->
-<#list priority_ids as p_id>
-<#assign p_count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority as p where m.logPathId=${logpath.id} and UPPER(p.priority) like \'%${p_id?upper_case}%\''][0]>
+<#list severity_ids as p_id>
+<#assign p_count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.severity as p where m.logFileId=${logfile.id} and p.severity=\'${p_id?upper_case}\''][0]>
 <#if p_count &gt; 0>
     <h3><a>${p_id} Details By Component</a></h3>
 </#if>
 <#assign href_cid = 0>
 <#if general_component??>
-    <@print_list_text priority="${p_id}" component=general_component href_id="${p_id}${href_cid}" /> 
+    <@print_list_text severity="${p_id}" component=general_component href_id="${p_id}${href_cid}" /> 
     <#assign href_cid = href_cid + 1>
 </#if>
-<#list table_info['jpa']['select c from Component c where c.logPathID=${logpath.id} and LOWER(c.component) not like \'%general%\' ORDER BY c.component'] as componentEntry>
-    <@print_list_text priority="${p_id}" component=componentEntry href_id="${p_id}${href_cid}" />
+<#list table_info['jpa']['select c from Component c where c.logFileId=${logfile.id} and LOWER(c.component) not like \'%general%\' ORDER BY c.component'] as componentEntry>
+    <@print_list_text severity="${p_id}" component=componentEntry href_id="${p_id}${href_cid}" />
     <#assign href_cid = href_cid + 1>
 </#list>
 </#list>
--- a/buildframework/helium/tools/common/templates/log/scan2_text_orm.html.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/log/scan2_text_orm.html.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -37,11 +37,11 @@
     <td>${component.component}</td>
 <#--write each of the component tables information -->
 <td align="center">${hours?string("00")}:${minutes?string("00")}:${seconds?string("00")}</td>
-<#list color_list?keys as priority>
-    <#assign count =  table_info['jpasingle']['select count(m.id) from MetadataEntry as m JOIN  m.priority as p JOIN m.component as c where UPPER(p.priority) like \'%${priority?upper_case}%\' and c.id=${component.id}'][0] >
+<#list color_list?keys as severity>
+    <#assign count =  table_info['jpasingle']['select count(m.id) from MetadataEntry as m JOIN  m.severity as p JOIN m.component as c where p.severity=\'${severity?upper_case}\' and c.id=${component.id}'][0] >
     <#if count &gt; 0>
-        <#assign color = color_list['${priority}']>
-        <td align="center" bgcolor="${color}"><a href="#section${priority}${href_c_id}">${count}</a></td>
+        <#assign color = color_list['${severity}']>
+        <td align="center" bgcolor="${color}"><a href="#section${severity}${href_c_id}">${count}</a></td>
     <#else>
         <td align="center">${count}</td>
     </#if>
@@ -50,8 +50,8 @@
 </tr>
 </#macro>
 
-<#macro print_list_text priority component href_id>
-<#assign count =  table_info['jpasingle']['select count(m.id) from MetadataEntry as m JOIN m.priority as p JOIN m.component as c where  UPPER(p.priority) like \'%${priority?upper_case}%\' and c.id=${component.id}'][0] >
+<#macro print_list_text severity component href_id>
+<#assign count =  table_info['jpasingle']['select count(m.id) from MetadataEntry as m JOIN m.severity as p JOIN m.component as c where p.severity=\'${severity?upper_case}\' and c.id=${component.id}'][0] >
 <#if count?? && count?number &gt; 0>
 <#if "${component.component}" != "general">
         <h3><a name="section${href_id}">${component.component}(${count})</a></h3>
@@ -59,7 +59,7 @@
         <h3><a name="section${href_id}">Uncategorized(${count})</a></h3>
     </#if>
 </#if>
-<#list table_info['native:com.nokia.helium.jpa.entity.metadata.MetadataEntry']['select * from metadataentry INNER JOIN component ON component.component_id=metadataentry.component_id INNER JOIN priority ON priority.priority_id=metadataentry.priority_id where component.component_id=${component.id} and UPPER(priority.priority) like \'%${priority?upper_case}%\''] as entry >
+<#list table_info['native:com.nokia.helium.jpa.entity.metadata.MetadataEntry']['select * from metadataentry INNER JOIN component ON component.component_id=metadataentry.component_id INNER JOIN severity ON severity.severity_id=metadataentry.severity_id where component.component_id=${component.id} and severity.severity=\'${severity?upper_case}\''] as entry >
 ${logfile}:${entry.lineNumber}>${entry.text}<br />
 </#list>
 </#macro>
@@ -90,7 +90,7 @@
     <#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader',
         "${dbPath}") >
 <#-- overall summary -->
-<#assign logpath = table_info['jpasingle']['select l from LogFile l where LOWER(l.path) like \'%${logfile?lower_case}\''][0] >
+<#assign logfile = table_info['jpasingle']['select l from LogFile l where LOWER(l.path) like \'${logfile?lower_case}\''][0] >
 <html>
 <head><title>${logfile}</title></head>
 <body>
@@ -110,12 +110,12 @@
 <#-- need to create variables for the items tobe displayed in the comment title Overall_Total
 doing this the long winded way because I could not find a way to add items to a hash in a loop -->
 <#assign color_list={'error': 'FF0000', 'warning': 'FFF000', 'critical': 'FF7000', 'remark': 'FFCCFF', 'info': 'FFFFFF'}>
-<#assign priority_ids = color_list?keys>
+<#assign severity_ids = color_list?keys>
 <td width="22%%">Total</td>
 <td width="12%%" align="center">${time}</td>
-<#list priority_ids as priority>
-    <@add_severity_count severity='${priority}' color=color_list['${priority}'] 
-        count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority p where m.logPathId=${logpath.id} and UPPER(p.priority) like \'%${priority?upper_case}%\''][0] />
+<#list severity_ids as severity>
+    <@add_severity_count severity='${severity}' color=color_list['${severity}'] 
+        count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.severity p where m.logFileId=${logfile.id} and p.severity=\'${severity?upper_case}\''][0] />
 </#list>
 </tr>
 </table>
@@ -137,31 +137,31 @@
         </tr>
 
 <#assign c_id = 0>
-<#assign general_component_list = table_info['jpasingle']['select c from Component c where LOWER(c.component) like \'%general%\' and c.logPathID=${logpath.id}']>
+<#assign general_component_list = table_info['jpasingle']['select c from Component c where LOWER(c.component) like \'%general%\' and c.logFileId=${logfile.id}']>
 <#if general_component_list[0]?? >
 <#assign general_component = general_component_list[0] >
 <@print_component_summary component=general_component  href_c_id="${c_id}"/>
 <#assign c_id = c_id + 1>
 </#if>
-<#list table_info['jpa']['select c from Component c where c.logPathID=${logpath.id} and LOWER(c.component) not like \'%general%\' ORDER BY c.component'] as componentEntry>
+<#list table_info['jpa']['select c from Component c where c.logFileId=${logfile.id} and LOWER(c.component) not like \'%general%\' ORDER BY c.component'] as componentEntry>
 <@print_component_summary component=componentEntry href_c_id="${c_id}"/>
 <#assign c_id = c_id + 1>
 </#list>
 </table>
 
 <#-- Individual components status -->
-<#list priority_ids as p_id>
-<#assign p_count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority as p where m.logPathId=${logpath.id} and UPPER(p.priority) like \'%${p_id?upper_case}%\''][0]>
+<#list severity_ids as p_id>
+<#assign p_count = table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.severity as p where m.logFileId=${logfile.id} and p.severity=\'${p_id?upper_case}\''][0]>
 <#if p_count &gt; 0>
     <h3><a>${p_id} Details By Component</a></h3>
 </#if>
 <#assign href_cid = 0>
 <#if general_component??>
-    <@print_list_text priority="${p_id}" component=general_component href_id="${p_id}${href_cid}" /> 
+    <@print_list_text severity="${p_id}" component=general_component href_id="${p_id}${href_cid}" /> 
     <#assign href_cid = href_cid + 1>
 </#if>
-<#list table_info['jpa']['select c from Component c where c.logPathID=${logpath.id} and LOWER(c.component) not like \'%general%\' ORDER BY c.component'] as componentEntry>
-    <@print_list_text priority="${p_id}" component=componentEntry href_id="${p_id}${href_cid}" />
+<#list table_info['jpa']['select c from Component c where c.logFileId=${logfile.id} and LOWER(c.component) not like \'%general%\' ORDER BY c.component'] as componentEntry>
+    <@print_list_text severity="${p_id}" component=componentEntry href_id="${p_id}${href_cid}" />
     <#assign href_cid = href_cid + 1>
 </#list>
 </#list>
--- a/buildframework/helium/tools/common/templates/log/summary_metadata_orm.html.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/templates/log/summary_metadata_orm.html.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -55,13 +55,13 @@
     </#if>
 </#macro>
 
-<#macro logfile_severity logname, priority, count, helium_node_id>
-    <@helium_message_box nodeid="${helium_node_id}" type="${priority}"  count="${count}"?number />
+<#macro logfile_severity logname, severity, count, helium_node_id>
+    <@helium_message_box nodeid="${helium_node_id}" type="${severity}" count="${count}"?number />
 </#macro>
 
 
-<#macro logfile_entry_detail text, priority, helium_node_id>
-    <@logentry "${text}", "${priority?lower_case}" />
+<#macro logfile_entry_detail text, severity, helium_node_id>
+    <@logentry "${text}", "${severity?lower_case}" />
 </#macro>
 
 <!-- Call the macros to render the log contents. -->
@@ -84,46 +84,31 @@
     <#assign helium_node_id = helium_node_id + 1>
     <#-- -->
     <@helium_logger_node_head nodeid="${helium_node_id}" title="${logentry.path}">
-        <#list table_info['jpa']['select p from Priority p where p.priority not like \'%DEFAULT%\''] as priority>
-        <#assign missing_count=0/>
-        <#if priority.priority == "ERROR">
-            <#assign missing_count=table_info['jpasingle']['select Count(w.id) from WhatLogEntry w JOIN w.component as c JOIN c.logFile as l where l.id=${logentry.id} and l.path not like \'%_clean_%compile.log\' and w.missing=1'][0]/>
-        </#if>        
-        <#assign count = missing_count + table_info['jpasingle']['select Count(m.id) from MetadataEntry m where m.priorityId = ${priority.id} and m.logPathId=${logentry.id}'][0]>
-            <@logfile_severity "${logentry.path}", "${priority.priority?lower_case}", 
+        <#list table_info['jpa']['select p from Severity p where p.severity not like \'INFO\''] as severity>
+        <#assign count=table_info['jpasingle']['select Count(m.id) from MetadataEntry m where m.severityId=${severity.id} and m.logFileId=${logentry.id}'][0]>
+            <@logfile_severity "${logentry.path}", "${severity.severity?lower_case}", 
                 "${count}", 
                 "${helium_node_id}" />
         </#list>
     </@helium_logger_node_head>
     <@helium_logger_node_content nodeid="${helium_node_id}">
-        <#list table_info['jpa']['select c from Component c where c.logPathID=${logentry.id}'] as component>
+        <#list table_info['jpa']['select c from Component c where c.logFileId=${logentry.id}'] as component>
             <#assign helium_node_id = helium_node_id + 1>
             <@helium_logger_node_head nodeid="${helium_node_id}" title="${component.component}">
-                <#list table_info['jpa']['select p from Priority p where p.priority not like \'%DEFAULT%\''] as priority>
-                    <#assign missing_count=0/>
-                    <#if priority.priority == "ERROR">
-                        <#assign missing_count=table_info['jpasingle']['select Count(w.id) from WhatLogEntry w JOIN w.component as c JOIN c.logFile as l where c.id=${component.id} and l.path not like \'%_clean_%compile.log\' and w.missing=1'][0]/>
-                    </#if>
-                    <@logfile_severity "${component.id}", "${priority.priority?lower_case}", 
-                            table_info['jpasingle']['select Count(m.id) from MetadataEntry m where m.priorityId=${priority.id} and m.componentId = ${component.id}'][0] + missing_count, 
+                <#list table_info['jpa']['select p from Severity p where p.severity not like \'INFO\''] as severity>
+                    <@logfile_severity "${component.id}", "${severity.severity?lower_case}", 
+                            table_info['jpasingle']['select Count(m.id) from MetadataEntry m where m.severityId=${severity.id} and m.componentId=${component.id}'][0], 
                             "${helium_node_id}" />
                 </#list>
             </@helium_logger_node_head>
             <@helium_logger_node_content nodeid="${helium_node_id}">
-                <#list table_info['jpa']['select p from Priority p'] as priority>
-                <#list table_info['native:com.nokia.helium.jpa.entity.metadata.MetadataEntry']['select * from metadataentry where metadataentry.component_id=${component.id} and metadataentry.priority_id = ${priority.id}'] as entry >
+                <#list table_info['jpa']['select p from Severity p'] as severity>
+                <#list table_info['jpa']['select m from MetadataEntry m where m.componentId=${component.id} and m.severityId=${severity.id}'] as entry>
                     <#if entry.text??>
-                    <#-- <#if sublog?node_name == "logfile"> --> 
-                        <@logfile_entry_detail "${entry.text}", "${priority.priority}", "${helium_node_id}" />
+                        <@logfile_entry_detail "${entry.text}", "${severity.severity?lower_case}", "${helium_node_id}" />
                     </#if>
-                    <#-- <#elseif sublog?node_name == "log">
-                        <@antlognode sublog/>
-                    </#if> -->
                 </#list>
             </#list>
-            <#list table_info['jpa']['select distinct w FROM WhatLogEntry w join  w.component as c JOIN c.logFile as l where c.id=${component.id} and l.path not like \'%_clean_%compile.log\' AND w.missing=1'] as entry>
-                <@logfile_entry_detail "MISSING: ${entry.member}", "ERROR", "${helium_node_id}" />
-            </#list>
             </@helium_logger_node_content>
         </#list>
     </@helium_logger_node_content>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/templates/quality/cone-validate.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,58 @@
+<#--
+============================================================================ 
+Name        : cone-validate.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:
+
+============================================================================
+-->
+
+<project name="cone-validate" default="all">
+    
+    <target name="product-cone-validate">
+        <#if os?lower_case?starts_with('win')>
+            <#assign exe_file="cmd.exe"/>
+        <#else>
+            <#assign exe_file="bash"/>
+        </#if>
+        <#list ant['product.list']?split(',') as product>
+        <sequential>
+            <echo>Validating cone configuration for ${product}_root.confml</echo>
+            <exec executable="${exe_file}" dir="${ant['build.drive']}/epoc32/tools" failonerror="false">
+                <#if os?lower_case?starts_with('win')>
+                <arg value="/c"/>
+                <arg value="cone.cmd"/>
+                <#else>
+                <arg value="cone"/>
+                </#if>
+                <arg value="validate" />
+                <arg value="--project"/>
+                <arg value="${ant['build.drive']}/epoc32/rom/config"/>
+                <arg value="--configuration"/>
+                <arg value="${product}_root.confml"/>
+                <arg value="--report-type"/> 
+                <arg value="xml" />
+                <arg value="--report"/>
+                <arg value="${ant['post.log.dir']}/${ant['build.id']}_validate_cone_${product}.xml" />
+            </exec>
+        </sequential>
+        </#list>
+    </target>
+    
+    <target name="all" depends="product-cone-validate" />
+</project>
+
+
--- a/buildframework/helium/tools/common/test/test_common.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/test/test_common.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -28,6 +28,7 @@
     <property environment="env"/>
     
     <property name="helium.dir" location="../../.." />
+    <property name="temp.dir" location="${helium.dir}/build/temp" />
     <import file="../../../build.xml"/>
         
     <target name="test-text-config">
@@ -270,6 +271,29 @@
         <hlm:grepMacro filename="${helium.dir}/tests/data/logs/test_log.log" regexp="([^\\]*.confml)$" output="confml.file.list"/>
         <au:assertPropertySet name="confml.file.list"/>
     </target>
+    
+    <target name="test-filebackup-attributes">
+        <au:expectfailure>
+            <hlm:fileBackupMacro/>
+        </au:expectfailure>
+    </target>
+    
+    <target name="test-single-file-backup">
+        <copy file="${helium.dir}/tests/data/logs/test_helium_dev_9.1.50_targetTimesLog.csv" tofile="${temp.dir}/test_helium_dev_9.1.50_targetTimesLog.csv"/>
+        <hlm:fileBackupMacro file="${temp.dir}/test_helium_dev_9.1.50_targetTimesLog.csv"/>
+        <au:assertFileExists file="${temp.dir}/test_helium_dev_9.1.50_targetTimesLog.csv.${file.backup.format}.bak"/>
+    </target>
+    
+    <target name="test-folder-file-backup">
+        <hlm:fileBackupMacro srcdir="${helium.dir}/tests/data/logs" destdir="${temp.dir}/backuptest"/>
+        <au:assertFileExists file="${temp.dir}/backuptest/test_log.log.${file.backup.format}.bak"/>
+        <au:assertFileExists file="${temp.dir}/backuptest/test_helium_dev_9.2.10_test_test_compile.log.${file.backup.format}.bak"/>
+    </target>
+    
+    <target name="test-folder-file-backup-regexp">
+        <hlm:fileBackupMacro srcdir="${helium.dir}/tests/data/logs" destdir="${temp.dir}/backuptest" regexp="(.*?targetTimes.*?)$"/>
+        <au:assertFileExists file="${temp.dir}/backuptest/test_helium_dev_9.1.50_targetTimesLog.csv.${file.backup.format}.bak"/>
+    </target>
 
 </project>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/test/test_diamonds_templates.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_diamonds_templates.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_common" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>
+    Testing targets.
+    </description>
+    
+    <property environment="env"/>
+    
+    <property name="helium.dir" location="../../.." />
+    <property name="temp.dir" location="${helium.dir}/build/temp" />
+    <import file="${helium.dir}/helium.ant.xml" />
+    <property name="test.temp.dir" location="${helium.build.dir}/antunit/diamonds-templates" />
+    
+    <target name="setUp">
+        <mkdir dir="${test.temp.dir}" />
+        <delete dir="${test.temp.dir}" />
+        <mkdir dir="${test.temp.dir}" />
+    </target>
+    
+    <target name="tearDown">
+        <delete dir="${test.temp.dir}" />        
+    </target>
+    
+    <target name="test-diamonds-signal-template-without-signal-data">
+        <fmpp sourceFile="${helium.dir}/tools/common/templates/diamonds/diamonds_signal.xml.ftl"
+                     outputfile="${test.temp.dir}/diamonds_signal.xml">
+            <data expandProperties="yes">
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <loadfile property="diamonds.xml" srcFile="${test.temp.dir}/diamonds_signal.xml" />
+        <echo>${diamonds.xml}</echo>
+        <au:assertTrue message="No signals are pushed to diamonds">
+            <not>
+                <contains string="${diamonds.xml}" substring="&lt;signal&gt;" />
+            </not>
+        </au:assertTrue>
+    </target>
+    
+    <target name="test-diamonds-signal-template">
+        <property name="diamond.signal.name.0" value="fakeSignal" />
+        <fmpp sourceFile="${helium.dir}/tools/common/templates/diamonds/diamonds_signal.xml.ftl"
+                     outputfile="${test.temp.dir}/diamonds_signal.xml">
+            <data expandProperties="yes">
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <loadfile property="diamonds.xml" srcFile="${test.temp.dir}/diamonds_signal.xml" />
+        <echo>${diamonds.xml}</echo>
+        <au:assertTrue message="One signal is defined.">
+            <contains string="${diamonds.xml}" substring="&lt;signal&gt;" />
+        </au:assertTrue>
+        <au:assertTrue message="One name is defined.">
+            <contains string="${diamonds.xml}" substring="&lt;name&gt;fakeSignal&lt;/name&gt;" />
+        </au:assertTrue>
+    </target>
+</project>
--- a/buildframework/helium/tools/common/test/test_scanlog.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/test/test_scanlog.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -67,8 +67,8 @@
         </au:assertTrue>
         <au:assertTrue message="Check for components">
             <and>
-                <contains string="${scanlog}" substring="sf/mw/HelloWorldAPI/group" />
-                <contains string="${scanlog}" substring="sf/app/HelloWorldCons/group" />
+                <contains string="${scanlog}" substring="sf/mw/helloworldapi/group" />
+                <contains string="${scanlog}" substring="sf/app/helloworldcons/group" />
             </and>
         </au:assertTrue>
     </target>
@@ -79,7 +79,7 @@
         </condition>
         <property name="sbs.log.file" location="${helium.dir}/tests/data/test-scanlog_helium_minibuild_ido_input_compile.log" />
         <hlm:metadatarecord  database="${scanlog.temp.dir}/test-cc-summary-generation_db">
-            <hlm:sbsmetadatainput>
+            <hlm:sbsmetadatainput checkMissing="true">
                 <fileset casesensitive="false" file="${sbs.log.file}"/>
                 <metadatafilterset refid="filterset.sbs" />
             </hlm:sbsmetadatainput>
@@ -100,8 +100,8 @@
         <loadfile property="scanlog" srcFile="${scanlog.temp.dir}/cc_summary.html" />
         <au:assertTrue message="Check for components">
             <and>
-                <contains string="${scanlog}" substring="sf/mw/HelloWorldAPI/group" />
-                <contains string="${scanlog}" substring="sf/app/HelloWorldCons/group" />
+                <contains string="${scanlog}" substring="sf/mw/helloworldapi/group" />
+                <contains string="${scanlog}" substring="sf/app/helloworldcons/group" />
             </and>
         </au:assertTrue>
         <au:assertTrue message="Check for 7 errors">
@@ -135,7 +135,7 @@
                 ant: antProperties()
             </data>
         </fmpp>
-        <hlm:generateBuildStatus dbfile="${scanlog.temp.dir}/test-metadata-1_db" output-dir="${helium.dir}/tests/data/" file="test-scanlog-metadata-1.log"/>
+        <hlm:generateBuildStatus dbfile="${scanlog.temp.dir}/test-metadata-1_db" output-dir="${helium.dir}/tests/data/" file="${helium.dir}/tests/data/test-scanlog-metadata-1.log"/>
         <hlm:assertFileExists file="${scanlog.temp.dir}/test-scanlog-metadata-1.log.scan2.html"/>
     </target>
 
@@ -176,9 +176,8 @@
                 ant: antProperties()
             </data>
         </fmpp>
-        <basename property="sbslog.basename" file="${sbslog}" />
         <hlm:generateBuildStatus dbfile="${scanlog.temp.dir}/test-metadata-1_db" 
-            output-dir="${scanlog.temp.dir}" file="${sbslog.basename}"/>
+            output-dir="${scanlog.temp.dir}" file="${sbslog}"/>
         <au:assertFileExists file="${scanlog.temp.dir}/test-scanlog-metadata-1.log.scan2.html"/>
     </target>
 
@@ -195,20 +194,15 @@
         <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>
+            <hlm:sbsmetadatainput checkMissing="true">            
                 <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>
+            <hlm:sbsmetadatainput checkMissing="false">
                 <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" />
@@ -226,8 +220,8 @@
         <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;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>
@@ -248,6 +242,75 @@
         </au:assertTrue>
     </target>
 
+    <target name="test-diamonds-faults-package">
+        <condition property="sbs.log.file" value="${helium.dir}/tests/data/test-scanlog_linux_helium_minibuild_ido_input_compile.log">
+            <os family="unix" />
+        </condition>
+        <condition property="epocroot.test" value="/" else="m:\">
+            <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:sysdefmetadatainput file="${helium.dir}/tests/data/test-minibuild-sysdef3.xml" />
+            <hlm:sbsmetadatainput checkMissing="true" epocroot="${epocroot.test}">
+                <fileset casesensitive="false" file="${sbs.log.file}"/>
+                <fileset casesensitive="false" file="${scanlog.temp.dir}/test-scanlog_helium_minibuild_ido_input2_compile.log" />
+                <metadatafilterset refid="filterset.sbs" />
+            </hlm:sbsmetadatainput>
+            <hlm:sbsmetadatainput checkMissing="false" epocroot="${epocroot.test}">
+                <fileset casesensitive="false" file="${scanlog.temp.dir}/test-scanlog_helium_minibuild_ido_input_clean_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"
+                outputfile="${scanlog.temp.dir}/compile-main.xml">
+            <data expandProperties="yes">
+                  dbPath: ${scanlog.temp.dir}/test-diamonds-faults_db
+                  ant: antProperties()
+            </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;" />
+            </and>
+        </au:assertTrue>
+        <au:assertTrue message="Check for generated files.">
+            <contains string="${scanlog}" substring="&lt;generated_files&gt;46&lt;/generated_files&gt;" />
+        </au:assertTrue>
+        
+        <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 46 errors">
+            <contains string="${scanlog}" substring="&gt;46&lt;/total&gt;" />
+        </au:assertTrue>
+        <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>
+        <au:assertTrue message="Check for helloworldapi">
+            <contains string="${scanlog}" substring="&lt;package&gt;helloworldapi&lt;/package&gt;" />
+        </au:assertTrue>
+        <au:assertTrue message="Check for helloworldcons">
+            <contains string="${scanlog}" substring="&lt;package&gt;helloworldcons&lt;/package&gt;" />
+        </au:assertTrue>
+    </target>
+
+
     <target name="test-cc-summary-metadata-generation"> 
         <hlm:metadatarecord  database="${scanlog.temp.dir}/test_metadata_db">
             <hlm:antmetadatainput>
--- a/buildframework/helium/tools/common/test/test_scanlog_regex.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/test/test_scanlog_regex.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -801,5 +801,21 @@
             </hlm:metadataRegexTest>
         </au:assertTrue>
     </target>
+
+    <target name="test-scanlog-metadata-regex-emake-config-error">
+        <au:assertTrue>
+            <hlm:metadataRegexTest severity="ERROR" string="ERROR EC1007: Unknown annotation detail token:">
+                <hlm:metadatafilterset refid="filterset.emake"/>
+            </hlm:metadataRegexTest>
+        </au:assertTrue>
+    </target>
+
+    <target name="test-scanlog-metadata-regex-emake-config-warning">
+        <au:assertTrue>
+            <hlm:metadataRegexTest severity="WARNING" string="WARNING EC1003: Ignoring redundant EMAKE_ROOT value - C:/apps/sbs (It is already included by EMAKE_ROOT value - C:/apps)">
+                <hlm:metadatafilterset refid="filterset.emake"/>
+            </hlm:metadataRegexTest>
+        </au:assertTrue>
+    </target>
     
 </project>
--- a/buildframework/helium/tools/common/testing.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/common/testing.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -27,97 +27,8 @@
     </description>
     
     <!-- Runs all the unit testing targets. -->
-    <target name="unittest" depends="ant-unittest,py-unittest"/>
-    
-    <!-- Unit testing -->
-
-    <!-- Setup environment for Python unit tests. -->
-    <target name="setup-py-unittest">
-        <!-- Autogenerate test data for ArchivePreBuilderTest based on ANT properties -->
-        <if>
-            <available file="${helium.dir}/tests/data/archive_test.cfg.xml"/>
-            <then>
-                <delete file="${helium.dir}/tests/data/archive_test.cfg.xml"/>
-            </then>
-        </if>
-        <copy file="${helium.dir}/tests/data/archive_test_input.cfg.xml" tofile="${helium.dir}/tests/data/archive_test.cfg.xml" overwrite="true">
-            <filterchain>
-                <expandproperties/>
-            </filterchain>
-        </copy>
-    </target>
-
-    <!-- Do Python tests. -->
-    <target name="do-py-unittest" depends="setup-py-unittest">
-        <property name="nose.args" value="nokiacpythontest scripttests"/>
-        <exec executable="python" failonerror="true">
-            <env key="TEST_DATA" value="${helium.dir}/tests"/>
-            <arg line="${python.tools}/coverage.py -x ${python.tools}/nosetests-script.py -v ${nose.args}"/>
-        </exec>
-        <script language="jython" setbeans="false">
-import sys
-import os
-os.putenv('TEST_DATA', os.path.join(os.environ['HELIUM_HOME'], 'tests'))
-sys.path.append(os.path.join(os.environ['HELIUM_HOME'], 'external/python/lib/common/nose-0.11.1-py2.6.egg'))
-sys.path.append(os.path.join(os.environ['HELIUM_HOME'], 'external/python/lib/common/mocker-0.10.1-py2.5.egg'))
-import nose
-args = project.getProperty('nose.args')
-if ' ' in args:
-    nose.run(argv=['-v', 'scripttests'])
-elif 'cpython' not in args:
-    nose.run(argv=['-v', args])
-print >> sys.stderr
-        </script>
-    </target>
-    
-    <!-- Shortcut for Python unit tests. -->
-    <target name="pt" depends="do-py-unittest"/>
-    
+    <target name="unittest" depends="ant-unittest"/>
         
-    <!-- Create Python code coverage statistics. -->
-    <target name="py-unittest-coverage">
-        <mkdir dir="${helium.build.dir}/coverage"/>
-        <pathconvert pathsep=" " property="python.modules.coverage">
-            <fileset dir="${helium.dir}">
-                <include name="tools/**/*.py"/>
-                <include name="extensions/nokia/tools/**/*.py"/>
-                <exclude name="tools/startup/bootstrap/site.py"/>
-            </fileset>
-        </pathconvert>
-        <exec executable="python" failonerror="true">
-            <arg line="${python.tools}/coverage.py -a -d ${helium.build.dir}/coverage ${python.modules.coverage}"/>
-        </exec>
-                        
-        <!-- backup the old line coverage report and create the new one -->
-        <mkdir dir="${helium.build.dir}/coverage/report"/>        
-        <if>
-            <available file="${helium.build.dir}/coverage/report/line_coverage.txt"/>
-            <then>
-                <copy file="${helium.build.dir}/coverage/report/line_coverage.txt" tofile="${helium.build.dir}/coverage/report/line_coverage_old.txt" overwrite="true"/>
-            </then>    
-        </if>        
-        <hlm:record name="${helium.build.dir}/coverage/report/line_coverage.txt" action="start"/>        
-        <exec executable="python" failonerror="true">
-            <arg line="${python.tools}/coverage.py -r ${python.modules.coverage}"/>
-        </exec>
-        <hlm:record name="${helium.build.dir}/coverage/report/line_coverage.txt" action="stop"/>
-        <replace file="${helium.build.dir}/coverage/report/line_coverage.txt">
-            <replacetoken><![CDATA[[exec]]]></replacetoken>
-            <replacevalue><![CDATA[]]></replacevalue>
-        </replace>
-        <hlm:python>
-for line in open(r'${helium.build.dir}/coverage/report/line_coverage.txt'):
-    if 'TOTAL' in line and ' 0%' in line:
-        raise Exception('Coverage at 0%')
-        </hlm:python>
-        <delete file="${helium.dir}/.coverage"/>
-    </target>
-    
-    
-    <!-- Run Python unit test cases. -->
-    <target name="py-unittest" depends="do-py-unittest,py-unittest-coverage"/>
-        
-    
     <!-- Run Ant unit tests. -->
     <target name="ant-unittest">
         <mkdir dir="${helium.build.dir}/temp"/>
@@ -128,7 +39,7 @@
                 <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"/> 
+            <fileset dir="${helium.dir}" includes="extensions/*/tools/**/test_*.ant.xml"/>  
             <au:plainlistener/>
             <hlm:antcoveragelistener outputfile="${helium.build.dir}/report/antunit/ant_coverage.txt"/>
             <au:xmllistener toDir="${helium.build.dir}/report/antunit" logLevel="info" />
--- a/buildframework/helium/tools/compile/cmaker.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/compile/cmaker.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -26,6 +26,28 @@
         cMaker support.
     </description>
     
+    <!--* @property cmaker.enabled
+    Set to true to run cmaker.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.cmaker.enabled
+    Runs cmaker targets if cmaker.enabled is set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property enable.cmaker
+    Set to true to run cmaker. - deprecated: Start using cmaker.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
     <!-- Location of the cmaker component to install it.
     @type string
     @scope private
@@ -48,6 +70,14 @@
     @type string
     -->
     <property name="cmaker.log.label" value=""/>
+    
+    <!-- Check, is cmaker feature enabled -->
+    <condition property="internal.cmaker.enabled">
+        <or>
+            <istrue value="${cmaker.enabled}"/>
+            <isset property="enable.cmaker"/>
+        </or>
+    </condition>
 
     <!--
         The cmakerMacro enables the user to run cmaker commands directly from Ant.
@@ -101,14 +131,15 @@
     <!--  Installing CMaker. -->    
     <target name="cmaker-install">
         <mkdir dir="${compile.log.dir}" />
-        <record name="${compile.log.dir}/${build.id}_install.cmaker.log" emacsmode="true" action="start" />
+        <hlm:fileBackupMacro file="${compile.log.dir}/${build.id}_install.cmaker.log"/>
+        <hlm: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>
-        <record name="${compile.log.dir}/${build.id}_install.cmaker.log" action="stop" />
+        <hlm:record name="${compile.log.dir}/${build.id}_install.cmaker.log" action="stop" />
         <!-- Blocks packaging configuration generation. -->
         <if>
             <istrue value="${blocks.enabled}" />
@@ -129,13 +160,14 @@
     </target>
     
     <!-- CMaker export configuration. -->    
-    <target name="cmaker-export" depends="cmaker-install" if="enable.cmaker">
+    <target name="cmaker-export" depends="cmaker-install" if="internal.cmaker.enabled">
         <mkdir dir="${compile.log.dir}" />
-        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.export.cmaker.log" emacsmode="true" action="start" />
+        <hlm:fileBackupMacro file="${compile.log.dir}/${build.id}${cmaker.log.label}.export.cmaker.log"/>
+        <hlm: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"/>
-        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.export.cmaker.log" action="stop" />
+        <hlm: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="${compile.log.dir}/${build.id}${cmaker.log.label}.export.cmaker.log" />
@@ -145,13 +177,14 @@
     </target>
 
     <!-- CMaker cleanup exported configuration. -->
-    <target name="cmaker-clean" depends="cmaker-install" if="enable.cmaker">
+    <target name="cmaker-clean" depends="cmaker-install" if="internal.cmaker.enabled">
         <mkdir dir="${compile.log.dir}" />
-        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.clean.cmaker.log" emacsmode="true" action="start" />
+        <hlm:fileBackupMacro file="${compile.log.dir}/${build.id}${cmaker.log.label}.clean.cmaker.log"/>
+        <hlm: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"/>
-        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.clean.cmaker.log" action="stop" />
+        <hlm: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="${compile.log.dir}/${build.id}${cmaker.log.label}.clean.cmaker.log" />
@@ -161,13 +194,14 @@
     </target>
     
     <!-- CMaker list the final destination of what will be exported. -->
-    <target name="cmaker-what" depends="cmaker-install" if="enable.cmaker">
+    <target name="cmaker-what" depends="cmaker-install" if="internal.cmaker.enabled">
         <mkdir dir="${compile.log.dir}" />
-        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.what.cmaker.log" emacsmode="true" action="start" />
+        <hlm:fileBackupMacro file="${compile.log.dir}/${build.id}${cmaker.log.label}.what.cmaker.log"/>
+        <hlm: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"/>
-        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.what.cmaker.log" action="stop" />
+        <hlm: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="${compile.log.dir}/${build.id}${cmaker.log.label}.what.cmaker.log" />
@@ -196,13 +230,14 @@
     </target>
 
     <!-- CMaker list the source files what will be exported. -->
-    <target name="cmaker-whatdeps" depends="cmaker-install" if="enable.cmaker">
+    <target name="cmaker-whatdeps" depends="cmaker-install" if="internal.cmaker.enabled">
         <mkdir dir="${compile.log.dir}" />
-        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.whatdeps.cmaker.log" emacsmode="true" action="start" />
+        <hlm:fileBackupMacro file="${compile.log.dir}/${build.id}${cmaker.log.label}.whatdeps.cmaker.log"/>
+        <hlm: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"/>
-        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.whatdeps.cmaker.log" action="stop" />
+        <hlm: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="${compile.log.dir}/${build.id}${cmaker.log.label}.whatdeps.cmaker.log" />
@@ -210,5 +245,7 @@
             </hlm:abldmetadatainput>
         </hlm:metadatarecord>
     </target>
+    
+    
 </project>
 
--- a/buildframework/helium/tools/compile/compile.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/compile/compile.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -34,7 +34,48 @@
     @editable required
     @scope public
     -->
-
+    
+    <!--* @property compile.cmd.clean.enabled
+    Set to true if it clean compilation.  
+    @type boolean
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.compile.cmd.clean.enabled
+    Set to true if compile.cmd.clean.enabled is set to true.  
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property compile.cmd.clean
+    Set to true if it clean compilation. - deprecated: Start using compile.cmd.clean.enabled property.  
+    @type boolean
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!--* @property compile.discard.result.enabled
+    Set to true to discard the previous compilation results.  
+    @type boolean
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.compile.discard.result.enabled
+    Set to true if compile.discard.result.enabled set to true.  
+    @type boolean
+    @scope private
+    @since 11.0
+    -->
+    
+    <!--* @property compile.discard.result
+    Set to true to discard the previous compilation results. - deprecated: Start using compile.discard.result.enabled property.  
+    @type boolean
+    @scope public
+    @deprecated since 11.0
+    -->
+    
     <!-- Property declaration -->
     <!-- Suffix used in genxml related output files. This value is added into file names to show that they are genxml related. Used in log files, genxml output files and component list for EE images. Normally does not need to be set.
     @type string
@@ -56,6 +97,41 @@
     -->
     <property name="diamonds.compile.summary" location="${compile.log.dir}/${build.id}_compile_diamonds.xml" />
     
+    <!--* @property sysdef3.enabled
+     This property enables sbs compilation based on system definition schema 3.0.0. 
+     @type boolean
+     @scope public
+     @editable required
+     @since 11.0
+     -->
+    
+    <!--* @property internal.sysdef3.enabled
+     To run the sysdef3 dependent tasks if sysdef3.enabled set to true. 
+     @type boolean
+     @scope private
+     -->
+     
+    <!-- Check is sysdef3 enabled. -->
+    <condition property="internal.sysdef3.enabled">
+        <istrue value="${sysdef3.enabled}" />
+    </condition>
+    
+    <!-- To check is it clean compilation -->
+    <condition property="internal.compile.cmd.clean.enabled" value="true" else="false">
+        <or>
+            <istrue value="${compile.cmd.clean.enabled}" />
+            <istrue value="${compile.cmd.clean}" />
+        </or>
+    </condition>
+    
+    <!-- To check is it required to discard old compilation results -->
+    <condition property="internal.compile.discard.result.enabled" value="true" else="false">
+        <or>
+            <istrue value="${compile.discard.result.enabled}" />
+            <istrue value="${compile.discard.result}" />
+        </or>
+    </condition> 
+    
     <!-- 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" />
@@ -81,7 +157,7 @@
     <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" />
+    <target name="postcompile" depends="postcompile-ec,render-build-duplicates,post-coverity,sbs-checksource" unless="env.HLM_SUBCON" />
     
     
     <!-- Pre-processes all System Definition input files.
@@ -141,22 +217,79 @@
     <target name="create-canonical-sysdef-file" depends="preprocess-sysdef-files">
         <mkdir dir="${compile.log.dir}" />
         <if>
-            <istrue value="${schema.new}" />
+            <istrue value="${sysdef3.enabled}" />
             <then>
+                <for param="file" keepgoing="true">
+                    <resources refid="system.definition.files" />
+                    <sequential>
+                        <trycatch reference="internal.sysdef3.validation.error">
+                            <try>
+                                <xmlvalidate file="@{file}" lenient="true" />
+                            </try>
+                            <catch>
+                                <echo>ERROR: ${toString:internal.sysdef3.validation.error}</echo>
+                                <throw refid="internal.sysdef3.validation.error" />
+                            </catch>
+                        </trycatch>                        
+                    </sequential>
+                </for>
                 <mkdir dir="${temp.build.dir}/root" />
                 <mkdir dir="${temp.build.dir}/join" />
                 <delete>
                     <fileset dir="${temp.build.dir}/root" />
                     <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}/"
-                    checkPackageExists="${compile.cmd.clean}">
-                    <restrict>
-                        <resources refid="system.definition.files" />
-                        <rsel:name name="**${file.separator}package_definition.xml" />
-                    </restrict>
-                </hlm:createRootSysdef>
+                <if>
+                    <resourcecount when="ne" count="0">
+                        <restrict>
+                            <resources refid="system.definition.files" />
+                            <rsel:and>
+                                <rsel:name name="**${file.separator}package_definition.xml" />
+                                <rsel:not>
+                                    <hlm:isVendorPackage />
+                                </rsel:not>
+                            </rsel:and>
+                        </restrict>
+                    </resourcecount>
+                    <then>
+                        <!-- creating the root sysdef file for packages referenced directly -->
+                        <hlm:createRootSysdef destFile="${temp.build.dir}/root/generated.root.xml" epocroot="${build.drive}/"
+                            checkPackageExists="${internal.compile.cmd.clean.enabled}">
+                            <restrict>
+                                <resources refid="system.definition.files" />
+                                <rsel:and>
+                                    <rsel:name name="**${file.separator}package_definition.xml" />
+                                    <rsel:not>
+                                        <hlm:isVendorPackage />
+                                    </rsel:not>
+                                </rsel:and>
+                            </restrict>
+                        </hlm:createRootSysdef>
+                    </then>
+                </if>
+                <if>
+                    <resourcecount when="ne" count="0">
+                        <restrict>
+                            <resources refid="system.definition.files" />
+                            <rsel:and>
+                                <rsel:name name="**${file.separator}package_definition.xml" />
+                                <hlm:isVendorPackage />
+                            </rsel:and>
+                        </restrict>
+                    </resourcecount>
+                    <then>
+                        <hlm:createRootSysdef destFile="${temp.build.dir}/root/generated_vendor.root.xml" epocroot="${build.drive}/"
+                            checkPackageExists="${internal.compile.cmd.clean.enabled}">
+                            <restrict>
+                                <resources refid="system.definition.files" />
+                                <rsel:and>
+                                    <rsel:name name="**${file.separator}package_definition.xml" />
+                                    <hlm:isVendorPackage />
+                                </rsel:and>
+                            </restrict>
+                        </hlm:createRootSysdef>
+                    </then>
+                </if>
                 <!-- Joining all the Root sysdef files -->
                 <for param="file">
                     <path>
@@ -167,6 +300,7 @@
                             </rsel:not>
                         </restrict>
                         <fileset dir="${temp.build.dir}/root" includes="generated.root.xml" />
+                        <fileset dir="${temp.build.dir}/root" includes="generated_vendor.root.xml" />
                     </path>
                     <sequential>
                         <hlm:joinSysdef epocroot="${build.drive}/" srcfile="@{file}" 
@@ -198,6 +332,9 @@
                     <fileset dir="${temp.build.dir}/join" includes="**/*.xml" />
                 </hlm:mergeSysdef>
                 <hlm:assertFileExists file="${canonical.sysdef.file}" />
+                <hlm:metadatarecord database="${metadata.dbfile}">
+                    <hlm:sysdefmetadatainput file="${canonical.sysdef.file}" />
+                </hlm:metadatarecord>
             </then>
             <else>
                 <pathconvert pathsep=" " property="system.definition.files.list">
@@ -220,7 +357,7 @@
         <antcall target="compile-configuration" inheritRefs="true">
             <param name="sysdef.configuration" value="${sysdef.clean.configuration}"/>
             <param name="compile.signal.input" value="compileCleanSignalInput"/>
-            <param name="compile.discard.result" value="true"/>
+            <param name="internal.compile.discard.result.enabled" value="true"/>
         </antcall>
     </target>
 
@@ -302,7 +439,7 @@
             <then>
                 <if>
                     <not>
-                        <isfalse value="${compile.discard.result}"/>
+                        <isfalse value="${internal.compile.discard.result.enabled}"/>
                     </not>
                     <then>
                         <delete file="${compile.log.dir}/${build.id}.${sysdef.configuration}_compile.log.xml" failonerror="false"/>
@@ -329,7 +466,7 @@
                       Only generate the log.xml if we want the results to be included in the final results
                       or get them used by the signaling mechanism.
                     -->
-                    <isfalse value="${compile.discard.result}"/>
+                    <isfalse value="${internal.compile.discard.result.enabled}"/>
                     <then>
                         <hlm:metadatarecord database="${metadata.dbfile}">
                             <hlm:abldmetadatainput>
@@ -337,7 +474,7 @@
                                 <metadatafilterset refid="filterset.compile" />
                             </hlm:abldmetadatainput>
                         </hlm:metadatarecord>
-                        <hlm:compileLogSignalMacro compile.summary.file="${build.id}.${sysdef.configuration}_compile.log" 
+                        <hlm:compileLogSignalMacro compile.summary.file="${compile.log.dir}/${build.id}.${sysdef.configuration}_compile.log" 
                             error.limit="${build.errors.limit}" phase="compile"/>
                         <!-- Todo: metadata: insert assertions for metadata parsing here -->
                     </then>
@@ -374,70 +511,6 @@
     <!-- Starts the actual compilation  phase of a build -->
     <target name="compile-main" depends="precompile,do-compile-main,postcompile"/>
 
-    <!-- Macro to preprocess build information -->
-    <scriptdef name="diamondsSummaryMacro" language="jython" uri="http://www.nokia.com/helium">
-        <attribute name="output"/>
-    <![CDATA[
-from xml.sax.handler import ContentHandler
-from xml.sax import make_parser
-from xml.sax.saxutils import quoteattr
-
-class DiamondsSummary(ContentHandler):
-    def __init__(self):
-        ContentHandler.__init__(self)
-        self.scanLog = False
-        self.components = {}
-        self.component = None
-        self.level = 0
-        self.total = {'error':0, 'critical':0, 'warning':0}
-
-    def startElement(self, name, attrs):
-        if name == 'log' and attrs.get('filename', None) != None and attrs.get('filename', '').endswith('_compile.log'):
-            self.scanLog = True
-        elif self.scanLog and name == "task":
-            self.level += 1
-
-        if self.scanLog and name == "task" and self.level == 2 and attrs.get('name', None) != None:
-            self.component = attrs.get('name', None)
-            if self.component not in self.components:
-                self.components[self.component] = {'error':0, 'critical':0, 'warning':0}
-
-        if self.scanLog and name == "message" and attrs.get('priority', None) != None:
-            if attrs.get('priority') in self.total:
-                self.total[attrs.get('priority')] += 1
-
-        if self.scanLog and name == "message" and self.level > 1 and self.component != None and attrs.get('priority', None) != None:
-            if attrs.get('priority') in self.components[self.component]:
-                self.components[self.component][attrs.get('priority')] += 1
-
-    def endElement(self, name):
-        if name == 'log':
-            self.scanLog = False
-            self.level = 0
-            self.component = None
-        elif name == 'task':
-            self.level = self.level - 1
-
-
-parser = make_parser()
-diamondsSummary = DiamondsSummary()
-parser.setContentHandler(diamondsSummary)
-parser.parse(open(str(project.getProperty('build.summary.file'))))
-
-output = '<?xml version="1.0"?>\n<compile>\n'
-output += '<components>\n'
-for name in diamondsSummary.components:
-    xname = quoteattr(name)
-    output += '<component name=%s error="%d" critical="%d" warning="%d" />\n' % (xname, diamondsSummary.components[name]['error'], diamondsSummary.components[name]['critical'], diamondsSummary.components[name]['warning'])
-    #print name + " ==> %d" % diamondsSummary.components[name]['error']
-output += '</components>\n'
-output += '<total error="%d" critical="%d" warning="%d" />\n' % (diamondsSummary.total['error'], diamondsSummary.total['critical'], diamondsSummary.total['warning'])
-output += '</compile>\n'
-self.log(str("Writing %s" % str(attributes.get('output'))))
-f = open(str(attributes.get('output')), 'w+')
-f.write(output)
-    ]]></scriptdef>
-
     <!-- Creates a .csv log of the sizes of all the binaries created in the build. -->
     <target name="binary-sizes-log" if="binary.sizes.output">
         <hlm:startSpecificLogMacro name="${compile.log.dir}/${build.id}_binary_sizes.log" phase="compile"/>
@@ -511,4 +584,6 @@
         <antcall target="dump-swicertstore"/>
         <antcall target="check-stub-sis"/>
     </target>
+
 </project>
+
--- a/buildframework/helium/tools/compile/compile.antlib.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/compile/compile.antlib.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -46,9 +46,13 @@
     <macrodef name="calculateErrorsFromLog" uri="http://www.nokia.com/helium">
         <sequential>
             <if>
-                <not>
-                    <isset property="skip.diamonds"/>
-                </not>
+                <or>
+                    <istrue value="${diamonds.enabled}"/>
+                    <isfalse value="${skip.diamonds}"/>
+                    <not>
+                        <isset property="skip.diamonds"/>
+                    </not>
+                </or>
                 <then>
                     <fmpp sourceFile="${helium.dir}/tools/common/templates/diamonds/faults_metadata_orm.ftl"
                                  outputfile="${diamonds.build.output.dir}/compile-main.xml">
@@ -71,20 +75,9 @@
             <hlm:calculateErrorsFromLog />
             <var name="build.errors.total" unset="true" />
             <var name="compile.result" unset="true" />
-            <if>
-                <equals arg1="${compile.signal.input}" arg2="compileCleanSignalInput" />
-                <then>
-                    <hlm:metadataCountSeverity severity="ERROR" log="@{compile.summary.file}"
-                        db="${metadata.dbfile}"
-                        countMissing="false"
-                        property="build.errors.total"/>
-                </then>
-                <else>
-                    <hlm:metadataCountSeverity severity="ERROR" log="@{compile.summary.file}"
-                        db="${metadata.dbfile}"
-                        property="build.errors.total"/>
-                </else>
-            </if>
+            <hlm:metadataCountSeverity severity="ERROR" log="@{compile.summary.file}"
+                database="${metadata.dbfile}"
+                property="build.errors.total"/>
                 
             <echo>Errors after compile-main: ${build.errors.total}</echo>
             <echo message="${build.errors.limit}" />
@@ -243,75 +236,82 @@
         <attribute name="root"/> 
         <attribute name="failonerror"/>
         <attribute name="phase"/>
-          self.setTaskName("emake");
-          // check attributes
-          if (attributes.get("name") == null)
-            throw new org.apache.tools.ant.BuildException("name attribute is not defined");
-          self.log("Name: " + attributes.get("name"));
-          if (attributes.get("makefile") == null)
-            throw new org.apache.tools.ant.BuildException("makefile attribute is not defined");
-          self.log("Makefile: " + attributes.get("makefile"));
-          String target = "all";
-          String custom = "";
-          String annofileDir = "";
-          if (attributes.get("target") != null)
-            target = attributes.get("target");
-          self.log("Target: " + target);
-          if (attributes.get("custom") != null)
-            custom = attributes.get("custom");
-          if (attributes.get("root") != null)
-            root = attributes.get("root");
-          else
-            root = "";
-          
-          self.log("Custom: " + custom);
+self.setTaskName("emake");
+// check attributes
+if (attributes.get("name") == null) {
+    throw new org.apache.tools.ant.BuildException("name attribute is not defined");
+}
+self.log("Name: " + attributes.get("name"));
+if (attributes.get("makefile") == null) {
+    throw new org.apache.tools.ant.BuildException("makefile attribute is not defined");
+}
+self.log("Makefile: " + attributes.get("makefile"));
+String target = "all";
+String custom = "";
+String annofileDir = "";
+if (attributes.get("target") != null) {
+    target = attributes.get("target");
+}
+self.log("Target: " + target);
+if (attributes.get("custom") != null) {
+    custom = attributes.get("custom");
+}
+if (attributes.get("root") != null) {
+    root = attributes.get("root");
+}
+else {
+    root = "";
+}
+
+self.log("Custom: " + custom);
 
-      // Create and configure exec target
-          org.apache.tools.ant.taskdefs.ExecTask task = new org.apache.tools.ant.taskdefs.ExecTask();
-          task.setProject(self.getProject());
-          task.setTaskName(self.getTaskName());
-          String emake = com.nokia.ant.util.Helper.getProperty(project, "ec.emake");          
-          task.setExecutable(emake);
-          if (attributes.get("failonerror") != null) {
-            task.setFailonerror(Boolean.parseBoolean(attributes.get("failonerror")));
-          } else {
-            task.setFailonerror(true);
-          }
-          String buildDrive = com.nokia.ant.util.Helper.getProperty(project, "build.drive");              
-          task.setDir(new java.io.File(buildDrive + "/"));
-          if (attributes.get("log") != null) {
-            self.log("Log: " + attributes.get("log"));
-            task.setOutput(new java.io.File(attributes.get("log")));
-          }
-          if (attributes.get("dir") != null) {
-            self.log("dir: " + attributes.get("dir"));
-            task.setDir(new java.io.File(attributes.get("dir")));
-          }
-          String buildId = com.nokia.ant.util.Helper.getProperty(project, "build.id");
-          task.createArg().setValue("--emake-build-label=" + buildId + "-" + attributes.get("name"));
-          String eclass = com.nokia.ant.util.Helper.getProperty(project, "ec.build.class");
-          task.createArg().setValue("--emake-class=" + eclass);
-          String eroot = com.nokia.ant.util.Helper.getProperty(project, "env.EMAKE_ROOT");          
-          String heliumDir = com.nokia.ant.util.Helper.getProperty(project, "helium.dir"); 
-          if (attributes.get("root") != null) {
-            self.log("--emake-root=" + eroot + ";" + heliumDir + ";" + root);
-          }         
-          task.createArg().setValue("--emake-root=" + eroot + ";" + heliumDir + ";" + root);
-          if (attributes.get("phase") != null) {
-            annofileDir = com.nokia.ant.util.Helper.getProperty(project, "build.log.dir") + "/" + attributes.get("phase");
-          }
-          else {
-            annofileDir = com.nokia.ant.util.Helper.getProperty(project, "build.log.dir");  
-          }
-          if (attributes.get("annodetail") != null) {
-            task.createArg().setValue("--emake-annodetail=" + attributes.get("annodetail"));            
-            task.createArg().setValue("--emake-annofile=" + annofileDir + "/" + buildId + "-" + attributes.get("name") + ".emake.anno.xml");
-          }
-          task.createArg().setLine(custom);
-          task.createArg().setLine("-f " + attributes.get("makefile"));
-          task.createArg().setLine(target);
-          // Execute.
-          task.execute();
+// Create and configure exec target
+org.apache.tools.ant.taskdefs.ExecTask task = new org.apache.tools.ant.taskdefs.ExecTask();
+task.setProject(self.getProject());
+task.setTaskName(self.getTaskName());
+String emake = com.nokia.ant.util.Helper.getProperty(project, "ec.emake");          
+task.setExecutable(emake);
+if (attributes.get("failonerror") != null) {
+    task.setFailonerror(Boolean.parseBoolean(attributes.get("failonerror")));
+}
+else {
+    task.setFailonerror(true);
+}
+String buildDrive = com.nokia.ant.util.Helper.getProperty(project, "build.drive");              
+task.setDir(new java.io.File(buildDrive + "/"));
+if (attributes.get("log") != null) {
+    self.log("Log: " + attributes.get("log"));
+    task.setOutput(new java.io.File(attributes.get("log")));
+}
+if (attributes.get("dir") != null) {
+    self.log("dir: " + attributes.get("dir"));
+    task.setDir(new java.io.File(attributes.get("dir")));
+}
+String buildId = com.nokia.ant.util.Helper.getProperty(project, "build.id");
+task.createArg().setValue("--emake-build-label=" + buildId + "-" + attributes.get("name"));
+String eclass = com.nokia.ant.util.Helper.getProperty(project, "ec.build.class");
+task.createArg().setValue("--emake-class=" + eclass);
+String eroot = com.nokia.ant.util.Helper.getProperty(project, "env.EMAKE_ROOT");          
+String heliumDir = com.nokia.ant.util.Helper.getProperty(project, "helium.dir"); 
+if (attributes.get("root") != null) {
+    self.log("--emake-root=" + eroot + ";" + heliumDir + ";" + root);
+}         
+task.createArg().setValue("--emake-root=" + eroot + ";" + heliumDir + ";" + root);
+if (attributes.get("phase") != null) {
+    annofileDir = com.nokia.ant.util.Helper.getProperty(project, "build.log.dir") + "/" + attributes.get("phase");
+}
+else {
+    annofileDir = com.nokia.ant.util.Helper.getProperty(project, "build.log.dir");  
+}
+if (attributes.get("annodetail") != null) {
+    task.createArg().setValue("--emake-annodetail=" + attributes.get("annodetail"));            
+    task.createArg().setValue("--emake-annofile=" + annofileDir + "/" + buildId + "-" + attributes.get("name") + ".emake.anno.xml");
+}
+task.createArg().setLine(custom);
+task.createArg().setLine("-f " + attributes.get("makefile"));
+task.createArg().setLine(target);
+
+task.execute();
     </scriptdef>
 
     
@@ -325,21 +325,21 @@
         <attribute name="layer-order"/>
         <attribute name="command"/>
         <attribute name="components"/>
-<![CDATA[
+        <![CDATA[
 import com.nokia.tools.sbs.SBSTool;
 SBSTool sbsTool = new SBSTool();
 sbsTool.execute(attributes,project);
-]]>
+        ]]>
     </scriptdef>
 
     
     <scriptdef name="getSBSConfigMacro" language="beanshell" uri="http://www.nokia.com/helium">
         <attribute name="sbs.sysdef.file"/>
-<![CDATA[
+        <![CDATA[
 import com.nokia.config.SAXConfigParser;
 SAXConfigParser configParser = new SAXConfigParser(attributes.get("sbs.sysdef.file"));
 project.setProperty("sbs.configs",configParser.getConfigs());
-]]>
+        ]]>
     </scriptdef>
     
 </antlib>
--- a/buildframework/helium/tools/compile/coverity.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/compile/coverity.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -26,17 +26,66 @@
     </description>
     
     <!-- Coverity property declaration and types defination-->
-    <!--* @property enabled.coverity
+    <!--* @property coverity.enabled
     Value must be set to execute coverity targets.
     @type boolean
     @editable required
     @scope public
+    @since 11.0
     -->
-    <!--* @property run.coverity
-    Value will be set to if enabled.coverity set tot true.
-    @type string
+    
+    <!--* @property internal.coverity.enabled
+    To run coverity related targets if coverity.enabled set to true.
+    @type boolean
     @scope private
     -->
+    
+    <!--* @property enabled.coverity 
+    Value must be set to execute coverity targets. - deprecated: Start using coverity.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!--* @property coverity.commit.defects.enabled
+    Set to true to commit the defects into coverity database.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.coverity.commit.defects.enabled
+    Run the targets to commit the defects into database if coverity.commit.defects.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property coverity.defect.manager.server
+    Coverity defect manager server name or ip address.
+    @type string
+    @editable required
+    @scope public
+    @since 11.0 
+    -->
+    
+    <!--* @property coverity.defect.manager.port
+    Coverity defect manager server HTTP port or listener port number.
+    @type string
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property coverity.defect.manager.product
+    Coverity defect manager product name to submit the coverity errors.
+    @type string
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
     <!-- coverity output directory location
     @type string
     @scope private
@@ -62,11 +111,11 @@
     @scope private
     -->
     <property name="coverity.analyze.dir" value="${coverity.link.dir}/analyze"/>
-    <!-- coverity intermidiate directory location
+    <!-- coverity intermediate directory location
     @type string
     @scope private
     -->
-    <property name="coverity.inter.dir" value="${coverity.output.dir}/intermidiate"/>
+    <property name="coverity.inter.dir" value="${coverity.output.dir}/intermediate"/>
     <!-- coverity report directory location
     @type string
     @scope private
@@ -93,6 +142,19 @@
     -->
     <property name="diamonds.coverity.report.file" value="${temp.build.dir}/${build.id}_coverity_build_report.xml"/>
     
+    <!-- set property if coverity is enabled -->
+    <condition property="internal.coverity.enabled">
+        <or>
+            <istrue value="${coverity.enabled}" />
+            <istrue value="${enabled.coverity}"/>
+        </or>
+    </condition>
+    
+    <!-- set property if coverity.commit.defects.enabled is enabled -->
+    <condition property="internal.coverity.commit.defects.enabled">
+        <istrue value="${coverity.commit.defects.enabled}" />
+    </condition>
+    
     <if>
         <isset property="env.NUMBER_OF_PROCESSORS"/>
         <then>
@@ -107,11 +169,6 @@
         </else>
     </if>
     
-    <!-- set property if coverity is enabled -->
-    <condition property="run.coverity">
-        <istrue value="${enabled.coverity}" />
-    </condition>
-    
     <!-- cov-build command options -->
     <hlm:coverityoptions id="coverity.build.options">
         <arg name="--config" value="${coverity.config.dir}/coverity_config.xml"/>
@@ -147,8 +204,8 @@
     </hlm:coverityoptions>
 
     <!-- To run post coverity steps -->
-    <target name="post-coverity" if="run.coverity">
-        
+    <target name="post-coverity" if="internal.coverity.enabled">
+        <mkdir dir="${post.log.dir}"/>
         <!-- To emit the file into defect database -->
         <antcall target="run-coverity-emit"/>
         
@@ -157,30 +214,41 @@
         
         <!-- To generate the HTML error pages -->
         <antcall target="gen-coverity-report"/>
-    
+        
+        <!-- To commit the defects into coverity defect manager. -->
+        <antcall target="run-commit-defects"/>
+        
+        <hlm:metadatarecord database="${metadata.dbfile}">
+            <hlm:textmetadatainput>
+                <fileset casesensitive="false" file="${post.log.dir}/${build.id}_coverity_command_errors.log" />
+                <metadatafilterset>
+                    <metadatafilter priority="error" regex=".*" description="coverity error" />
+                </metadatafilterset>
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="ERROR" log="${post.log.dir}/${build.id}_coverity_command_errors.log" database="${metadata.dbfile}" property="coverity.error.total"/>
+        <echo>Coverity command errors: ${coverity.error.total}</echo>
+        <hlm:generateBuildStatus file="${post.log.dir}/${build.id}_coverity_command_errors.log" />
+        <hlm:signalMacro logfile="${post.log.dir}/${build.id}_coverity_command_errors.log" phase="post" signal.input="coveritySignalInput" />
     </target>
     
-    <!-- Run coverity configure if the enabled.coverity is set to true -->
-    <target name="run-coverity-configure" if="run.coverity">
-    
+    <!-- Run coverity configure if the coverity.enabled is set to true -->
+    <target name="run-coverity-configure" if="internal.coverity.enabled">
         <hlm:coverity command="cov-configure" dir="${build.drive}/">
             <hlm:coverityoptions refid="coverity.config.options"/>
         </hlm:coverity >
-        
     </target>
     
-    <!-- Run coverity build with emit options if the enabled.coverity is set to true 
+    <!-- Run coverity build with emit options if the coverity.enabled is set to true 
      re-running the cov-build with replay option will reduce the build time by ~ 20% 
     -->
     <target name="run-coverity-emit" >
-        
-        <hlm:coverity command="cov-build" dir="${build.drive}/">
+        <hlm:coverity command="cov-build" dir="${build.drive}/" error="${post.log.dir}/${build.id}_coverity_command_errors.log" >
             <hlm:coverityoptions refid="coverity.emit.options"/>
         </hlm:coverity >
-        
     </target>
     
-    <!-- Run coverity-analyze if the enabled.coverity is set to true 
+    <!-- Run coverity-analyze if the coverity.enabled is set to true 
      Sometimes the same file is compiled several times with different command-line options. 
      Due to the inherent difficulty of tracking linkage information, the cov-analyze command cannot automatically determine which files are linked together. 
      To avoid errors in function call resolution (especially in C code, which doesn't have any name mangling), use the cov-link command to get this information. 
@@ -193,38 +261,31 @@
     
     -->
     <target name="run-coverity-analyze" >
-        
         <mkdir dir="${coverity.link.dir}"/>
-        
-        <hlm:coverity command="cov-link" dir="${build.drive}/">
+        <hlm:coverity command="cov-link" dir="${build.drive}/" error="${post.log.dir}/${build.id}_coverity_command_errors.log" append="true">
             <hlm:arg name="--dir" value="${coverity.inter.dir}"/>
             <hlm:arg name="--collect" value=""/>
             <hlm:arg name="-of" value="${coverity.link.dir}/all.link"/>
         </hlm:coverity >
-                
-        <hlm:coverity command="cov-link" dir="${build.drive}/">
+        <hlm:coverity command="cov-link" dir="${build.drive}/" error="${post.log.dir}/${build.id}_coverity_command_errors.log" append="true">
             <hlm:arg name="--dir" value="${coverity.inter.dir}"/>
             <hlm:arg name="--compile-arg" value="armv5"/>
             <hlm:arg name="-of" value="${coverity.link.dir}/armv5.link"/>
             <hlm:arg name="${coverity.link.dir}/all.link" value=""/>
         </hlm:coverity >
-             
-        <hlm:coverity command="cov-link" dir="${build.drive}/">
+        <hlm:coverity command="cov-link" dir="${build.drive}/" error="${post.log.dir}/${build.id}_coverity_command_errors.log" append="true">
             <hlm:arg name="--dir" value="${coverity.inter.dir}"/>
             <hlm:arg name="--output-dir" value="${coverity.analyze.dir}"/>
             <hlm:arg name="${coverity.link.dir}/armv5.link" value=""/>
         </hlm:coverity >
-                
-        <hlm:coverity command="cov-analyze" dir="${build.drive}/">
+        <hlm:coverity command="cov-analyze" dir="${build.drive}/" error="${post.log.dir}/${build.id}_coverity_command_errors.log" append="true">
             <hlm:coverityoptions refid="coverity.analyze.options"/>
         </hlm:coverity >
-        
     </target>
     
     
     <!-- Generate coverity report -->
     <target name="gen-coverity-report">
-        
         <!-- Read the summary file generated by cov-analyze and generate html file -->
         <fmpp sourceFile="${helium.dir}/tools/common/templates/coverity/coverity.summary.html.ftl"
               outputFile="${temp.build.dir}/${build.id}_coverity_build_summary.html">
@@ -244,7 +305,7 @@
         </fmpp>
         
         <!-- Run this to get the static html pages -->
-        <hlm:coverity command="cov-format-errors" dir="${build.drive}/">
+        <hlm:coverity command="cov-format-errors" dir="${build.drive}/" error="${post.log.dir}/${build.id}_coverity_command_errors.log" append="true">
             <hlm:arg name="--dir" value="${coverity.analyze.dir}"/>
             <hlm:arg name="--filesort" value=""/>
             <hlm:arg name="--functionsort" value=""/>
@@ -278,7 +339,6 @@
             <fileset dir="${temp.build.dir}" includes="${build.id}_coverity_build_summary.html"/>
             <fileset dir="${coverity.analyze.dir}/c/output/errors" includes="index.html"/>
         </concat>
-        
     </target>
     
     
@@ -309,5 +369,44 @@
         </sequential>
     </macrodef>
     
-
+    <!-- To commit the coverity defects into coverity defect manager --> 
+    <target name="run-commit-defects" depends="coverity-username,coverity-password" if="internal.coverity.commit.defects.enabled">
+        
+        <!-- Check is the coverity defect manager server and port numbers are set -->
+        <fail message="FAILED: Coverity defect manager server/IP address is not set. Please set 'coverity.defect.manager.server'. Ex: server.domain.extension or 100.220.530.101" 
+            unless="coverity.defect.manager.server"/>
+        <fail message="FAILED: Coverity defect manager HTTP port number is not set. Please set 'coverity.defect.manager.port'." 
+            unless="coverity.defect.manager.port"/>        
+        <!-- Check is the coverity defect manager server product is set to submit the coverity errors.-->
+        <fail message="FAILED: Coverity defect manager product name is not set. Please set 'coverity.defect.manager.product'." 
+            unless="coverity.defect.manager.product"/>
+        
+        <!-- cov-commit-defects command options -->
+        <hlm:coverityoptions id="coverity.commit.defects.options">
+            <hlm:arg name="--config" value="${coverity.config.dir}/coverity_config.xml"/>
+            <hlm:arg name="--remote" value="${coverity.defect.manager.server}"/>
+            <hlm:arg name="--port" value="${coverity.defect.manager.port}"/>
+            <hlm:arg name="--user" value="${coverity.username}"/>
+            <hlm:arg name="--password" value="${coverity.password}"/>
+            <hlm:arg name="--dir" value="${coverity.analyze.dir}"/>
+            <hlm:arg name="--product" value="${coverity.defect.manager.product}"/>
+        </hlm:coverityoptions>
+        
+        <!-- Run the coverity commit defects command to submit the errors into defect manager -->
+        <hlm:coverity command="cov-commit-defects" dir="${build.drive}/" error="${post.log.dir}/${build.id}_coverity_command_errors.log" append="true">
+            <hlm:coverityoptions refid="coverity.commit.defects.options"/>
+        </hlm:coverity >
+    </target>
+    
+    <!-- Retrieve the coverity password from the .netrc file and store it into coverity.password property. -->
+    <target name="coverity-password" if="internal.coverity.commit.defects.enabled">
+        <hlm:netrcPasswordMacro output-prop="coverity.password" result-prop="coverity.password.available" type="coverity"/>
+        <hlm:logreplace regexp="coverity.password"/>
+    </target>
+    
+    <!-- Retrieve the coverity username from the .netrc file and store it into coverity.username property. -->
+    <target name="coverity-username" if="internal.coverity.commit.defects.enabled">
+        <hlm:netrcUsernameMacro output-prop="coverity.username" result-prop="coverity.username.available" type="coverity"/>
+    </target>
+    
 </project>
--- a/buildframework/helium/tools/compile/ec/ec.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/compile/ec/ec.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -79,7 +79,7 @@
                 <metadatafilterset refid="filterset.genxml.ec" />
             </hlm:textmetadatainput>
         </hlm:metadatarecord>
-        <hlm:generateBuildStatus file="${build.id}.${sysdef.configuration}.sysdef2make.log" />
+        <hlm:generateBuildStatus file="${compile.log.dir}/${build.id}.${sysdef.configuration}.sysdef2make.log" />
     </target>
 
     <!-- Locate the dependancy files from a previous build so that only those files that have been changed need to be compiled -->
--- a/buildframework/helium/tools/compile/qt/antunit/test_qt.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/compile/qt/antunit/test_qt.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -89,15 +89,17 @@
         <au:assertTrue message="The output file must contain helloworldapi.pro">
             <contains string="${run.qmake.out}" substring="helloworldapi.pro" />
         </au:assertTrue>
-        <au:assertTrue message="The output file must contain $${build.drive}/\sf\app\HelloWorldCons\group">
-            <contains string="${run.qmake.out}" substring="$${build.drive}/\sf\app\HelloWorldCons\group" />
+        <au:assertTrue message="The output file must contain $${build.drive}/sf/app/HelloWorldCons/group">
+            <contains string="${run.qmake.out}" substring="$${build.drive}/sf/app/HelloWorldCons/group" />
         </au:assertTrue>
-        <au:assertTrue message="The output file must contain $${build.drive}/\sf\mw\HelloWorldAPI\group">
-            <contains string="${run.qmake.out}" substring="$${build.drive}/\sf\mw\HelloWorldAPI\group" />
+        <au:assertTrue message="The output file must contain $${build.drive}/sf/mw/HelloWorldAPI/group">
+            <contains string="${run.qmake.out}" substring="$${build.drive}/sf/mw/HelloWorldAPI/group" />
         </au:assertTrue>
     </target>
     
     <target name="test-sysdef151-namespaced-qt-mk">
+        <propertyregex property="build.drive.slash" input="${build.drive}" regexp="\\" replace="/" />
+        <property name="build.drive.slash" value="${build.drive}" />
         <property name="sysdef.configuration" value="demo" />
         <fmpp sourceFile="${helium.dir}/tools/compile/qt/templates/run-qmake.mk.ftl"
            outputFile="${qt.temp.dir}/run-qmake151.mk">
@@ -117,15 +119,17 @@
         <au:assertTrue message="The output file must contain helloworldapi.pro">
             <contains string="${run.qmake.out}" substring="helloworldapi.pro" />
         </au:assertTrue>
-        <au:assertTrue message="The output file must contain -@cd /\sf\mw\HelloWorldAPI\group &amp;&amp; qmake -listgen -nomoc helloworldapi.pro">
-            <contains string="${run.qmake.out}" substring="-@cd /\sf\mw\HelloWorldAPI\group &amp;&amp; qmake -listgen -nomoc helloworldapi.pro" />
+        <au:assertTrue message="The output file must contain -@cd ${build.drive.slash}/sf/mw/HelloWorldAPI/group &amp;&amp; qmake -listgen -nomoc helloworldapi.pro">
+            <contains string="${run.qmake.out}" substring="-@cd ${build.drive.slash}/sf/mw/HelloWorldAPI/group &amp;&amp; qmake -listgen -nomoc helloworldapi.pro" />
         </au:assertTrue>
-        <au:assertTrue message="The output file must contain -@cd /\sf\app\HelloWorldCons\group &amp;&amp; qmake -listgen -r helloworld.pro">
-            <contains string="${run.qmake.out}" substring="-@cd /\sf\app\HelloWorldCons\group &amp;&amp; qmake -listgen -r helloworld.pro" />
+        <au:assertTrue message="The output file must contain -@cd ${build.drive.slash}/sf/app/HelloWorldCons/group &amp;&amp; qmake -listgen -r helloworld.pro">
+            <contains string="${run.qmake.out}" substring="-@cd ${build.drive.slash}/sf/app/HelloWorldCons/group &amp;&amp; qmake -listgen -r helloworld.pro" />
         </au:assertTrue>
     </target>
 
     <target name="test-sysdef3-namespaced-qt-mk">
+        <propertyregex property="build.drive.slash" input="${build.drive}" regexp="\\" replace="/" global="true" />
+        <property name="build.drive.slash" value="${build.drive}" />
         <property name="sysdef.configuration" value="demo" />
         <fmpp sourceFile="${helium.dir}/tools/compile/qt/templates/run-qmake.mk.ftl"
            outputFile="${qt.temp.dir}/run-qmake3.mk">
@@ -135,7 +139,7 @@
             </data>
         </fmpp>
         <au:assertFileExists file="${qt.temp.dir}/run-qmake3.mk" />
-        <loadfile property="run.qmake.out" srcfile="${qt.temp.dir}/run-qmake151.mk" />
+        <loadfile property="run.qmake.out" srcfile="${qt.temp.dir}/run-qmake3.mk" />
         <au:assertTrue message="The output file must contain the -nomoc argument.">
             <contains string="${run.qmake.out}" substring="-nomoc" />
         </au:assertTrue>
@@ -145,11 +149,11 @@
         <au:assertTrue message="The output file must contain helloworldapi.pro">
             <contains string="${run.qmake.out}" substring="helloworldapi.pro" />
         </au:assertTrue>
-        <au:assertTrue message="The output file must contain -@cd /\sf\mw\HelloWorldAPI\group &amp;&amp; qmake -listgen -nomoc helloworldapi.pro">
-            <contains string="${run.qmake.out}" substring="-@cd /\sf\mw\HelloWorldAPI\group &amp;&amp; qmake -listgen -nomoc helloworldapi.pro" />
+        <au:assertTrue message="The output file must contain -@cd ${build.drive.slash}/sf/mw/helloworldapi/group &amp;&amp; qmake -listgen -nomoc helloworldapi.pro">
+            <contains string="${run.qmake.out}" substring="-@cd ${build.drive.slash}/sf/mw/helloworldapi/group &amp;&amp; qmake -listgen -nomoc helloworldapi.pro" />
         </au:assertTrue>
-        <au:assertTrue message="The output file must contain -@cd /\sf\app\HelloWorldCons\group &amp;&amp; qmake -listgen -r helloworld.pro">
-            <contains string="${run.qmake.out}" substring="-@cd /\sf\app\HelloWorldCons\group &amp;&amp; qmake -listgen -r helloworld.pro" />
+        <au:assertTrue message="The output file must contain -@cd ${build.drive.slash}/sf/app/helloworldcons/group &amp;&amp; qmake -listgen -r helloworld.pro">
+            <contains string="${run.qmake.out}" substring="-@cd ${build.drive.slash}/sf/app/helloworldcons/group &amp;&amp; qmake -listgen -r helloworld.pro" />
         </au:assertTrue>
     </target>
 </project>
\ No newline at end of file
--- a/buildframework/helium/tools/compile/qt/qt.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/compile/qt/qt.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -46,80 +46,102 @@
     <!--* @property qmake.enabled
     Enables the run of qMake over a build configuration so bld.inf and mmps are generated for the build.
     @type boolean
+    @editable required
     @scope public
     -->
     
+    <!--* @property internal.qmake.enabled
+    To run qmake based targets if qmake.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!-- Check, is qmake is enabled -->
+    <condition property="internal.qmake.enabled">
+        <istrue value="${qmake.enabled}"/>
+    </condition>
+    
     <!--
         Executing qmake on all Qt components defined under the system definition file.
         It must use schema v1.5.0+, and Qt unit must define a proFile attibute.   
      -->
-    <target name="run-qmake">
+    <target name="run-qmake" if="internal.qmake.enabled">
+        <!-- Generating the build steps from the sysdef information -->
         <if>
-            <istrue value="${qmake.enabled}" />
+            <istrue value="${sysdef3.enabled}" />
             <then>
-                <!-- Generating the build steps from the sysdef information -->
-                <hlm:generate-layers />
                 <if>
-                    <or>
-                        <equals arg1="${build.system}" arg2="ec-helium" />
-                        <equals arg1="${build.system}" arg2="sbs-ec" />
-                    </or>
+                    <isreference refid="sysdef.filters.${sysdef.configuration}" />
                     <then>
-                        <fmpp sourceFile="${qt.qmake.makefile.template}"
-                            outputFile="${temp.build.dir}/run-qmake-${sysdef.configuration}.mk">
-                            <data expandProperties="yes">
-                                data: xml(${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml)
-                                ant: antProperties()
-                            </data>
-                        </fmpp>
-                        <hlm:assertFileExists file="${temp.build.dir}/run-qmake-${sysdef.configuration}.mk" />
-    
-                        <!-- Running the qmake steps -->
-                        <hlm:emakeMacro name="run-qmake-${sysdef.configuration}" makefile="${temp.build.dir}/run-qmake-${sysdef.configuration}.mk"
+                        <hlm:filterSysdef epocroot="${build.drive}/" srcfile="${canonical.sysdef.file}" 
+                            destfile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml">
+                            <filterSet refid="sysdef.filters.${sysdef.configuration}" />
+                        </hlm:filterSysdef>
+                    </then>
+                    <else>
+                        <echo message="The sysdef.filters.${sysdef.configuration} sysdefFilterSet is not defined." />
+                        <copy file="${canonical.sysdef.file}"
+                            tofile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml" />
+                    </else>
+                </if>
+            </then>
+            <else>
+                <hlm:generate-layers />
+            </else>
+        </if>
+        <if>
+            <or>
+                <equals arg1="${build.system}" arg2="ec-helium" />
+                <equals arg1="${build.system}" arg2="sbs-ec" />
+            </or>
+            <then>
+                <fmpp sourceFile="${qt.qmake.makefile.template}" outputFile="${temp.build.dir}/run-qmake-${sysdef.configuration}.mk">
+                    <data expandProperties="yes">
+                        data: xml(${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml)
+                        ant: antProperties()
+                    </data>
+                </fmpp>
+                <hlm:assertFileExists file="${temp.build.dir}/run-qmake-${sysdef.configuration}.mk" />
+                <!-- Running the qmake steps -->
+                <hlm:emakeMacro name="run-qmake-${sysdef.configuration}" makefile="${temp.build.dir}/run-qmake-${sysdef.configuration}.mk"
                                 target="all" dir="${build.drive}/" log="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.log"
                                 annodetail="basic,history,file,waiting"
                                 failonerror="false" 
                                 phase="compile"/>
-                        <hlm:assertFileExists file="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.log" />
-                    </then>
-                    <else>
-                        <fmpp sourceFile="${qt.qmake.ant.template}"
-                            outputFile="${temp.build.dir}/run-qmake-${sysdef.configuration}.ant.xml">
-                            <data expandProperties="yes">
-                                data: xml(${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml)
-                                ant: antProperties()
-                            </data>
-                        </fmpp>
-                        <hlm:assertFileExists file="${temp.build.dir}/run-qmake-${sysdef.configuration}.ant.xml" />
-    
-                        <!-- Running the qmake steps -->
-                        <ant antfile="${temp.build.dir}/run-qmake-${sysdef.configuration}.ant.xml" dir="${build.drive}/"
-                            output="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.log"/>
-                        <hlm:assertFileExists file="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.log" />
-                    </else>
-                </if>
-                <copy file="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.log" tofile="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.generated.txt">
-                    <filterchain>
-                        <linecontainsregexp>
-                            <regexp pattern="Generating"/>
-                        </linecontainsregexp>
-                    </filterchain>
-                </copy>
-                <replaceregexp file="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.generated.txt" match="^\s*(?:\[exec\])?\s*Generating[^/\\]*." replace="" byline="true"/>
-                <hlm:assertFileExists file="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.generated.txt"/>
-                <hlm:metadatarecord database="${metadata.dbfile}">
-                    <hlm:textmetadatainput>
-                        <fileset casesensitive="false" file="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.log" />
-                        <metadatafilterset refid="filterset.qmake" />
-                    </hlm:textmetadatainput>
-                </hlm:metadatarecord>
-                <hlm:signalMacro logfile="${build.id}_${sysdef.configuration}.qmake.log" 
-                    signal.input="signalRunQMakeInput" phase="compile"/>
+                <hlm:assertFileExists file="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.log" />
             </then>
             <else>
-                <echo>Skipping qmake step, because qmake.enabled is not set to true.</echo>
+                <fmpp sourceFile="${qt.qmake.ant.template}" outputFile="${temp.build.dir}/run-qmake-${sysdef.configuration}.ant.xml">
+                    <data expandProperties="yes">
+                        data: xml(${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml)
+                        ant: antProperties()
+                    </data>
+                </fmpp>
+                <hlm:assertFileExists file="${temp.build.dir}/run-qmake-${sysdef.configuration}.ant.xml" />
+    
+                <!-- Running the qmake steps -->
+                <ant antfile="${temp.build.dir}/run-qmake-${sysdef.configuration}.ant.xml" dir="${build.drive}/"
+                    output="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.log"/>
+                <hlm:assertFileExists file="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.log" />
             </else>
         </if>
+        <copy file="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.log" tofile="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.generated.txt">
+            <filterchain>
+                <linecontainsregexp>
+                    <regexp pattern="Generating"/>
+                </linecontainsregexp>
+            </filterchain>
+        </copy>
+        <replaceregexp file="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.generated.txt" match="^\s*(?:\[exec\])?\s*Generating[^/\\]*." replace="" byline="true"/>
+        <hlm:assertFileExists file="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.generated.txt"/>
+        <hlm:metadatarecord database="${metadata.dbfile}">
+            <hlm:textmetadatainput>
+                <fileset casesensitive="false" file="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.log" />
+                <metadatafilterset refid="filterset.qmake" />
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:signalMacro logfile="${compile.log.dir}/${build.id}_${sysdef.configuration}.qmake.log" 
+                    signal.input="signalRunQMakeInput" phase="compile"/>
     </target>
 
 </project>
--- a/buildframework/helium/tools/compile/qt/templates/run-qmake.ant.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/compile/qt/templates/run-qmake.ant.xml.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -30,12 +30,13 @@
         <#if unit.@proFile[0]??>
             <#assign prefix="" />
         </#if>
+        <#assign bldinf="${r'$'}{build.drive}/${unit.@bldFile}"?replace('\\', '/')?replace('//', '/')>
             <sequential>
-                <echo>Running qmake for ${unit.@bldFile}/${unit['@${prefix}proFile'][0]?xml}</echo>
+                <echo>Running qmake for ${bldinf}/${unit['@${prefix}proFile'][0]?xml}</echo>
                 <if>
-                    <available file="${r'$'}{build.drive}/${unit.@bldFile}" type="dir"/>
+                    <available file="${bldinf}" type="dir"/>
                     <then>
-                        <exec executable="cmd" osfamily="windows" dir="${r'$'}{build.drive}/${unit.@bldFile}" failonerror="false">
+                        <exec executable="cmd" osfamily="windows" dir="${bldinf}" failonerror="false">
                             <arg value="/C"/>
                             <arg value="qmake"/>
                             <arg value="-listgen"/>
@@ -46,8 +47,8 @@
                             </#if>
                             <arg value="${unit['@${prefix}proFile'][0]?xml}"/>
                         </exec>
-                        <exec osfamily="unix" executable="sh" dir="${r'$'}{build.drive}/${unit.@bldFile}" failonerror="false">
-                            <arg value="${ant['epocroot']}/epoc32/tools/qmake"/>
+                        <exec osfamily="unix" executable="sh" dir="${bldinf}" failonerror="false">
+                            <arg value="${(ant['epocroot'] + "/")?replace('//', '/')}epoc32/tools/qmake"/>
                             <arg value="-listgen"/>
                             <#if unit['@${prefix}qmakeArgs'][0]??>
                             <arg line="${unit['@${prefix}qmakeArgs'][0]?xml}"/>
@@ -58,7 +59,7 @@
                         </exec>
                     </then>
                     <else>
-                       <echo message="ERROR: Directory ${r'$'}{build.drive}/${unit.@bldFile} doesn't exist."/>
+                       <echo message="ERROR: Directory ${bldinf} doesn't exist."/>
                     </else>
                 </if>
             </sequential>
--- a/buildframework/helium/tools/compile/qt/templates/run-qmake.mk.ftl	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/compile/qt/templates/run-qmake.mk.ftl	Fri Aug 13 14:59:05 2010 +0300
@@ -31,12 +31,14 @@
     <#if unit.@proFile[0]??>
         <#assign prefix="" />
     </#if>
+    <#assign bldinf="${ant['build.drive']}/${unit.@bldFile}"?replace('\\', '/')?replace('//', '/')>
+
 ##########################################################################
-/${unit.@bldFile}/bld.inf: /${unit.@bldFile}/${unit['@${prefix}proFile'][0]}
-	@echo cd /${unit.@bldFile} ^&^& qmake -listgen <#if unit['@${prefix}qmakeArgs'][0]??>${unit['@${prefix}qmakeArgs'][0]}<#else>${ant['qt.qmake.default.args']}</#if><#if "${ant['build.system']?lower_case}" = 'sbs-ec'> -spec symbian-sbsv2</#if> ${unit['@${prefix}proFile'][0]}
-	-@cd /${unit.@bldFile} && qmake -listgen <#if unit['@${prefix}qmakeArgs'][0]??>${unit['@${prefix}qmakeArgs'][0]}<#else>${ant['qt.qmake.default.args']}</#if> ${unit['@${prefix}proFile'][0]}
+${bldinf}/bld.inf: ${bldinf}/${unit['@${prefix}proFile'][0]}
+	@echo cd ${bldinf} ^&^& qmake -listgen <#if unit['@${prefix}qmakeArgs'][0]??>${unit['@${prefix}qmakeArgs'][0]}<#else>${ant['qt.qmake.default.args']}</#if><#if "${ant['build.system']?lower_case}" = 'sbs-ec'> -spec symbian-sbsv2</#if> ${unit['@${prefix}proFile'][0]}
+	-@cd ${bldinf} && qmake -listgen <#if unit['@${prefix}qmakeArgs'][0]??>${unit['@${prefix}qmakeArgs'][0]}<#else>${ant['qt.qmake.default.args']}</#if> ${unit['@${prefix}proFile'][0]}
 
-all:: /${unit.@bldFile}/bld.inf
+all:: ${bldinf}/bld.inf
 
 
 </#list>
--- a/buildframework/helium/tools/compile/sbs/sbs.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/compile/sbs/sbs.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -27,23 +27,33 @@
     </description>
 
 
-
     <!--
         Executes compilation  of a System Model of System Definition file using Symbian SBS (Raptor) tools. 
         Should not be called directly but through compile-main by setting ${build.system.sbs} property.
     -->
 
+    <!--* @property sbs.ctc.enabled
+    This property enables Raptor compilation using ctc. 
+    @type boolean
+    @editable required
+    @scope public
+    -->
+     
     <!--* @property sbs.build.ctc
-     This property enables Raptor compilation using ctc. 
-     @type boolean
-     @scope public
-     -->
-    
-    <!--* @property schema.new
-     This property enables sbs compilation based on system definition schema 3.0.0. 
-     @type boolean
-     @scope public
-     -->
+    This property enables Raptor compilation using ctc. - deprecated: Start using sbs.ctc.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+
+    <!--* @property sbs.checksource.enabled
+    This property enables Raptor checksource analysis. 
+    @type boolean
+    @editable required
+    @scope public
+    -->
+
     
     <!-- This property enables sbs layer filtering of the canonical system definition file 
          for system definition schema 1.4.0 using ${sysdef.configuration}. 
@@ -51,6 +61,13 @@
     -->
     <property name="sbs.layer.generation.enabled" value="true" />
 
+    <!-- This property enables the downgrading of the canonical system
+         definition v3 model into 2.0 before passing the file to sbs.  
+     @type boolean
+    -->
+    <property name="sbs.downgrade.sysdef.enabled" value="true" />
+        
+    
     <!-- Default CTC command line option, override it to customize it. -->
     <hlm:argSet id="ctc.build.options" />
 
@@ -63,15 +80,15 @@
     <!-- 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">
         <sequential>
-            <echo message="canno-file:${canonical.sysdef.file}" />
-            <echo message="raptor-filters:raptor_${sysdef.configuration}" />
+            <echo message="cannonical sysdef file: ${canonical.sysdef.file}" />
+            <echo message="raptor-filters: raptor_${sysdef.configuration}" />
             <if>
                 <isfalse value="${sbs.layer.generation.enabled}" />
                 <then>
                     <if>
                         <isreference refid="sysdef.layers.${sysdef.configuration}" />
                         <then>
-                            <property name="sbs.patternset" value="sysdef.filters.${sysdef.configuration}" />
+                            <property name="sbs.patternset" value="sysdef.layers.${sysdef.configuration}" />
                             <echo message="sbs.patternset: ${sbs.patternset}" />
                         </then>
                         <else>
@@ -97,226 +114,270 @@
         </sequential>
     </macrodef>
 
-    <!-- SBS build with gmake as engine type. Default is using sbs macro, to use old implementation to
-    use using exec task, then sbs.using.exec needs to be set. -->
-    <target name="compile-sbs" description="This is the main build that gets built for ARMV5 and WINSCW platforms">
-        <!-- only temporary once config file option starts to work, then no 
-        need to copy the plugin file -->
-
+    
+    <condition property="build.system.sbs-any">
+        <or>
+            <equals arg1="${build.system}" arg2="sbs" />
+            <equals arg1="${build.system}" arg2="sbs-ec" />
+        </or>
+    </condition>
+    
+    
+    <!-- SBS build with gmake as engine type.
+        
+    Default is using sbs macro, to use old implementation to
+    use using exec task, then sbs.using.exec needs to be set.
+    -->
+    <target name="compile-sbs" if="build.system.sbs-any">
+        <echo message="Copying Helium filter plugin to sbs home" />
+        <var name="sbs.internal.inputs.list" unset="true"/>
         <if>
-            <or>
-                <equals arg1="${build.system}" arg2="sbs" />
-                <equals arg1="${build.system}" arg2="sbs-ec" />
-            </or>
+            <istrue value="${sysdef3.enabled}" />
             <then>
-                <echo message="Copying helium filter plugin to sbs home" />
-                <copy file="${helium.dir}/tools/common/python/scripts/filter_metadatalog.py" todir="${env.SBS_HOME}/python/plugins/" failonerror="true" />
-                <copy file="${helium.dir}/tools/common/python/scripts/sbsscanlogmetadata.py" todir="${env.SBS_HOME}/python/plugins/" failonerror="true" />
-                <var name="sbs.internal.inputs.list" value="" unset="true"/>
                 <if>
-                    <istrue value="${schema.new}" />
+                    <isreference refid="sysdef.filters.${sysdef.configuration}" />
                     <then>
-                        <hlm:downgradeSysdef epocroot="${build.drive}/" srcfile="${canonical.sysdef.file}" 
+                        <hlm:filterSysdef epocroot="${build.drive}/" srcfile="${canonical.sysdef.file}" 
+                            destfile="${build.drive}/output/build/canonical_system_definition_filtered_${sysdef.configuration}.xml">
+                            <filterSet refid="sysdef.filters.${sysdef.configuration}" />
+                        </hlm:filterSysdef>
+                    </then>
+                    <else>
+                        <echo message="The sysdef.filters.${sysdef.configuration} sysdefFilterSet is not defined." />
+                        <copy file="${canonical.sysdef.file}"
+                            tofile="${build.drive}/output/build/canonical_system_definition_filtered_${sysdef.configuration}.xml" />
+                    </else>
+                </if>
+                <if>
+                    <istrue value="${sbs.downgrade.sysdef.enabled}" />
+                    <then>
+                        <hlm:downgradeSysdef epocroot="${build.drive}/" srcfile="${build.drive}/output/build/canonical_system_definition_filtered_${sysdef.configuration}.xml" 
                             destfile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml"/>
-                        <var name="sbs.patternset" unset="true"/>
-                        <if>
-                            <isreference refid="sysdef.filters.${sysdef.configuration}" />
-                            <then>
-                                <property name="sbs.patternset" value="sysdef.filters.${sysdef.configuration}" />
-                                <echo message="sbs.patternset: ${sbs.patternset}" />
-                            </then>
-                            <else>
-                                <echo message="The sysdef.filters.${sysdef.configuration} patternset is not defined." />
-                            </else>
-                        </if>
+                    </then>
+                    <else>
+                        <echo message="Downgrading to 2.0 model disabled." />
+                        <copy file="${build.drive}/output/build/canonical_system_definition_filtered_${sysdef.configuration}.xml"
+                            tofile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml" />
+                    </else>
+                </if>
+                <var name="sbs.patternset" unset="true"/>
+                <if>
+                    <isreference refid="sysdef.layers.${sysdef.configuration}" />
+                    <then>
+                        <property name="sbs.patternset" value="sysdef.layers.${sysdef.configuration}" />
+                        <echo message="sbs.patternset: ${sbs.patternset}" />
+                    </then>
+                    <else>
+                        <echo message="The sysdef.layers.${sysdef.configuration} patternset is not defined." />
+                    </else>
+                </if>
+            </then>
+            <else>
+                <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>
-                        <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>
+                        <echo message="The sysdef.layers.${sysdef.configuration} patternset is not defined." />
+                        <hlm:generate-layers />
                     </else>
-                </if>              
-                <hlm:getsbsinputs config="sbs.${sysdef.configuration}" outputProperty="sbs.internal.inputs.list"/>
-                <for list="${sbs.internal.inputs.list}" delimiter="," param="sbs.input">
-                    <sequential>
-                        <echo message="building raptor input: @{sbs.input}" />
-                        <var name="sbs.log.file" unset="true" />
-                        <property name="sbs.log.file" location="${compile.log.dir}/${build.id}_${sysdef.configuration}_@{sbs.input}_compile.log" />
-                        <!-- run arm license checking / setting arm version only for arm config -->
-                        <hlm:getVariableValue name="-c" property="compilevalue.var" failOnerror="false">
-                            <hlm:sbsinput refid="@{sbs.input}" />
-                        </hlm:getVariableValue>
-                        <echo message="config parameter -c : ${compilevalue.var}" />
-                        <if>
-                            <and>
-                                <isset property="compilevalue.var"/>
-                                <matches string="${compilevalue.var}" pattern="arm.*"/>
-                            </and>
-                            <then>
-                                <runtarget target="set-arm-version"/>
-                            </then>
-                        </if>
-                        <!-- Generate the filtered layers -->
-                        <if>
-                            <isset property="run.coverity"/>
-                            <then>
-                                <hlm:coveritybuild  sbsinput="@{sbs.input}" 
-                                                    sysdeffile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml"
-                                                    layerpatternsetref="${sbs.patternset}" 
-                                                    workingdir="${build.drive}/" 
-                                                    execute="true"
-                                                    failonerror="false"
-                                                    outputlog="${sbs.log.file}" 
-                                                    erroroutput="${sbs.log.file}.sbs_error.log">
-                                    <hlm:coverityoptions refid="coverity.build.options"/>
-                                </hlm:coveritybuild>
-                            </then>
-                            <elseif>
-                                <istrue value="${sbs.build.ctc}"/>
-                                <then>
-                                    <hlm:ctctask sbsinput="@{sbs.input}" 
-                                                    sysdefFile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml" 
-                                                    layerPatternSetRef="${sbs.patternset}" 
-                                                    errorOutput="${sbs.log.file}.sbs_error.log" 
-                                                    workingDir="${build.drive}/" 
-                                                    failOnError="false" 
-                                                    outputLog="${sbs.log.file}"
-                                                    instrumentType="${ctc.instrument.type}">
-                                        <hlm:CTCOptions refid="ctc.build.options" />
-                                    </hlm:ctctask>
-                                </then>
-                            </elseif>
-                            <else>
-                                <hlm:sbstask sbsinput="@{sbs.input}" 
-                                                sysdefFile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml" 
-                                                layerPatternSetRef="${sbs.patternset}" 
-                                                errorOutput="${sbs.log.file}.sbs_error.log" 
-                                                workingDir="${build.drive}/" 
-                                                failOnError="false" 
-                                                outputLog="${sbs.log.file}" />
-                            </else>
-                        </if>
-                        <hlm:assertFileExists file="${sbs.log.file}"/>
-                        <hlm:assertFileExists file="${sbs.log.file}.sbs_error.log"/>
-                        <!-- run arm license checking / setting arm version only for arm config --> 
-                        <echo message="sbs.log.file: ${sbs.log.file}" />
-                        <hlm:sbsProcessOutputMacro sbs.log.file="${sbs.log.file}"
-                            sbs.ant.output.file="${sbs.log.file}" sbs.error.output.file="${sbs.log.file}.sbs_error.log"/>
-                    </sequential>
-                </for>
-            </then>
-        </if>
+                </if>
+            </else>
+        </if>              
+        <hlm:getsbsinputs config="sbs.${sysdef.configuration}" outputProperty="sbs.internal.inputs.list"/>
+        <for list="${sbs.internal.inputs.list}" delimiter="," param="sbs.input">
+            <sequential>
+                <echo message="building raptor input: @{sbs.input}" />
+                <var name="sbs.log.file" unset="true" />
+                <property name="sbs.log.file" location="${compile.log.dir}/${build.id}_${sysdef.configuration}_@{sbs.input}_compile.log" />
+                <!-- run arm license checking / setting arm version only for arm config -->
+                <hlm:getVariableValue name="-c" property="compilevalue.var" failOnerror="false">
+                    <hlm:sbsinput refid="@{sbs.input}" />
+                </hlm:getVariableValue>
+                <echo message="config parameter -c : ${compilevalue.var}" />
+                <if>
+                    <and>
+                        <isset property="compilevalue.var"/>
+                        <matches string="${compilevalue.var}" pattern="arm.*"/>
+                    </and>
+                    <then>
+                        <runtarget target="set-arm-version"/>
+                    </then>
+                </if>
+                <!-- Generate the filtered layers -->
+                <if>
+                    <or>
+                        <istrue value="${coverity.enabled}" />
+                        <isset property="enabled.coverity"/>
+                    </or>
+                    <then>
+                        <hlm:coveritybuild  sbsinput="@{sbs.input}" 
+                                            sysdeffile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml"
+                                            layerpatternsetref="${sbs.patternset}" 
+                                            workingdir="${build.drive}/" 
+                                            execute="true"
+                                            failonerror="false"
+                                            outputlog="${sbs.log.file}" 
+                                            erroroutput="${sbs.log.file}.sbs_error.log">
+                            <hlm:coverityoptions refid="coverity.build.options"/>
+                        </hlm:coveritybuild>
+                    </then>
+                    <elseif>
+                        <or>
+                            <istrue value="${sbs.ctc.enabled}"/>
+                            <isset property="sbs.build.ctc"/>
+                        </or>
+                        <then>
+                            <hlm:ctctask sbsinput="@{sbs.input}" 
+                                            sysdefFile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml" 
+                                            layerPatternSetRef="${sbs.patternset}" 
+                                            errorOutput="${sbs.log.file}.sbs_error.log" 
+                                            workingDir="${build.drive}/" 
+                                            failOnError="false" 
+                                            outputLog="${sbs.log.file}"
+                                            instrumentType="${ctc.instrument.type}">
+                                <hlm:CTCOptions refid="ctc.build.options" />
+                            </hlm:ctctask>
+                        </then>
+                    </elseif>
+                    <else>
+                        <hlm:sbstask sbsinput="@{sbs.input}" 
+                                        sysdefFile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml" 
+                                        layerPatternSetRef="${sbs.patternset}" 
+                                        errorOutput="${sbs.log.file}.sbs_error.log" 
+                                        workingDir="${build.drive}/" 
+                                        failOnError="false" 
+                                        outputLog="${sbs.log.file}" />
+                    </else>
+                </if>
+                <hlm:assertFileExists file="${sbs.log.file}"/>
+                <hlm:assertFileExists file="${sbs.log.file}.sbs_error.log"/>
+                <!-- run arm license checking / setting arm version only for arm config --> 
+                <hlm:sbsProcessOutputMacro sbsLogFile="${sbs.log.file}"
+                                           sbsErrorOutputFile="${sbs.log.file}.sbs_error.log"/>
+            </sequential>
+        </for>
     </target>
     
     
+    <!-- Runs the SBS checksource filter on the SBS log file. -->
+    <macrodef name="sbsChecksourceMacro" uri="http://www.nokia.com/helium">
+        <attribute name="sbsLogFile" />
+        <sequential>
+            <var name="sbs.checksource.log.file" unset="true"/>
+            <property name="sbs.checksource.log.file" location="@{sbsLogFile}.checksource.log" />
+            <exec osfamily="windows" executable="cmd" dir="${build.drive}/" input="@{sbsLogFile}"
+                  output="${sbs.checksource.log.file}" failonerror="false">
+                <arg value="/c" />
+                <arg value="sbs_filter.bat" />
+                <arg value="--filters=FilterCheckSource" />
+            </exec>
+            <hlm:metadatarecord database="${metadata.dbfile}">
+                <hlm:textmetadatainput>
+                    <fileset file="${sbs.checksource.log.file}"/>
+                    <metadatafilterset refid="filterset.sbs.checksource"/>
+                </hlm:textmetadatainput>
+            </hlm:metadatarecord>
+        </sequential>
+    </macrodef>
+    
+    
     <macrodef name="sbsProcessOutputMacro" uri="http://www.nokia.com/helium">
-        <attribute name="sbs.log.file" />
-        <attribute name="sbs.error.output.file" />
-        <attribute name="sbs.ant.output.file" />
+        <attribute name="sbsLogFile" />
+        <attribute name="sbsErrorOutputFile" />
         <sequential>
-            <var name="sbs.scan2.template" value="scan2_orm.html.ftl" />
-            <var name="base.sbs.log" value="" unset="true"/>
-            <basename property="base.sbs.log" file="@{sbs.log.file}" />
+            <var name="sbs.scan2.template" value="${helium.dir}/tools/common/templates/log/scan2_orm.html.ftl" />
+            <var name="base.sbs.log" unset="true"/>
+            <basename property="base.sbs.log" file="@{sbsLogFile}" />
             <echo message="base.sbs.log: ${base.sbs.log}" />
             <hlm:metadatarecord database="${metadata.dbfile}">
                 <hlm:textmetadatainput>
-                    <fileset casesensitive="false" file="@{sbs.error.output.file}"/>
+                    <fileset casesensitive="false" file="@{sbsErrorOutputFile}"/>
                     <metadatafilterset refid="filterset.sbs.cli" />
                 </hlm:textmetadatainput>
             </hlm:metadatarecord>
-            <basename property="base.sbs.ant.output.log" file="@{sbs.ant.output.file}" />
-            <hlm:signalMacro logfile="@{sbs.error.output.file}" 
-                signal.input="raptorErrorSignalInput" phase="compile"/>
+            <hlm:signalMacro logfile="@{sbsErrorOutputFile}" 
+                             signal.input="raptorErrorSignalInput" phase="compile"/>
             <!-- update the resultes to database -->
-            <echo message="Metadata enabled, storing build status in database" />
-            <echo message="sbs log file :@{sbs.log.file}" />
-            <trycatch property="hlm-sbs.parser.thrown">
-                <try>
-                    <hlm:metadatarecord  database="${metadata.dbfile}">
-                        <hlm:sbsmetadatainput>
-                            <fileset casesensitive="false" file="@{sbs.log.file}"/>
-                            <metadatafilterset refid="filterset.sbs" />
-                        </hlm:sbsmetadatainput>
-                    </hlm:metadatarecord>
-                </try>
-                <catch>
+            <if>
+                <available file="@{sbsLogFile}" />
+                <then>
+                    <echo message="sbs log file: @{sbsLogFile}" />
                     <if>
-                        <istrue value="${skip.sbs.parser.exception}" />
+                        <istrue value="${internal.compile.cmd.clean.enabled}" />
                         <then>
-                            <var name="sbs.scan2.template" value="scan2_text_orm.html.ftl" />
-                            <hlm:metadatadelete database="${metadata.dbfile}">
-                                <fileset casesensitive="false" file="@{sbs.log.file}"/>
-                            </hlm:metadatadelete>
-                            <hlm:metadatarecord database="${metadata.dbfile}" >
-                                <hlm:textmetadatainput>
-                                    <fileset casesensitive="false" file="@{sbs.log.file}"/>
+                            <hlm:metadatarecord  database="${metadata.dbfile}">
+                                <hlm:sbsmetadatainput failOnInvalidXml="false" checkMissing="false" epocroot="${build.drive}/">
+                                    <fileset casesensitive="false" file="@{sbsLogFile}"/>
                                     <metadatafilterset refid="filterset.sbs" />
-                                </hlm:textmetadatainput>
+                                </hlm:sbsmetadatainput>
                             </hlm:metadatarecord>
                         </then>
                         <else>
-                            <loadfile property="sbs.error.output" srcfile="@{sbs.error.output.file}" failonerror="false"/>
-                            <fail message="failed during raptor log parsing: might be due to invalid xml output from raptor ${hlm-sbs.parser.thrown}. ${sbs.error.output}" />
+                            <hlm:metadatarecord  database="${metadata.dbfile}">
+                                <hlm:sbsmetadatainput failOnInvalidXml="false" epocroot="${build.drive}/">
+                                    <fileset casesensitive="false" file="@{sbsLogFile}"/>
+                                    <metadatafilterset refid="filterset.sbs" />
+                                </hlm:sbsmetadatainput>
+                            </hlm:metadatarecord>
+                            <if>
+                                <istrue value="${sbs.checksource.enabled}" />
+                                <then>
+                                    <hlm:sbsChecksourceMacro sbsLogFile="@{sbsLogFile}" />
+                                </then>
+                            </if>
                         </else>
                     </if>
-                </catch>
-            </trycatch>
-            <fmpp sourceFile="${helium.dir}/tools/common/templates/log/${sbs.scan2.template}"
-                         outputfile="${build.log.dir}/${base.sbs.log}.scan2.html">
-                <freemarkerLinks expandProperties="yes">
-                    macro: ${helium.dir}/tools/common/templates/macro
-                </freemarkerLinks>
-                <data expandProperties="yes">
-                    dbPath: ${metadata.dbfile}
-                    logfilename: @{sbs.log.file}
-                    ant: antProperties()
-                </data>
-            </fmpp>
-            <echo message="generating signal" />
-            <hlm:assertFileExists file="${build.log.dir}/${base.sbs.log}.scan2.html"/>
-            <hlm:compileLogSignalMacro compile.summary.file="@{sbs.log.file}" 
-                error.limit="${build.errors.limit}" phase="compile"/>
-            <!-- Blocks packaging configuration generation. -->
-            <if>
-                <istrue value="${blocks.enabled}" />
-                <then>
-                    <mkdir dir="${blocks.config.dir}" />
-                    <exec executable="python">
-                        <arg value="-m"/>
-                        <arg value="packager.cli"/>
-                        <arg value="--epocroot=${build.drive}/" />
-                        <arg value="--config=${blocks.config.dir}" />
-                        <arg value="--datasource=sbs" />
-                        <arg value="-Dsbslog=${sbs.log.file}" />
-                        <arg value="-Dsysdef=${canonical.sysdef.file}" />
-                        <arg value="-Dthreads=20" />
-                        <arg value="--updateData" />
-                    </exec>
+                    <fmpp sourceFile="${sbs.scan2.template}"
+                          outputfile="${build.log.dir}/${base.sbs.log}.scan2.html">
+                        <freemarkerLinks expandProperties="yes">
+                            macro: ${helium.dir}/tools/common/templates/macro
+                        </freemarkerLinks>
+                        <data expandProperties="yes">
+                            dbPath: ${metadata.dbfile}
+                            logfilename: @{sbsLogFile}
+                            ant: antProperties()
+                        </data>
+                    </fmpp>
+                    <hlm:assertFileExists file="${build.log.dir}/${base.sbs.log}.scan2.html"/>
+                    
+                    <echo message="generating signal" />                    
+                    <hlm:compileLogSignalMacro compile.summary.file="@{sbsLogFile}" 
+                        error.limit="${build.errors.limit}" phase="compile"/>
+                    
+                    <!-- Blocks packaging configuration generation. -->
+                    <if>
+                        <istrue value="${blocks.enabled}" />
+                        <then>
+                            <mkdir dir="${blocks.config.dir}" />
+                            <exec executable="python">
+                                <arg value="-m"/>
+                                <arg value="packager.cli"/>
+                                <arg value="--epocroot=${build.drive}/" />
+                                <arg value="--config=${blocks.config.dir}" />
+                                <arg value="--datasource=sbs" />
+                                <arg value="-Dsbslog=${sbs.log.file}" />
+                                <arg value="-Dsysdef=${canonical.sysdef.file}" />
+                                <arg value="-Dthreads=20" />
+                                <arg value="--updateData" />
+                            </exec>
+                        </then>
+                    </if>
                 </then>
+                <else>
+                    <echo>Could not find the sbs log: @{sbsLogFile}.</echo>
+                </else>
             </if>
         </sequential>
     </macrodef>
+        
+        
+    <!-- Uploads the SBS checksource results to Diamonds. -->
+    <target name="sbs-checksource" if="build.system.sbs-any" />
     
-    <scriptdef language="jython" name="getSbsHome" uri="http://www.nokia.com/helium">
-        <attribute name="property" />
-if attributes.get("property") is None:
-    raise Exception("property attribute has not been set.")
-if project.getProperty(attributes.get("property")) is None:
-    import symbian.raptor
-    sbs_home = symbian.raptor.getSBSHome()
-    if sbs_home is not None:
-        #self.log("Found SBS_HOME as " + sbs_home)
-        project.setNewProperty(attributes.get("property"), sbs_home)
-    </scriptdef>
+</project>
 
-</project>
\ No newline at end of file
--- a/buildframework/helium/tools/compile/sis.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/compile/sis.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -66,7 +66,7 @@
         </hlm:python>
         <ant antfile="${temp.build.dir}/sis_build.ant.xml"/>
         <hlm:tempRecordStopMacro name="${build.id}_sisfiles.log" filterref="filterset.sisfiles" phase="post"/>
-        <hlm:metadatarecord xmlns:hlm="http://www.nokia.com/helium" database="${metadata.dbfile}">
+        <hlm:metadatarecord database="${metadata.dbfile}">
             <hlm:textmetadatainput>
                 <fileset casesensitive="false" file="${build.cache.log.dir}/${build.id}_sisfiles.log"/>
                 <metadatafilterset refid="filterset.sisfiles"/>
--- a/buildframework/helium/tools/localisation/localisation-50.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/localisation/localisation-50.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -68,7 +68,7 @@
     --> 
     <target name="localisation-dtd">
         <mkdir dir="${localisation.log.dir}"/>
-        <exec dir="${build.drive}/" executable="perl.exe" failonerror="false"> 
+        <exec dir="${build.drive}/" executable="perl" failonerror="false"> 
             <arg value="${build.drive}/epoc32/tools/DTDLocaliser.pl"/> 
             <arg value="-l"/> 
             <arg value="${localisation.log.dir}/${build.id}.dtd_localisation.log}"/> 
@@ -80,7 +80,7 @@
             This target launch the switch_loc_generator (for 5.0 build only). 
     --> 
     <target name="localisation-switch-loc-generator"> 
-        <exec dir="${build.drive}/" executable="perl.exe" failonerror="false"> 
+        <exec dir="${build.drive}/" executable="perl" failonerror="false"> 
             <arg line="${build.drive}/epoc32/tools/switch_loc_generator.pl"/> 
         </exec> 
     </target>
--- a/buildframework/helium/tools/logging/logging.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/logging/logging.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -23,10 +23,9 @@
 <!--* @package framework -->
 <project name="logging" xmlns:hlm="http://www.nokia.com/helium">
     <description>
-        Targets related to log parsing, rendaring, upload to diamonds etc.
+        Targets related to log parsing, rendering, upload to diamonds etc.
     </description>
     
-    
     <!-- This is where the preparation build logs are stored.
     @type string
     @scope private
@@ -63,7 +62,6 @@
     -->
     <property name="localisation.log.dir" location="${build.log.dir}/localisation"/>    
     
-    
     <!-- Macro to record content to a separate log file without recording in the main log. -->
     <macrodef name="recordStartMacro" uri="http://www.nokia.com/helium">
         <attribute name="name"/>
@@ -117,7 +115,6 @@
                 <filelist dir="${build.cache.log.dir}" files="temp_ant_build.log"/>                        
             </concat>
             <delete file="${build.cache.log.dir}/temp_ant_build.log" failonerror="false"/>
-            <echo>End of filtering @{log} for passwords</echo>
         </sequential>
     </macrodef>
     
@@ -221,7 +218,7 @@
                     <metadatafilterset refid="@{filterref}" />
                 </hlm:antmetadatainput>
             </hlm:metadatarecord>
-            <hlm:generateBuildStatus dbfile="@{database}" output-dir="${build.cache.log.dir}/signals" file="@{name}" />
+            <hlm:generateBuildStatus dbfile="@{database}" output-dir="${build.cache.log.dir}/signals" file="${build.cache.log.dir}/@{name}" />
             <if>
                 <isset property="@{phase}.log.dir" />
                 <then>
@@ -305,7 +302,7 @@
     
     <!-- Merges all XML log files ending in ".log2.xml" in the build log directory
     into a single summary log file. -->
-    <target name="log-merge"  unless="metadata.enable">
+    <target name="log-merge">
         <mkdir dir="${build.log.dir}"/>
         <dependset>
             <srcfileset dir="${build.log.dir}" includes="**/${build.id}*.log.xml"/>
--- a/buildframework/helium/tools/logging/test/test_logging.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/logging/test/test_logging.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -97,13 +97,17 @@
     
      <!-- Check the build-property-cache-file exists or not -->
     <target name="test-build-property-cache-file-exists">
-        <antcall target="diamonds"/>
+        <antcall target="diamonds">
+            <param name="diamonds.enabled" value="false"/>
+        </antcall>
         <au:assertFileExists file="${build.property.cache.file}" />
     </target>
     
     <!-- Check the build-property-cache-file contents-->
     <target name="test-build-property-cache-file-content">
-        <antcall target="diamonds"/>
+        <antcall target="diamonds">
+            <param name="diamonds.enabled" value="false"/>
+        </antcall>
         <loadfile property="test.data" srcFile="${build.property.cache.file}"/>
         <au:assertMatches string="${test.data}" pattern="diamonds.build.url" />
     </target>
--- a/buildframework/helium/tools/logging/test/test_summary_log.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/logging/test/test_summary_log.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -45,7 +45,7 @@
             <os family="unix" />
         </condition>
         <hlm:metadatarecord database="${metadata.dbfile}">
-            <hlm:sbsmetadatainput>
+            <hlm:sbsmetadatainput checkMissing="true">
                 <fileset casesensitive="false" file="${sbs.log}"/>
                 <metadatafilterset refid="filterset.sbs" />
             </hlm:sbsmetadatainput>
--- a/buildframework/helium/tools/metadata/metadata.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/metadata/metadata.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -33,8 +33,10 @@
         <sequential>
             <mkdir dir="@{output-dir}" />
             <var name="email.status.template" value="${build.status.email.template}" />
+            <var name="generate.build.status.file.basename" unset="true" />
+            <basename property="generate.build.status.file.basename" file="@{file}" />
             <fmpp sourceFile="${helium.dir}/tools/common/templates/log/build_status_orm.xml.ftl"
-                         outputfile="@{output-dir}/@{file}.status.xml">
+                         outputfile="@{output-dir}/${generate.build.status.file.basename}.status.xml">
                 <freemarkerLinks expandProperties="yes">
                     macro: ${helium.dir}/tools/common/templates/macro
                 </freemarkerLinks>
@@ -45,7 +47,7 @@
                 </data>
             </fmpp>
             <fmpp sourceFile="${build.status.email.template}"
-                         outputfile="@{output-dir}/@{file}.status.html">
+                         outputfile="@{output-dir}/${generate.build.status.file.basename}.status.html">
                 <freemarkerLinks expandProperties="yes">
                     macro: ${helium.dir}/tools/common/templates/macro
                 </freemarkerLinks>
@@ -55,8 +57,8 @@
                     ant: antProperties()
                 </data>
             </fmpp>
-            <hlm:assertFileExists file="@{output-dir}/@{file}.status.xml" />
-            <hlm:assertFileExists file="@{output-dir}/@{file}.status.html" />
+            <hlm:assertFileExists file="@{output-dir}/${generate.build.status.file.basename}.status.xml" />
+            <hlm:assertFileExists file="@{output-dir}/${generate.build.status.file.basename}.status.html" />
         </sequential>
     </macrodef>
 </project>
\ No newline at end of file
--- a/buildframework/helium/tools/preparation/bom/bom.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/preparation/bom/bom.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -31,11 +31,26 @@
     -->
     <property name="create.bom.workarea.root" value="."/> 
     
+    <!--* @property bom.release.regex
+    This property (if set) defines the regular expression BOM will use to extract data from 
+    a basline release. The regular expression must define 4 fields: TYPE, YEAR, WEEK, REVISION
+    Example:
+        (?<TYPE>.*)_(?P<YEAR>\d{4})(?P<WEEK>\d{2})_(?<REVISION>.*)
+    
+    @type string
+    @editable allowed
+    @scope public
+    -->
+    
     <!-- The target create-bom creates a Bill-Of-Material based on the SCM project 
     The target can be run in the project's root directory or the directory can be given by
     setting the property create.bom.workarea.root. The IDO builds are expected to set it to their 
     projects work area directory. -->
-    <target name="create-bom" depends="get-ccm-password,old-bom-log,ccm-prepare-input,prep-prepare-input">
+    <target name="create-bom">
+        <runtarget target="get-ccm-password"/>
+        <runtarget target="old-bom-log"/>
+        <runtarget target="prep-prepare-input" />
+        <runtarget target="ccm-prepare-input"/>
         <hlm:startSpecificLogMacro name="${prep.log.dir}/${build.id}_bom.log" regexp="${ccm.user.password}" phase="prep"/>
         <hlm:python>
 import os
@@ -49,7 +64,7 @@
 
 session = None
 try:
-    runccm = ant.get_property(r'${run.ccm}')
+    runccm = ant.get_property(r'${ccm.enabled}')
     database = ant.get_property(r'${ccm.database}')
     username = ant.get_property(r'${ccm.user.login}')
     password = ant.get_property(r'${ccm.user.password}')
@@ -81,7 +96,7 @@
             
         ccmproject =  ccm.extra.get_toplevel_project(session, waroot)
         
-        config_data = {'delivery': deliveryfile, 'prep.xml': ant.get_property(r'${prep.config.file.parsed}'), 'build.id': buildid, 'ccm.database': database, 'symbian_rel_week': ant.get_property(r'${symbian.version.week}'), 'symbian_rel_ver': ant.get_property(r'${symbian.version}'), 'symbian_rel_year': ant.get_property(r'${symbian.version.year}'), 's60_version': ant.get_property(r'${s60.version}'), 's60_release': ant.get_property(r'${s60.release}'), 'currentRelease.xml': ant.get_property(r'${build.drive}') + "/currentRelease.xml"}
+        config_data = {'delivery': deliveryfile, 'prep.xml': ant.get_property(r'${prep.config.file.parsed}'), 'build.id': buildid, 'ccm.database': database, 'symbian_rel_week': ant.get_property(r'${symbian.version.week}'), 'symbian_rel_ver': ant.get_property(r'${symbian.version}'), 'symbian_rel_year': ant.get_property(r'${symbian.version.year}'), 's60_version': ant.get_property(r'${s60.version}'), 's60_release': ant.get_property(r'${s60.release}'), 'currentRelease.xml': ant.get_property(r'${build.drive}') + "/currentRelease.xml", 'release_regexp': ant.get_property(r'${bom.release.regex}') }
         config = configuration.Configuration(config_data)
         
         # let's only support the new spec model!
--- a/buildframework/helium/tools/preparation/ci.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/preparation/ci.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -97,10 +97,13 @@
 ctime_dict = {}
 root_dir = str(attributes.get('rootdir'))
 output_dir = str(attributes.get('outputdir'))
-for dir_ in os.listdir(root_dir):
-    if (os.path.isdir(os.path.join(root_dir, dir_))):
-        dir_ctime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.path.getctime(os.path.join(root_dir, dir_))))
-        ctime_dict[dir_ctime] = dir_
+if os.path.exists(root_dir):
+    for dir_ in os.listdir(root_dir):
+        if (os.path.isdir(os.path.join(root_dir, dir_))):
+            dir_ctime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.path.getctime(os.path.join(root_dir, dir_))))
+            ctime_dict[dir_ctime] = dir_
+else:
+    self.log("Skipping " + root_dir + " dir because it doesn't exist.")
 ctime_list = ctime_dict.keys()
 ctime_list.sort()
 self.log(str("ctime_list: %s" % ctime_list))
@@ -148,11 +151,18 @@
 databases = []
 delivery = str(attributes.get('delivery'))
 sessionFile = str(attributes.get('sessionfile'))
+engine = project.getProperty('ccm.engine.host')
+dbpath = project.getProperty('ccm.database.path')
+            
 configBuilder = configuration.NestedConfigurationBuilder(open(delivery, 'r'))
 configSet = configBuilder.getConfiguration()
-for config in configSet.getConfigurations():
-    if config['database'] not in databases:
-        databases.append(config['database'])
+
+if dbpath:
+    databases.append(dbpath)
+else:
+    for config in configSet.getConfigurations():
+        if config['database'] not in databases:
+            databases.append(config['database'])
 
 config = configuration.PropertiesConfiguration()
 if os.path.exists(sessionFile):
@@ -175,7 +185,7 @@
     if update_session:
         try:
             self.log(str("Opening a new session for %s..." % database))
-            session = nokia.nokiaccm.open_session(database=database)
+            session = nokia.nokiaccm.open_session(database=database, engine=engine, dbpath=dbpath)
             session.close_on_exit = False        
             config[database] = session.addr()
         except Exception, exc:
@@ -290,7 +300,7 @@
             <and>
                 <available file="${prep.delivery.conf.parsed}"/>
                 <isset property="ci.session.file"/>                
-                <isset property="run.ccm"/>
+                <istrue value="${ccm.enabled}"/>
             </and>
             <then>
                 <property name="do.ci-monitor-ccm-session" value="true"/>
--- a/buildframework/helium/tools/preparation/ido-prep.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/preparation/ido-prep.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -65,14 +65,131 @@
     -->
     <property name="ido.cmt.html.output.dir" location="${build.log.dir}/${build.id}_cmt"/>
     
+    <!--* @property package.cone.validation.enabled
+    Enables to run confml file validation.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.package.cone.validation.enabled
+    Enables the targets to run confml file validation if package.cone.validation.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property cmt.enabled
+    Enables to run cmt, testing code coverage tool.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.cmt.enabled
+    Enables to run cmt tools targets if cmt.enabled is set to true, testing code coverage tool.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property enable.cmt
+    Enables to run cmt, testing code coverage tool. - deprecated: Start using cmt.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!--* Enables codescanner tool to run.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    <property name="codescanner.enabled" value="true"/>
+
+    
+    <!--* @property internal.codescanner.enabled
+    Enables codescanner targets to run if codescanner.enabled is set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property skip.codescanner
+    Enables codescanner tool to run. - deprecated: Start using codescanner.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!-- Set to true to keep old sources of build area.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    <property name="keep.old.source.enabled" value="false"/>
+    
+    <!--* @property ido.keep.old
+    Set to true to keep old sources of build area. - deprecated: Start using keep.old.source.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!-- Set to true to copy internal folders while coping source from wa to build area.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    <property name="keep.internal.folders.enabled" value="false"/>
+    
+    <!--* @property keep.internals
+    Set to true to keep old internal folder while coping source from wa to build area. - deprecated: Start using keep.internal.folders.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
     <!-- 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.
     -->
+    
+    <!-- To enable to confml file validation -->
+    <condition property="internal.package.cone.validation.enabled">
+        <istrue value="${package.cone.validation.enabled}" />
+    </condition>
+    
+    <!-- check, is cmt enabled -->
+    <condition property="internal.cmt.enabled">
+        <or>
+            <istrue value="${cmt.enabled}" />
+            <isset property="enable.cmt"/>
+        </or>
+    </condition>
+    
+    <!-- check is codescanner enabled-->
+    <condition property="internal.codescanner.enabled">
+        <and>
+            <not>
+                <isfalse value="${codescanner.enabled}" />
+            </not>
+            <not>
+                <isset property="skip.codescanner"/>
+            </not>
+        </and>
+    </condition>
+    
     <target name="ido-create-ado-mapping">
         <mkdir dir="${build.output.dir}/build"/>
         <mkdir dir="${temp.build.dir}"/>
         <if>
-            <istrue value="${schema.new}" />
+            <istrue value="${sysdef3.enabled}" />
             <then>
                 <hlm:createPackageMapping epocroot="${build.drive}" destFile="${ado.mapping.file}">
                     <path refid="system.definition.files" />
@@ -121,62 +238,17 @@
     <!-- Target to generate cenreps using cone tool -->
     <target name="ido-gen-cenrep">
         <mkdir dir="${post.log.dir}" />
-        <for list="${sysdef.configurations.list}" delimiter="," param="sysdef.config">
-            <sequential>
-                <var name="confml.log.file" unset="true"/>
-                <if>
-                    <or>
-                        <equals arg1="${build.system}" arg2="sbs" />
-                        <equals arg1="${build.system}" arg2="sbs-ec" />
-                    </or>
-                    <then>
-                        <hlm:getsbsinputs config="sbs.@{sysdef.config}" outputProperty="sbs.internal.inputs.list"/>
-                        <for list="${sbs.internal.inputs.list}" delimiter="," param="sbs.input">
-                            <sequential>
-                                <hlm:getVariableValue name="--logfile" property="sbs.log.file">
-                                    <hlm:sbsinput refid="@{sbs.input}" />
-                                </hlm:getVariableValue>
-                                <property name="confml.log.file" value="${sbs.log.file}"/>
-                            </sequential>
-                        </for>
-                    </then>
-                    <else>
-                        <property name="confml.log.file" value="${compile.log.dir}/${build.id}.@{sysdef.config}_compile.log"/>
-                    </else>
-                </if>
-            </sequential>
-        </for>
-        <echo>confml.log.file = ${confml.log.file}</echo>
-        <if>
-            <available file="${confml.log.file}"/>
-            <then>
-                <hlm:grepMacro filename="${confml.log.file}" regexp="([^\\/.]*?)\.confml" output="confml.file.list"/>
-                <for list="${confml.file.list}" delimiter="," param="confml.file">
-                    <sequential>
-                        <var name="crml.regexp" unset="true"/>
-                        <echo>confml.file = @{confml.file}</echo>
-                        <hlm:conEToolMacro>
-                            <arg name="output" value="${post.log.dir}/${build.id}_cenrep.cone.log"/>
-                            <arg name="path" value="${build.drive}/epoc32/tools/" />
-                            <arg name="-v" value="5" />
-                            <arg name="-p" value="${build.drive}\epoc32\rom\config\assets\s60" />
-                            <arg name="-o" value="${build.drive}\epoc32\release\winscw\urel\z" />
-                            <arg name="-c" value="root.confml" />
-                            <arg name="-i" value="@{confml.file}" />
-                        </hlm:conEToolMacro>
-                        <hlm:conEToolMacro>
-                            <arg name="output" value="${post.log.dir}/${build.id}_cenrep.cone.log"/>
-                            <arg name="path" value="${build.drive}/epoc32/tools/" />
-                            <arg name="-v" value="5" />
-                            <arg name="-p" value="${build.drive}\epoc32\rom\config\assets\s60" />
-                            <arg name="-o" value="${build.drive}\epoc32\release\winscw\udeb\z" />
-                            <arg name="-c" value="root.confml" />
-                            <arg name="-i" value="@{confml.file}" />
-                        </hlm:conEToolMacro>
-                    </sequential>
-                </for>
-            </then>
-        </if>
+        <mkdir dir="${temp.build.dir}" />
+        <tempfile property="cenrep.dynamic.config" suffix=".xml" deleteonexit="false" destdir="${temp.build.dir}"/>
+        <fmpp sourceFile="${helium.dir}/tools/common/templates/ido/ido-cenrep-gen.xml.ftl"
+              outputfile="${cenrep.dynamic.config}">
+            <data expandProperties="yes">
+                dbPath: ${metadata.dbfile}
+                ant: antProperties()
+                os: eval('System.getProperty("os.name")')
+            </data>
+        </fmpp>
+        <ant antfile="${cenrep.dynamic.config}"/>
         <copy file="${post.log.dir}/${build.id}_cenrep.cone.log" tofile="${temp.build.dir}/${build.id}_cenrep_includefile.txt" overwrite="true" failonerror="false">
             <filterchain>
                 <linecontainsregexp>
@@ -194,20 +266,55 @@
                 </metadatafilterset>
             </hlm:textmetadatainput>
         </hlm:metadatarecord>
-        <hlm:metadataCountSeverity severity="ERROR" log="${build.id}_cenrep.cone.log" db="${metadata.dbfile}" property="cone.error.total"/>
+        <hlm:metadataCountSeverity severity="ERROR" log="${post.log.dir}/${build.id}_cenrep.cone.log" database="${metadata.dbfile}" property="cone.error.total"/>
         <echo>ConE error: ${cone.error.total}</echo>
-        <hlm:generateBuildStatus file="${build.id}_cenrep.cone.log" />
+        <hlm:generateBuildStatus file="${post.log.dir}/${build.id}_cenrep.cone.log" />
     </target>
     
-    <!--* @property keep.internals
-    Set to 'true' so ido-prep-copy includes 'internal' directories.
-    @type boolean
-    @scope public
-    -->
+    <!-- To validate confml files of packages.-->
+    <target name="ido-validate-confml" if="internal.package.cone.validation.enabled">
+        <mkdir dir="${post.log.dir}" />
+        <mkdir dir="${temp.build.dir}" />
+        <tempfile property="confml.dynamic.config" suffix=".xml" deleteonexit="false" destdir="${temp.build.dir}"/>
+        <fmpp sourceFile="${helium.dir}/tools/common/templates/ido/ido-confml-validate.ant.xml.ftl"
+              outputfile="${confml.dynamic.config}">
+            <data expandProperties="yes">
+                dbPath: ${metadata.dbfile}
+                ant: antProperties()
+                os: eval('System.getProperty("os.name")')
+            </data>
+        </fmpp>
+        <trycatch property="confml.validate.thrown">
+            <try>
+                <ant antfile="${confml.dynamic.config}"/>
+            </try>
+            <catch>
+                <fail message="${confml.validate.thrown}"/>
+            </catch>
+            <finally>
+                <hlm:metadatarecord database="${metadata.dbfile}">
+                    <hlm:textmetadatainput>
+                        <fileset dir="" casesensitive="false" file="${post.log.dir}/${build.id}_validate_confml.log" />
+                        <metadatafilterset>
+                            <metadatafilter priority="error" regex="^ERROR\s+:.*" description="cone error" />
+                            <metadatafilter priority="warning" regex="^WARNING\s+:.*" description="cone warnings" />
+                            <metadatafilter priority="info" regex="^INFO\s+:.*" description="cone info" />
+                            <metadatafilter priority="error" regex="\s*[1-9]\d*\s*problem\(s\).*?" description="cone validation error" />
+                        </metadatafilterset>
+                    </hlm:textmetadatainput>
+                </hlm:metadatarecord>
+                <hlm:metadataCountSeverity severity="ERROR" log="${post.log.dir}/${build.id}_validate_confml.log" database="${metadata.dbfile}" property="confml.validate.error.total"/>
+                <echo>ConE error: ${confml.validate.error.total}</echo>
+                <hlm:generateBuildStatus file="${build.id}_validate_confml.log" />
+                <hlm:signalMacro logfile="${post.log.dir}/${build.id}_validate_confml.log" phase="post" signal.input="ConEValidateSignalInput" />
+            </finally>
+        </trycatch>
+        
+    </target>
 
-    <!--* @property ido.prep.copy.template
-    Defines which template to use in order to achive the package copying.
-    @type boolean
+
+    <!--* Defines which template to use in order to achive the package copying.
+    @type string
     @scope public
     -->
     <property name="ido.prep.copy.template" location="${helium.dir}/tools/common/templates/ido/ido-ant-copy.xml.ftl" />
@@ -216,7 +323,7 @@
         It relies on the fact that layer_real_source_path entity is declared in each ADO configuration.
         
         By default it deletes the previous content. If you want to backup what was previoulsy used please
-        defined '''ido.keep.old''' property.         
+        defined '''keep.old.source.enabled''' property.         
         -->
     <target name="ido-prep-copy" depends="ido-create-ado-mapping">
         <mkdir dir="${temp.build.dir}"/>
@@ -268,31 +375,21 @@
             </then>
         </if>
         
-        <antcall target="compile-main">
+        <antcall target="compile-main" inheritRefs="true">
             <param name="sysdef.configurations.list" value="${sysdef.clean.configurations.list}"/>
             <param name="compile.signal.input" value="compileCleanSignalInput"/>
-            <param name="compile.discard.result" value="true"/>
-            <param name="compile.cmd.clean" value="true"/>
+            <param name="internal.compile.discard.result.enabled" value="true"/>
+            <param name="internal.compile.cmd.clean.enabled" value="true"/>
         </antcall>
     </target>
 
-
-
-    <!--
-      Internal target that set an intermediate property to disable codescanner execution.
-    -->
-    <target name="ido-codescanner-skip">
-        <condition property="do.skip.codescanner" value="1">
-            <istrue value="${skip.codescanner}"/>
-        </condition>
-    </target>
-
     <!--
         This targets run the codescanner application on each discovered ADO.
         The location of the output is defined byt '''ido.codescanner.output.dir''' property.
         And the type is defined by '''ido.codescanner.output.type''' (default is HTML). 
     -->
-    <target name="ido-codescanner" depends="ido-create-ado-mapping,ido-codescanner-skip" unless="do.skip.codescanner">
+    <target name="ido-codescanner" depends="ido-create-ado-mapping" if="internal.codescanner.enabled">
+        
         <!--hlm:iniKeys2Path ini="${ado.mapping.file}" pathid="ado.src.path"/-->
         <!-- Defines the format of Codescanner output (html|xml|std).
         @type string
@@ -349,7 +446,8 @@
         2. output - output xml file (file size is huge 68MB for JAVA IDO, if this needs to be send, need to consider
         3. config - input config . 
         -->
-    <target name="ido-cmt" depends="ido-create-ado-mapping" if="enable.cmt">
+    <target name="ido-cmt" depends="ido-create-ado-mapping" if="internal.cmt.enabled">
+        
         <fmpp sourceFile="${helium.dir}/tools/common/templates/ido/ido-cmt-ant.xml.ftl"
                           outputFile="${temp.build.dir}/ido-cmt.ant.xml">
             <data expandProperties="yes">
@@ -375,7 +473,8 @@
         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">
+    <target name="cmt-generate-diamond-summary" if="internal.cmt.enabled">
+        
         <!--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" />
@@ -450,37 +549,37 @@
         
     </target>
 
-    <!-- Gets the contents from GRACE / Dragonfly -->
+    <!-- Gets the contents from a network drive or Dragonfly -->
     <target name="ido-check-latest-release" depends="ido-check-latest-release-grace" unless="env.HLM_SUBCON">
         <runtarget target="ido-check-latest-release-dragonfly"/>
     </target>
 
     <!--* @property s60.grace.server
-        UNC path to GRACE server.
+        UNC path to file server.
         @type string
         @editable required
         @scope public
     -->
     <!--* @property s60.grace.service
-        GRACE service to look into.
+        File service to look into.
         @type string
         @editable required
         @scope public
     -->
     <!--* @property s60.grace.product
-        GRACE product to look into.
+        Product to look into.
         @type string
         @editable required
         @scope public
     -->
     <!--* @property s60.grace.release
-        Regular expression to match a particular GRACE realease.
+        Regular expression to match a particular realease.
         @type string
         @editable required
         @scope public
     -->
     <!--* @property s60.grace.release.fixbuildregex
-        Regular expression to match a particular GRACE release fixbuilds. Example _(.*?)$ or _(\d+)$ 
+        Regular expression to match a particular release fixbuilds. Example _(.*?)$ or _(\d+)$ 
         @type string
         @editable required
         @scope public
@@ -492,11 +591,26 @@
         @scope public
     -->
     <!--* @property s60.grace.checkmd5
-        Enable MD5 validation for GRACE metadata (default: false).
+        Enable MD5 validation for release metadata (default: false).
+        @type boolean
+        @editable required
+        @scope public
+        @deprecate Since 11.0
+    -->
+    
+    <!--* @property s60.grace.checkmd5.enabled
+        Enable MD5 validation for release metadata (default: false).
         @type boolean
         @editable required
         @scope public
     -->
+    
+    <!--* @property internal.s60.grace.checkmd5.enabled
+        set if s60.grace.checkmd5.enabled set to true.
+        @type boolean
+        @scope private
+    -->
+    
     <!--* @property s60.grace.revision
         Defined the regular expression to find a particular revision.
         @type string
@@ -504,20 +618,26 @@
         @scope public
     -->
     <!--* @property s60.grace.usetickler
-        Enable the detection of ready release using GRACE tickler mechanism.
+        Enable the detection of ready release using release tickler mechanism.
         @type boolean
         @editable required
         @scope public
     -->
-
-    <!-- Checks the contents from GRACE release. Mainly used by IDOs. But could be
-    extended to product builds.-->    
-    <target name="ido-check-latest-release-grace" unless="use.dragonfly">
+    
+    <!-- Check is the s60.grace.checkmd5.enabled is set -->
+    <condition property="internal.s60.grace.checkmd5.enabled" else="false" value="true">
+        <or>
+            <istrue value="${s60.grace.checkmd5.enabled}"/>
+            <istrue value="${s60.grace.checkmd5}"/>
+        </or>
+    </condition>
+    <!-- Checks the contents from the release. -->    
+    <target name="ido-check-latest-release-grace" unless="internal.dragonfly.enabled">
         <script language="jython" setbeans="false">
 import os
 import idoprep
 
-result = idoprep.get_s60_env_details(project.getProperty('s60.grace.server'), project.getProperty('s60.grace.service'), project.getProperty('s60.grace.product'), project.getProperty('s60.grace.release'), project.getProperty('s60.grace.revision'), project.getProperty('s60.grace.cache'), project.getProperty('s60.grace.checkmd5'), project.getProperty('s60.grace.usetickler'))
+result = idoprep.get_s60_env_details(project.getProperty('s60.grace.server'), project.getProperty('s60.grace.service'), project.getProperty('s60.grace.product'), project.getProperty('s60.grace.release'), project.getProperty('s60.grace.revision'), project.getProperty('s60.grace.cache'), project.getProperty('internal.s60.grace.checkmd5.enabled'), project.getProperty('s60.grace.usetickler'))
 resultname = os.path.basename(result[0])
 project.setProperty('s60.getenv.path', str(result[0]))
 project.setProperty('s60.getenv.release', str(resultname))
@@ -527,13 +647,13 @@
         </script>
     </target>
 
-    <!-- Updates the build area from either GRACE / dragonfly server.-->
+    <!-- Updates the build area from either a network drive or Dragonfly server.-->
     <target name="ido-update-build-area" depends="backup-subst-drives,ido-update-build-area-grace" unless="env.HLM_SUBCON">
         <runtarget target="ido-update-build-area-dragonfly"/>
     </target>
 
-    <!-- Creates the build area by getting the contents from GRACE release.-->    
-    <target name="ido-update-build-area-grace" if="s60.getenv.update" depends="ido-check-latest-release" unless="use.dragonfly">
+    <!-- Creates the build area by getting the contents from the release.-->    
+    <target name="ido-update-build-area-grace" if="s60.getenv.update" depends="ido-check-latest-release" unless="internal.dragonfly.enabled">
         <!-- Just get S60 for IDOs -->
         <echo>Location of the new S60 release:${s60.getenv.path}</echo>
         <tstamp>
@@ -617,24 +737,27 @@
     <scriptdef name="iniKeys2Path" language="beanshell" uri="http://www.nokia.com/helium">
         <attribute name="ini"/>
         <attribute name="pathid"/>
-        if (attributes.get("ini") == null)
-            throw new org.apache.tools.ant.BuildException("ini is not defined");
-        if (attributes.get("pathid") == null)
-            throw new org.apache.tools.ant.BuildException("pathid is not defined");
-        try {
-            java.io.FileInputStream pin = new java.io.FileInputStream(attributes.get("ini"));
-            java.util.Properties props = new java.util.Properties();
-            props.load(pin);
-            org.apache.tools.ant.types.Path path = project.createDataType("path");
-            for (java.util.Iterator i = props.stringPropertyNames().iterator(); i.hasNext() ; ) { 
-                org.apache.tools.ant.types.Path.PathElement pe = (org.apache.tools.ant.types.Path.PathElement)path.createPathElement();
-                pe.setPath(i.next()); 
-            }
-            self.log("Creating reference: " + attributes.get("pathid"));
-            project.addReference(attributes.get("pathid"), path);
-        } catch (java.io.IOException e) {
-            throw new org.apache.tools.ant.BuildException(e);
-        }
+if (attributes.get("ini") == null) {
+    throw new org.apache.tools.ant.BuildException("ini is not defined");
+}
+if (attributes.get("pathid") == null) {
+    throw new org.apache.tools.ant.BuildException("pathid is not defined");
+}
+try {
+    java.io.FileInputStream pin = new java.io.FileInputStream(attributes.get("ini"));
+    java.util.Properties props = new java.util.Properties();
+    props.load(pin);
+    org.apache.tools.ant.types.Path path = project.createDataType("path");
+    for (java.util.Iterator i = props.stringPropertyNames().iterator(); i.hasNext() ; ) { 
+        org.apache.tools.ant.types.Path.PathElement pe = (org.apache.tools.ant.types.Path.PathElement)path.createPathElement();
+        pe.setPath(i.next()); 
+    }
+    self.log("Creating reference: " + attributes.get("pathid"));
+    project.addReference(attributes.get("pathid"), path);
+}
+catch (java.io.IOException e) {
+    throw new org.apache.tools.ant.BuildException(e);
+}
     </scriptdef>
 
     <!-- Target to get the Substituted drives information-->
--- a/buildframework/helium/tools/preparation/ivy/dependencies.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/preparation/ivy/dependencies.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -31,16 +31,8 @@
     </target>
     
     
-    <!-- Check the tools environment to ensure all required tools are present. -->
-    <target name="check-tool-dependencies">
-        <hlm:createToolsTableMacro dir="${temp.build.dir}/build/doc/ivy" failonerror="true" 
-            configs="${build.type}" />
-    </target>
-    
-    
     <!-- This is a test target for resolving the inputs for preparing the build area. -->
     <target name="resolve-build-inputs">
-        <hlm:record name="f:\resolve.txt" action="start" loglevel="verbose"/>
         <fmpp sourceRoot="${helium.dir}/tools/preparation/ivy/templates" outputRoot="${temp.build.dir}/ivy"
               replaceExtension="xml.ftl, ivy.xml">
             <data expandProperties="yes">
@@ -51,7 +43,6 @@
         <ivy:configure file="${build_area.ivy.config.file}"/>
         <ivy:resolve file="${temp.build.dir}/ivy/ivy_file.ivy.xml" haltonfailure="false"/>
         <ivy:artifactreport tofile="${build.log.dir}/build_area_artifacts.xml"/>
-        <hlm:record name="f:\resolve.txt" action="stop"/>
     </target>
     
 
--- a/buildframework/helium/tools/preparation/password.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/preparation/password.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -106,13 +106,13 @@
 
     <!-- Retrieve the ccm password from the .netrc file and store it into ccm.password property. 
     Requires ccm.enabled tobe set to 'true' to work.-->
-    <target name="ccm-password" if="run.ccm">
+    <target name="ccm-password" if="internal.ccm.enabled">
         <hlm:netrcPasswordMacro output-prop="ccm.password.rc" result-prop="ccm.password.available" type="synergy"/>
     </target>
     
     <!-- Retrieve the ccm username from the .netrc file and store it into ccm.username property.
     Requires ccm.enabled tobe set to 'true' to work. -->
-    <target name="ccm-username" if="run.ccm">
+    <target name="ccm-username" if="internal.ccm.enabled">
         <hlm:netrcUsernameMacro output-prop="ccm.login.rc" result-prop="ccm.username.available" type="synergy"/>
     </target>
     
@@ -124,96 +124,84 @@
          - ccm.user.password
         it requires ccm.database to be set to the wanted database and ccm.enabled to set to 'true'.
     -->
-    <target name="get-ccm-password" depends="ccm-password,ccm-username" unless="ccm.user.password">
+    <target name="get-ccm-password" depends="ccm-password,ccm-username" unless="ccm.user.password" if="internal.ccm.enabled">
+        <hlm:filterRecordStartMacro pattern="${ccm.password.rc}" category="ccm"/>
         <if>
-            <isset property="run.ccm"/>
+            <not>
+                <and>
+                    <isset property="ccm.login.rc"/>
+                    <isset property="ccm.password.rc"/>
+                </and>
+            </not>
             <then>
-                <hlm:filterRecordStartMacro pattern="${ccm.password.rc}" category="ccm"/>
-                <if>
-                    <not>
-                        <and>
-                            <isset property="ccm.login.rc"/>
-                            <isset property="ccm.password.rc"/>
-                        </and>
-                    </not>
+                <if>              
+                    <isset property="ccm.login.popup.disable"/> 
                     <then>
-                        <if>              
-                            <isset property="ccm.login.popup.disable"/> 
-                            <then>
-                                <echo>Error: Unable to read synergy username and password from .netrc file.</echo>
-                                <property name="skip.password.validation" value="true"/>
-                            </then> 
-                            <else>
-                                <!-- Contains the user name for CCM by reading the information from .netrc file.
-                                @type string
-                                @scope private
-                                -->
-                                <property name="ccm.user.login" value="${env.USERNAME}"/>
-                                <antform title="Synergy login information">
-                                    <label>Unable to read synergy username and password from h:\.netrc file.</label>
-                                    <textProperty label="ccm login:" property="ccm.user.login"/>
-                                    <textProperty label="ccm password:" property="ccm.user.password" password="true"/>
-                                </antform>
-                                <property name="ccm.password.available" value="1"/>
-                                <!-- Unix username.
-                                @type string
-                                @scope private
-                                -->
-                                <property name="unix.username" value="${env.USERNAME}"/>
-                                <!-- Unix password
-                                @type string
-                                @scope private
-                                -->
-                                <property name="unix.password" value="${ccm.user.password}"/>
-                                <!-- Equal 0 if the unix password if available
-                                @type string
-                                @scope private
-                                -->
-                                <property name="unix.password.available" value="1"/>
-                            </else> 
-                        </if>
-                    </then>
+                        <echo>Error: Unable to read synergy username and password from .netrc file.</echo>
+                        <property name="skip.password.validation" value="true"/>
+                    </then> 
                     <else>
                         <!-- Contains the user name for CCM by reading the information from .netrc file.
                         @type string
                         @scope private
                         -->
-                        <property name="ccm.user.login" value="${ccm.login.rc}"/>
-                        <!-- Contains the password for CCM user name by reading the information from .netrc file.
+                        <property name="ccm.user.login" value="${env.USERNAME}"/>
+                        <antform title="Synergy login information">
+                            <label>Unable to read synergy username and password from h:\.netrc file.</label>
+                            <textProperty label="ccm login:" property="ccm.user.login"/>
+                            <textProperty label="ccm password:" property="ccm.user.password" password="true"/>
+                        </antform>
+                        <property name="ccm.password.available" value="1"/>
+                        <!-- Unix username.
+                        @type string
+                        @scope private
+                        -->
+                        <property name="unix.username" value="${env.USERNAME}"/>
+                        <!-- Unix password
                         @type string
                         @scope private
                         -->
-                        <property name="ccm.user.password" value="${ccm.password.rc}"/>
-                    </else>
+                        <property name="unix.password" value="${ccm.user.password}"/>
+                        <!-- Equal 0 if the unix password if available
+                        @type string
+                        @scope private
+                        -->
+                        <property name="unix.password.available" value="1"/>
+                    </else> 
                 </if>
-                <antcall target="ccm-check"/>
-                <hlm:filterRecordStopMacro/>
             </then>
-            <!--echo> ccm not enabled so not get password</echo-->
+            <else>
+                <!-- Contains the user name for CCM by reading the information from .netrc file.
+                @type string
+                @scope private
+                -->
+                <property name="ccm.user.login" value="${ccm.login.rc}"/>
+                <!-- Contains the password for CCM user name by reading the information from .netrc file.
+                @type string
+                @scope private
+                -->
+                <property name="ccm.user.password" value="${ccm.password.rc}"/>
+            </else>
         </if>
+        <antcall target="ccm-check"/>
+        <hlm:filterRecordStopMacro/>
     </target>
     
     <!-- check synergy is available needs ccm.enabled to be set to 'true' as well.-->
-    <target name="ccm-check" unless="skip.password.validation">
+    <target name="ccm-check" unless="skip.password.validation" if="internal.ccm.enabled">
+        <hlm:ccmAvailableMacro resultproperty="ccm.session.created"/>
+        <echo>ccm.session.created = ${ccm.session.created}</echo>
         <if>
-            <isset property="run.ccm"/>
+            <equals arg1="${ccm.session.created}" arg2="-1"/>
             <then>
-                <hlm:ccmAvailableMacro resultproperty="ccm.session.created"/>
-                <echo>ccm.session.created = ${ccm.session.created}</echo>
-                <if>
-                    <equals arg1="${ccm.session.created}" arg2="-1"/>
-                    <then>
-                        <fail message="Unable to create CCM session."/>
-                    </then>
-                </if>
-                <if>
-                    <equals arg1="${ccm.session.created}" arg2="-2"/>
-                    <then>
-                        <fail message="Access Denied for user."/>
-                    </then>
-                </if>
+                <fail message="Unable to create CCM session."/>
+            </then>
+        </if>
+        <if>
+            <equals arg1="${ccm.session.created}" arg2="-2"/>
+            <then>
+                <fail message="Access Denied for user."/>
             </then>
         </if>
     </target>
-    
 </project>
--- a/buildframework/helium/tools/preparation/preparation.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/preparation/preparation.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -36,6 +36,79 @@
     @type string
     -->
     <property name="ccmgetinput" value="ccmgetinput" />
+    
+    <!--* Set to false to skip diamonds.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    <property name="diamonds.enabled" value="true"/>
+
+    
+    <!--* @property internal.diamonds.enabled
+    Run the diamonds related targets if diamonds.enabled is set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property skip.diamonds 
+    Set to true to skip diamonds. - deprecated: Start using diamonds.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->       
+    
+    <!--* @property ccm.enabled
+    Defines that property if you want the ccm-get-input step to be run during the build area preparation.
+    @type boolean
+    @editable required
+    @scope public
+    -->
+        
+    <!--* @property internal.ccm.enabled
+    Set to run synergy targets if ccm.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property remote.builds.enabled
+    Set to true to run the builds on remote machines.
+    @type boolean
+    @scope public
+    @editable required
+    @since 11.0
+    -->
+    
+    <!--* @property internal.remote.builds.enabled
+    Set to run remote build targets if remote.builds.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!-- Check, is diamonds feature enabled -->
+    <condition property="internal.diamonds.enabled">
+        <and>
+            <not>
+                <isfalse value="${diamonds.enabled}" />
+            </not>
+            <not>
+                <isset property="skip.diamonds"/>
+            </not>
+        </and>
+    </condition>
+    
+    <!-- Check, is synergy enabled -->
+    <condition property="internal.ccm.enabled">
+        <istrue value="${ccm.enabled}"/>
+    </condition>
+    
+    <!-- Check, is synergy enabled -->
+    <condition property="internal.remote.builds.enabled">
+        <istrue value="${remote.builds.enabled}"/>
+    </condition>
+    
 
     <typedef file="${ant.file.preparation}/../preparation.antlib.xml" uri="http://www.nokia.com/helium"/>
     <import file="bom/bom.ant.xml" />
@@ -46,10 +119,7 @@
     <import file="ivy/dependencies.ant.xml"/>
 
 
-    <!--
-        Gets a release from GRACE.
-        TODO: Improve interface with customer configuration, getenv_options should be replaced by set of properties.
-    -->
+    <!-- Gets a release from network drive. -->
     <target name="preparation-getenv" if="base_release.path" depends="init-build-area">
         <!-- Making sure we have nothing to pass -->
         <property name="base_release.path" value=""/>
@@ -310,6 +380,7 @@
         <propertyref name="noe.password" />
         <propertyref name="ats.password" />
         <propertyref name="hydra.password" />
+        <propertyref name="coverity.password" />
     </propertyset>
     
     <!-- Logs the Ant property build environment. -->
@@ -352,7 +423,10 @@
                 <not>
                     <isset property="env.HLM_SUBCON"/>
                 </not>
-                <isset property="use.dragonfly"/>
+                <or>
+                    <istrue value="${dragonfly.enabled}"/>
+                    <isset property="use.dragonfly"/>
+                </or>
             </and>
             <then>
                 <antcall target="dragonfly-prep-drive"/>
@@ -440,18 +514,24 @@
         </copy>
         
     </target>
-    
+
+    <!-- Loading some properties from the cache. Mainly diamonds related properties are
+         stored in there. 
+     -->
+    <target name="load-property-from-cache-file">
+        <if>
+            <available file="${build.property.cache.file}" />
+            <then>
+                <property file="${build.property.cache.file}" />
+            </then>
+        </if>
+    </target>
+
     <!-- This target exists as a trigger for initiating the Diamonds logger. If 
           it is not included in the build sequence, the build will not be logged to 
           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
-        -->
+    <target name="diamonds" if="internal.diamonds.enabled" depends="load-property-from-cache-file">
         <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}">
@@ -467,22 +547,6 @@
     <!-- Used to prep the build area, now only a placeholder target for the customer -->
     <target name="prep-copy" />
 
-    <!--* @property ccm.enabled
-    Defines that property if you want the ccm-get-input step to be run during the build area preparation.
-    @type boolean
-    @editable required
-    @scope public
-    -->
-    
-    <condition property="run.ccm">
-        <and>
-            <not>
-                <equals arg1="${ccm.enabled}" arg2="false" casesensitive="true"/>
-            </not>
-            <isset property="ccm.enabled"/>
-        </and>
-    </condition>
-    
     <!-- Wrapper target to call prep-work-area during the build.
          log will get recorded under the log directory.
          Property ccm.enabled has to be set to 'true' to enable that step!
@@ -498,16 +562,17 @@
          log will get recorded under the log directory.
          Property remote.builds.enabled has to be defined to enable that step!
       -->
-    <target name="do-start-remote-builds" if="remote.builds.enabled">
+    <target name="do-start-remote-builds" if="internal.remote.builds.enabled">
         <runtarget target="start-remote-builds"/>
     </target>
     
     
     <!-- check-env-prep has to be called after getting the delivery else it doesn't works for the first build. -->
-    <target name="do-prep" depends="check-tool-dependencies,check-free-space,do-prep-work-area,
+    <target name="do-prep" depends="check-free-space,do-prep-work-area,
                                     do-start-remote-builds,check-env-prep,diamonds,create-bom,log-build-env,prep-copy,
                                     set-arm-version" />
     
+    
     <!-- Macro to notify user by email/sms -->
     <macrodef name="notifyMacro" uri="http://www.nokia.com/helium">
         <attribute name="message"/>
@@ -538,7 +603,7 @@
                 <metadatafilterset refid="filterset.ant.output" />
             </hlm:antmetadatainput>
         </hlm:metadatarecord>
-        <hlm:generateBuildStatus file="${build.id}_main.ant.log" />
+        <hlm:generateBuildStatus file="${build.log.dir}/${build.id}_main.ant.log" />
         <!-- Todo: metadata: insert assertions for metadata parsing here -->
     </target>
     
--- a/buildframework/helium/tools/preparation/preparation.antlib.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/preparation/preparation.antlib.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -28,7 +28,7 @@
        the output directory. 'threads' defines how many copy you would like in parallel, and verbose
        defines if you want the copying to be logged.
      -->
-    <scriptdef language="beanshell" name="parallelCopy" uri="http://www.nokia.com/helium">
+    <scriptdef name="parallelCopy" language="beanshell" uri="http://www.nokia.com/helium">
         <attribute name="todir" />
         <attribute name="threads" />
         <attribute name="verbose" />
@@ -56,11 +56,12 @@
     }
 }
 if (attributes.get("verbose") != null) {
-        verbose = attributes.get("verbose");
+    verbose = attributes.get("verbose");
 }
 if (attributes.get("overwrite") != null) {
-        overwrite = attributes.get("overwrite");
+    overwrite = attributes.get("overwrite");
 }
+
 // Creating the output dir
 Mkdir mkdir = new Mkdir();
 mkdir.setProject(project);
@@ -86,13 +87,13 @@
             copy.setVerbose(new Boolean(verbose).booleanValue());
             copy.setOverwrite(new Boolean(overwrite).booleanValue());
             pt.addTask(copy);
-    }
+        }
     }
 }
 self.log("Starting parallel copying...");
 pt.execute();
 self.log("Copying completed.");
-]]>
+    ]]>
     </scriptdef>
 
     <!--
@@ -185,7 +186,8 @@
 self.log("Starting parallel unzipping...");
 pt.execute();
 self.log("Unzipping completed.");
-]]>
+    ]]>
     </scriptdef>
 
-</antlib>
\ No newline at end of file
+</antlib>
+
--- a/buildframework/helium/tools/preparation/synergy/ccmgetinput.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/preparation/synergy/ccmgetinput.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -56,7 +56,7 @@
         
     <!-- This target uses an XML input file to retrieve content from Synergy.
       -->
-    <target name="prep-work-area" depends="log-build-start" if="run.ccm">
+    <target name="prep-work-area" depends="log-build-start" if="internal.ccm.enabled">
         <hlm:tempRecordStartMacro name="${build.id}_ccm_get_input.log" />
         <runtarget target="get-ccm-password"/>
         <runtarget target="ccm-prepare-input"/>
@@ -110,7 +110,7 @@
      This target will cleanup all snapshoted/checkout project from the disk. Checked out project will
      also be deleted from the synergy database. 
      -->
-    <target name="cleanup-work-area" if="run.ccm">
+    <target name="cleanup-work-area" if="internal.ccm.enabled">
         <hlm:tempRecordStartMacro name="${build.id}_cleanup_work_area.log" />
         <runtarget target="get-ccm-password"/>
         <runtarget target="ccm-prepare-input"/>
--- a/buildframework/helium/tools/preparation/test/test_preparation.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/preparation/test/test_preparation.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -154,7 +154,7 @@
 
     <!-- Change synergy release tag  -->
     <target name="-test-ccm-release-tag-change">
-        <property name="teamlevel.ci.system" value="true" />
+        <property name="team.level.ci.enabled" value="true" />
         <property name="teamlevel.folder.number" value="to1tobet#90" />
         <property name="ccm.database" value="to1tobet" />
 
--- a/buildframework/helium/tools/preparation/test/test_synergy.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/preparation/test/test_synergy.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -93,7 +93,7 @@
                 <metadatafilterset refid="filterset.test.ccm" />
             </hlm:textmetadatainput>
         </hlm:metadatarecord>
-        <hlm:generateBuildStatus dbfile="${helium.dir}/tests/data/output/temp_db" output-dir="${helium.dir}/tests/data/output/signals" file="temp.log" />
+        <hlm:generateBuildStatus dbfile="${helium.dir}/tests/data/output/temp_db" output-dir="${helium.dir}/tests/data/output/signals" file="${helium.dir}/tests/data/output/temp.log" />
         <au:assertTrue>
             <and>
                 <not>
--- a/buildframework/helium/tools/preparation/test/test_synergyjavataks.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/preparation/test/test_synergyjavataks.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -47,7 +47,6 @@
     
     <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" />
--- a/buildframework/helium/tools/publish/nwiki.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/publish/nwiki.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -90,7 +90,8 @@
               - nwiki.domain is typically nwiki.nokia.com
               - location could be, MBPVancouver for example
     -->
-    <target name="create-wiki-bom" depends="remove-build-version-dots,get-nwiki-username,get-nwiki-password" if="publish">
+    <target name="create-wiki-bom" depends="remove-build-version-dots,get-nwiki-username,get-nwiki-password" if="internal.publish.enabled">
+        
         <loadfile property="temp-bom-data" srcfile="${prep.log.dir}/${build.name}_${build.version}_BOM.txt" failonerror="false">
         </loadfile>
         <if>
@@ -109,7 +110,8 @@
               - nwiki.domain is typically nwiki.nokia.com
               - location could be, MBPVancouver for example
     -->
-    <target name="create-wiki-bom-delta" depends="remove-build-version-dots,get-nwiki-username,get-nwiki-password" if="publish">
+    <target name="create-wiki-bom-delta" depends="remove-build-version-dots,get-nwiki-username,get-nwiki-password" if="internal.publish.enabled">
+        
         <loadfile property="temp-bom-delta-data" srcfile="${prep.log.dir}/${build.name}_${build.version}_BOM_delta.txt" failonerror="false">
         </loadfile>
 
--- a/buildframework/helium/tools/publish/publish.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/publish/publish.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -26,6 +26,23 @@
     Zipping, delta zipping and copying targets
     </description>
     
+    <!-- Tools configuration for basic Helium tools. -->
+    <hlm:envdata id="helium.tools.envdata">
+        <hlm:executable name="7za" versionArgs="" versionRegex="7-Zip (\S+)"/>
+        <hlm:executable name="ant" versionArgs="-version" versionRegex="Apache Ant version (\S+)"/>
+        <hlm:executable name="armcc" versionArgs="" versionRegex="RVCT(.+)" output="stderr"/>
+        <hlm:executable name="ccm" versionArgs="version -c" versionRegex="(\S+)"/>
+        <hlm:executable name="codescanner" versionArgs="" versionRegex="version (\S+)"/>
+        <hlm:executable name="ctc" versionArgs="" versionRegex="This is CTC\+\+ \(v(\S+)\)"/>
+        <hlm:executable name="java" versionArgs="-version" versionRegex="java version &quot;(\S+)\&quot;"/>
+        <hlm:executable name="perl" versionArgs="-v" versionRegex="This is perl, v(\S+)"/>
+        <hlm:executable name="python" versionArgs="--version" versionRegex="Python (\S+)"/>
+        <hlm:executable name="sbs" versionArgs="-version" versionRegex="sbs version (.+)$"/>
+        <hlm:executable name="unzip" versionArgs="-v" versionRegex="UnZip (\S+)"/>
+        <hlm:executable name="emake" versionArgs="--version" versionRegex="Electric Make version (\S+)"/>
+        <hlm:executable name="ectool" versionArgs="--version" versionRegex="ElectricCommander Tool version (\S+)"/>
+    </hlm:envdata>
+    
     <!--* @property zip.config.file
     The ZIP configuration XML file.
     @type string
@@ -74,12 +91,108 @@
     @editable required
     @scope public
     -->
+    
+    <!--* Set to true to generate zip file containing binaries generated by build.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    <property name="archiving.enabled" value="true"/>
 
+    
+    <!--* @property internal.archiving.enabled
+    Set to run archiving targets if archiving.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property skip-zips
+    Set to true to generate zip file containing binaries generated by build. - deprecated: Start using archiving.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!--* @property publish.enabled
+    Set to true to publish build artificats.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.publish.enabled
+    Set to run publishing targets if publish.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property publish
+    Set to true to publish build artificats.. - deprecated: Start using publish.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!--* @property archive.wa.enabled
+    Set to true to archive or zip the synergy workarea.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.archive.wa.enabled
+    Set to run synergy wa archiving targets if archive.wa.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property zip.wa
+    Set to true to arhive or zip the synergy workarea. - deprecated: Start using archive.wa.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!-- Check, is zipping binaries enabled -->
+    <condition property="internal.archiving.enabled">
+        <and>
+            <not>
+                <isfalse value="${archiving.enabled}" />
+            </not>
+            <not>
+                <isset property="skip-zips"/>
+            </not>
+        </and>
+    </condition>
+    
+    <!-- Check, is publish enabled -->
+    <condition property="internal.publish.enabled">
+        <or>
+            <istrue value="${publish.enabled}"/>
+            <isset property="publish"/>
+        </or>
+    </condition>
+    
+    <!-- Check, is publish enabled -->
+    <condition property="internal.archive.wa.enabled">
+        <or>
+            <istrue value="${archive.wa.enabled}"/>
+            <isset property="zip.wa"/>
+        </or>
+    </condition>
+    
     <import file="internal-api/internal-api.ant.xml" />
     <import file="nwiki.ant.xml" />
     <import file="synergy.ant.xml" />
     <import file="test/test2_publishing_to_diamonds.ant.xml" />
 
+    
     <!-- Set the maximum number of threads running for archiving (for a parallel job).
     @type integer
     -->
@@ -135,6 +248,7 @@
         <include name="tools/release/**/*" />
     </fileset>
 
+    
     <!-- 
         If publish property is set, copy the publish.files fileset to the publish.dir directory using 
         number.of.threads parallel threads
@@ -142,13 +256,20 @@
     <macrodef name="publishMacro" uri="http://www.nokia.com/helium">
         <sequential>
             <if>
-                <isset property="publish" />
+                <isset property="internal.publish.enabled" />
                 <then>
                     <for list="${publish.fileset.ids}" param="fileset.id" parallel="true" threadCount='${number.of.threads}'>
                         <sequential>
                             <copy todir="${publish.dir}" preservelastmodified="true" failonerror="false">
                                 <fileset refid="@{fileset.id}" />
                             </copy>
+                            
+                            <pathconvert pathsep=" " property="@{fileset.id}.diamonds.files">
+                                <map from="${build.output.dir}" to="${publish.dir}"/>
+                                <fileset refid="@{fileset.id}"/>
+                            </pathconvert>
+                            <property name="diamonds.files" value="" />
+                            <var name="diamonds.files" value="${@{fileset.id}.diamonds.files} ${diamonds.files}"/>
                         </sequential>
                     </for>
                 </then>
@@ -158,7 +279,7 @@
 
 
     <!-- Creates the publish directory. Directory location is defined by property: ${publish.dir} -->
-    <target name="prep-publish" if="publish">
+    <target name="prep-publish" if="internal.publish.enabled">
         <mkdir dir="${publish.dir}" />
     </target>
 
@@ -249,6 +370,7 @@
         </sequential>
     </macrodef>
 
+    
     <!-- This macro allows you to add or update one archive definition inside the release metadata files.
     
     e.g.:
@@ -313,6 +435,7 @@
         </sequential>
     </macrodef>
     
+    
     <!-- This macro update the metadata file generated by the config provided by file.
     
     e.g:
@@ -364,6 +487,7 @@
         </sequential>
     </macrodef>
 
+    
     <condition property="archive.using.ec">
         <or>
             <equals arg1="${build.system}" arg2="ec-helium" />
@@ -371,6 +495,7 @@
         </or>
     </condition>
     
+    
     <!-- Zips files using a type and zip config file as args -->
     <macrodef name="zipContentMacro" uri="http://www.nokia.com/helium">
         <attribute name="type" />
@@ -391,48 +516,42 @@
             <mkdir dir="${post.log.dir}"/>
             <property name="zip.@{type}.nopolicy.log.file" location="${@{phase}.log.dir}/${build.id}_@{type}_archive.nopolicy.log" />
             <property name="zip.@{type}.policy.log.file" location="${@{phase}.log.dir}/${build.id}_@{type}_archive.policy.log" />
-            <trycatch property="exception" reference="exception">
-                <try>
-                    <!-- Don't print 'compressing' on console -->
-                    <hlm:logtoconsole action="stop" />
-                    <!-- Stops writing on ...ant_build.log file-->
-                    <hlm:startSpecificLogMacro name="${zip.@{type}.log.file}" phase="@{phase}"/>
-            
-                    <!-- Path to the parsed file of zip specification file
-                    @type string
-                    @scope private
-                    -->
-                    <property name="zip.config.file.parsed" location="${temp.build.dir}/zip.cfg.xml.parsed" />
-                    <copy file="@{file}" tofile="${zip.config.file.parsed}" overwrite="true">
-                        <filterchain>
-                            <expandproperties />
-                        </filterchain>
-                    </copy>
-                    <hlm:updateArchiveConfig configtype="${zips.@{type}.spec.name}" configfileparsed="${zip.config.file.parsed}" usingec="@{ec}" failonemptyconfig="@{failonemptyconfig}"/>
-                    <if>
-                        <istrue value="@{ec}" />
-                        <then>
-                            <echo>emake.root.to.append=${emake.root.to.append}</echo>
-                            <hlm:emakeMacro name="archive-full-@{type}" makefile="${build.drive}/ZIP_${zips.@{type}.spec.name}.make" target="all" dir="${build.drive}/" annodetail="basic,history,file,waiting" root="${emake.root.to.append}" failonerror="false" phase="archive"/>
-                        </then>
-                        <else>
-                            <if>
-                                <isgreaterthan arg1="${number.of.threads}" arg2="${archive.max.number.of.threads}"/>
-                                <then>
-                                    <ant antfile="${build.drive}/ZIP_${zips.@{type}.spec.name}.xml">
-                                        <!-- how many parallel threads can run
-                                        @type string
-                                        -->
-                                        <property name="number.of.threads" value="${archive.max.number.of.threads}"/>
-                                    </ant>
-                                </then>
-                                <else>
-                                    <ant antfile="${build.drive}/ZIP_${zips.@{type}.spec.name}.xml" />
-                                </else>
-                            </if>
-                        </else>
-                    </if>
-                    <hlm:python>
+            <hlm:taskRecorder output="${zip.@{type}.log.file}">
+                <!-- Path to the parsed file of zip specification file
+                @type string
+                @scope private
+                -->
+                <property name="zip.config.file.parsed" location="${temp.build.dir}/zip.cfg.xml.parsed" />
+                <copy file="@{file}" tofile="${zip.config.file.parsed}" overwrite="true">
+                    <filterchain>
+                        <expandproperties />
+                    </filterchain>
+                </copy>
+                <hlm:updateArchiveConfig configtype="${zips.@{type}.spec.name}" configfileparsed="${zip.config.file.parsed}" usingec="@{ec}" failonemptyconfig="@{failonemptyconfig}"/>
+                <if>
+                    <istrue value="@{ec}" />
+                    <then>
+                        <echo>emake.root.to.append=${emake.root.to.append}</echo>
+                        <hlm:emakeMacro name="archive-full-@{type}" makefile="${build.drive}/ZIP_${zips.@{type}.spec.name}.make" target="all" dir="${build.drive}/" annodetail="basic,history,file,waiting" root="${emake.root.to.append}" failonerror="false" phase="archive"/>
+                    </then>
+                    <else>
+                        <if>
+                            <isgreaterthan arg1="${number.of.threads}" arg2="${archive.max.number.of.threads}"/>
+                            <then>
+                                <ant antfile="${build.drive}/ZIP_${zips.@{type}.spec.name}.xml">
+                                    <!-- how many parallel threads can run
+                                    @type string
+                                    -->
+                                    <property name="number.of.threads" value="${archive.max.number.of.threads}"/>
+                                </ant>
+                            </then>
+                            <else>
+                                <ant antfile="${build.drive}/ZIP_${zips.@{type}.spec.name}.xml" />
+                            </else>
+                        </if>
+                    </else>
+                </if>
+                <hlm:python>
 import archive
 import configuration
 
@@ -441,22 +560,10 @@
 configs = configSet.getConfigurations(r'${zips.@{type}.spec.name}')
 prebuilder = archive.ArchivePreBuilder(configuration.ConfigurationSet(configs), r'${zips.@{type}.spec.name}')
 prebuilder.cleanupSubstDrives()
-                    </hlm:python>
-                    <hlm:mergeMetadataMacro file="${zip.config.file.parsed}" config="${zips.@{type}.spec.name}" />
-                    <hlm:updateMD5Macro file="${zip.config.file.parsed}" config="${zips.@{type}.spec.name}" />
-                </try>
-                <catch>
-                    <!-- Printing and propagating the error -->
-                    <echo>ERROR: ${exception}</echo>
-                    <throw refid="exception"/>
-                </catch>
-                <finally>
-                    <!-- Todo: metadata: Convert to metadata structure -->
-                    <!-- Stops log back to main log. -->
-                    <hlm:stopSpecificLogMacro name="${zip.@{type}.log.file}" phase="@{phase}"/>
-                    <hlm:logtoconsole action="resume" />
-                </finally>
-            </trycatch>
+                </hlm:python>
+                <hlm:mergeMetadataMacro file="${zip.config.file.parsed}" config="${zips.@{type}.spec.name}" />
+                <hlm:updateMD5Macro file="${zip.config.file.parsed}" config="${zips.@{type}.spec.name}" />
+            </hlm:taskRecorder>
             <hlm:assertFileExists file="${zip.@{type}.log.file}" />
             <copy file="${zip.@{type}.log.file}" tofile="${zip.@{type}.nopolicy.log.file}" verbose="true">
                 <filterchain>
@@ -497,6 +604,7 @@
         </sequential>
     </macrodef>
     
+    
     <!--
     1. To update the archive configuration file with substituted drives information for UNC paths (if any).
     2. To create the .make file to zip the sources using EC.    
@@ -543,33 +651,34 @@
     
 
     <!-- Zips the Engineering English content. -->
-    <target name="zip-ee" unless="skip-zips">
+    <target name="zip-ee" if="internal.archiving.enabled">
         <hlm:zipContentMacro type="ee" file="${zip.config.file}" />
     </target>
 
     <!-- Zips the subcon content. -->
-    <target name="zip-subcon" unless="skip-zips">
+    <target name="zip-subcon" if="internal.archiving.enabled">
         <hlm:zipContentMacro type="subcon" file="${zip.config.file}" />
     </target>
 
 
     <!-- Zips the subcon rom content. -->
-    <target name="zip-subcon-roms" unless="skip-zips">
+    <target name="zip-subcon-roms" if="internal.archiving.enabled">
         <hlm:zipContentMacro type="subcon_roms" file="${zip.config.file}" />
     </target>
 
 
     <!-- Zips the localised content. -->
-    <target name="zip-localised" unless="skip-zips">
+    <target name="zip-localised" if="internal.archiving.enabled">
         <hlm:zipContentMacro type="localised" file="${zip.config.file}" />
     </target>
 
 
     <!-- Zips the trace rom content -->
-    <target name="zip-trace-roms" unless="skip-zips">
+    <target name="zip-trace-roms" if="internal.archiving.enabled">
         <hlm:zipContentMacro type="trace_roms" file="${zip.config.file}" />
     </target>
 
+    
     <!-- Publishes the content defined by the filesets at the top of this project.
     
     The files are split into 4 filesets to parallelize the publish operation:
@@ -581,9 +690,9 @@
     
     All content is copied to the location defined by publish.dir. Also verify the source and target content after publish.
     -->
-    <target name="publish" depends="prep-publish" if="publish">
+    <target name="publish" depends="prep-publish" if="internal.publish.enabled">
         <hlm:publishMacro />
-        <resourcecount property="total.changes.in.fileset">
+        <!--<resourcecount property="total.changes.in.fileset">
             <fileset id="publish.files.location" dir="${build.output.dir}">
                 <exclude name="logs/**/*_ant_build.log" />
                 <exclude name="*" />
@@ -602,18 +711,18 @@
                 <echo message="ERROR: There are ${total.changes.in.fileset} changes in the publish directory. Uploading the changes again..." />
                 <hlm:publishMacro />
             </then>
-        </if>
+        </if>-->
     </target>
 
 
     <!-- Basic publish target that publishes all important content. -->
-    <target name="publish-generic" depends="prep-publish,publish-tools" if="publish">
+    <target name="publish-generic" depends="prep-publish,publish-tools" if="internal.publish.enabled">
         <hlm:publishMacro />
     </target>
 
 
     <!-- Publishes tools needed to run commands from a published build area. -->
-    <target name="publish-tools" depends="prep-publish" if="publish">
+    <target name="publish-tools" depends="prep-publish" if="internal.publish.enabled">
         <echoproperties destfile="${publish.dir}/build_properties.txt">
             <propertyset>
                 <propertyref name="publish.dir" />
@@ -630,7 +739,7 @@
 
 
     <!-- The same as a basic publish. -->
-    <target name="publish-variants" depends="prep-publish" if="publish">
+    <target name="publish-variants" depends="prep-publish" if="internal.publish.enabled">
         <hlm:publishMacro />
     </target>
 
@@ -643,34 +752,6 @@
         <echo file="${lxr.publish.dir}\${build.id}_ready.txt" />
     </target>
 
-
-    <!-- Mails the Diamonds XML data to the Diamonds server account. -->
-    <target name="mail-log-to-diamonds">
-        <runtarget target="lookup-email" />
-        <echo message="Sending XML log through email." />
-        <!--Ant mail task can not include xml as msg body. so do it in python-->
-        <!-- TODO - would this work by using a <message> subelement? -->
-        <hlm:python>
-import sys, smtplib, string
-            
-fromaddr = r'${email.from}'
-toaddrs  = r'${diamonds.mail}'
-smtpserver  = r'${email.smtp.server}'
-subject  = "[DIAMONDS_DATA] ${build.id}>>>${diamonds.host}>>>${diamonds.path}"
-file = open(r'${diamonds.log.file}', 'r')
-msg = file.read()
-body = string.join(("From: %s" %fromaddr, "To: %s" %toaddrs, "Subject: %s" %subject, "", msg), "\r\n")
-try:
-    server = smtplib.SMTP(smtpserver)
-    server.sendmail(fromaddr, toaddrs, body)
-    server.quit()
-    print "Mail sent to " , toaddrs
-except Exception:
-    print "SMTP server " + smtpserver + " unavailable!! Unable to send log to " , toaddrs
-    
-        </hlm:python>
-    </target>
-
     <!-- Reports on the status of the build, through other targets. -->
     <target name="report" depends="binary-sizes-log"/>
 
@@ -755,6 +836,7 @@
         <antcall target="post-build-md5" />
     </target>
 
+    
     <!-- Generate a list of checksums for all files in the build area using EC system. @scope private-->
     <target name="build-md5-ec" depends="pre-build-md5">
         <mkdir dir="${delta.zip.location}" />
@@ -829,7 +911,6 @@
 
         <move file="${delta.zip.temp.location}/specialInstructions.xml" tofile="${delta.zip.delete.file}" />
         <move file="${delta.zip.temp.location}/${build.id}.md5" tofile="${md5.signature.file}" />
-
     </target>
 
 
@@ -885,17 +966,19 @@
         </antcall>
     </target>
 
+    
     <!-- Publishes the Ant build log.
         
     First the logging should be stopped, before the file is copied. Hence this target should be called
     by the "final" target last.
     -->
-    <target name="publish-build-log" depends="prep-publish" if="publish">
+    <target name="publish-build-log" depends="prep-publish" if="internal.publish.enabled">
         <copy todir="${publish.dir}/logs" preservelastmodified="true" failonerror="false">
             <fileset dir="${build.log.dir}" includes="**/*.log" />
         </copy>
     </target>
 
+    
     <!-- Copy the debug log to the build area if available-->
     <target name="copy-debug-logs">
         <echo message="log4j.dir:${log4j.cache.dir}" /> 
@@ -909,12 +992,14 @@
         </if>
     </target>
 
+    
     <!-- Target to simulate that the build is failed because of processing
     ant output
     -->
     <target name="raise-error">
         <echo message="ERROR: Build failed due to exceptions" />
     </target>
+    
 
     <!-- Update the build status by processing the ant build output log -->
     <target name="build-status">
@@ -928,6 +1013,19 @@
         <hlm:signalMacro logfile="${build.log}" 
             signal.input="exceptionSignalInput" />
     </target>
+    
+    
+    <property name="ExecListener.file" value="${build.cache.log.dir}/${build.id}_executables.csv"/>
+    
+    <!-- Logs details about the tools used in the environment.
+        
+    This includes name, path, version. -->
+    <target name="log-environment">
+        <hlm:environment output="${build.log.dir}/${build.id}_environment.xml">
+            <hlm:envdata refid="helium.tools.envdata"/>
+        </hlm:environment>
+    </target>
+    
 
     <!-- Exception handler to process the ant output log -->
     <target name="hlm-exception-handler">
@@ -939,13 +1037,16 @@
         </if>
     </target>
 
+    
     <target name="do-exception-handler" depends="raise-error, build-status, build-log-summary, copy-debug-logs, publish-build-log" />
 
+    
     <!-- Does any wrap-up at the end of the build. This should be the last target for every top-level target. -->
-    <target name="final" depends="build-status, build-log-summary, copy-debug-logs, publish-build-log" />
+    <target name="final" depends="build-status, build-log-summary, copy-debug-logs, publish-build-log, log-environment" />
+    
     
     <!-- This target will zip the WA depending on the ado mapping file -->
-    <target name="zip-wa" depends="ido-create-ado-mapping" if="zip.wa">
+    <target name="zip-wa" depends="ido-create-ado-mapping" if="internal.archive.wa.enabled">
         <tempfile property="zipwa.dynamic.config" suffix=".xml" deleteonexit="false" destdir="${temp.build.dir}"/>
         <fmpp sourceFile="${helium.dir}/tools/common/templates/ido/zip-ant-wa-copy.xml.ftl" outputFile="${zipwa.dynamic.config}">
             <data expandProperties="yes">
--- a/buildframework/helium/tools/publish/synergy.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/publish/synergy.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -25,28 +25,90 @@
     <description>
     Synergy publishing related targets
     </description>
-
+    
+    <!--* @property publish.task.to.folder.enabled
+    Must be set to true if the completed tasks needs to be published into folder set using publish.ccm.folder.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.publish.task.to.folder.enabled
+    Will publish the tasks into synergy folder set using publish.ccm.folder
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property publish.ccm.folder
+    Must be set to publish the completed tasks into synergy folder.
+    @type string
+    @editable required
+    @scope public
+    -->
+    
+    <!--* @property team.level.ci.enabled
+    Must be set to true if need to change the synergy release tag in team level CI system.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.team.level.ci.enabled
+    Set to run the target which will change ther synergy release tag in team CI system if teamlevel.ci.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property teamlevel.ci.system
+    Must be set to true if need to change the synergy release tag in team level CI system. - deprecated: Start using teamlevel.ci.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
     <!-- Validate all the inputs for the publish-tasks-to-folder target. -->
-    <target name="publish-tasks-to-folder-check" if="publish.ccm.folder">
-        <condition property="do.publish-tasks-to-folder" value="true">
-            <available file="${build.log.dir}/${build.id}_bom.xml" />
-        </condition>
-    </target>
+    <condition property="internal.publish.task.to.folder.enabled">
+        <or>
+            <istrue value="${publish.task.to.folder.enabled}"/>
+            <isset property="publish.ccm.folder"/>
+        </or>
+    </condition>
+    
+    <!-- Check is it a team level CI system. -->
+    <condition property="internal.team.level.ci.enabled">
+        <or>
+            <istrue value="${team.level.ci.enabled}"/>
+            <isset property="teamlevel.ci.system"/>
+        </or>
+    </condition>
+    
+    
 
     <!-- Copies all the task found in the BOM into defined folder. -->
-    <target name="publish-tasks-to-folder" depends="publish-tasks-to-folder-check" if="do.publish-tasks-to-folder">
-        <mkdir dir="${temp.build.dir}" />
-        <fmpp sourceFile="${helium.dir}/tools/common/templates/ido/task-publish.ant.xml.ftl" outputFile="${temp.build.dir}/task-publish.ant.xml">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${helium.dir}/tools/common/templates/macro
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                bom: xml(${build.log.dir}/${build.id}_bom.xml)
-                ant: antProperties()
-            </data>
-        </fmpp>
-        <hlm:assertFileExists file="${temp.build.dir}/task-publish.ant.xml" />
-        <ant antfile="${temp.build.dir}/task-publish.ant.xml" dir="${build.drive}/" />
+    <target name="publish-tasks-to-folder" if="internal.publish.task.to.folder.enabled">
+        <if>
+            <available file="${build.log.dir}/${build.id}_bom.xml" />
+            <then>
+                <mkdir dir="${temp.build.dir}" />
+                <fmpp sourceFile="${helium.dir}/tools/common/templates/ido/task-publish.ant.xml.ftl" outputFile="${temp.build.dir}/task-publish.ant.xml">
+                    <freemarkerLinks expandProperties="yes">
+                        macro: ${helium.dir}/tools/common/templates/macro
+                    </freemarkerLinks>
+                    <data expandProperties="yes">
+                        bom: xml(${build.log.dir}/${build.id}_bom.xml)
+                        ant: antProperties()
+                    </data>
+                </fmpp>
+                <hlm:assertFileExists file="${temp.build.dir}/task-publish.ant.xml" />
+                <ant antfile="${temp.build.dir}/task-publish.ant.xml" dir="${build.drive}/" />
+            </then>
+            <else>
+                <echo>Skipped because file ${build.log.dir}/${build.id}_bom.xml not available.</echo>
+            </else>
+        </if>
     </target>
 
     <!--* @property ccm.cache.xml
@@ -56,8 +118,16 @@
     @scope public
     -->
 
+    <!--
+    Synergy role to use while doing the update of release tag.
+    @type string
+    @editable required
+    @scope public
+    -->
+    <property name="change.release.tag.role" value="build_mgr" />
+    
     <!-- Change team level release tag to program level release tag -->
-    <target name="change-release-tag" if="teamlevel.ci.system">
+    <target name="change-release-tag" if="internal.team.level.ci.enabled">
         <if>
             <isset property="ccm.cache.xml" />
             <then>
@@ -69,6 +139,7 @@
         </if>
         <hlm:ccm verbose="false">
             <hlm:sessionset refid="releasetag.session" />
+            <hlm:role role="${change.release.tag.role}" />
             <hlm:changereleasetag folder="${teamlevel.folder.number}" releasetag="${programlevel.release.tag}" />
         </hlm:ccm>
         <if>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/quality/compatibility_analyser/ca_config_template.txt	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,164 @@
+#
+# Copyright (c) 2008, 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:  End-user Interface for Core Tools execution
+#
+
+########## GUIDELINES 
+# 
+# - If any paths contain spaces, place them in "Quotes"
+# - If some parameter is not to be used, it can be empty or completely removed
+#   from the config file
+
+
+########## MANDATORY COMMON PARAMETERS 
+#
+# Name for baseline file set
+BASELINE_NAME='SDK 3rd Edition'
+
+# Root directory for files in baseline directory. It's a mandatory parameter.
+BASELINE_SDK_DIR=C:\Symbian\9.2\S60_3rd_FP1_2
+
+# S60 version of baseline set.It can be any of the following
+# 3.0, 3.1, 3.2, 5.0, 9.1, 9.2,,10.1, S^1, S^2,S^3,S^4 (S^1, S^2,S^3,S^4 are for symbian 1,2,3,4 SDk versions respectively).
+BASELINE_SDK_S60_VERSION=3.0
+
+# Name for current file set
+CURRENT_NAME=RnD SDK wk26
+
+# Root directory for files in current directory. It's a mandatory parameter.
+CURRENT_SDK_DIR=Y:\
+
+# S60 version of current set.It can be any of the following
+# 3.0, 3.1, 3.2, 5.0, 9.1, 9.2,,10.1, S^1, S^2,S^3,S^4 (S^1, S^2,S^3,S^4 are for symbian 1,2,3,4 SDk versions respectively).
+CURRENT_SDK_S60_VERSION=3.1
+
+
+########## OPTIONAL COMMON PARAMETERS 
+#
+# Defines the path for intermediate temporary files
+# Uses system defined paths if empty
+TEMP=
+
+
+########## OPTIONAL HEADER ANALYSIS SPECIFIC PARAMETERS 
+
+# Mark as 'true', if Public vs Rnd sdk or small no of headers ( count < 3000) analysis will be done.
+# defaults to 'false' if not defined. Analysis time will be increased.
+# When analysing large no of headers, multiple Thread logic needs to be disabled to avoid issues due to high memory consumption .
+USE_THREAD=
+
+# Analyse any header directory, other than \epoc32\include. This will override
+# the default SDK paths. Multiple names separated by ‘;’ can be input. If they 
+# are relative paths, BASELINE_SDK_DIR\epoc32\include and 
+# CURRENT_SDK_DIR\epoc32\include will be inserted at the begining.
+BASELINE_HEADERS=
+CURRENT_HEADERS=
+
+# Specifies the dependant header directories. Multiple names separated by ‘;’
+# can be input. If defined or not, default system defined inputs will be taken
+# along with these always. If they are relative paths, 
+# BASELINE_SDK_DIR\epoc32\include and CURRENT_SDK_DIR\epoc32\include will be 
+# inserted at the begining.
+BASELINE_SYSTEMINCLUDEDIR=
+CURRENT_SYSTEMINCLUDEDIR=
+
+# Additional headers that have to be included for successful compilation of the
+# header files. Multiple names separated by ‘;’ can be input.
+BASELINE_FORCED_HEADERS=
+CURRENT_FORCED_HEADERS=
+
+# Usage of platform data to resolve compile time dependency information,
+# defaults to 'true' if not defined
+USE_PLATFORM_DATA=
+
+# Recurse the directory hierarchy while scanning for files under verification,
+# defaults to 'true' if not defined
+RECURSIVE_HEADERS=
+
+# If the recursive scan is enabled, optionally exclude some subdirectories,
+# defaults to be none if not defined. Multiple names separated by ‘;’ can 
+# be input.
+EXCLUDE_DIR_HEADERS=
+
+# File pairs to be compared, if names change between base & current releases,
+# Format, OLD:NEW, each such set is separated by ‘;’, defaults to none
+REPLACE_HEADERS=
+
+# Report file for header analysis, report file created under reports directory
+# with a default file name if not specified
+REPORT_FILE_HEADERS=Y:/output/logs/BC/headers_report.xml
+
+# Similar as above, but this is the path of the filtered report file, otherwise
+# the same file name is used
+FILTER_FILE_HEADERS=
+
+
+########## OPTIONAL LIBRARY ANALYSIS SPECIFIC PARAMETERS 
+#
+# Type of the tool chain (GCC/GGCE/RVCT) which is used fetch information from the
+# import libraries under analysis, defaults to GCCE if not specified
+TOOLCHAIN=
+
+# Path to the tool chain mentioned above, path found automatically if not specified
+TOOLCHAIN_PATH=
+
+# Target build directories of the import libraries (eg ARMV5/ARMV6). Defaults to
+# ARMV5. Please note that WINSCW is not supported. Multiple names separated by 
+# ‘;’ can be input.
+BASELINE_BUILDTARGET=
+CURRENT_BUILDTARGET=
+
+# Analyse any other import library directory than from under \epoc32\release.
+# This will override target builds mentioned above. Multiple names separated 
+# by ‘;’ can be input. If they are relative paths, 
+# BASELINE_SDK_DIR\epoc32\release and CURRENT_SDK_DIR\epoc32\release will be 
+# inserted at the begining. If any of these param is mentioned, corresponding 
+# dll path also needs to be mentioned.
+BASELINE_IMPORTLIBRARIES=
+CURRENT_IMPORTLIBRARIES=
+
+# Analyse any other dll directory than from under \epoc32\release. This will 
+# override target builds mentioned above. Multiple names separated by ‘;’ can
+# be input. If they are relative paths, BASELINE_SDK_DIR\epoc32\release and 
+# CURRENT_SDK_DIR\epoc32\release will be inserted at the begining. If any of 
+# these param is mentioned,corresponding lib path is also needs to be mentioned.
+BASELINE_IMPORTDLLS=
+CURRENT_IMPORTDLLS=
+
+# Report file for library analysis, report file created under reports directory
+# with a default file name if not specified
+REPORT_FILE_LIBRARIES=Y:/output/logs/BC/libraries_report.xml
+
+# Similar as above, but this is the path of the filtered report file, otherwise
+# the same file name is used
+FILTER_FILE_LIBRARIES=
+
+
+########## OPTIONAL REPORT FILTERING SPECIFIC PARAMETERS
+#
+# Report files to be filtered, multiple reports can be mentioned here separated
+# by ';'. In addition, peport paths mentioned in headers, libraries section are
+# also filtered
+REPORT_FILE_FILTER=
+
+# Same as above, but specifies paths for filtered report files. There is a
+# correspondance between report file above and the output file. If a report
+# file does not have a corresponding Output file mentioned then it is filtered
+# in-place.
+OUTPUT_FILE_FILTER=
+
+# Defines paths for knownissues files separated by ';' which can be either local
+# directory or a server path. Defaults to the default knownissues file
+# delivered by the tool
+ISSUES_FILE=
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/quality/compatibility_analyser/compatibility.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : compatibility.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="compatibility.analyser" xmlns:hlm="http://www.nokia.com/helium">
+    <description>
+        Compatibility Analyser - BC (Binary Comparison) needs the property ca.enabled to
+        be set to true in order to run the targets bc-check and ca-generate-diamond-summary
+    </description>
+
+    <!-- The following parameters need to be set up by the IDO before CheckBC.py will run -->
+    <!-- place where the CheckBC and FilterBC tools are - required
+    @type string
+    @editable required
+    @scope public
+    -->
+    <property name="bctools.root" location="E:\brtaylor\Apps\carbide\plugins\com.nokia.s60tools.compatibilityanalyser.corecomponents_2.0.0\BCTools" />
+
+    <!-- Place where the CheckBC default configuration file is - required (see compatibility analyser user guide for details)
+    it is copied from this location to the output folder  for use by checkBC.py
+    @type string
+    @editable required
+    @scope public
+    -->
+    <property name="default.bc.config"  location="${helium.dir}/tools/quality/compatibility_analyser/ca_config_template.txt" />
+
+    <!-- The bc_config_template.txt file (default configuration file) will be copied from the folder
+    it is saved in within helium to the location named in this property where it will be used.
+    @type string
+    @editable required
+    @scope public
+    -->
+    <property name="bc.config.dir" location="${build.log.dir}/bc" />
+
+    <!-- The bc_config_template.txt file (default configuration file) will be copied from the
+    folder it is saved in within helium to the location and file name named in this property 
+    where it will be used. You need to make sure this is 
+    not the same name as any other IDO or person using the build area
+    @type string
+    @editable required
+    @scope public
+    -->
+    <property name="bc.config.file" location="${bc.config.dir}/bc.config" />
+
+    <!-- Enables the Binary Comparison for libraries when set to true
+    @type boolean
+    @editable required
+    @scope public
+    -->
+    <property name="bc.check.libraries.enabled" value="true" />
+    
+    <!-- Defines the parameter that checkBC.py is called with 
+       -la (all libraries checked) 
+    or -ls lib (single library checked) (lib = the name of library to check)
+    or -lm file.name (multiple libraries checked) 
+    the file.name is a file that contains the names of the library(ies) to check 
+    @type string
+    @editable required
+    @scope public
+    -->
+    <property name="lib.param.val" value="-la" />
+
+    <!-- Enables the Binary Comparison for headers when set to true
+    @type boolean
+    @editable required
+    @scope public
+    -->
+    <property name="bc.check.headers.enabled" value="true" />
+    
+    <!-- Defines the parameter that checkBC.py is called with 
+       -ha (all headers checked) 
+    or -hs file (single header checked) (file= name of header file to check) 
+    or -hm file.name (multiple headers checked) 
+    the file.name is a file that contains the names of the header(s) to check 
+    @type string
+    @editable required
+    @scope public
+    -->
+    <property name="head.param.val" value="-ha" />
+
+    <!-- Adds this to the CA output file name to give it a unique name
+    @type string
+    @editable required
+    @scope public
+    -->
+    <property name="bc.check.report.id" value="${build.name}_${build.number}" />
+
+    <!-- Defines the location of CA output and the input for the diamonds creation target.
+    @type string
+    -->
+    <property name="ido.ca.html.output.dir" location="${build.log.dir}/${build.id}_ca"/>
+
+    <condition property="internal.run.ca">
+        <istrue value="${ca.enabled}" />
+    </condition>
+
+
+<!-- static and dynamic BC Test target -->
+    <target name="bc-check" if="internal.run.ca" >
+        <!-- create BC dir -->
+        <mkdir dir="${build.log.dir}/BC"/>
+        <delete file="${bc.config.file}" quiet="true"/>
+        <delete file="${build.log.dir}/BC/BBCResults.xsl" quiet="true"/>
+
+        <copy file="${default.bc.config}" tofile="${bc.config.file}" failonerror="false" verbose="true"/>
+
+        <!--copy the CSS file to the output folder-->
+        <copy file="${bctools.root}/reports/BBCResults.xsl" tofile="${build.log.dir}/BC/BBCResults.xsl" failonerror="false" verbose="true"/>
+
+        <if>    <!--the library check enaled flag is set then run the check on the lirary files-->
+            <istrue value="${bc.check.libraries.enabled}"/>
+            <then>
+                <exec executable="python" dir="${build.log.dir}/BC" failonerror="true">
+                    <arg value="${bctools.root}/CheckBC.py"/>
+                    <arg value="${bc.config.file}"/>
+                    <arg line="${lib.param.val}"/>
+                    <arg value="-f"/>
+                    <arg value="${bc.check.report.id}"/>
+                </exec>
+            </then>
+        </if>
+
+        <if>    <!-- if the header check flag is set then run the checks on the headers-->
+            <istrue value="${bc.check.headers.enabled}"/>
+            <then>
+                <exec executable="python" dir="${build.log.dir}/BC" failonerror="true">
+                    <arg value="${bctools.root}/CheckBC.py"/>
+                    <arg value="${bc.config.file}"/>
+                    <arg line="${head.param.val}"/>
+                    <arg value="-f"/>
+                    <arg value="${bc.check.report.id}"/>
+                </exec>
+            </then>
+        </if>
+    </target>
+
+
+    <target name="ca-generate-diamond-summary" if="internal.run.ca">
+        <!--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"/>
+
+        <mkdir dir="${diamonds.build.output.dir}" />
+
+        <if>    <!-- if the header check flag is set then run the checks on the headers-->
+            <istrue value="${bc.check.headers.enabled}"/>
+            <then>
+                <hlm:casummary diamondsHeaderFileName="${temp.diamonds.header.xml}" diamondsFooterFileName="${temp.diamonds.footer.xml}"
+                    header="true"
+                    outputFile="${diamonds.build.output.dir}/ca_summary_header.xml"
+                    inputFile="${bc.config.dir}/headers_report_${bc.check.report.id}.xml" 
+                     />
+            </then>
+        </if>
+
+        <if>    <!--the library check enaled flag is set then run the check on the lirary files-->
+            <istrue value="${bc.check.libraries.enabled}"/>
+            <then>
+                <hlm:casummary diamondsHeaderFileName="${temp.diamonds.header.xml}" diamondsFooterFileName="${temp.diamonds.footer.xml}"
+                    header="false" 
+                    outputFile="${diamonds.build.output.dir}/ca_summary_library.xml"
+                    inputFile="${bc.config.dir}/libraries_report_${bc.check.report.id}.xml"
+                    />
+            </then>
+        </if>
+
+        <delete file="${temp.diamonds.header.xml}" failonerror="false" />
+        <delete file="${temp.diamonds.footer.xml}" failonerror="false" />
+    </target>
+
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/quality/cone-validate.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : cone-validate.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 quality -->
+<project name="cone-validate" xmlns:hlm="http://www.nokia.com/helium">
+    <description>
+        To validate confml configuration files.
+    </description>
+    
+    <!--* @property cone.validation.enabled
+    Set to true to run ConE tool to validate conml and impl files.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.cone.validation.enabled
+    Set to run cone validation targets if  cone.validation.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!-- To enable to confml file validation -->
+    <condition property="internal.cone.validation.enabled">
+        <and>
+            <istrue value="${cone.validation.enabled}" />
+            <isset property="product.list"/>
+        </and>
+    </condition>
+    
+    <!-- Target to validate confml configuration files of product -->
+    <target name="cone-validate" if="internal.cone.validation.enabled">
+        <mkdir dir="${post.log.dir}" />
+        <mkdir dir="${temp.build.dir}" />
+        <tempfile property="cone.dynamic.config" suffix=".xml" deleteonexit="false" destdir="${temp.build.dir}"/>
+        
+        <fmpp sourceFile="${helium.dir}/tools/common/templates/quality/cone-validate.xml.ftl"
+              outputfile="${cone.dynamic.config}">
+            <data expandProperties="yes">
+                ant: antProperties()
+                os: eval('System.getProperty("os.name")')
+            </data>
+        </fmpp>
+        
+        <trycatch property="cone.validate.thrown">
+            <try>
+                <ant antfile="${cone.dynamic.config}" output="${post.log.dir}/${build.id}_validate_cone.log"/>
+            </try>
+            <catch>
+                <fail message="${cone.validate.thrown}"/>
+            </catch>
+            <finally>
+                <hlm:metadatarecord database="${metadata.dbfile}">
+                    <hlm:textmetadatainput>
+                        <fileset casesensitive="false" file="${post.log.dir}/${build.id}_validate_cone.log" />
+                        <metadatafilterset>
+                            <metadatafilter priority="error" regex="^ERROR\s+:.*" description="cone error" />
+                            <metadatafilter priority="error" regex="\s*[1-9]\d*\s*problem\(s\).*?" description="cone validation error" />
+                            <metadatafilter priority="warning" regex="^WARNING\s+:.*" description="cone warnings" />
+                            <metadatafilter priority="info" regex="^INFO\s+:.*" description="cone info" />
+                        </metadatafilterset>
+                    </hlm:textmetadatainput>
+                </hlm:metadatarecord>
+                <hlm:metadataCountSeverity severity="ERROR" log="${build.id}_validate_cone.log" database="${metadata.dbfile}"
+                                           property="cone.validate.error.total"/>
+                <echo>ConE error: ${cone.validate.error.total}</echo>
+                <hlm:generateBuildStatus file="${build.id}_validate_cone.log" />
+                <hlm:signalMacro logfile="${build.id}_validate_cone.log" phase="post" signal.input="ConEValidateSignalInput" />
+            </finally>
+        </trycatch>
+        
+    </target>
+    
+    
+</project>
\ No newline at end of file
--- a/buildframework/helium/tools/quality/conflict-checker.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/quality/conflict-checker.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -31,6 +31,16 @@
     @scope private
     -->
     <property name="build.duplicates.log" location="${temp.build.dir}/${build.id}_build_duplicates.xml" />
+    
+    <!-- Check, is it required to run build duplicates -->
+    <condition property="run.build.duplicates">
+        <not>
+            <or>
+                <equals arg1="${build.system}" arg2="sbs" />
+                <equals arg1="${build.system}" arg2="sbs-ec" />
+            </or>
+        </not>
+    </condition>
 
     <!--
         This macro extract the list of files generated/exported several time from different component 
@@ -55,23 +65,11 @@
 integration.ant.check_build_duplicates_task(project, self, attributes, elements)
         ]]>
     </scriptdef>
-
-    <!-- 
-       Check if the build duplicated needs to be run.
-    -->
-    <target name="check-build-duplicates">
-        <condition property="skip.build.duplicates" value="">
-            <or>
-                <equals arg1="${build.system}" arg2="sbs" />
-                <equals arg1="${build.system}" arg2="sbs-ec" />
-            </or>
-        </condition>
-    </target>
-
+   
     <!-- Parse all the build log and extract files that are generated/exported
         several times.
     -->
-    <target name="integration-build-duplicates" depends="check-build-duplicates" unless="skip.build.duplicates">
+    <target name="integration-build-duplicates" if="run.build.duplicates">
         <hlm:checkBuildDuplicatesMacro output="${build.duplicates.log}">
             <fileset dir="${compile.log.dir}">
                 <include name="${build.id}.*_compile.log" />
@@ -82,7 +80,7 @@
     </target>
 
     <!-- Render the build duplicates xml file into an HTML output. -->
-    <target name="render-build-duplicates" depends="integration-build-duplicates" unless="skip.build.duplicates">
+    <target name="render-build-duplicates" depends="integration-build-duplicates" if="run.build.duplicates">
         <fmpp sourceFile="${helium.dir}/tools/common/templates/integration/build-duplicates.html.ftl" outputFile="${build.log.dir}/${build.id}_build-duplicates.html">
             <freemarkerLinks expandProperties="yes">
                             macro: ${helium.dir}/tools/common/templates/macro
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/quality/lint.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : lint.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="lint" xmlns:hlm="http://www.nokia.com/helium"
+                     xmlns:cs="antlib:com.puppycrawl.tools.checkstyle">
+
+    <!-- Run AntLint on project Ant XML files. -->
+    <target name="antlint">
+        <delete dir="${helium.build.dir}/jep"/>
+        <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 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>
+            <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"/>
+            <include name="python/**/*.py"/>
+        </fileset>
+        <antcall target="pylint" inheritRefs="true">
+            <reference refid="jep.files" torefid="python.files" />
+        </antcall>
+        <cs:checkstyle config="${helium.dir}/builder/java/config/java_checkstyle_config.xml">
+            <fileset dir="${helium.build.dir}/beanshell" includes="**/*.java"/>
+            <formatter type="plain"/>
+        </cs:checkstyle>
+    </target>    
+        
+    
+    <!-- Checks FTL files for lint issues. -->
+    <target name="ftllint">
+        <for param="file">
+            <path>
+                <fileset dir="${helium.dir}">
+                    <include name="**/*.ftl"/>
+                    <include name="**/*.rst"/>
+                    <exclude name="**/*.mk.ftl"/>
+                    <exclude name="build/**/*"/>
+                </fileset>
+            </path>
+            <sequential>
+                <loadfile srcfile="@{file}" property="tabs.in.ftl">
+                    <filterchain>
+                        <linecontainsregexp>
+                            <regexp pattern="\t"/>
+                        </linecontainsregexp>
+                    </filterchain>
+                </loadfile>
+                <fail if="tabs.in.ftl" message="@{file} has tabs" />
+            </sequential>
+        </for>
+    </target>
+    
+    
+    <target name="hlmlint" depends="antlint,ftllint"/>
+    
+</project>
+
+
+
+
--- a/buildframework/helium/tools/quality/quality.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/quality/quality.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -25,9 +25,12 @@
     <description>
         Quality
     </description>
+    <import file="lint.ant.xml"/>
     <import file="conflict-checker.ant.xml"/>
     <import file="internal-exports.ant.xml"/>
     <import file="mmp-to-target.ant.xml"/>
     <import file="validate-policy.ant.xml"/>
+    <import file="cone-validate.ant.xml"/>
     <import file="file-comparison/file-comparison.ant.xml"/>
+    <import file="compatibility_analyser/compatibility.ant.xml"/>
 </project>
\ No newline at end of file
--- a/buildframework/helium/tools/quality/validate-policy.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/quality/validate-policy.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -40,10 +40,35 @@
     @type string
     -->
     <property name="validate.policy.csv" location="${helium.dir}/tests/minibuilds/compile/distribution.policy.extended_for_sf.id_status.csv" />
-    <!-- Skip the validation of the given root folders.
+    
+    <!--* @property validate.policy.ignoreroot.enabled
+    Skip the validation of the given root folders if set to true.
+    @type boolean
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property validate.policy.ignoreroot
+    Skip the validation of the given root folders if set to true. - deprecated: Start using validate.policy.ignoreroot.enabled.
     @type boolean
+    @scope public
+    @deprecated since 11.0
     -->
-    <property name="validate.policy.ignoreroot" value="false" />
+    
+    <!-- * @property internal.validate.policy.ignoreroot.enabled
+    If the property is set to "true", if validate.policy.ignoreroot.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    <condition property="internal.validate.policy.ignoreroot.enabled" value="true" else="false">
+        <or>
+            <istrue value="${validate.policy.ignoreroot.enabled}"/>
+            <istrue value="${validate.policy.ignoreroot}"/>
+        </or>
+    </condition>
+    
+    
+    
     <!-- Comma separated list of pattern for policy validation.
     Default value is, distribution.policy.s60,distribution.policy,distribution.policy.pp
     @type string
@@ -54,7 +79,43 @@
     @type string
     -->
     <property name="validate.policy.exclude.pattern" value=".static_wa,_ccmwaid.inf" />
+    
+    <!--* Set to true to validate distribution.policy.S60 files values.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    <property name="policy.file.validation.enabled" value="true"/>
 
+    
+    <!--* @property internal.policy.file.validation.enabled
+    Set to run targets to validate distribution.policy.S60 files values if policy.file.validation.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property skip.policy-validation
+    Set to false to disbale validate distribution.policy.S60 files values. - deprecated: Start using policy.file.validation.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!-- Check, is distribution.policy.S60 files validation is enabled.-->
+    <condition property="internal.policy.file.validation.enabled">
+        <and>
+            <not>
+                <isfalse value="${policy.file.validation.enabled}" />
+            </not>
+            <not>
+                <isset property="skip.policy-validation"/>
+            </not>
+        </and>
+    </condition>
+    
+    
     <!-- Default path settings for policy validation. -->
     <path id="reference.policy.path.list">
         <pathelement path="${build.drive}/s60" />
@@ -69,7 +130,7 @@
     <pre>
       <hlm:validatePolicyMacro output="${validate.policy.log}"
           ids="${validate.policy.csv}"
-          ignoreroot="${validate.policy.ignoreroot}">
+          ignoreroot="${internal.validate.policy.ignoreroot.enabled}">
           <path refid="reference.policy.path.list"/>
       </hlm:validatePolicyMacro>
     </pre>
@@ -142,7 +203,7 @@
         <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}"
+            ignoreroot="${internal.validate.policy.ignoreroot.enabled}" pattern="${validate.policy.pattern}"
             excludes="${validate.policy.exclude.pattern}">
             <path refid="reference.policy.path.list" />
         </hlm:validatePolicyMacro>
@@ -151,41 +212,31 @@
                 <fileset casesensitive="false" file="${validate.policy.log}/" />
             </hlm:policymetadatainput>
         </hlm:metadatarecord>
-        <hlm:generateBuildStatus file="${build.id}_validate-policy.summary.xml" />
+        <hlm:generateBuildStatus file="${validate.policy.log}" />
     </target>
 
     <!--
     Render the policy validation xml file ('validate.policy.log') into an text output.
   -->
     <target name="render-validate-policy" depends="integration-validate-policy">
-        <if>
-            <not>
-                <istrue value="${metadata.enable}" />
-            </not>
-            <then>
-                <fmpp sourceFile="${helium.dir}/tools/common/templates/integration/validate-policy.log.ftl" outputFile="${post.log.dir}/${build.id}_validate-policy.log">
-                    <freemarkerLinks expandProperties="yes">
-                      macro: ${helium.dir}/tools/common/templates/macro
-                  </freemarkerLinks>
-                    <data expandProperties="yes">
-                      doc: xml(${validate.policy.log})
-                      ant: antProperties()
-                    </data>
-                </fmpp>
-                <fmpp sourceFile="${helium.dir}/tools/common/templates/integration/validate-policy.log.xml.ftl" outputFile="${validate.policy.log.xml}">
-                    <freemarkerLinks expandProperties="yes">
-                      macro: ${helium.dir}/tools/common/templates/macro
-                  </freemarkerLinks>
-                    <data expandProperties="yes">
-                      doc: xml(${validate.policy.log})
-                      ant: antProperties()
-                    </data>
-                </fmpp>
-            </then>
-            <else>
-                <!-- Todo: check and if required convert as metadata template -->
-            </else>
-        </if>
+        <fmpp sourceFile="${helium.dir}/tools/common/templates/integration/validate-policy.log.ftl" outputFile="${post.log.dir}/${build.id}_validate-policy.log">
+            <freemarkerLinks expandProperties="yes">
+                macro: ${helium.dir}/tools/common/templates/macro
+            </freemarkerLinks>
+            <data expandProperties="yes">
+                doc: xml(${validate.policy.log})
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <fmpp sourceFile="${helium.dir}/tools/common/templates/integration/validate-policy.log.xml.ftl" outputFile="${validate.policy.log.xml}">
+            <freemarkerLinks expandProperties="yes">
+                macro: ${helium.dir}/tools/common/templates/macro
+            </freemarkerLinks>
+            <data expandProperties="yes">
+                doc: xml(${validate.policy.log})
+                ant: antProperties()
+            </data>
+        </fmpp>
     </target>
 
     <!-- Target that will apply regular IDO validation rules on Helium. -->
@@ -197,21 +248,12 @@
         </hlm:validatePolicyMacro>
     </target>
 
-    <!--
-      Internal target that set an intermediate property to disable policy validation execution.
-    -->
-    <target name="ido-validate-policy-skip">
-        <condition property="do.skip.policy-validation" value="1">
-            <istrue value="${skip.policy-validation}"/>
-        </condition>
-    </target>
-    
     <!-- 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" />
+    <target name="ido-validate-policy" depends="ido-create-ado-mapping" if="internal.policy.file.validation.enabled">
+        <hlm: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" />
+        <hlm:record name="${temp.build.dir}/${build.id}_validate-policy.ant.log" action="stop" />
     </target>
 
 </project>
--- a/buildframework/helium/tools/release/release.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/release/release.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -69,6 +69,39 @@
     @editable required
     @scope public
     -->
+    
+    <!--* @property robot.release.enabled
+    Set to true to do build robot release after completing the build and if it successful.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property do.robot.release
+    Set to synergy project name to doing the build robot release. - deprecated: Start using robot.release.enabled property.
+    @type string
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!--* @property internal.robot.release.enabled
+    Internal property to run the robot release property if robot.release.enabled set to true. 
+    @type string
+    @scope private
+    -->
+    
+    <!-- Check, is robot release is enabled -->
+    <condition property="internal.robot.release.enabled">
+        <and>
+            <or>
+                <istrue value="${robot.release.enabled}"/>
+                <isset property="do.robot.release"/>
+            </or>
+            <isset property="s60.build.robot.path"/>
+        </and>    
+    </condition>
 
     <fileset id="release.files" dir="${publish.dir}">
         <include name="logs/**/*" />
@@ -101,12 +134,15 @@
     @editable required
     @scope public
     -->
-
-    <!--
-        This target sets the '''do.robot.release''' property so it activates 
-        the '''ido-sources-to-s60-build-robot''' target.
+    
+    <!--* @property robot.release.project
+    Synergy project name to be delivered onto build robot.
+    @type string
+    @scope private
     -->
-    <target name="check-robot-release" if="s60.build.robot.path">
+    
+    <!-- Will check is it required to do the sources release to build robot using the property  s60.build.robot.date -->
+    <target name="check-robot-release" if="internal.robot.release.enabled">
         <script language="jython" setbeans="false">
             <![CDATA[
 self.setTaskName("check-robot-release")
@@ -121,7 +157,7 @@
             if ido.is_in_interval(int(config[0]), config[1], int(config[2]), config[3]):
                 self.log("It is release time!")
                 projects.append(config[4])
-                project.setProperty('do.robot.release', ",".join(projects))
+                project.setProperty('robot.release.project', ",".join(projects))
             else:
                 self.log("It is not release time!")
         except Exception, e:
@@ -137,31 +173,39 @@
     zip them all and send to the specified location. There is only one but mandatory 
     property to tell the location of the build server which is "s60.build.robot.path".
     -->
-    <target name="ido-sources-to-s60-build-robot" if="do.robot.release" depends="ido-create-ado-mapping,check-robot-release,lookup-email">
-        <!-- Location of the ready.txt FMPP template (override that property if you want to customize the content).
-        @type string
-        @scope private
-        -->
-        <property name="ido.template.robot.ready" location="${helium.dir}/tools/common/templates/ido/ready.txt.ftl" />
-        <tempfile property="s60robot.dynamic.config" suffix=".xml" deleteonexit="false" destdir="${temp.build.dir}" />
-        <fmpp sourceFile="${helium.dir}/tools/common/templates/ido/ido-robot-zip.ant.xml.ftl" outputFile="${s60robot.dynamic.config}">
-            <data expandProperties="yes">
-                    inputfile: antProperty(ado.mapping.file)
-                    ant: antProperties()
-                    data: eval('
-                                            java.io.FileInputStream pin = new java.io.FileInputStream(filename);
-                                            java.util.Properties props = new java.util.Properties();
-                                            props.load(pin);
-                        return props;
-                            ', {filename: get(inputfile)})
-            </data>
-        </fmpp>
-        <ant antfile="${s60robot.dynamic.config}" target="all" />
-        <fmpp sourceFile="${ido.template.robot.ready}" outputFile="${s60.build.robot.path}/ready.txt">
-            <data expandProperties="yes">
-                ant: antProperties()
-            </data>
-        </fmpp>
+    <target name="ido-sources-to-s60-build-robot" if="internal.robot.release.enabled" depends="ido-create-ado-mapping,check-robot-release,lookup-email">
+        <if>
+            <isset property="robot.release.project"/>
+            <then>
+                <!-- Location of the ready.txt FMPP template (override that property if you want to customize the content).
+                @type string
+                @scope private
+                -->
+                <property name="ido.template.robot.ready" location="${helium.dir}/tools/common/templates/ido/ready.txt.ftl" />
+                <tempfile property="s60robot.dynamic.config" suffix=".xml" deleteonexit="false" destdir="${temp.build.dir}" />
+                <fmpp sourceFile="${helium.dir}/tools/common/templates/ido/ido-robot-zip.ant.xml.ftl" outputFile="${s60robot.dynamic.config}">
+                    <data expandProperties="yes">
+                            inputfile: antProperty(ado.mapping.file)
+                            ant: antProperties()
+                            data: eval('
+                                java.io.FileInputStream pin = new java.io.FileInputStream(filename);
+                                java.util.Properties props = new java.util.Properties();
+                                props.load(pin);
+                                return props;
+                                    ', {filename: get(inputfile)})
+                    </data>
+                </fmpp>
+                <ant antfile="${s60robot.dynamic.config}" target="all" />
+                <fmpp sourceFile="${ido.template.robot.ready}" outputFile="${s60.build.robot.path}/ready.txt">
+                    <data expandProperties="yes">
+                        ant: antProperties()
+                    </data>
+                </fmpp>
+            </then>
+            <else>
+                <echo>It is not release time!</echo>
+            </else>
+        </if>
     </target>
 
 </project>
--- a/buildframework/helium/tools/release/scm_release.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/release/scm_release.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -42,7 +42,7 @@
      -->
     <target name="release-work-area">
         <mkdir dir="${release.log.dir}" />
-        <record name="${release.log.dir}/${build.id}_release_work_area.log" action="start"/>
+        <hlm:record name="${release.log.dir}/${build.id}_release_work_area.log" action="start"/>
         <runtarget target="get-ccm-password"/>
         <runtarget target="ccm-prepare-input"/>
         
@@ -83,7 +83,7 @@
                 </hlm:python>
             </try>
             <finally>
-                <record name="${release.log.dir}/${build.id}_release_work_area.log" action="stop"/>
+                <hlm: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>
--- a/buildframework/helium/tools/relnotes/relnotes.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/relnotes/relnotes.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -103,6 +103,15 @@
     -->
     <property name="releasenotes.scan2log" value="${build.log.dir}/${build.id}.${product.family}_scan2.html"/>
     
+    
+    <!-- Is it required to check ccm leaks -->
+    <condition property="check.ccm.leaks">
+        <and>
+            <isset property="hlm.enable.asserts"/>
+            <istrue value="${ccm.enabled}"/>
+        </and>
+    </condition>
+    
     <import file="${relnotes.config.dir}/relnotes_properties.ant.xml" optional="true"/>
     
     <!-- @scope private -->
@@ -173,11 +182,8 @@
     <!-- Find project and baseline of what is running helium
     @scope private    
     -->
-    <target name="release-notes-getcmprojectname">
-        <if>
-            <istrue value="${ccm.enabled}" />
-            <then>
-                <script language="jython" setbeans="false">
+    <target name="release-notes-getcmprojectname" if="internal.ccm.enabled">
+        <script language="jython" setbeans="false">
 import ccm.extra
 import traceback
 import os
@@ -207,8 +213,8 @@
     traceback.print_exc()
     if session:
         session.close()
-                </script>
-                <hlm:python outputproperty="ccm.toplevel.baseline">
+        </script>
+        <hlm:python outputproperty="ccm.toplevel.baseline">
 import traceback
 import ant
 import logging
@@ -230,9 +236,7 @@
     traceback.print_exc()
     if session:
         session.close()
-                </hlm:python>
-            </then>
-        </if>
+        </hlm:python>
     </target>
     
     <!--
@@ -267,12 +271,9 @@
     <!-- Write projects, baselines and task list for MC and IBUSAL
     @scope private    
     -->
-    <target name="release-notes-ccm" depends="get-ccm-password,release-notes-getcmprojectname,create-bom">
+    <target name="release-notes-ccm" depends="get-ccm-password,release-notes-getcmprojectname,create-bom" if="internal.ccm.enabled">
         <if>
-            <and>
-                <istrue value="${ccm.enabled}" />
-                <available file="${build.log.dir}/${build.id}_bom.xml" />
-            </and>
+            <available file="${build.log.dir}/${build.id}_bom.xml" />
             <then>
                 <hlm:python>
 import amara
@@ -314,17 +315,12 @@
     </target>
     
     <!-- @scope private -->
-    <target name="release-notes-test" if="hlm.enable.asserts">
-        <if>
-            <istrue value="${ccm.enabled}" />
-            <then>
-                <hlm:python>
+    <target name="release-notes-test" if="check.ccm.leaks">
+        <hlm:python>
 import ccm
 #check for ccm session leaks
 assert (len(ccm.running_sessions()) == 0)
-                </hlm:python>
-            </then>
-        </if>
+        </hlm:python>
     </target>
         
     <!-- 
--- a/buildframework/helium/tools/rombuild/imaker.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/rombuild/imaker.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -25,6 +25,25 @@
     <description>
         ROM image creation using iMaker (future implementation).
     </description>
+    
+    <!--* @property imaker.engine
+    Defines which accelerator to use for running iMaker. (default value from build.system property)
+    @type string
+    @scope private
+    -->
+    
+    <condition property="imaker.engine" value="imaker.engine.ec" else="imaker.engine.default">
+        <and>
+            <not>
+                <isset property="imaker.engine" />
+            </not>
+            <or>
+                <equals arg1="${build.system}" arg2="ec-helium" />
+                <equals arg1="${build.system}" arg2="sbs-ec" />
+            </or>
+        </and>
+    </condition>      
+        
 
     <!--
        This task merges all files mentioned in the fileset and output them in filename output file. 
@@ -32,7 +51,7 @@
     <scriptdef name="mergeConfigXML" language="beanshell"  uri="http://www.nokia.com/helium">
         <element name="fileset" type="fileset"/>
         <attribute name="filename"/>
-<![CDATA[
+        <![CDATA[
 import java.io.File;
 import org.dom4j.Node;
 import org.dom4j.io.SAXReader;
@@ -50,24 +69,24 @@
 
 filesets = elements.get("fileset");
 for (i = 0; i < filesets.size(); ++i) {
-        ds = filesets.get(i).getDirectoryScanner(project);
-        ds.scan();
-        String[] files = ds.getIncludedFiles();
-        for (j = 0; j < files.length ; ++j) {
-           romconf = new File(ds.getBasedir(), files[j]);
-           self.log("Adding " + romconf + ".");
-           SAXReader reader = new SAXReader();
-           Document document = reader.read(romconf);
-           Node node = document.selectSingleNode("//build/config");
-           rootConfig.add(node.detach());
-        }
+    ds = filesets.get(i).getDirectoryScanner(project);
+    ds.scan();
+    String[] files = ds.getIncludedFiles();
+    for (j = 0; j < files.length ; ++j) {
+        romconf = new File(ds.getBasedir(), files[j]);
+        self.log("Adding " + romconf + ".");
+        SAXReader reader = new SAXReader();
+        Document document = reader.read(romconf);
+        Node node = document.selectSingleNode("//build/config");
+        rootConfig.add(node.detach());
+    }
 }
 // lets write to a file
 OutputFormat format = OutputFormat.createPrettyPrint();
 XMLWriter writer = new XMLWriter(new FileWriter(attributes.get("filename")), format);
 writer.write( document );
 writer.close();
-]]>
+        ]]>
     </scriptdef>
     
     <!--
@@ -115,31 +134,7 @@
     -->
     <target name="build-roms" depends="rombuild-imaker-create-buildinfo">
         <mkdir dir="${roms.log.dir}"/>
-        <if>
-            <not>
-                <isset property="imaker.engine" />
-            </not>
-            <then>
-                <if>
-                    <or>
-                        <equals arg1="${build.system}" arg2="ec-helium" />
-                        <equals arg1="${build.system}" arg2="sbs-ec" />
-                    </or>
-                    <then>
-                        <!-- Defines which accelerator to use for running iMaker. (default value from build.system property)
-                        @type string
-                        @scope private
-                        -->
-                        <property name="imaker.engine" value="imaker.engine.ec" />
-                    </then>
-                </if>
-            </then>
-        </if>
-        <!-- Defines which accelerator to use for running iMaker. (default value from build.system property)
-        @type string
-        @scope private
-        -->
-        <property name="imaker.engine" value="imaker.engine.default" />        
+        
         <property name="imaker.rom.name" value=""/>
         <hlm:imaker epocroot="${build.drive}/" engineRefid="${imaker.engine}"
                         output="${roms.log.dir}/${build.id}${imaker.rom.name}.roms.log" verbose="true">
@@ -154,10 +149,10 @@
             </then>
         </if>
         <hlm:metadatarecord database="${metadata.dbfile}">
-            <hlm:textmetadatainput>
+            <hlm:imakermetadatainput>
                 <fileset casesensitive="false" file="${roms.log.dir}/${build.id}${imaker.rom.name}.roms.log" />
                 <metadatafilterset refid="filterset.imaker" />
-            </hlm:textmetadatainput>
+            </hlm:imakermetadatainput>
         </hlm:metadatarecord>
         <hlm:signalMacro logfile="${roms.log.dir}/${build.id}${imaker.rom.name}.roms.log" 
                          signal.input="rombuildSignalInput" />
@@ -178,13 +173,6 @@
                 </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>
     
     
--- a/buildframework/helium/tools/testing/ats/ats.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/testing/ats/ats.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -26,18 +26,62 @@
     ATS testing targets.
     </description>
     
-    <!--* @property enabled.ats
+    <!--* @property ats.enabled
     Value must be set to execute ats-test target.
     @type boolean
     @editable required
     @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.ats.enabled
+    Set to run ats targests if ats.enabled set to true.
+    @type boolean
+    @scope private
     -->
     
-    <!--* @property enabled.aste
+    <!--* @property enabled.ats
+    Value must be set to execute ats-test target. - deprecated: Start using ats.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!--* @property aste.enabled
     Value must be set to execute ats-aste target.
     @type boolean
     @editable required
     @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.aste.enabled
+    Set to run aste targets if aste.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property enabled.aste
+    Value must be set to execute ats-aste target. - deprecated: Start using aste.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!--* @property ats4.enabled
+    Value must be set to execute ats4 features.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.ats4.enabled
+    Set if ats4.enabled is set to true. To run ats4 dependent targets.
+    @type boolean
+    @scope private
     -->
     
     <!--* @property ats.product.name
@@ -48,7 +92,7 @@
     -->
     
     <!--* @property ats.drop.location
-    Server location (UNC path) to save the ATS3Drop file, before sending to the ATS. For example: \\trwsem00\some_folder\. In case, ``ats.script.type`` is set to "import", ATS doesn't need to have access to ats.drop.location, its value can be any local folder on build machine, for example c:\temp (no network share needed).
+    Server location (UNC path) to save the drop file, before sending to the ATS. For example: \\trwsem00\some_folder\. In case, ``ats.script.type`` is set to "import", ATS doesn't need to have access to ats.drop.location, its value can be any local folder on build machine, for example c:\temp (no network share needed).
     @type string
     @editable required
     @scope public
@@ -76,13 +120,210 @@
     -->
     
     <!--* @property ats.create.singledrop.file
+    defined as true if single drop file is required. Define as false or not present for multiple drop files. - deprecated:  Start using ats.singledrop.enabled
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!--* @property ats.singledrop.enabled
     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
+    @since 11.0
+    -->
+    
+    <!--* @property internal.ats.singledrop.enabled
+    set to true if ats.singledrop.enabled set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property ats.emulator.enabled
+    Value must be set to true to run ats with emulator.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.ats.emulator.enabled
+    Set to run emulator targets if ats.emulator.enabled is set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property ats.emulator.enable
+    Value must be set to true to run ats with emulator. - deprecated: Start using ats.emulator.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!--* @property matti.enabled
+    Value must be set to true to enable testing with matti.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property internal.matti.enabled
+    Set to run matti targets if matti.enabled is set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property ats.delta.enabled
+    Should be true so only ADOs changed during do-prep-work-area are tested by ATS.
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    
+    <!--* @property ats.delta.enabled
+    Set to run ats delta target if  ats.delta.enabled set to true.
+    @type boolean
+    @scope private
     -->
     
-    <!-- -->
+    <!--* @property ats.disable.java.importer
+    To disable java importer for ats. - deprecated: Start using ats.java.importer.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+        
+    <!-- To disable java importer for ats
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    <property name="ats.java.importer.enabled" value="true"/>
+    
+    <!--* @property ats.disable.iconfig
+    To enable/disable iconfig with ats. - deprecated: Start using ats.iconfig.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+        
+    <!-- To enable/disable iconfig with ats
+    @type boolean
+    @editable required
+    @scope public
+    @since 11.0
+    -->
+    <property name="ats.iconfig.enabled" value="true"/>
+    
+    <!--* @property internal.ats.iconfig.enabled
+    To run python if ats.iconfig.enabled is enable/disable.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* For sending drop package file to ATS/ASTE after its creation.
+    @type boolean
+    @scope public
+    @since 11.0
+    -->
+    <property name="ats.upload.enabled" value="true"/>
+    
+    <!--* @property internal.ats.upload.enabled
+    Set to run sending the test drop targets if ats.upload.enabled is set to true.
+    @type boolean
+    @scope private
+    -->
+    
+    <!--* @property skip.ats.sending
+    For sending drop package file to ATS/ASTE after its creation. - deprecated: Start using ats.upload.enabled property.
+    @type boolean
+    @editable required
+    @scope public
+    @deprecated since 11.0
+    -->
+    
+    <!-- Is it required to send ats test drop to server-->
+    <condition property="internal.ats.upload.enabled">
+        <and>
+            <not>
+                <isfalse value="${ats.upload.enabled}" />
+            </not>
+            <not>
+                <isset property="skip.ats.sending"/>
+            </not>
+        </and>
+    </condition>
+    
+    <!-- Check is the ATS enabled -->
+    <condition property="internal.ats.enabled">
+        <or>
+            <istrue value="${ats.enabled}" />
+            <istrue value="${enabled.ats}"/>
+        </or>
+    </condition>
+    
+    <!-- Check is the aste enabled -->
+    <condition property="internal.aste.enabled">
+        <or>
+            <istrue value="${aste.enabled}" />
+            <isset property="enabled.aste"/>
+        </or>
+    </condition>
+    
+    <!-- Check is the ast4 enabled -->
+    <condition property="internal.ats4.enabled" value="true" else="false">
+        <istrue value="${ats4.enabled}" />
+    </condition>
+    
+    <!-- Check is the ats emulator enabled -->
+    <condition property="internal.ats.emulator.enabled">
+        <or>
+            <istrue value="${ats.emulator.enabled}" />
+            <istrue value="${ats.emulator.enable}" />
+        </or>
+    </condition>
+    
+    <!-- Check is the ats matti enabled -->
+    <condition property="internal.matti.enabled">
+        <istrue value="${matti.enabled}" />
+    </condition>
+    
+    <!-- Check is the ats ats delta enabled -->
+    <condition property="internal.ats.delta.enabled">
+        <istrue value="${ats.delta.enabled}" />
+    </condition>
+    
+    <!-- Check is the ats ats delta enabled -->
+    <condition property="internal.ats.iconfig.enabled" value="true" else="false">
+        <and>
+            <not>
+                <isfalse value="${ats.iconfig.enabled}" />
+            </not>
+            <not>
+                <isset property="ats.disable.iconfig" />
+            </not>
+        </and>
+    </condition>
+    
+    <!-- Check is the ats ats single drop file enabled -->
+    <condition property="internal.ats.singledrop.enabled">
+        <or>
+            <istrue value="${ats.singledrop.enabled}" />
+            <istrue value="${ats.create.singledrop.file}" />
+        </or>
+    </condition>
+    
+    
+    
+    <!--  -->
     <fileset id="reference.ats.flash.images" dir="${release.images.dir}">
         <include name="**/*.fpsx" />
         <include name="**/*rnd.C00" />
@@ -95,7 +336,10 @@
     @scope public
     -->
     <condition property="ats.flashfiles.minlimit" value="0" else="2">
-        <istrue value="${ats.emulator.enable}" />
+        <or>
+            <istrue value="${ats.emulator.enabled}" />
+            <istrue value="${ats.emulator.enable}" />
+        </or>
     </condition>
 
     <fileset id="reference.ats.sis.images" dir="${ats.sis.images.dir}">
@@ -107,11 +351,7 @@
     -->
     <property name="ats.sisfiles.minlimit" value="1" />
     
-    <var name="drop.file.counter" value="0" />
-
-    <condition property="internal.enabled.ats">
-        <istrue value="${enabled.ats}" />
-    </condition>
+    <property name="drop.file.counter" value="0" />
 
     <!-- The target creates ATSDrop.zip file which also includes test.xml file; and sends the drop to ATS.
         
@@ -123,10 +363,11 @@
             </module>
         </layer>
     -->
-    <target name="ats-test" if="internal.enabled.ats">
+    <target name="ats-test" if="internal.ats.enabled">
         <mkdir dir="${test.log.dir}"/>
+        <runtarget target="load-property-from-cache-file" />
         <hlm:filterRecordStartMacro pattern="${ats.password}" category="ats"/>
-        <trycatch property="exception" reference="exception">
+        <trycatch reference="exception">
             <try>
                 <runtarget target="ats-delta"/>
                 <antcall target="create-canonical-sysdef-file" inheritRefs="true">
@@ -136,15 +377,7 @@
                 <runtarget target="ats-create-drop" />
             </try>
             <catch>
-                <if>
-                    <istrue value="${ats.delta.enabled}" />
-                    <then>
-                        <echo message="${exception}"/>
-                    </then>
-                    <else>
-                        <throw refid="exception"/>
-                    </else>
-                </if>
+                <echo>Error: ${toString:exception}</echo>
             </catch>
         </trycatch>
         <hlm:filterRecordStopMacro log="${test.log.dir}/${build.id}_ats.log" append="false"/>
@@ -154,12 +387,13 @@
                 <metadatafilterset refid="filterset.ats" />
             </hlm:textmetadatainput>
         </hlm:metadatarecord>
-        <hlm:generateBuildStatus file="${build.id}_ats.log" />
+        <hlm:generateBuildStatus file="${test.log.dir}/${build.id}_ats.log" />
     </target>
 
     <!-- The target creates the ATSdrop.zip file including test.xml for ATS ASTE tests. This target is executable.-->
-    <target name="ats-aste" if="enabled.aste">
+    <target name="ats-aste" if="internal.aste.enabled">
         <mkdir dir="${test.log.dir}"/>
+        <runtarget target="load-property-from-cache-file" />
         <hlm:filterRecordStartMacro pattern="${ats.password}" category="ats"/>
         <runtarget target="do-ats-aste" />
         <hlm:filterRecordStopMacro log="${test.log.dir}/${build.id}_aste.log" append="false"/>
@@ -169,12 +403,13 @@
                 <metadatafilterset refid="filterset.aste" />
             </hlm:textmetadatainput>
         </hlm:metadatarecord>
-        <hlm:generateBuildStatus file="${build.id}_aste.log" />
+        <hlm:generateBuildStatus file="${test.log.dir}/${build.id}_aste.log" />
     </target>
 
     <!-- The target creates the MATTI_drop.zip file including test.xml for MATTI tests. This target is executable.-->
-    <target name="matti-test" if="enabled.matti">
+    <target name="matti-test" if="internal.matti.enabled">
         <mkdir dir="${test.log.dir}"/>
+        <runtarget target="load-property-from-cache-file" />
         <hlm:filterRecordStartMacro pattern="${ats.password}" category="ats"/>
         <runtarget target="do-ats-matti" />
         <hlm:filterRecordStopMacro log="${test.log.dir}/${build.id}_matti.log" append="false"/>
@@ -184,11 +419,11 @@
                 <metadatafilterset refid="filterset.matti" />
             </hlm:textmetadatainput>
         </hlm:metadatarecord>
-        <hlm:generateBuildStatus file="${build.id}_matti.log" />
+        <hlm:generateBuildStatus file="${test.log.dir}/${build.id}_matti.log" />
     </target>
 
     <!-- Sends drop file to ATS/ASTE. Please see `ats-test` for description. -->
-    <target name="do-ats-test" depends="ats-username, ats-password" unless="skip.ats.sending">
+    <target name="do-ats-test" depends="ats-username, ats-password" if="internal.ats.upload.enabled">
         <property name="ats.sending" value="true" />
         <!-- Make the drop file visible to ATS. -->
         
@@ -204,78 +439,74 @@
                 <property name="ats.drop.location.file" location="${build.output.dir}/ats/${ats.drop.file}" />
             </else>
         </if>
-
-        <trycatch property="exception">
-            <try>
-                <!-- Notify ATS about the drop. -->
-                <if>
-                    <istrue value="${ats4.enabled}" />
-                    <then>
-                        <hlm:python failonerror="true">
+        
+        <!-- Notify ATS about the drop. -->
+        <if>
+            <istrue value="${internal.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">
+                </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"/>
+                        <not>
+                            <or>
+                                <istrue value="${ats.disable.java.importer}" />
+                                <isfalse value="${ats.java.importer.enabled}" />
+                            </or>    
+                        </not>
+                    </and>
+                    <then>
+                        <java classname="com.nokia.taitei.util.TestDropImporter" 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}"/>
+                            <arg line="${ats.server} ${ats.drop.location.file} ${ats.username} ${ats.password}"/>
                         </java>
                     </then>
                     <else>
-                        <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>             
+                        <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>
-            </try>
-            <catch>
-                <echo message="Error: ${exception}"/>
-            </catch>
-        </trycatch>
+                </if>             
+            </else>
+        </if>
     </target>
 
     <!-- The target is dependent on "ats-test", should not be called independently. The target fetches flash files location -->
-    <target name="ats-set-flash-image-path" unless="ats.emulator.enable">
+    <target name="ats-set-flash-image-path" unless="internal.ats.emulator.enabled">
         <pathconvert pathsep="," property="ats.flash.images">
             <fileset refid="reference.ats.flash.images"/>
         </pathconvert>
         <script language="jython" setbeans="false">
-if project.getProperty('ats.disable.iconfig') == None:
+if project.getProperty('internal.ats.iconfig.enabled') == 'true':
     import atsant
     ic = None
     try:
@@ -308,13 +539,13 @@
     <target name="ats-common">
         <property name="ats.config.file" value="" />
         <property name="ats.specific.pkg" value="" />
-        <property name="ats4.enabled" value="False" />
+        
         <!-- Product HardWare ID (HWID) attached to ATS. By default the value of HWID is not set.
         @type string
         @scope public
         -->
         <property name="ats.product.hwid" value="" />
-        <!-- To set test commands execution time limit on ATS3 server, in seconds. Default value is "60".
+        <!-- To set test commands execution time limit on ATS server, in seconds. Default value is "60".
         @type string
         @scope public
         -->
@@ -324,7 +555,7 @@
         @scope public
         -->
         <property name="ats.report.location" value="${publish.dir}/${publish.subdir}" />
-        <condition property="internal.ats.diamonds.arg" value="--diamonds-build-url=http://${diamonds.host}${diamonds.build.id}" else="">
+        <condition property="internal.ats.diamonds.arg" value="--diamonds-build-url=http://${diamonds.host}:${diamonds.port}${diamonds.build.id}" else="">
             <isset property="diamonds.build.url" />
         </condition>
     </target>
@@ -363,9 +594,9 @@
         -->
         <property name="ats.ctc.host" value="" />
         <condition property="ats.version" value="4" else="3">
-            <istrue value="${ats4.enabled}" />
+            <istrue value="${internal.ats4.enabled}" />
         </condition>
-        <var name="ats.drop.file" value="ATS${ats.version}Drop${drop.file.counter}.zip" />
+        <var name="ats.drop.file" value="${build.id}_ATS${ats.version}Drop${drop.file.counter}.zip" />
         
         <!--* @property ats.target.platform
         Sets target platform for compiling test components. Default value is "armv5 urel".
@@ -373,32 +604,81 @@
         @scope public
         -->
         <condition property="ats.target.platform" value="winscw urel" else="armv5 urel">
-            <istrue value="${ats.emulator.enable}" />
+            <or>
+                <istrue value="${ats.emulator.enabled}" />
+                <istrue value="${ats.emulator.enable}" />
+            </or>
         </condition>
-        <!-- Should be "True" if tracing is needed during the tests running on ATS3. Default value is "False", the values are case-sensitive.
-        @type string
+        <!-- Should be "true" if tracing is needed during the tests running on ATS. Default value is "false", the values are case-sensitive.
+        @type boolean
+        @scope public
+        @editable required
+        -->
+        <property name="ats.trace.enabled" value="false"/>
+        
+        <!-- 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.
+        @type boolean
+        @editable required
         @scope public
         -->
-        <property name="ats.trace.enabled" value="False" />
-        <!-- 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.
-        @type string
+        <property name="ats.ctc.enabled" value="false"/>
+        
+        <!--* @property internal.ats.ctc.enabled
+        Set to run the ats ctc targets.
+        @type boolean
+        @scope private
+        -->
+        <condition property="internal.ats.ctc.enabled">
+            <istrue value="${ats.ctc.enabled}" />
+        </condition>
+        
+        <!-- Flags for EUnit exerunner can be set by setting the value of this variable. The default flags are set to "/E S60AppEnv /R Off".
+        @type boolean
+        @editable required
         @scope public
         -->
-        <property name="ats.ctc.enabled" value="False" />
-        <property name="ats.multiset.enabled" value="False" />
-        <!-- Flags for EUnit exerunner can be set by setting the value of this variable. The default flags are set to "/E S60AppEnv /R Off".
-        @type string
+        <property name="ats.multiset.enabled" value="false"/>
+                    
+        <property name="eunitexerunner.flags" value="/E S60AppEnv /R Off" />
+            
+        <!--* @property ats.obey.pkgfiles.rule.enabled
+        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.
+        @type boolean
         @scope public
         -->
-        <property name="eunitexerunner.flags" value="/E S60AppEnv /R Off" />
-        <!-- 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.
-        @type string
+        
+        <!--* @property ats.obey.pkgfiles.rule
+        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. - deprecated: Start using ats.obey.pkgfiles.rule.enabled property
+        @type boolean
         @scope public
+        @deprecated since 11.0
+        -->
+        
+        <!-- * @property internal.ats.obey.pkgfiles.rule.enabled
+        If the property is set to "true", if ats.obey.pkgfiles.rule.enabled set to true.
+        @type boolean
+        @scope private
         -->
-        <property name="ats.obey.pkgfiles.rule" value="False" />
-        <fail unless="ats.product.name" message="ats.product.name property not defined" />
-        <condition property="ats.hti" value="false" else="true">
-            <istrue value="${ats.emulator.enable}" />
+        <condition property="internal.ats.obey.pkgfiles.rule.enabled" value="true" else="false">
+            <or>
+                <istrue value="${ats.obey.pkgfiles.rule.enabled}" />
+                <istrue value="${ats.obey.pkgfiles.rule}" />
+            </or>
+        </condition>
+        
+        
+        <fail unless="ats.product.name" message="Error: ats.product.name property not defined" />
+        
+        <!--* @property ats.hti.enabled
+        Set to true if  ats.emulator.enabled set to true. To enable hti feature while creating ats test drop.
+        @type boolean
+        @scope private
+        -->        
+        <condition property="ats.hti.enabled" value="false" else="true">
+            <or>
+                <istrue value="${ats.emulator.enabled}" />
+                <istrue value="${ats.emulator.enable}" />
+            </or>
         </condition>
     </target>
 
@@ -427,6 +707,31 @@
         <property name="ats.aste.email.list" value="" />
     </target>
 
+    
+    <macrodef name="getModuleTsrcMacro" uri="http://www.nokia.com/helium">
+        <attribute name="property" />
+        <attribute name="prefix"/>        
+        <sequential>
+            <if>
+                <istrue value="${sysdef3.enabled}" />
+                <then>
+                    <hlm:filterSysdef epocroot="${build.drive}/" srcfile="${canonical.sysdef.file}" 
+                        destfile="${build.drive}/output/build/canonical_system_definition_filtered_ats_test.xml">
+                        <filterSet>
+                            <filter filter="test" />
+                        </filterSet>
+
+                        <filterSet refid="${ats.test.filterset}" />
+                    </hlm:filterSysdef>
+                    <hlm:getModuleTsrcInternalMacro property="@{property}" prefix="@{prefix}" sysdef="${build.drive}/output/build/canonical_system_definition_filtered_ats_test.xml" />
+                </then>
+                <else>
+                    <hlm:getModuleTsrcInternalMacro property="@{property}" prefix="@{prefix}" sysdef="${canonical.sysdef.file}" />
+                </else>
+            </if>
+        </sequential>
+    </macrodef>
+    
     <!-- This macro fetches the tsrc paths from system definition file (layers.sysdef.xml).
         
     The layer defintion should look like:
@@ -437,24 +742,29 @@
             </module>
         </layer>
     -->
-    <scriptdef name="getModuleTsrcMacro" language="jython" uri="http://www.nokia.com/helium">
+    <scriptdef name="getModuleTsrcInternalMacro" language="jython" uri="http://www.nokia.com/helium">
         <attribute name="property" />
         <attribute name="prefix"/>        
+        <attribute name="sysdef"/>        
 import traceback
 import os
 import atsant
 from com.nokia.ant.util import Helper
 
-canonicalsysdeffile = Helper.getProperty(project, 'canonical.sysdef.file')
-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)
+canonicalsysdeffile = attributes.get('sysdef')
+createsingledropfile = project.getProperty('internal.ats.singledrop.enabled')
+sysdef3 = atsant.get_boolean(str(project.getProperty('sysdef3.enabled')))
+modules = atsant.files_to_test(canonicalsysdeffile, project.getProperty('exclude.test.layers'), project.getProperty('ido.build.filter'), project.getProperty('build.drive'), createsingledropfile, sysdef3)
 
 for name in modules.keys():    
     if modules[name] == []:
         del modules[name]
     else:
         project.setProperty("%s.%s" % (attributes.get('prefix'), name), " ".join(modules[name]))
-        
+
+if modules == {}:
+    raise Exception('No test modules found in ' + canonicalsysdeffile)
+
 project.setProperty(attributes.get('property'), ",".join(modules.keys()))
 project.setProperty('ats.drops.count', str(len(modules)))
     </scriptdef>
@@ -463,73 +773,49 @@
     <target name="ats-create-drop" depends="ats-set-flash-image-path,ats-emulator-zip">
         <mkdir dir="${build.output.dir}/ats" />
         <hlm:getModuleTsrcMacro property="module.list" prefix="module.tsrc" />
-        <if>
-            <scriptcondition language="beanshell">
-                <![CDATA[
-                    String value = project.getProperty("module.list");
-                    if (value != null) {
-                        String[] out = value.split(",");
-                        if ((out == null) || (out.length == 0) || ((out.length == 1) && (out[0].length()==0))) {
-                                    self.setValue(true);
-                            } else {
-                                    self.setValue(false);
-                            }
-                        } else {
-                            self.log("Error: module.list not defined.");
-                            self.setValue(true);
-                        }
-                            ]]>
-            </scriptcondition>
-            <then>
-                <echo message="Error: No test modules found!" />
-            </then>
-            <else>
-                <for list="${module.list}" delimiter="," param="module">
-                    <sequential>
-                        <runtarget target="ats-set-defaults-stifeunit" />
-                        <echo>${ats.drop.file}</echo>
-                        <exec executable="python">
-                            <arg line="-m ats3.__init__" />
-                            <arg value="--device-type=${ats.product.name}" />
-                            <arg value="--device-hwid=${ats.product.hwid}" />
-                            <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}" />
-                            <arg value="--minimum-flash-images=${ats.flashfiles.minlimit}" />
-                            <arg value="--target-platform=${ats.target.platform}" />
-                            <arg value="--data-dir=${tsrc.data.dir}" />
-                            <arg value="--test-timeout=${ats.test.timeout}" />
-                            <arg value="--build-drive=${build.drive}" />
-                            <arg value="--trace-enabled=${ats.trace.enabled}" />
-                            <arg value="--ctc-enabled=${ats.ctc.enabled}" />
-                            <arg value="--multiset-enabled=${ats.multiset.enabled}" />
-                            <arg value="--file-store=${ats.report.location}" />
-                            <arg value="--eunitexerunner-flags=${eunitexerunner.flags}" />
-                            <arg value="--ctc-run-process-params=${ats.ctc.host}#${ats.drop.file}#${ats.drops.count}" /> <!-- Three differnt value are combined with '#' character which is later parsed inside the script -->
-                            <arg value="--monsym-files=${ats.ctc.monsyms}" />
-                            <arg value="--config=${ats.config.file}" />
-                            <arg value="--obey-pkgfiles=${ats.obey.pkgfiles.rule}" />
-                            <arg value="--ats4-enabled=${ats4.enabled}" />
-                            <arg value="--specific-pkg=${ats.specific.pkg}" />
-                            <arg value="--hti=${ats.hti}" />
-                            <arg value="--verbose" />
-                            <arg line="${module.tsrc.@{module}}" />
-                        </exec>
-                        <antcall target="do-ats-test" />
-                        <math result="drop.file.counter" operand1="1" operation="+" operand2="${drop.file.counter}" datatype="int" />
-                    </sequential>
-                </for>
-            </else>
-        </if>
+        <for list="${module.list}" delimiter="," param="module">
+            <sequential>
+                <runtarget target="ats-set-defaults-stifeunit" />
+                <exec executable="python">
+                    <arg line="-m ats3.__init__" />
+                    <arg value="--device-type=${ats.product.name}" />
+                    <arg value="--device-hwid=${ats.product.hwid}" />
+                    <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}" />
+                    <arg value="--minimum-flash-images=${ats.flashfiles.minlimit}" />
+                    <arg value="--target-platform=${ats.target.platform}" />
+                    <arg value="--data-dir=${tsrc.data.dir}" />
+                    <arg value="--test-timeout=${ats.test.timeout}" />
+                    <arg value="--build-drive=${build.drive}" />
+                    <arg value="--trace-enabled=${ats.trace.enabled}" />
+                    <arg value="--ctc-enabled=${ats.ctc.enabled}" />
+                    <arg value="--multiset-enabled=${ats.multiset.enabled}" />
+                    <arg value="--file-store=${ats.report.location}" />
+                    <arg value="--eunitexerunner-flags=${eunitexerunner.flags}" />
+                    <arg value="--ctc-run-process-params=${ats.ctc.host}#${ats.drop.file}#${ats.drops.count}" /> <!-- Three differnt value are combined with '#' character which is later parsed inside the script -->
+                    <arg value="--monsym-files=${ats.ctc.monsyms}" />
+                    <arg value="--config=${ats.config.file}" />
+                    <arg value="--obey-pkgfiles=${internal.ats.obey.pkgfiles.rule.enabled}" />
+                    <arg value="--ats4-enabled=${internal.ats4.enabled}" />
+                    <arg value="--specific-pkg=${ats.specific.pkg}" />
+                    <arg value="--hti=${ats.hti.enabled}" />
+                    <arg value="--verbose" />
+                    <arg line="${module.tsrc.@{module}}" />
+                </exec>
+                <antcall target="do-ats-test" />
+                <math result="drop.file.counter" operand1="1" operation="+" operand2="${drop.file.counter}" datatype="int" />
+            </sequential>
+        </for>
     </target>
 
 
     <!-- Please see ats-aste for description.-->
-    <target name="do-ats-aste" depends="ats-set-flash-image-path, ats-set-defaults-aste" if="enabled.aste">
+    <target name="do-ats-aste" depends="ats-set-flash-image-path, ats-set-defaults-aste" if="internal.aste.enabled">
         <mkdir dir="${build.output.dir}/ats" />
         <exec executable="python">
             <arg line="-m ats3.aste" />
@@ -550,7 +836,7 @@
             <arg value="--software-version=${ats.aste.software.version}" />
             <arg value="--device-language=${ats.aste.language}" />
             <arg value="--software-release=${ats.aste.software.release}" />
-            <arg value="--ats4-enabled=${ats4.enabled}" />
+            <arg value="--ats4-enabled=${internal.ats4.enabled}" />
             <arg value="--verbose" />
         </exec>
         <runtarget target="do-ats-test" />
@@ -561,19 +847,22 @@
         Then it copies the discovered files under the ftp server defined by ats.ctc.host.
         The target url is: ftp ://[server]/ctc_helium/[diamonds_id]/mon_syms/[id]/mon.sym 
     -->
-    <target name="copy-mon-sym">
+    <target name="copy-mon-sym" if="internal.ats.ctc.enabled">
         <if>
-            <istrue value="${ats.ctc.enabled}"/>
+            <istrue value="${internal.ats4.enabled}"/>
             <then>
-                <fmpp sourceFile="${helium.dir}/tools/testing/ats/templates/monsym-file-list.txt.ftl"
-                    outputFile="${temp.build.dir}/monsym-file-list.txt">
-                    <data expandProperties="yes">
-                        data: xml(${canonical.sysdef.file})
-                        ant: antProperties()
-                    </data>
-                </fmpp>
-                <hlm:path2file reference="mon.sym.list" file="${temp.build.dir}/monsym-file-list.txt" />
-                <script language="jython">
+                <var name="ats.ctc.host" value="${diamonds.host}"/>
+            </then>
+        </if>
+        <fmpp sourceFile="${helium.dir}/tools/testing/ats/templates/monsym-file-list.txt.ftl"
+            outputFile="${temp.build.dir}/monsym-file-list.txt">
+            <data expandProperties="yes">
+                data: xml(${canonical.sysdef.file})
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <hlm:path2file reference="mon.sym.list" file="${temp.build.dir}/monsym-file-list.txt" />
+        <script language="jython">
 import os
 import ctc
 
@@ -584,6 +873,9 @@
 
 server = project.getProperty('ats.ctc.host')
 diamondsid = os.path.basename(os.path.dirname(project.getProperty('diamonds.build.id')))
+if project.getProperty('internal.ats4.enabled') != 'true':
+    diamondsid = r'ctc_helium/' + diamondsid
+
 path = project.getReference('mon.sym.list')
 if not path:
     raise Exception('mon.sym.list reference has not been set')
@@ -593,79 +885,8 @@
             
 # Using ; to separate the path because the target script is running on windows
 project.setNewProperty('ats.ctc.monsyms', ';'.join([ "//%s/%s" % (server, x) for x in monsyms]))
-                </script>
-                <echo>ats.ctc.monsyms: ${ats.ctc.monsyms}</echo>
-            </then>
-        </if>
-    </target>
-
-    <!-- a dependant target please do not call directly use matti-test,
-    target calls the MATTI script that creates the MATTI_drop.zip file and runs the tests
-    listed in test.rb.  ats-set-flash-image-path and ats-set-sis-flash-image-path look for lists of files-->
-    <target name="do-ats-matti" depends="ats-set-flash-image-path, ats-set-sis-flash-image-path" >
-        <runtarget target="ats-set-defaults-stifeunit" />
-        <!--need to set theseup for use by do-ats-test target-->
-        <mkdir dir="${build.output.dir}/ats" />
-        <var name="ats.drop.file" value="ATSMattiDrop.zip" />
-        <if>
-            <!-- get the list of .sis files in the defined folder to pass as a list to the python script-->
-            <scriptcondition language="beanshell">
-                <![CDATA[
-                    String sisfiles = project.getProperty("ats.sis.images");
-                    String value = project.getProperty("ats.sisfiles.minlimit");
-                    if (sisfiles != null && value != null) {
-                        int cond = Integer.valueOf(value).intValue();
-                        String[] out = sisfiles.split(",");
-                        if (out.length < cond ) {
-                            self.setValue(true);
-                        } else {
-                            self.setValue(false);
-                        }
-                    } else {
-                        self.log("Error: reference.ats.sis.images not defined.");
-                        self.setValue(true);
-                    }
-                        ]]>
-            </scriptcondition>
-            <then>
-                <echo message="Error: Not enough sis files check reference.ats.sis.images" />
-            </then>
-            <else>
-                <!-- execute the MattiDrops.py script with parameters-->
-                <exec executable="python" resultproperty="script.response">
-                    <arg line="-m ats3.matti.MattiDrops" />
-                    <arg value="--build-drive=${build.drive}" />
-                    <arg value="--matti-scripts=${matti.scripts}" />
-                    <arg value="--flash-images=${ats.flash.images}" />
-                    <arg value="--harness=STIF" />
-                    <arg value="--file-store=${ats.output.dir}" />
-                    <arg value="--testrun-name=${ats.testrun.name}" />
-                    <arg value="--device-type=${ats.product.name}" />
-                    <arg value="--device-hwid=${ats.product.hwid}" />
-                    <arg value="--diamonds-build-url=${internal.ats.diamonds.arg}" />
-                    <arg value="--drop-file=${build.output.dir}/ats/${ats.drop.file}" />
-                    <arg value="--minimum-flash-images=${ats.flashfiles.minlimit}" />
-                    <arg value="--plan-name=${ats.plan.name}" />
-                    <arg value="--sis-files=${ats.sis.images}" />
-                    <arg value="--template-loc=${template.file}" />
-                </exec>
-                <if> 
-                    <not>
-                        <!-- if the response is not 0 then need to create the skip.ats.sending
-                         flag so that do-ats-test is not run-->
-                        <equals arg1="${script.response}" arg2="0" />
-                    </not>
-                    <then>
-                        <!-- Skips sending drop package file to ATS/ASTE after its creation.
-                        @type boolean
-                        @scope public
-                        -->
-                        <property name="skip.ats.sending" value="1" />
-                    </then>
-                </if>
-                <runtarget target="do-ats-test" />
-            </else>
-        </if>
+        </script>
+        <echo>ats.ctc.monsyms: ${ats.ctc.monsyms}</echo>
     </target>
     
     <!-- Temp dir
@@ -680,12 +901,12 @@
     <property name="ats.evalid.post" value="${temp.build.dir}/${build.id}_atsevalidpost" />
     
     <!-- Call before preperation -->
-    <target name="find-files-pre" if="ats.delta.enabled">
+    <target name="find-files-pre" if="internal.ats.delta.enabled">
         <hlm:evalidMacro dir="${ats.evalid.pre}"/>
     </target>
     
     <!-- Call after preperation -->
-    <target name="find-files-post" if="ats.delta.enabled">
+    <target name="find-files-post" if="internal.ats.delta.enabled">
         <hlm:evalidMacro dir="${ats.evalid.post}"/>
     </target>
     
@@ -702,7 +923,7 @@
     </macrodef>
     
     <!-- Generate sysdef fileset based on evalid data -->
-    <target name="ats-delta" if="ats.delta.enabled">
+    <target name="ats-delta" if="internal.ats.delta.enabled">
         <script language="jython">
 import ido
 from com.nokia.ant.util import Helper
@@ -728,7 +949,7 @@
     <target name="run-test" depends="ats-test,ats-aste,matti-test"/>
     
     <!-- Zip build area for emulator -->
-    <target name="ats-emulator-zip" if="ats.emulator.enable">
+    <target name="ats-emulator-zip" if="internal.ats.emulator.enabled">
         <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" />
 
@@ -765,4 +986,48 @@
         <runtarget target="do-ats-test" />
     </target>
 
+    <!-- a dependant target please do not call directly use matti-test,
+     target calls the MATTI script that creates the MATTI_drop.zip file and runs the tests
+     listed in test.rb.  ats-set-flash-image-path and ats-set-sis-flash-image-path look for lists of files-->
+    <target name="do-ats-matti" depends="ats-set-flash-image-path" >
+        <runtarget target="ats-set-defaults-stifeunit" />
+        <!--need to set theseup for use by do-ats-test target-->
+        <mkdir dir="${build.output.dir}/ats" />
+        <var name="ats.drop.file" value="ATSMattiDrop.zip" />
+        <!-- execute the MattiDrops.py script with parameters-->
+        <exec executable="python" resultproperty="script.response">
+            <arg line="-m ats3.matti2" />
+            <arg value="--build-drive=${build.drive}" />
+            <arg value="--test-profiles=${matti.test.profiles}" />      <!--"all, !bat1" -->
+            <arg value="--sierra-enabled=${matti.sierra.enabled}" />    <!--"true/false" -->
+            <arg value="--matti-timeout=${matti.test.timeout}" />       <!--"600" -->
+            <arg value="${internal.ats.diamonds.arg}" />
+            <arg value="--testasset-location=${matti.asset.location}" />    <!--"local and/or network drive" -->
+            <arg value="--file-store=${ats.output.dir}" />              <!--"network drive" -->
+            <arg value="--testrun-name=${ats.testrun.name}" />          <!--"Matti_Profile_Name" -->
+            <arg value="--alias-name=${ats.alias.name}" />                        <!--"agents_alias_Name" -->
+            <arg value="--device-type=${ats.product.name}" />
+            <arg value="--flash-images=${ats.flash.images}" /> 
+            <arg value="--drop-file=${build.output.dir}/ats/${ats.drop.file}" />
+            <arg value="--minimum-flash-images=${ats.flashfiles.minlimit}" />
+            <arg value="--template-loc=${matti.template.file}" />             <!--"local and/or network drive. No comma separated list" -->
+            <arg value="--email-format=${ats.email.format}" />          <!--"Email Formatting. e.g. simplelogger" -->
+            <arg value="--email-subject=${ats.email.subject}" />        <!--"Email Subject. e.g. Matti testing" -->
+            <arg value="--report-email=${ats.email.list}" /> 
+            <arg value="--ats4-enabled=${internal.ats4.enabled}" />
+            <arg value="--matti-sis-files=${matti.sis.files}" />        <!--"src#store#dst, src#store#dst" -->
+            <arg value="--matti-parameters=${matti.parameters}" />
+            <arg value="--sierra-parameters=${matti.sierra.parameters}" />    <!--Additional sierra parameters for matti task e.g. ordered teardown -->
+        </exec>
+        
+        <!-- Unset the internal property to overwrite with new value-->
+        <var name="internal.ats.upload.enabled" unset="true"/>
+        <!-- set internal property if python returns 0 value for matti test drop creation --> 
+        <condition property="internal.ats.upload.enabled">
+            <equals arg1="${script.response}" arg2="0" />
+        </condition>
+        <runtarget target="do-ats-test" />
+    </target>
+
+
 </project>
--- a/buildframework/helium/tools/testing/ats/templates/ats4_naviengine_template.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/testing/ats/templates/ats4_naviengine_template.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -44,7 +44,7 @@
                 <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"/>
+                <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 %DEFAULT_GENERIC->NaviPowerType%" name="parameters"/>
                 {% endfor -%}
                 <parameter value="c:\temp\%DEFAULT_GENERIC->name%-console.log" name="result-file"/>
                 <parameter value="true" name="local-execute"/>
--- a/buildframework/helium/tools/testing/eunit/eunit.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/testing/eunit/eunit.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -21,7 +21,7 @@
 ============================================================================
 -->
 <!--* @package testing -->
-<project name="_testing.eunit">
+<project name="_testing.eunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>
         Testing using EUnit. (For WINSCW)
     </description>
@@ -48,7 +48,7 @@
     -->
 
     <!-- Unzip test package to build drive. -->
-    <target name="prepare-eunit" if="enabled.ats">
+    <target name="prepare-eunit" if="internal.ats.enabled">
         <unzip src="${eunit.prepare.zip}" dest="${build.drive}/" />
     </target>
 
--- a/buildframework/helium/tools/testing/mobilecrash/mobilecrash.ant.xml	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/tools/testing/mobilecrash/mobilecrash.ant.xml	Fri Aug 13 14:59:05 2010 +0300
@@ -158,7 +158,7 @@
     <!--
     Publish EE MobileCrash selge.ini
     -->
-    <target name="publish-mobilecrash" if="publish">
+    <target name="publish-mobilecrash" if="internal.publish.enabled">
         <copy file="${build.drive}${core.rom.output.dir}/selge.ini" tofile="${selge.ini.network.dir}\\${build.id}_selge.ini" overwrite="true" failonerror="false" />
     </target>