buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataRecord.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataRecord.java Tue Apr 27 08:33:08 2010 +0300
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+package com.nokia.helium.metadata.ant.taskdefs;
+
+import com.nokia.helium.metadata.CustomMetaDataProvider;
+import com.nokia.helium.metadata.MetaDataInput;
+import com.nokia.helium.jpa.entity.metadata.Metadata;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import java.util.Vector;
+import java.util.Iterator;
+import org.apache.log4j.Logger;
+import com.nokia.helium.metadata.db.*;
+import java.util.Date;
+
+/**
+ * This task provide a way to record the data in the Database.
+ *
+ * <pre>
+ * Example 1:
+ * <metadatarecord database="compile_log.db">
+ * <sbsmetadatainput>
+ * <fileset casesensitive="false" file="sbs.log.file"/>
+ * <metadatafiltelistref refid="compilation"/>
+ * </sbsmetadatainput>
+ * </metadatarecord>
+ *
+ * Example 2:
+ *
+ * <metadatarecord database="metadata.db">
+ * <antmetadatainput>
+ * <fileset casesensitive="false" file="${build.id}_ant_build.log"/>
+ * <metadatafiltelistref refid="compilation"/>
+ * </antmetadatainput>
+ * </metadatarecord>
+
+ * </pre>
+ *
+ * @ant.task name="metadatarecord" category="Metadata"
+ */
+public class MetaDataRecord extends Task {
+
+ private static Logger log = Logger.getLogger(MetaDataRecord.class);
+
+ private String database;
+
+ private boolean failOnError = true;
+
+ private Vector<MetaDataInput> metadataList = new Vector<MetaDataInput>();
+
+ /**
+ * Helper function to set the database parameter
+ *
+ * @ant.required
+ */
+ public void setDatabase(String dbFile) {
+ database = dbFile;
+ }
+
+ public void setFailOnError(String failNotify) {
+ if (failNotify.equals("false")) {
+ failOnError = false;
+ }
+ }
+ /**
+ * Helper function to get the database
+ *
+ */
+ public String getDatabase() {
+ return database;
+ }
+
+ /**
+ * Helper function to return the metadatalist
+ * @return build metadata object
+ *
+ */
+ public Vector<MetaDataInput> getMetaDataList() throws Exception {
+ if (metadataList.isEmpty()) {
+ throw new Exception("metadata list is empty");
+ }
+ return metadataList;
+ }
+
+ /**
+ * Helper function to add the metadatalist
+ * @param build metadata list to add
+ *
+ */
+ public void add(MetaDataInput interf) {
+ metadataList.add(interf);
+ }
+
+
+ @Override
+ public void execute() {
+ ORMMetadataDB ormDB = null;
+ try {
+ log.debug("Getting Contents to write to db: " + database);
+ log.debug("Initializing DB: " + database);
+ log.debug("initializing ORM db");
+ ormDB = new ORMMetadataDB(database);
+ log.debug("Parsing the input and writing to DB");
+ Date before = new Date();
+ log("Time before recording to db: " + before);
+ for (MetaDataInput metadataInput : metadataList) {
+ boolean removed = false;
+ String logPath = null;
+ Iterator<Metadata.LogEntry> inputIterator = metadataInput.iterator();
+ while (inputIterator.hasNext()) {
+ Metadata.LogEntry logEntry = inputIterator.next();
+ if (!removed) {
+ logPath = logEntry.getLogPath();
+ ormDB.removeEntries(logPath);
+ removed = true;
+ }
+ //initializes the metadata if none exists
+ ormDB.addLogEntry(logEntry);
+ }
+ if (logPath != null && metadataInput instanceof CustomMetaDataProvider) {
+ CustomMetaDataProvider provider = (CustomMetaDataProvider)metadataInput;
+ provider.provide(ormDB, logPath);
+ }
+ if (logPath != null) {
+ ormDB.finalizeMetadata(logPath);
+ }
+ }
+ Date after = new Date();
+ log("Time after recording to db: " + after);
+ log("Elapsed time: " + (after.getTime() - before.getTime()) + " ms");
+ log.debug("Successfully writen to DB");
+ } catch (BuildException ex1) {
+ log.debug("BuildException during writing to db: ", ex1);
+ if (failOnError) {
+ throw ex1;
+ }
+ } finally {
+ if (ormDB != null) {
+ ormDB.finalizeDB();
+ }
+ }
+ }
+}
\ No newline at end of file