Example usage for org.apache.commons.compress.utils ByteUtils toLittleEndian

List of usage examples for org.apache.commons.compress.utils ByteUtils toLittleEndian

Introduction

In this page you can find the example usage for org.apache.commons.compress.utils ByteUtils toLittleEndian.

Prototype

public static void toLittleEndian(final byte[] b, final long value, final int off, final int length) 

Source Link

Document

Inserts the given value into the array as a little endian sequence of the given length starting at the given offset.

Usage

From source file:org.apache.hawq.pxf.plugins.ignite.IgnitePartitionFragmenter.java

/**
 * Returns list of fragments for Ignite table queries
 *
 * @throws UnsupportedOperationException if a partition of unknown type was found
 *
 * @return a list of fragments/*  ww w  .  j ava  2  s.  c  o  m*/
 */
@Override
public List<Fragment> getFragments() throws UnsupportedOperationException {
    if (LOG.isDebugEnabled()) {
        LOG.debug("getFragments() called; dataSource is '" + inputData.getDataSource() + "'");
    }

    byte[] fragmentMetadata = null;
    byte[] fragmentUserdata = null;

    if (partitionType == null) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("getFragments() found no partition");
        }
        Fragment fragment = new Fragment(inputData.getDataSource(), replicaHostAddressWrapped, fragmentMetadata,
                fragmentUserdata);
        fragments.add(fragment);
        if (LOG.isDebugEnabled()) {
            LOG.debug("getFragments() successful");
        }
        return fragments;
    }

    switch (partitionType) {
    case DATE: {
        if (LOG.isDebugEnabled()) {
            LOG.debug("getFragments() found DATE partition");
        }
        int currInterval = intervalNum;

        Calendar fragStart = rangeStart;
        while (fragStart.before(rangeEnd)) {
            Calendar fragEnd = (Calendar) fragStart.clone();
            switch (intervalType) {
            case DAY:
                fragEnd.add(Calendar.DAY_OF_MONTH, currInterval);
                break;
            case MONTH:
                fragEnd.add(Calendar.MONTH, currInterval);
                break;
            case YEAR:
                fragEnd.add(Calendar.YEAR, currInterval);
                break;
            }
            if (fragEnd.after(rangeEnd))
                fragEnd = (Calendar) rangeEnd.clone();

            fragmentMetadata = new byte[16];
            ByteUtils.toLittleEndian(fragmentMetadata, fragStart.getTimeInMillis(), 0, 8);
            ByteUtils.toLittleEndian(fragmentMetadata, fragEnd.getTimeInMillis(), 8, 8);
            Fragment fragment = new Fragment(inputData.getDataSource(), replicaHostAddressWrapped,
                    fragmentMetadata, fragmentUserdata);

            fragments.add(fragment);

            // Continue the previous fragment
            fragStart = fragEnd;
        }
        break;
    }
    case INT: {
        if (LOG.isDebugEnabled()) {
            LOG.debug("getFragments() found INT partition");
        }
        int rangeStart = Integer.parseInt(range[0]);
        int rangeEnd = Integer.parseInt(range[1]);
        int currInterval = intervalNum;

        int fragStart = rangeStart;
        while (fragStart < rangeEnd) {
            int fragEnd = fragStart + currInterval;
            if (fragEnd > rangeEnd) {
                fragEnd = rangeEnd;
            }

            fragmentMetadata = new byte[8];
            ByteUtils.toLittleEndian(fragmentMetadata, fragStart, 0, 4);
            ByteUtils.toLittleEndian(fragmentMetadata, fragEnd, 4, 4);
            Fragment fragment = new Fragment(inputData.getDataSource(), replicaHostAddressWrapped,
                    fragmentMetadata, fragmentUserdata);

            fragments.add(fragment);

            // Continue the previous fragment
            fragStart = fragEnd;
        }
        break;
    }
    case ENUM: {
        if (LOG.isDebugEnabled()) {
            LOG.debug("getFragments() found ENUM partition");
        }
        for (String frag : range) {
            fragmentMetadata = frag.getBytes();
            Fragment fragment = new Fragment(inputData.getDataSource(), replicaHostAddressWrapped,
                    fragmentMetadata, fragmentUserdata);
            fragments.add(fragment);
        }
        break;
    }
    default: {
        throw new UnsupportedOperationException("getFragments() found a partition of unknown type and failed");
    }
    }

    if (LOG.isDebugEnabled()) {
        LOG.debug("getFragments() successful");
    }
    return fragments;
}