diff --git a/common/src/main/java/ctbrec/io/PostProcessorJsonAdapter.java b/common/src/main/java/ctbrec/io/PostProcessorJsonAdapter.java index d5e1f937..298dbbd7 100644 --- a/common/src/main/java/ctbrec/io/PostProcessorJsonAdapter.java +++ b/common/src/main/java/ctbrec/io/PostProcessorJsonAdapter.java @@ -1,16 +1,15 @@ package ctbrec.io; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.util.Map.Entry; - import com.squareup.moshi.JsonAdapter; import com.squareup.moshi.JsonReader; import com.squareup.moshi.JsonReader.Token; import com.squareup.moshi.JsonWriter; - import ctbrec.recorder.postprocessing.PostProcessor; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.Map.Entry; + public class PostProcessorJsonAdapter extends JsonAdapter { @Override @@ -18,16 +17,18 @@ public class PostProcessorJsonAdapter extends JsonAdapter { reader.beginObject(); Object type = null; PostProcessor postProcessor = null; - while(reader.hasNext()) { + while (reader.hasNext()) { try { Token token = reader.peek(); - if(token == Token.NAME) { + if (token == Token.NAME) { String key = reader.nextName(); - if(key.equals("type")) { + if (key.equals("type")) { type = reader.readJsonValue(); Class modelClass = Class.forName(type.toString()); postProcessor = (PostProcessor) modelClass.getDeclaredConstructor().newInstance(); - } else if(key.equals("config")) { + } else if (key.equals("enabled")) { + postProcessor.setEnabled(reader.nextBoolean()); + } else if (key.equals("config")) { reader.beginObject(); } else { String value = reader.nextString(); @@ -36,7 +37,8 @@ public class PostProcessorJsonAdapter extends JsonAdapter { } else { reader.skipValue(); } - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | + NoSuchMethodException | SecurityException e) { throw new IOException("Couldn't instantiate post-processor class [" + type + "]", e); } } @@ -50,6 +52,7 @@ public class PostProcessorJsonAdapter extends JsonAdapter { public void toJson(JsonWriter writer, PostProcessor pp) throws IOException { writer.beginObject(); writer.name("type").value(pp.getClass().getName()); + writer.name("enabled").value(pp.isEnabled()); writer.name("config"); writer.beginObject(); for (Entry entry : pp.getConfig().entrySet()) { diff --git a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java index 27ca2241..3cd5f201 100644 --- a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java +++ b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java @@ -38,7 +38,7 @@ public class NextGenLocalRecorder implements Recorder { public static final boolean IGNORE_CACHE = true; private final List models = Collections.synchronizedList(new ArrayList<>()); private final Config config; - private volatile boolean recording = true; + private volatile boolean recording; private final ReentrantLock recorderLock = new ReentrantLock(); private final ReentrantLock modelGroupLock = new ReentrantLock(); private final RecorderHttpClient client; @@ -190,10 +190,14 @@ public class NextGenLocalRecorder implements Recorder { List postProcessors = config.getSettings().postProcessors; PostProcessingContext ctx = createPostProcessingContext(recording); for (PostProcessor postProcessor : postProcessors) { - LOG.debug("Running post-processor: {}", postProcessor.getName()); - boolean continuePP = postProcessor.postprocess(ctx); - if (!continuePP) { - break; + if (postProcessor.isEnabled()) { + LOG.debug("Running post-processor: {}", postProcessor.getName()); + boolean continuePP = postProcessor.postprocess(ctx); + if (!continuePP) { + break; + } + } else { + LOG.debug("Skipping post-processor {} because it is disabled", postProcessor.getName()); } } recording.refresh(); @@ -445,7 +449,7 @@ public class NextGenLocalRecorder implements Recorder { } @Override - public List getRecordings() throws IOException { + public List getRecordings() { return recordingManager.getAll(); } diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPostProcessor.java b/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPostProcessor.java index 4d26953c..3aa5afab 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPostProcessor.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPostProcessor.java @@ -1,21 +1,18 @@ package ctbrec.recorder.postprocessing; +import lombok.Getter; +import lombok.Setter; + import java.util.HashMap; import java.util.Map; +@Getter +@Setter public abstract class AbstractPostProcessor implements PostProcessor { private Map config = new HashMap<>(); - @Override - public Map getConfig() { - return config; - } - - @Override - public void setConfig(Map conf) { - this.config = conf; - } + private boolean enabled = true; @Override public String toString() { diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/PostProcessor.java b/common/src/main/java/ctbrec/recorder/postprocessing/PostProcessor.java index 8e2d474b..f162a03f 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/PostProcessor.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/PostProcessor.java @@ -9,6 +9,7 @@ public interface PostProcessor extends Serializable { /** * Runs the post-processing code on the given recording + * * @param ctx {@link PostProcessingContext}, which allows access to post-processing related objects * @return false to stop futher post-processing, true to continue * @throws IOException @@ -16,6 +17,11 @@ public interface PostProcessor extends Serializable { */ boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException; + boolean isEnabled(); + + void setEnabled(boolean enabled); + Map getConfig(); + void setConfig(Map conf); }