fix loading of corrupted uncompressed SCV files
This commit is contained in:
parent
a64e06ff7a
commit
e3f4dc6616
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
||||||
Bundle-ManifestVersion: 2
|
Bundle-ManifestVersion: 2
|
||||||
Bundle-Name: Textual transaction database
|
Bundle-Name: Textual transaction database
|
||||||
Bundle-SymbolicName: com.minres.scviewer.database.text
|
Bundle-SymbolicName: com.minres.scviewer.database.text
|
||||||
Bundle-Version: 4.0.0.qualifier
|
Bundle-Version: 4.0.1.qualifier
|
||||||
Bundle-Vendor: MINRES Technologies GmbH
|
Bundle-Vendor: MINRES Technologies GmbH
|
||||||
Bundle-RequiredExecutionEnvironment: JavaSE-11
|
Bundle-RequiredExecutionEnvironment: JavaSE-11
|
||||||
Import-Package: org.osgi.framework;version="1.3.0"
|
Import-Package: org.osgi.framework;version="1.3.0"
|
||||||
|
|
|
@ -345,10 +345,10 @@ public class TextDbLoader implements IWaveformDbLoader {
|
||||||
String curLine = reader.readLine();
|
String curLine = reader.readLine();
|
||||||
String nextLine = null;
|
String nextLine = null;
|
||||||
while ((nextLine = reader.readLine()) != null && curLine != null) {
|
while ((nextLine = reader.readLine()) != null && curLine != null) {
|
||||||
curLine = parseLine(curLine, nextLine);
|
curLine = parseLine(curLine, nextLine, false);
|
||||||
}
|
}
|
||||||
if (curLine != null)
|
if (curLine != null)
|
||||||
parseLine(curLine, nextLine);
|
parseLine(curLine, nextLine, true);
|
||||||
for(Entry<Long, ScvTx> e: transactionById.entrySet()) {
|
for(Entry<Long, ScvTx> e: transactionById.entrySet()) {
|
||||||
ScvTx scvTx = e.getValue();
|
ScvTx scvTx = e.getValue();
|
||||||
scvTx.endTime=loader.maxTime;
|
scvTx.endTime=loader.maxTime;
|
||||||
|
@ -385,16 +385,16 @@ public class TextDbLoader implements IWaveformDbLoader {
|
||||||
* @throws IOException Signals that an I/O exception has occurred.
|
* @throws IOException Signals that an I/O exception has occurred.
|
||||||
* @throws InputFormatException Signals that the input format is wrong
|
* @throws InputFormatException Signals that the input format is wrong
|
||||||
*/
|
*/
|
||||||
private String parseLine(String curLine, String nextLine) throws IOException, InputFormatException {
|
private String parseLine(String curLine, String nextLine, boolean last) throws IOException, InputFormatException {
|
||||||
String[] tokens = curLine.split("\\s+");
|
String[] tokens = curLine.split("\\s+");
|
||||||
if ("tx_record_attribute".equals(tokens[0])) {
|
if ("tx_record_attribute".equals(tokens[0]) && tokens.length>4) {
|
||||||
Long id = Long.parseLong(tokens[1]);
|
Long id = Long.parseLong(tokens[1]);
|
||||||
String name = tokens[2].substring(1, tokens[2].length()-1);
|
String name = tokens[2].substring(1, tokens[2].length()-1);
|
||||||
DataType type = DataType.valueOf(tokens[3]);
|
DataType type = DataType.valueOf(tokens[3]);
|
||||||
String remaining = tokens.length > 5 ? String.join(" ", Arrays.copyOfRange(tokens, 5, tokens.length)) : "";
|
String remaining = tokens.length > 5 ? String.join(" ", Arrays.copyOfRange(tokens, 5, tokens.length)) : "";
|
||||||
TxAttributeType attrType = getAttrType(name, type, AssociationType.RECORD);
|
TxAttributeType attrType = getAttrType(name, type, AssociationType.RECORD);
|
||||||
transactionById.get(id).attributes.add(new TxAttribute(attrType, getAttrString(attrType, remaining)));
|
transactionById.get(id).attributes.add(new TxAttribute(attrType, getAttrString(attrType, remaining)));
|
||||||
} else if ("tx_begin".equals(tokens[0])) {
|
} else if ("tx_begin".equals(tokens[0]) && tokens.length>4) {
|
||||||
Long id = Long.parseLong(tokens[1]);
|
Long id = Long.parseLong(tokens[1]);
|
||||||
Long genId = Long.parseLong(tokens[2]);
|
Long genId = Long.parseLong(tokens[2]);
|
||||||
TxGenerator gen = loader.txGenerators.get(genId);
|
TxGenerator gen = loader.txGenerators.get(genId);
|
||||||
|
@ -413,7 +413,7 @@ public class TextDbLoader implements IWaveformDbLoader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
transactionById.put(id, scvTx);
|
transactionById.put(id, scvTx);
|
||||||
} else if ("tx_end".equals(tokens[0])) {
|
} else if ("tx_end".equals(tokens[0]) && tokens.length>4) {
|
||||||
Long id = Long.parseLong(tokens[1]);
|
Long id = Long.parseLong(tokens[1]);
|
||||||
ScvTx scvTx = transactionById.get(id);
|
ScvTx scvTx = transactionById.get(id);
|
||||||
assert Long.parseLong(tokens[2]) == scvTx.generatorId;
|
assert Long.parseLong(tokens[2]) == scvTx.generatorId;
|
||||||
|
@ -443,7 +443,7 @@ public class TextDbLoader implements IWaveformDbLoader {
|
||||||
}
|
}
|
||||||
txSink.put(scvTx.getId(), scvTx);
|
txSink.put(scvTx.getId(), scvTx);
|
||||||
transactionById.remove(id);
|
transactionById.remove(id);
|
||||||
} else if ("tx_relation".equals(tokens[0])) {
|
} else if ("tx_relation".equals(tokens[0]) && tokens.length>3) {
|
||||||
Long tr2 = Long.parseLong(tokens[2]);
|
Long tr2 = Long.parseLong(tokens[2]);
|
||||||
Long tr1 = Long.parseLong(tokens[3]);
|
Long tr1 = Long.parseLong(tokens[3]);
|
||||||
String relType = tokens[1].substring(1, tokens[1].length() - 1);
|
String relType = tokens[1].substring(1, tokens[1].length() - 1);
|
||||||
|
@ -483,7 +483,7 @@ public class TextDbLoader implements IWaveformDbLoader {
|
||||||
}
|
}
|
||||||
} else if (")".equals(tokens[0])) {
|
} else if (")".equals(tokens[0])) {
|
||||||
generator = null;
|
generator = null;
|
||||||
} else
|
} else if(!last)
|
||||||
throw new InputFormatException("Don't know what to do with: '" + curLine + "'");
|
throw new InputFormatException("Don't know what to do with: '" + curLine + "'");
|
||||||
return nextLine;
|
return nextLine;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue