use of org.eclipse.titan.log.viewer.models.LogRecordIndex in project titan.EclipsePlug-ins by eclipse.
the class LogFileCacheHandler method writeLogRecordIndexFile.
/**
* Writes the log record index file
*
* @param indexFile the index file to write to
* @param logRecordIndexes an array with the log record indexes to be written
* @throws FileNotFoundException if the index file is not found
* @throws IOException if i/o errors occurs
*/
private static void writeLogRecordIndexFile(final File indexFile, final List<LogRecordIndex> logRecordIndexes) throws IOException {
ByteBuffer buffer = ByteBuffer.allocateDirect(BUFFER_SIZE);
FileOutputStream fileOutputStream = new FileOutputStream(indexFile);
FileChannel file = fileOutputStream.getChannel();
file.truncate(0);
try {
for (LogRecordIndex currLogRecordIndex : logRecordIndexes) {
buffer.putLong(currLogRecordIndex.getFileOffset());
buffer.putInt(currLogRecordIndex.getRecordLength());
buffer.putInt(currLogRecordIndex.getRecordNumber());
if (!buffer.hasRemaining()) {
buffer.rewind();
file.write(buffer);
buffer.clear();
}
// logRecordIndexes.remove(i); -> causes error...
}
// Make sure that the remaining data is flushed to disc
if (buffer.position() != 0) {
buffer.flip();
file.write(buffer);
}
} finally {
IOUtils.closeQuietly(file, fileOutputStream);
}
}
use of org.eclipse.titan.log.viewer.models.LogRecordIndex in project titan.EclipsePlug-ins by eclipse.
the class LogFileCacheHandler method readLogRecordIndexFile.
/**
* Reads log records from an index file
*
* @param indexFile the index file
* @param startRecordIndex the log record index to start from
* @param numberOfRecords the number of log records indexes to be read
* @return an array with the read log record indexes
* @throws FileNotFoundException if the index file is not found
* @throws IOException if i/o errors occurs
*/
public static LogRecordIndex[] readLogRecordIndexFile(final File indexFile, final int startRecordIndex, final int numberOfRecords) throws IOException {
int bytesToRead = numberOfRecords * LOG_RECORD_INDEX_SIZE;
ByteBuffer buffer = ByteBuffer.allocateDirect(bytesToRead);
FileInputStream fileInputStream = new FileInputStream(indexFile);
FileChannel fileChannel = fileInputStream.getChannel();
try {
fileChannel.position((long) startRecordIndex * LOG_RECORD_INDEX_SIZE);
int bytesRead = fileChannel.read(buffer);
buffer.rewind();
LogRecordIndex[] logRecordIndexes = null;
if (bytesRead == bytesToRead) {
logRecordIndexes = new LogRecordIndex[numberOfRecords];
for (int counter = 0; counter < numberOfRecords; counter++) {
logRecordIndexes[counter] = new LogRecordIndex(buffer.getLong(), buffer.getInt(), buffer.getInt());
}
}
return logRecordIndexes;
} finally {
IOUtils.closeQuietly(fileChannel, fileInputStream);
}
}
use of org.eclipse.titan.log.viewer.models.LogRecordIndex in project titan.EclipsePlug-ins by eclipse.
the class RefreshMSCViewAction method run.
@Override
public void run() {
// Set current log file meta data
final LogFileMetaData logFileMetaData = this.mscView.getLogFileMetaData();
ExecutionModel model = this.mscView.getModel();
final PreferencesHolder preferences = PreferencesHandler.getInstance().getPreferences(logFileMetaData.getProjectName());
if (preferences.getVisualOrderComponents().isEmpty()) {
// $NON-NLS-1$
String userE = Messages.getString("RefreshMSCViewAction.3");
TitanLogExceptionHandler.handleException(new UserException(userE));
return;
}
final IFile logFile = getSelectedLogFile(logFileMetaData);
IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
// Check if the log file exists
if (!logFile.exists()) {
IViewReference[] viewReferences = activePage.getViewReferences();
ActionUtils.closeAssociatedViews(activePage, viewReferences, logFile);
// $NON-NLS-1$
TitanLogExceptionHandler.handleException(new UserException(Messages.getString("RefreshMSCViewAction.1")));
return;
}
// Check if the log file has been modified
if (LogFileCacheHandler.hasLogFileChanged(logFile)) {
LogFileCacheHandler.handleLogFileChange(logFile);
return;
}
// Get log record index file for selected log file - No need to check is exists due to
// LogFileCacheHandler.hasLogFileChanged(logFile) returning false above
File logRecordIndexFile = LogFileCacheHandler.getLogRecordIndexFileForLogFile(logFile);
try {
// Read/parse log file
final TestCase tc = model.getTestCase();
final LogRecordIndex[] logRecordIndexes = LogFileCacheHandler.readLogRecordIndexFile(logRecordIndexFile, tc.getStartRecordNumber(), tc.getNumberOfRecords());
WorkspaceJob job = new WorkspaceJob("Loading log information") {
@Override
public IStatus runInWorkspace(final IProgressMonitor monitor) throws CoreException {
ExecutionModel model;
try {
model = parseLogFile();
} catch (Exception e) {
ErrorReporter.logExceptionStackTrace(e);
TitanLogExceptionHandler.handleException(new TechnicalException(// $NON-NLS-1$
Messages.getString("RefreshMSCViewAction.5") + e.getMessage()));
return Status.CANCEL_STATUS;
}
final int firstRow = getFirstRow(model, preferences);
final ExecutionModel finalModel = model;
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
RefreshMSCViewAction.this.mscView.setModel(finalModel, firstRow);
}
});
return Status.OK_STATUS;
}
private ExecutionModel parseLogFile() throws TechnicalException {
ExecutionModel model;
if (logFileMetaData.getExecutionMode() == null) {
throw new TechnicalException("Error while parsing of the log file: ExecutionMode is null");
}
try {
// re-parse tc
Parser parser = new Parser(logFileMetaData);
model = parser.preParse(tc, logRecordIndexes, preferences, mscView.getFilterPattern(), null);
} catch (IOException e) {
throw new TechnicalException("Error while parsing of the log file");
} catch (ParseException e) {
throw new TechnicalException("Error while parsing of the log file");
}
return model;
}
};
job.schedule();
} catch (IOException e) {
ErrorReporter.logExceptionStackTrace("Error while parsing of the log file", e);
TitanLogExceptionHandler.handleException(new TechnicalException(e.getMessage()));
}
}
use of org.eclipse.titan.log.viewer.models.LogRecordIndex in project titan.EclipsePlug-ins by eclipse.
the class LogFileReader method getReaderForLogFile.
/**
* Factory method. Creates a LogFileReader for the given log file.
* @param logFile The log file
* @return The created reader
* @throws IOException
* @throws ClassNotFoundException
*/
public static LogFileReader getReaderForLogFile(final IFile logFile) throws IOException, ClassNotFoundException {
File logRecordIndexFile = LogFileCacheHandler.getLogRecordIndexFileForLogFile(logFile);
int numRecords = LogFileCacheHandler.getNumberOfLogRecordIndexes(logRecordIndexFile);
LogRecordIndex[] logRecordIndexes = LogFileCacheHandler.readLogRecordIndexFile(logRecordIndexFile, 0, numRecords);
return new LogFileReader(logFile.getLocationURI(), logRecordIndexes);
}
use of org.eclipse.titan.log.viewer.models.LogRecordIndex in project titan.EclipsePlug-ins by eclipse.
the class MSCView method restoreState.
/**
* Called in the view life-cycle restore chain Reads back all view data if
* memento has been set
*
* The restore is very restricted an checks that the
* <li> Project still exists and is open
* <li> The file is within the project
* <li> The file size and file date has not changed
*/
private WorkspaceJob restoreState() {
if (this.memento == null) {
return null;
}
WorkspaceJob job = null;
this.problemDuringRestore = true;
// $NON-NLS-1$
this.memento = this.memento.getChild("mscview");
if (this.memento != null) {
try {
// $NON-NLS-1$
IMemento viewAttributes = this.memento.getChild("attributes");
// Restore logfilemetaData
// $NON-NLS-1$
String propertyFilePath = viewAttributes.getString("propertyFile");
if (propertyFilePath != null) {
File propertyFile = new File(propertyFilePath);
if (propertyFile.exists()) {
this.logFileMetaData = LogFileCacheHandler.logFileMetaDataReader(propertyFile);
}
}
// Get project
// $NON-NLS-1$
String projectName = viewAttributes.getString("projectName");
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
if ((this.logFileMetaData != null) && (project != null) && project.exists() && project.isOpen()) {
Path path = new Path(this.logFileMetaData.getProjectRelativePath());
IFile logFile = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
if ((logFile != null) && logFile.exists() && logFile.getProject().getName().equals(project.getName())) {
// $NON-NLS-1$
String fileSizeString = viewAttributes.getString("fileSize");
long fileSize = 0;
if (fileSizeString != null) {
fileSize = Long.parseLong(fileSizeString);
}
// $NON-NLS-1$
String fileModificationString = viewAttributes.getString("fileModification");
long fileModification = 0;
if (fileModificationString != null) {
fileModification = Long.parseLong(fileModificationString);
}
File file = logFile.getLocation().toFile();
if ((file.lastModified() == fileModification) && (file.length() == fileSize)) {
// Load the Test case from index file
// $NON-NLS-1$
Integer testCaseNumber = viewAttributes.getInteger("testCaseNumber");
File indexFileForLogFile = LogFileCacheHandler.getIndexFileForLogFile(logFile);
File logRecordIndexFile = LogFileCacheHandler.getLogRecordIndexFileForLogFile(logFile);
if (!indexFileForLogFile.exists() || !logRecordIndexFile.exists()) {
return null;
}
final Parser parser = new Parser(this.logFileMetaData);
final TestCase testCase = TestCaseExtractor.getTestCaseFromIndexFile(indexFileForLogFile, testCaseNumber);
final LogRecordIndex[] logRecordIndexes = LogFileCacheHandler.readLogRecordIndexFile(logRecordIndexFile, testCase.getStartRecordNumber(), testCase.getNumberOfRecords());
final PreferencesHolder preferences = PreferencesHandler.getInstance().getPreferences(projectName);
// Restore model
job = new WorkspaceJob("Loading log information") {
@Override
public IStatus runInWorkspace(final IProgressMonitor monitor) throws CoreException {
try {
MSCView.this.model = parser.preParse(testCase, logRecordIndexes, preferences, null, monitor);
} catch (Exception e) {
ErrorReporter.logExceptionStackTrace(e);
}
return Status.OK_STATUS;
}
};
job.schedule();
// Restore selection
// $NON-NLS-1$
final Integer temp = viewAttributes.getInteger("rowSelection");
if (temp == null) {
this.restoredSelection = 0;
} else {
this.restoredSelection = temp.intValue();
}
this.problemDuringRestore = false;
} else {
// TODO: what should we do if something went wrong?
}
}
}
} catch (Exception e) {
ErrorReporter.logExceptionStackTrace(e);
}
}
this.memento = null;
return job;
}
Aggregations