Source:
<code>public FileRawData execute( @DescribeParameter(name="layer", description="WFS layer to query") String layer, @DescribeParameter(name="subset", description="Subset, semi-colon separated") String subset, @DescribeParameter(name="filter", description="Post-processing filter to apply on output file", min=0) String filter, @DescribeParameter(name="callbackUrl", description="Callback URL", min=0) URL callbackUrl, @DescribeParameter(name="callbackParams", description="Parameters to append to the callback", min=0) String callbackParams, ProgressListener progressListener ) throws ProcessException { try { final int threadCount = getThreadCount(); final int fileLimit = getFileLimit(); Converter converter = null; if (threadCount <= 0) { throw new ProcessException("threadCount set to 0 or below, job will not run"); } if (fileLimit <= 0) { throw new ProcessException("fileLimit set to 0 or below, job will not run"); } <START> if (filter != null && !filter.isEmpty()) { <END> converter = Converter.newInstance(filter); } File outputFile = getResourceManager().getOutputResource( getResourceManager().getExecutionId(true), layer + ".nc").file(); String filePath = outputFile.toPath().toAbsolutePath().toString(); GoGoDuck ggd = new GoGoDuck(catalog, layer, subset, filePath, converter, fileLimit); ggd.setTmpDir(getWorkingDir()); ggd.setThreadCount(threadCount); ggd.setProgressListener(progressListener); Path outputPath = ggd.run(); notifySuccess(callbackUrl, callbackParams); return new FileRawData(outputPath.toFile(), ggd.getMimeType(), ggd.getExtension()); } catch (GoGoDuckException e) { logger.error(e.toString()); notifyFailure(callbackUrl, callbackParams); throw new ProcessException(e); } }</code><technical_language>this a comma separated list of filters. array out of it, pass GGD</technical_language>

Target:
public FileRawData execute( @DescribeParameter(name="layer", description="WFS layer to query") String layer, @DescribeParameter(name="subset", description="Subset, semi-colon separated") String subset, @DescribeParameter(name="filter", description="Post-processing filter to apply on output file", min=0) String filter, @DescribeParameter(name="callbackUrl", description="Callback URL", min=0) URL callbackUrl, @DescribeParameter(name="callbackParams", description="Parameters to append to the callback", min=0) String callbackParams, ProgressListener progressListener ) throws ProcessException { try { final int threadCount = getThreadCount(); final int fileLimit = getFileLimit(); List<Converter> converters = new ArrayList<>(); if (threadCount <= 0) { throw new ProcessException("threadCount set to 0 or below, job will not run"); } if (fileLimit <= 0) { throw new ProcessException("fileLimit set to 0 or below, job will not run"); } if (filter != null && !filter.isEmpty()) { List<String> filterList = new ArrayList<>(Arrays.asList(filter.split(","))); for (String filterType : filterList) { Converter converter = Converter.newInstance(filterType); converters.add(converter); } } File outputFile = getResourceManager().getOutputResource( getResourceManager().getExecutionId(true), layer + ".nc").file(); String filePath = outputFile.toPath().toAbsolutePath().toString(); GoGoDuck ggd = new GoGoDuck(catalog, layer, subset, filePath, converters, fileLimit); ggd.setTmpDir(getWorkingDir()); ggd.setThreadCount(threadCount); ggd.setProgressListener(progressListener); Path outputPath = ggd.run(); notifySuccess(callbackUrl, callbackParams); return new FileRawData(outputPath.toFile(), ggd.getMimeType(), ggd.getExtension()); } catch (GoGoDuckException e) { logger.error(e.toString()); notifyFailure(callbackUrl, callbackParams); throw new ProcessException(e); } }