Java tutorial
/* * Copyright (c) 2011, Cloudera, Inc. All Rights Reserved. * * Cloudera, Inc. licenses this file to you 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 * * This software 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 com.cloudera.hoop.fs; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.permission.FsPermission; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import java.net.URI; import java.util.LinkedHashMap; import java.util.Map; /** * File system utilities used by Hoop classes. */ public class FSUtils { /** * Constant for the default permission string ('default'). */ public static final String DEFAULT_PERMISSION = "default"; /** * Converts a Unix permission symbolic representation * (i.e. -rwxr--r--) into a Hadoop permission. * * @param str Unix permission symbolic representation. * @return the Hadoop permission. If the given string was * 'default', it returns <code>FsPermission.getDefault()</code>. */ public static FsPermission getPermission(String str) { FsPermission permission; if (str.equals(DEFAULT_PERMISSION)) { permission = FsPermission.getDefault(); } else { //TODO: there is something funky here, it does not detect 'x' permission = FsPermission.valueOf(str); } return permission; } /** * Replaces the <code>SCHEME://HOST:PORT</code> of a Hadoop * <code>Path</code> with the specified base URL. * * @param path Hadoop path to replace the * <code>SCHEME://HOST:PORT</code>. * @param hoopBaseUrl base URL to replace it with. * @return the path using the given base URL. */ public static Path convertPathToHoop(Path path, String hoopBaseUrl) { URI uri = path.toUri(); String filePath = uri.getRawPath(); String hoopPath = hoopBaseUrl + filePath; return new Path(hoopPath); } /** * Converts a Hadoop permission into a Unix permission symbolic * representation (i.e. -rwxr--r--) or default if the permission is NULL. * * @param p Hadoop permission. * @return the Unix permission symbolic representation or default if the * permission is NULL. */ private static String permissionToString(FsPermission p) { return (p == null) ? "default" : "-" + p.getUserAction().SYMBOL + p.getGroupAction().SYMBOL + p.getOtherAction().SYMBOL; } /** * Converts a Hadoop <code>FileStatus</code> object into a JSON array * object. It replaces the <code>SCHEME://HOST:PORT</code> of the path * with the specified URL. * <p/> * @param status Hadoop file status. * @param hoopBaseUrl base URL to replace the * <code>SCHEME://HOST:PORT</code> in the file status. * @return The JSON representation of the file status. */ @SuppressWarnings("unchecked") public static Map fileStatusToJSON(FileStatus status, String hoopBaseUrl) { Map json = new LinkedHashMap(); json.put("path", convertPathToHoop(status.getPath(), hoopBaseUrl).toString()); json.put("isDir", status.isDir()); json.put("len", status.getLen()); json.put("owner", status.getOwner()); json.put("group", status.getGroup()); json.put("permission", permissionToString(status.getPermission())); json.put("accessTime", status.getAccessTime()); json.put("modificationTime", status.getModificationTime()); json.put("blockSize", status.getBlockSize()); json.put("replication", status.getReplication()); return json; } /** * Converts a Hadoop <code>FileStatus</code> array into a JSON array * object. It replaces the <code>SCHEME://HOST:PORT</code> of the path * with the specified URL. * <p/> * @param status Hadoop file status array. * @param hoopBaseUrl base URL to replace the * <code>SCHEME://HOST:PORT</code> in the file status. * @return The JSON representation of the file status array. */ @SuppressWarnings("unchecked") public static JSONArray fileStatusToJSON(FileStatus[] status, String hoopBaseUrl) { JSONArray json = new JSONArray(); if (status != null) { for (FileStatus s : status) { json.add(fileStatusToJSON(s, hoopBaseUrl)); } } return json; } /** * Converts an object into a Json Map with with one key-value entry. * <p/> * It assumes the given value is either a JSON primitive type or a * <code>JsonAware</code> instance. * * @param name name for the key of the entry. * @param value for the value of the entry. * @return the JSON representation of the key-value pair. */ @SuppressWarnings("unchecked") public static JSONObject toJSON(String name, Object value) { JSONObject json = new JSONObject(); json.put(name, value); return json; } }