Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
/*
 * Copyright (C) 2012 The Android Open Source Project
 * Copyright (C) 2009-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.
 */

import java.io.File;

import java.util.ArrayList;

import android.os.Environment;

public class Main {
    private static final String ODK_FOLDER_NAME = "opendatakit";
    private static final String CONFIG_FOLDER_NAME = "config";

    public static String asConfigRelativePath(String appName, File fileUnderAppConfigName) {
        String relativePath = asRelativePath(appName, fileUnderAppConfigName);
        if (!relativePath.startsWith(CONFIG_FOLDER_NAME + File.separator)) {
            throw new IllegalArgumentException("File is not located under config folder");
        }
        relativePath = relativePath.substring(CONFIG_FOLDER_NAME.length() + File.separator.length());
        if (relativePath.contains(File.separator + "..")) {
            throw new IllegalArgumentException("File contains " + File.separator + "..");
        }
        return relativePath;
    }

    /**
     * Returns the relative path beginning after the getAppFolder(appName) directory.
     * The relative path does not start or end with a '/'
     *
     * @param appName
     * @param fileUnderAppName
     * @return
     */
    public static String asRelativePath(String appName, File fileUnderAppName) {
        // convert fileUnderAppName to a relative path such that if
        // we just append it to the AppFolder, we have a full path.
        File parentDir = new File(getAppFolder(appName));

        ArrayList<String> pathElements = new ArrayList<String>();

        File f = fileUnderAppName;
        while (f != null && !f.equals(parentDir)) {
            pathElements.add(f.getName());
            f = f.getParentFile();
        }

        if (f == null) {
            throw new IllegalArgumentException("file is not located under this appName (" + appName + ")!");
        }

        StringBuilder b = new StringBuilder();
        for (int i = pathElements.size() - 1; i >= 0; --i) {
            String element = pathElements.get(i);
            b.append(element);
            if (i != 0) {
                b.append(File.separator);
            }
        }
        return b.toString();

    }

    public static String getAppFolder(String appName) {
        String path = getOdkFolder() + File.separator + appName;
        return path;
    }

    public static String getOdkFolder() {
        String path = Environment.getExternalStorageDirectory() + File.separator + ODK_FOLDER_NAME;
        return path;
    }
}