buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataRecord.java
author wbernard
Thu, 22 Jul 2010 17:08:43 +0300
branchhelium-9.0
changeset 618 df88fead2976
parent 587 85df38eb4012
permissions -rw-r--r--
helium_9.0.5-4399343f4f50
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
/*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
 * All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
 * under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
 * Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
 * Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
 * Description:  
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
package com.nokia.helium.metadata.ant.taskdefs;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    20
import com.nokia.helium.metadata.CustomMetaDataProvider;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
import com.nokia.helium.metadata.MetaDataInput;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
import com.nokia.helium.jpa.entity.metadata.Metadata;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
import org.apache.tools.ant.BuildException;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
import org.apache.tools.ant.Task;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
import java.util.Vector;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
import java.util.Iterator;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
import org.apache.log4j.Logger;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
import com.nokia.helium.metadata.db.*;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
import java.util.Date;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
 * This task provide a way to record the data in the Database.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
 * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
 * <pre>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
 * Example 1:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
 * &lt;metadatarecord database=&quot;compile_log.db&quot;&gt;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
 *     &lt;sbsmetadatainput&gt;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
 *     &lt;fileset casesensitive=&quot;false&quot; file=&quot;sbs.log.file&quot;/&gt
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
 *         &lt;metadatafiltelistref refid=&quot;compilation&quot;/&gt;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
 *     &lt;/sbsmetadatainput&gt;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
 * &lt;/metadatarecord&gt;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
 * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
 * Example 2:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
 * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
 * &lt;metadatarecord database=&quot;metadata.db&quot;&gt;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
 *     &lt;antmetadatainput&gt;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
 *     &lt;fileset casesensitive=&quot;false&quot; file=&quot;${build.id}_ant_build.log&quot;/&gt
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
 *         &lt;metadatafiltelistref refid=&quot;compilation&quot;/&gt;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
 *     &lt;/antmetadatainput&gt;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
 * &lt;/metadatarecord&gt;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
 * </pre>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
 * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
 * @ant.task name="metadatarecord" category="Metadata"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
public class MetaDataRecord extends Task {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
    private static Logger log = Logger.getLogger(MetaDataRecord.class);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
    private String database;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
    private boolean failOnError = true;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
    private Vector<MetaDataInput> metadataList = new Vector<MetaDataInput>();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
     * Helper function to set the database parameter
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
     * @ant.required
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
    public void setDatabase(String dbFile) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
        database = dbFile;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
    public void setFailOnError(String failNotify) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
        if (failNotify.equals("false")) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
            failOnError = false;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
     * Helper function to get the database
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
    public String getDatabase() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
        return database;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
     * Helper function to return the metadatalist
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
     *  @return build metadata object
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
    public Vector<MetaDataInput> getMetaDataList() throws Exception {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
        if (metadataList.isEmpty()) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
            throw new Exception("metadata list is empty");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
        return metadataList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
     * Helper function to add the metadatalist
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
     *  @param build metadata list to add
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
    public void add(MetaDataInput interf) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
        metadataList.add(interf);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
    @Override
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
    public void execute() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
        ORMMetadataDB ormDB = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
            log.debug("Getting Contents to write to db: " + database);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
            log.debug("Initializing DB: " + database);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
            log.debug("initializing ORM db");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
            ormDB = new ORMMetadataDB(database);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
            log.debug("Parsing the input and writing to DB");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
            Date before = new Date();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
            log("Time before recording to db: " + before);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
            for (MetaDataInput metadataInput : metadataList) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
                boolean removed = false;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
                String logPath = null;
618
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   124
                String currentLogPath = null;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   125
                Iterator<Metadata.LogEntry> inputIterator = metadataInput.iterator();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   126
                while (inputIterator.hasNext()) {
618
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   127
                    //Todo: better way of log handling, with metadatainput
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   128
                    // metadata initialization for each logfile within 
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   129
                    //metadatainput itself would be better. this is temporary.
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
                    Metadata.LogEntry logEntry = inputIterator.next();
618
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   131
                    logPath = logEntry.getLogPath();
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   132
                    if (currentLogPath == null) {
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   133
                        currentLogPath = logPath;
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   134
                        removed = false;
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   135
                    } else if (!currentLogPath.equals(logPath)) {
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   136
                        finalizeForLogPath(currentLogPath, metadataInput, ormDB);
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   137
                        currentLogPath = logPath;
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   138
                        removed = false;
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   139
                    }
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   140
                    if (!removed ) {
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   141
                        log.debug("processing for log: " + logPath);
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   142
                        ormDB.removeEntries(logPath);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   143
                        removed = true;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
                    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
                    //initializes the metadata if none exists
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   146
                    ormDB.addLogEntry(logEntry);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
                }
618
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   148
                finalizeForLogPath(currentLogPath, metadataInput, ormDB);
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   149
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   150
            Date after = new Date();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   151
            log("Time after recording to db: " + after);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
            log("Elapsed time: " + (after.getTime() - before.getTime()) + " ms");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   153
            log.debug("Successfully writen to DB");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   154
        } catch (BuildException ex1) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   155
            log.debug("BuildException during writing to db: ", ex1);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   156
            if (failOnError) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   157
                throw ex1;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   159
        } finally {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   160
            if (ormDB != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   161
                ormDB.finalizeDB();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   162
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   163
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   164
    }
618
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   165
    
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   166
    private void finalizeForLogPath(String currentLogPath, 
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   167
            MetaDataInput metadataInput, ORMMetadataDB ormDB) {
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   168
        if (currentLogPath != null) {
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   169
            if (metadataInput instanceof CustomMetaDataProvider) {
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   170
                CustomMetaDataProvider provider = 
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   171
                    (CustomMetaDataProvider)metadataInput;
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   172
                provider.provide(ormDB, currentLogPath);
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   173
            }
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   174
            ormDB.finalizeMetadata(currentLogPath);
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   175
        }
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   176
    }
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   177
}