org.opendatakit.common.android.utilities.Base64Wrapper.java Source code

Java tutorial

Introduction

Here is the source code for org.opendatakit.common.android.utilities.Base64Wrapper.java

Source

/*
 * Copyright (C) 2011-2013 University of Washington
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */

package org.opendatakit.common.android.utilities;

import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.apache.commons.lang3.CharEncoding;

/**
 * Wrapper class for accessing Base64 functionality. This allows API Level 7
 * deployment of ODK Survey while enabling API Level 8 and higher phone to
 * support encryption.
 *
 * @author mitchellsundt@gmail.com
 *
 */
public class Base64Wrapper {

    private static final int FLAGS = 2;// NO_WRAP
    private Class<?> base64 = null;

    public Base64Wrapper() throws ClassNotFoundException {
        base64 = this.getClass().getClassLoader().loadClass("android.util.Base64");
    }

    public String encodeToString(byte[] ba) {
        Class<?>[] argClassList = new Class[] { byte[].class, int.class };
        try {
            Method m = base64.getDeclaredMethod("encode", argClassList);
            Object[] argList = new Object[] { ba, FLAGS };
            Object o = m.invoke(null, argList);
            byte[] outArray = (byte[]) o;
            String s = new String(outArray, CharEncoding.UTF_8);
            return s;
        } catch (SecurityException e) {
            e.printStackTrace();
            throw new IllegalArgumentException(e.toString());
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
            throw new IllegalArgumentException(e.toString());
        } catch (IllegalAccessException e) {
            e.printStackTrace();
            throw new IllegalArgumentException(e.toString());
        } catch (InvocationTargetException e) {
            e.printStackTrace();
            throw new IllegalArgumentException(e.toString());
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            throw new IllegalArgumentException(e.toString());
        }
    }

    public byte[] decode(String base64String) {
        Class<?>[] argClassList = new Class[] { String.class, int.class };
        Object o;
        try {
            Method m = base64.getDeclaredMethod("decode", argClassList);
            Object[] argList = new Object[] { base64String, FLAGS };
            o = m.invoke(null, argList);
        } catch (SecurityException e) {
            e.printStackTrace();
            throw new IllegalArgumentException(e.toString());
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
            throw new IllegalArgumentException(e.toString());
        } catch (IllegalAccessException e) {
            e.printStackTrace();
            throw new IllegalArgumentException(e.toString());
        } catch (InvocationTargetException e) {
            e.printStackTrace();
            throw new IllegalArgumentException(e.toString());
        }
        return (byte[]) o;
    }
}