All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.packenius.datadivider.DataDivider Maven / Gradle / Ivy

package com.packenius.datadivider;

import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.packenius.datadivider.javaclass.JavaClassFileDescription;
import com.packenius.datadivider.jpeg.JpegDivider;
import com.packenius.datadivider.raw_content.RawContentDescription;
import com.packenius.dumpapi.DumpReader;
import com.packenius.dumpapi.MainDumpBlock;

/**
 * Divides a given byte array in the best possible way.
 * @author Christian Packenius, 2019.
 */
public class DataDivider {
    /**
     * All types of data descriptions that shall be tested.
     */
    private List> types = new ArrayList<>();

    /**
     * Standard constructor with default type(s).
     */
    public DataDivider() {
        types.add(JavaClassFileDescription.class);
        types.add(JpegDivider.class);
        types.add(RawContentDescription.class);
    }

    /**
     * Creates a data divider with a single type to check.
     */
    public DataDivider(Class mdb) {
        types.add(mdb);
    }

    /**
     * Creates a data divider with the given array of types to check.
     */
    public DataDivider(Class[] mdbs) {
        types.addAll(Arrays.asList(mdbs));
    }

    /**
     * Creates a data divider with the given list of types to check.
     */
    public DataDivider(List> mdbs) {
        types.addAll(mdbs);
    }

    /**
     * Adds another type to check.
     */
    public void addType(Class mdb) {
        if (!types.contains(mdb)) {
            types.add(mdb);
        }
    }

    /**
     * Returns first type that matches the content.
     */
    public MainDumpBlock divide(byte[] content) {
        for (Class clazz : types) {
            try {
                DumpReader dumpReader = new DumpReader(content);
                Constructor constructor = clazz.getConstructor(DumpReader.class);
                constructor.newInstance(dumpReader);
                return dumpReader.getMainBlock();
            } catch (Exception e) {
                // Okay, not matching. Check next type.
                System.err.println("Not: " + clazz.getSimpleName() + ", reason: " + e.getMessage());
                // e.printStackTrace();
            }
        }

        // No matching type found.
        return null;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy