/* jBEAM-Erweiterung zum Einlesen von Renishaw „dynamischen“ Messdaten (*.RTD)
* Henrik Haftmann, 4/08
*/
package rtdImporter;
import java.io.*;
import java.nio.*;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;
import org.asam.cea.Cea2Exceptions.*;
import org.asam.cea.Cea2Items.*;
import org.asam.cea.Cea2Services.*;
import org.asam.cea.Cea2Types.*;
public class RtdImporter extends BasicCea2Producer {
private File importFile = null;
@Override
public boolean cea2ShouldSerializeItems() {
return true;
}
@Override
public boolean cea2AcceptData(Object data, boolean append) {
return false;
}
@Override
public void cea2Customize() throws Cea2CustomizerNotAvailable {
try {
JFileChooser fileChooser = new JFileChooser(getImportFile() != null ? getImportFile().getParentFile() : null);
fileChooser.setFileFilter(new FileFilter(){
@Override
public boolean accept(File file) {
return file != null && (file.isDirectory() || file.getPath().toLowerCase().endsWith(".rtd"));
}
@Override
public String getDescription() {
return "Renishaw „dynamische“ Messdaten (*.RTD)"; // müsste eigentlich lokalisiert werden!
}
});
fileChooser.setSelectedFile(getImportFile());
int status = fileChooser.showOpenDialog(JOptionPane.getRootFrame());
switch (status) {
case JFileChooser.APPROVE_OPTION:
setImportFile(fileChooser.getSelectedFile());
break;
}
getCea2Bus().cea2ValidateCurrentApplication();
} catch (Cea2InvalidApplication e) {
e.printStackTrace();
}
}
private void setImportFile(File selectedFile) {
importFile = selectedFile;
setInputValid(false);
}
private File getImportFile() {
return importFile ;
}
@Override
public void cea2Execute() throws Cea2Exception {
try {
if (isInputValid()) return;
Cea2LogTraceServiceIF traceService = getTraceService();
if (importFile == null) {
if (traceService != null
&& traceService.cea2IsLogging(Cea2LogArea.ComponentExecution, Cea2LogLevel.Error))
traceService.cea2WriteMessage(Cea2LogArea.ComponentExecution,
Cea2LogLevel.Error,
cea2GetName() + ": no import file was defined. Cannot load!");
clearResultItems();
}else{
InputStream fin = new BufferedInputStream(new FileInputStream(importFile));
FloatBuffer databuffer = null;
String channelName = "Achse";
double xInterval = 1d;
int numData = 0;
String userName = null;
while (true) {
String line;
try{
line = readLine(fin).trim();
}catch (EOFException e) { break; } // bei EOF Schleife beenden
if (line.isEmpty()) continue; // Leerzeilen ignorieren
if (line.endsWith("::")) continue; // Kopfzeilen ignorieren
String[] splitted = line.split(":",2); // übrige Zeilen haben den Aufbau "key : value"
String key = splitted[0].trim();
String value = splitted[1].trim();
if (key.equalsIgnoreCase("TITEL")) channelName = value;
else if (key.equalsIgnoreCase("Trigger interval")) xInterval = Double.parseDouble(value);
else if (key.equalsIgnoreCase("name")) userName = value;
else if (key.equalsIgnoreCase("sample no")) numData = (int)Double.parseDouble(value);
else if (key.equalsIgnoreCase("Run Target Data")) {
byte[] bytes = new byte[numData*4];
fin.read(bytes);
ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); // Puffer "casten"
byteBuffer.order(ByteOrder.LITTLE_ENDIAN); // für nächste Operation Bytedrehung anzeigen
databuffer = byteBuffer.asFloatBuffer();
break; // Endlosschleife beenden
}
}
fin.close();
if (resultDataItems == null) resultDataItems = new Cea2NumericChannelIF[1];
if (resultDataItems[0] == null) {
resultDataItems[0] = (Cea2NumericItemIF) getItemFactoryService().cea2CreateItem(Cea2DataType.DoubleChannel);
getCea2Bus().cea2AddItem(resultDataItems[0]);
}
Cea2DoubleChannelIF resultChannel = (Cea2DoubleChannelIF) resultDataItems[0];
resultChannel.cea2SetName(channelName);
resultChannel.cea2SetUnit("mm");
resultChannel.cea2SetXUnit("mm");
resultChannel.cea2SetProducer(this);
resultChannel.cea2SetXIncrement(xInterval);
if (userName != null) resultChannel.cea2AddProperty(new Cea2Property("userName", userName));
while (databuffer.hasRemaining()) {
int i = databuffer.position();
resultChannel.cea2AppendValue(databuffer.get()-xInterval*i); // Differenzen speichern
}
}/*importFile!=null*/
sendComponentEvent(new Cea2ComponentEvent(Cea2EventKind.ComponentResultItemsChanged));
setInputValid(true);
} catch (IOException e) {e.printStackTrace();}
}
/**
* Liest eine Zeile (bis \r\n) aus (ungepuffertem) Stream
* @param fin = InputStream
* @return Zeile (ohne \r\n)
* @throws IOException (auch EOFException)
*/
private String readLine(InputStream fin) throws IOException {
String result = "";
while (true) {
int c = fin.read();
if (c == -1) throw new EOFException();
if (c == '\r') break;
result = result + (char) c;
}
fin.read(); // sollte '\n' lesen (schmutzig!)
return result;
}
@Override
public String cea2GetConfig() {
// XML-Daten speichern
return null;
}
@Override
public void cea2SetConfig(String theConfiguration) {
// XML-Daten einlesen
}
@Override
public void cea2SetData(Object data, boolean append) {
}
}
Vorgefundene Kodierung: ASCII (7 bit) | 8
|