com.quinsoft.zeidon.android.AndroidUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.quinsoft.zeidon.android.AndroidUtils.java

Source

/**
This file is part of the Zeidon Java Object Engine (Zeidon JOE).
    
Zeidon JOE is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
    
Zeidon JOE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.
    
You should have received a copy of the GNU Lesser General Public License
along with Zeidon JOE.  If not, see <http://www.gnu.org/licenses/>.
    
Copyright 2009-2015 QuinSoft
 */
package com.quinsoft.zeidon.android;

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

import org.apache.commons.io.IOUtils;

import android.content.ContextWrapper;
import android.util.Log;

import com.quinsoft.zeidon.DeserializeOi;
import com.quinsoft.zeidon.TaskQualification;
import com.quinsoft.zeidon.View;
import com.quinsoft.zeidon.ZeidonException;

/**
 * @author dgc
 *
 */
public class AndroidUtils {
    /**
     * Checks to see if the targetDbName exists.  If not it will be copied from emptyDbName,
     * which must be in the assets directory.
     *
     * @param context
     * @param emptyDbName
     * @param targetDbName
     */
    public static void initializeDatabase(ContextWrapper context, String emptyDbName, String targetDbName) {
        context.getExternalFilesDir(null); // Create files directory if necessary.
        File f = new File(targetDbName);
        if (f.exists()) // Does DB already exist?
            return;

        Log.i("AndroidUtils.initializeDatabase",
                "Initializing DB by copying " + emptyDbName + " to " + f.getAbsolutePath());
        InputStream ins = null;
        FileOutputStream fos = null;
        try {
            ins = context.getAssets().open(emptyDbName);
        } catch (IOException e) {
            throw ZeidonException.wrapException(e).prependFilename(emptyDbName);
        }

        try {
            fos = new FileOutputStream(f);
        } catch (Exception e) {
            IOUtils.closeQuietly(ins);
            throw ZeidonException.wrapException(e).prependFilename(targetDbName);
        }

        try {
            byte[] buffer = new byte[1024];
            int size = 0;

            while ((size = ins.read(buffer, 0, buffer.length)) >= 0)
                fos.write(buffer, 0, size);
        } catch (IOException e) {
            throw ZeidonException.wrapException(e).prependFilename(emptyDbName);
        } finally {
            IOUtils.closeQuietly(ins);
            IOUtils.closeQuietly(fos);
        }
    }

    static ZeidonException appendViewInfo(Exception e, android.view.View androidView) {
        ZeidonException ze = ZeidonException.wrapException(e);
        ze.appendMessage("Android View ID: %d", androidView.getId());
        if (androidView.getTag() != null)
            ze.appendMessage("Tag: %s", androidView.getTag());

        return ze;
    }

    /**
     * Activates an OI from an Android external file.
     *
     * @param task
     * @param filename
     * @return
     */
    public static View activateOiFromFile(TaskQualification task, String lodDefName, String filename) {
        return new DeserializeOi(task).fromFile(filename).setLodDef(lodDefName).activateFirst();
    }
}