// Copyright © 2011-2014, Esko Luontola <www.orfjackal.net>
// This software is released under the Apache License 2.0.
// The license text is at http://www.apache.org/licenses/LICENSE-2.0
package fi.jumi.core.ipc.encoding;
import fi.jumi.actors.eventizers.Event;
import fi.jumi.core.config.*;
import fi.jumi.core.ipc.api.RequestListener;
import fi.jumi.core.ipc.buffer.IpcBuffer;
import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe
public class RequestListenerEncoding extends EncodingUtil implements RequestListener, MessageEncoding<RequestListener> {
private static final byte runTests = 1;
private static final byte shutdown = 2;
// SuiteConfiguration properties
private static final String classpath = "classpath";
private static final String jvmOptions = "jvmOptions";
private static final String workingDirectory = "workingDirectory";
private static final String includedTestsPattern = "includedTestsPattern";
private static final String excludedTestsPattern = "excludedTestsPattern";
public RequestListenerEncoding(IpcBuffer buffer) {
super(buffer);
}
@Override
public String getInterfaceName() {
return RequestListener.class.getName();
}
@Override
public int getInterfaceVersion() {
return 1;
}
@Override
public void encode(Event<RequestListener> message) {
message.fireOn(this);
}
@Override
public void decode(RequestListener target) {
byte type = readEventType();
switch (type) {
case runTests:
target.runTests(readSuiteConfiguration());
break;
case shutdown:
target.shutdown();
break;
default:
throw new IllegalArgumentException("Unknown type " + type);
}
}
private SuiteConfiguration readSuiteConfiguration() {
SuiteConfigurationBuilder config = new SuiteConfigurationBuilder();
while (true) {
String name = readNullableString();
if (name == null) {
return config.freeze();
}
switch (name) {
case classpath:
config.setClasspath(readUris());
break;
case jvmOptions:
config.setJvmOptions(readStrings());
break;
case workingDirectory:
config.setWorkingDirectory(readUri());
break;
case includedTestsPattern:
config.setIncludedTestsPattern(readString());
break;
case excludedTestsPattern:
config.setExcludedTestsPattern(readString());
break;
default:
throw new IllegalArgumentException("Unexpected property: " + name);
}
}
}
// encoding events
@Override
public void runTests(SuiteConfiguration config) {
writeEventType(runTests);
writeString(classpath);
writeUris(config.getClasspath());
writeString(jvmOptions);
writeStrings(config.getJvmOptions());
writeString(workingDirectory);
writeUri(config.getWorkingDirectory());
writeString(includedTestsPattern);
writeString(config.getIncludedTestsPattern());
writeString(excludedTestsPattern);
writeString(config.getExcludedTestsPattern());
writeNullableString(null); // end of this null-terminated list
}
@Override
public void shutdown() {
writeEventType(shutdown);
}
}