/******************************************************************************* * This file is protected by Copyright. * Please refer to the COPYRIGHT file distributed with this source distribution. * * This file is part of REDHAWK IDE. * * All rights reserved. This program and the accompanying materials are made available under * the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package gov.redhawk.ide.snapshot.writer.internal; import gov.redhawk.bulkio.util.StreamSRIUtil; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.List; import nxm.sys.lib.Table; import BULKIO.PrecisionUTCTime; import BULKIO.StreamSRI; /** * */ public class BinSriDataWriter extends BinDataWriter { private static final String METADATA_FILE_EXENSION = "sri"; /**the string representation of the format to print the start and end times of files*/ private final String timeFormat = "yyyy-MM-dd HH:mm:ss:SSS z"; private PrecisionUTCTime startTime; private PrecisionUTCTime endTime; private Date startDate; @Override public List<File> getOutputFileList() { return Arrays.asList(new File[] { getFileDestination(), getMetaDataFile() }); } @Override public void open() throws IOException { super.open(); startDate = new Date(); } @Override public void pushPacket(byte[] data, int offset, int length, PrecisionUTCTime time) throws IOException { if (startTime == null) { startTime = time; } endTime = time; super.pushPacket(data, offset, length, time); } @Override public void pushPacket(char[] data, int offset, int length, PrecisionUTCTime time) throws IOException { if (startTime == null) { startTime = time; } endTime = time; super.pushPacket(data, offset, length, time); } @Override public void pushPacket(double[] data, int offset, int length, PrecisionUTCTime time) throws IOException { if (startTime == null) { startTime = time; } endTime = time; super.pushPacket(data, offset, length, time); } @Override public void pushPacket(float[] data, int offset, int length, PrecisionUTCTime time) throws IOException { if (startTime == null) { startTime = time; } endTime = time; super.pushPacket(data, offset, length, time); } @Override public void pushPacket(int[] data, int offset, int length, PrecisionUTCTime time) throws IOException { if (startTime == null) { startTime = time; } endTime = time; super.pushPacket(data, offset, length, time); } @Override public void pushPacket(long[] data, int offset, int length, PrecisionUTCTime time) throws IOException { if (startTime == null) { startTime = time; } endTime = time; super.pushPacket(data, offset, length, time); } @Override public void pushPacket(short[] data, int offset, int length, PrecisionUTCTime time) throws IOException { if (startTime == null) { startTime = time; } endTime = time; super.pushPacket(data, offset, length, time); } @Override protected void saveMetaData() throws IOException { Table rootTable = new Table(); Table generalTable = (Table) rootTable.addTable("General Information"); putGeneralInformation(generalTable); StreamSRI sri = getSRI(); if (sri != null) { StreamSRIUtil.putSriInfo(getSRI(), rootTable); } if (startTime != null) { Table startTable = (Table) rootTable.addTable("First Packet Time"); putTime(startTime, startTable); } if (endTime != null) { Table stopTable = (Table) rootTable.addTable("Last Packet Time"); putTime(endTime, stopTable); } generalTable.put("BulkIOType", getSettings().getType().name()); List<String> list = rootTable.toConfigFile(); FileWriter output = new FileWriter(getMetaDataFile()); BufferedWriter buffer = new BufferedWriter(output); PrintWriter out = new PrintWriter(buffer); try { for (String s : list) { out.println(s); } } finally { out.close(); } } private void putGeneralInformation(Table table) { SimpleDateFormat format = new SimpleDateFormat(this.timeFormat); int divisor = (getSRI().mode == 1) ? 2 : 1; table.put("Number of Samples", getNumSamples() / divisor); table.put("Data Byte Order", getByteOrder()); table.put("Start Time", format.format(startDate)); table.put("End Time", format.format(new Date())); } private void putTime(PrecisionUTCTime time, Table table) { table.put("tcmode", time.tcmode); table.put("tfsec", time.tfsec); table.put("twsec", time.twsec); table.put("tcstatus", time.tcstatus); table.put("toff", time.toff); } @Override protected String getMetaDataFileExtension() { return METADATA_FILE_EXENSION; } }