Separated legacy tag format from actual one. Not tested
This commit is contained in:
parent
d7689a7444
commit
98cfc04e49
103
numass-core/src/main/java/inr/numass/NumassEnvelopeType.java
Normal file
103
numass-core/src/main/java/inr/numass/NumassEnvelopeType.java
Normal file
@ -0,0 +1,103 @@
|
||||
package inr.numass;
|
||||
|
||||
import hep.dataforge.io.envelopes.*;
|
||||
import hep.dataforge.values.Value;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static hep.dataforge.io.envelopes.DefaultEnvelopeType.DEFAULT_ENVELOPE_TYPE;
|
||||
|
||||
/**
|
||||
* An envelope type for legacy numass tags. Reads legacy tag and writes DF02 tags
|
||||
*/
|
||||
public class NumassEnvelopeType implements EnvelopeType {
|
||||
|
||||
@Override
|
||||
public int getCode() {
|
||||
return DEFAULT_ENVELOPE_TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "numass";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return "Numass legacy envelope";
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnvelopeReader getReader(Map<String, String> properties) {
|
||||
return new NumassEnvelopeReader();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnvelopeWriter getWriter(Map<String, String> properties) {
|
||||
return new DefaultEnvelopeWriter(this, MetaType.resolve(properties));
|
||||
}
|
||||
|
||||
private static class LegacyTag extends EnvelopeTag {
|
||||
private final byte[] START_SEQUENCE = {'#', '!'};
|
||||
private final byte[] END_SEQUENCE = {'!', '#', '\r', '\n'};
|
||||
|
||||
@Override
|
||||
protected byte[] getStartSequence() {
|
||||
return START_SEQUENCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected byte[] getEndSequence() {
|
||||
return END_SEQUENCE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the length of tag in bytes. -1 means undefined size in case tag was modified
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getLength() {
|
||||
return 30;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read leagscy version 1 tag without leading tag head
|
||||
*
|
||||
* @param buffer
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
protected Map<String, Value> readHeader(ByteBuffer buffer) throws IOException {
|
||||
Map<String, Value> res = new HashMap<>();
|
||||
|
||||
int type = buffer.getInt(2);
|
||||
res.put(Envelope.TYPE_KEY, Value.of(type));
|
||||
|
||||
short metaTypeCode = buffer.getShort(10);
|
||||
MetaType metaType = MetaType.resolve(metaTypeCode);
|
||||
|
||||
if (metaType != null) {
|
||||
res.put(Envelope.META_TYPE_KEY, Value.of(metaType.getName()));
|
||||
} else {
|
||||
LoggerFactory.getLogger(EnvelopeTag.class).warn("Could not resolve meta type. Using default");
|
||||
}
|
||||
|
||||
long metaLength = Integer.toUnsignedLong(buffer.getInt(14));
|
||||
res.put(Envelope.META_LENGTH_KEY, Value.of(metaLength));
|
||||
long dataLength = Integer.toUnsignedLong(buffer.getInt(22));
|
||||
res.put(Envelope.DATA_LENGTH_KEY, Value.of(dataLength));
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
private static class NumassEnvelopeReader extends DefaultEnvelopeReader {
|
||||
@Override
|
||||
protected EnvelopeTag newTag() {
|
||||
return new LegacyTag();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
inr.numass.NumassEnvelopeType
|
Loading…
Reference in New Issue
Block a user