buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/AntLogMetaDataInput.java
changeset 628 7c4a911dc066
parent 587 85df38eb4012
--- 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