import org.apache.uima.UIMAException;
import org.apache.uima.cas.SerialFormat;
import org.apache.uima.fit.factory.JCasFactory;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.cas.FSArray;
import org.apache.uima.util.CasIOUtils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * Example main for saving the CAS in compressed binary form 6 using 3 different settings.
 */

public class SaveCompressedBinary {

    public static JCas createJCas() throws UIMAException {
        JCas jCas = JCasFactory.createJCas();
        jCas.setDocumentText("text");
        jCas.setDocumentLanguage("en");
        Container container = new Container(jCas, 0, 4);
        FeatureAnnotation feature = new FeatureAnnotation(jCas, 0, 4);
        feature.setName("Some feature");
        feature.setValue(1.0);
        feature.addToIndexes();
        FSArray features = new FSArray(jCas,1 );
        features.set(0, feature);
        container.setFeatures(features);
        container.addToIndexes();
        return jCas;
    }

    public static void main(String[] args) throws UIMAException, IOException {
        try {
            JCas jCas = createJCas();
            try (FileOutputStream outputStream =
                         new FileOutputStream(new File("compressed-filtered.bin"))) {
                CasIOUtils.save(jCas.getCas(), outputStream, SerialFormat.COMPRESSED_FILTERED);
                System.out.println("Saving compressed-filtered.bin completed");
            }
            try (FileOutputStream outputStream =
                         new FileOutputStream(new File("compressed-filtered-ts.bin"))) {
                CasIOUtils.save(jCas.getCas(), outputStream, SerialFormat.COMPRESSED_FILTERED_TS);
                System.out.println("Saving compressed-filtered-ts.bin completed");
            }
            try (FileOutputStream outputStream =
                         new FileOutputStream(new File("compressed-filtered-tsi.bin"))) {
                CasIOUtils.save(jCas.getCas(), outputStream, SerialFormat.COMPRESSED_FILTERED_TSI);
                System.out.println("Saving compressed-filtered-tsi.bin completed");
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }

}
