001 /* 002 * Jpkg - Java library and tools for operating system package creation. 003 * 004 * Copyright (c) 2007 Three Rings Design, Inc. 005 * All rights reserved. 006 * 007 * Redistribution and use in source and binary forms, with or without 008 * modification, are permitted provided that the following conditions 009 * are met: 010 * 1. Redistributions of source code must retain the above copyright 011 * notice, this list of conditions and the following disclaimer. 012 * 2. Redistributions in binary form must reproduce the above copyright 013 * notice, this list of conditions and the following disclaimer in the 014 * documentation and/or other materials provided with the distribution. 015 * 3. Neither the name of the copyright owner nor the names of contributors 016 * may be used to endorse or promote products derived from this software 017 * without specific prior written permission. 018 * 019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 021 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 022 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 023 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 024 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 025 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 026 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 027 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 028 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 029 * POSSIBILITY OF SUCH DAMAGE. 030 */ 031 package com.threerings.jpkg; 032 033 import java.util.HashMap; 034 import java.util.Map; 035 import java.util.Set; 036 import java.util.Map.Entry; 037 038 /** 039 * Maps arbitrary permissions onto associated paths. 040 */ 041 public class PermissionsMap 042 { 043 /** 044 * Add a {@link PathPermissions} object associated with a given path. This method guarantees that there 045 * will only be one {@link PathPermissions} object applied to a given path. Calling this method more than 046 * once for the same path will replace any permissions already set for that path. The path will 047 * be normalized. 048 * @throws InvalidPathException If the supplied path is invalid. 049 */ 050 public void addPathPermissions (String path, PathPermissions permissions) 051 { 052 _permissions.put(PathUtils.normalize(path), permissions); 053 } 054 055 /** 056 * Return a {@link Set} of {@link Entry} objects holding paths and the {@link PathPermissions} object 057 * associated with that path. 058 */ 059 public Set<Entry<String, PathPermissions>> getPermissions () 060 { 061 return _permissions.entrySet(); 062 } 063 064 /** 065 * Return a {@link PathPermissions} object for the supplied path if it exists, null otherwise. 066 */ 067 public PathPermissions getPathPermissions (String path) 068 { 069 return _permissions.get(path); 070 } 071 072 @Override // from Object 073 public String toString () 074 { 075 final StringBuilder builder = new StringBuilder(); 076 for (final Entry<String, PathPermissions> entry : getPermissions()) { 077 if (builder.length() > 0) { 078 builder.append('\n'); 079 } 080 builder.append("path=[").append(entry.getKey()).append("], permission=[").append(entry.getValue()).append("]."); 081 } 082 return builder.toString(); 083 } 084 085 /** Mapping of path to the permissions for that path. */ 086 Map<String, PathPermissions> _permissions = new HashMap<String, PathPermissions>(); 087 }