buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/IMakerLogMetaDataInput.java
--- 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;
- }
}