You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
3.7 KiB
Java

package com.verictas.pos.simulator.dataWriter;
import com.verictas.pos.simulator.SimulatorConfig;
import com.verictas.pos.simulator.mathUtils.AU;
import javax.vecmath.Vector3d;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DataWriter {
private FileWriter writer = null;
// Delimiter used in text file (for import in Excel)
private static final String DELIMITER = "\t";
private static final String NEW_LINE = "\n";
private int counter = 0;
public DataWriter() throws WritingException {
try {
// Define the save path
String directory = System.getProperty("user.home") + File.separator + "simulatorExports";
File directoryPath = new File(directory);
String path = directory + File.separator + getCurrentTimeStamp() + ".txt";
System.out.println("WRITING DATA TO: " + path);
if (!directoryPath.exists()) {
directoryPath.mkdirs();
}
this.writer = new FileWriter(path);
this.writer.write("Object" + DELIMITER + "Position (m)" + DELIMITER + "Position (AU)" + DELIMITER + "Speed (m/s)" + DELIMITER + "Speed (AU/day)" + DELIMITER + "Old Acceleration" + DELIMITER + "Acceleration" + DELIMITER + "Mass" + NEW_LINE);
this.counter++;
} catch(IOException e) {
throw new WritingException("The destination file couldn't be created.");
} catch(Exception e) {
throw new WritingException("Some unknown error occurred while writing to the file!");
}
}
public void write(String string) throws WritingException {
if (this.writer == null) {
throw new WritingException("The writer isn't defined yet");
} else {
try {
if (this.counter % SimulatorConfig.skipLines == 0) {
this.writer.append(string);
}
this.counter++;
} catch (Exception e) {
e.printStackTrace();
throw new WritingException("An error occurred while writing to the file!");
}
}
}
public void write(String id, Vector3d position, Vector3d speed, Vector3d oldAcceleration, Vector3d acceleration, double mass) throws WritingException {
if (this.writer == null) {
throw new WritingException("The writer isn't defined yet");
} else {
try {
if (this.counter % SimulatorConfig.skipLines == 0) {
this.writer.append(id + DELIMITER + position.toString() + DELIMITER + AU.convertFromMeter(position).toString() + DELIMITER + speed.toString() + DELIMITER + AU.convertFromMetersPerSecond(speed).toString() + DELIMITER + oldAcceleration.toString() + DELIMITER + acceleration.toString() + DELIMITER + String.valueOf(mass) + NEW_LINE);
}
this.counter++;
} catch (Exception e) {
e.printStackTrace();
throw new WritingException("An error occurred while writing to the file!");
}
}
}
public void save() throws WritingException {
if (this.writer == null) {
throw new WritingException("The writer isn't defined yet");
} else {
try {
this.writer.flush();
this.writer.close();
} catch (IOException e) {
throw new WritingException("Whoop! Save error!");
}
}
}
public int getLines() {
return this.counter;
}
public String getCurrentTimeStamp() {
return new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date());
}
}