/*********************************************************************************************
* Copyright (c) 2014-2015 Software Behaviour Analysis Lab, Concordia University, Montreal, Canada
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of Eclipse Public License v1.0 License which
* accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Syed Shariyar Murtaza -- Initial design and implementation
**********************************************************************************************/
package org.eclipse.tracecompass.internal.totalads.readers.textreaders;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.eclipse.tracecompass.totalads.exceptions.TotalADSGeneralException;
import org.eclipse.tracecompass.totalads.exceptions.TotalADSReaderException;
import org.eclipse.tracecompass.totalads.readers.ITraceIterator;
import org.eclipse.tracecompass.totalads.readers.ITraceTypeReader;
import org.eclipse.tracecompass.totalads.readers.TraceTypeFactory;
/**
* This class is only used for lab experiments and it is used to map ids to
* names.
*
* @author <p>
* Syed Shariyar Murtaza justsshary@hotmail.com
* </p>
*
*/
public class TextSysIDtoNameTraceReader implements ITraceTypeReader {
// -----------------------------------------------------------------
// Inner class: Implements an iterator
// -------------------------------------------------------------
private class TextLineIterator implements ITraceIterator {
private BufferedReader bufferedReader;
private String event = ""; //$NON-NLS-1$
private Boolean isClose = false;
public TextLineIterator(BufferedReader bReader) {
bufferedReader = bReader;
}
/**
* Advances the iterator
*/
@Override
public boolean advance() throws TotalADSReaderException {
boolean isAdvance = false;
try {
String syscall = ""; //$NON-NLS-1$
do {
event = bufferedReader.readLine();
if (event == null) {
bufferedReader.close();
isClose = true;
isAdvance = false;
}
else {
isAdvance = true;
int id;
try {
id = Integer.parseInt(event);
syscall = MapSysCallIDToName.getSysCallName(id);
event = syscall;
} catch (NumberFormatException ex) {
syscall = null;
}
}
} while (syscall == null);
} catch (IOException e) {
throw new TotalADSReaderException(e.getMessage());
}
return isAdvance;
}
/**
* Gets current event
*/
@Override
public String getCurrentEvent() {
return event;
}
/**
* Closes the iterator
*/
@Override
public void close() throws TotalADSReaderException {
try {
if (!isClose) {
bufferedReader.close();
}
} catch (IOException e) {
throw new TotalADSReaderException(e.getMessage());
}
}
}
// -------------------------------------------------------------------------------
// Inner class ends
// -------------------------------------------------------------------------------
/**
* Constructor
*/
public TextSysIDtoNameTraceReader() {
}
/**
* Creates an instance by implementing the ITraceTypeReader interface
*/
@Override
public ITraceTypeReader createInstance() {
return new TextSysIDtoNameTraceReader();
}
/**
* Returns the name
*/
@Override
public String getName() {
// This is for lab experiments only
return "Text-Syscall VIEW_ID to Name (lab)"; //$NON-NLS-1$
}
/**
* Returns the acronym of the text reader
*/
@Override
public String getAcronym() {
return "TXT"; //$NON-NLS-1$
}
/**
* Returns the trace iterator
*/
@Override
public ITraceIterator getTraceIterator(File file) throws TotalADSReaderException {
BufferedReader bufferReader;
try {
bufferReader = new BufferedReader(new FileReader(file));
TextLineIterator textLineIterator = new TextLineIterator(bufferReader);
return textLineIterator;
} catch (FileNotFoundException e) {
throw new TotalADSReaderException(e.getMessage());
}
}
/**
* Static function to register a trace type reader with the factory
*
* @throws TotalADSGeneralException
* A validation exception
*/
public static void registerTraceTypeReader() throws TotalADSGeneralException {
TraceTypeFactory trcTypFactory = TraceTypeFactory.getInstance();
TextSysIDtoNameTraceReader textFileReader = new TextSysIDtoNameTraceReader();
trcTypFactory.registerTraceReaderWithFactory(textFileReader.getName(), textFileReader);
}
}