001 /* 002 * Jpkg - Java library and tools for operating system package creation. 003 * 004 * Copyright (c) 2007-2008 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.ant.dpkg.permissions; 032 033 import org.apache.commons.io.FilenameUtils; 034 035 import com.threerings.antidote.field.ListField; 036 import com.threerings.jpkg.PathUtils; 037 import com.threerings.jpkg.PermissionsMap; 038 039 040 /** 041 * The <dpkg> task <package> <permissions> field. Used to add package permission maps. 042 * @see com.threerings.jpkg.PathPermissions 043 * @see com.threerings.jpkg.PermissionsMap 044 */ 045 public class Permissions extends ListField<Permission> 046 { 047 // from Field 048 public String getFieldName () 049 { 050 return "permissions"; 051 } 052 053 @Override // from ListField 054 public String getChildFieldName () 055 { 056 return "permission"; 057 } 058 059 /** 060 * Ant adder field: Add a {@link Permission}. 061 */ 062 public void addPermission (Permission permission) 063 { 064 appendRequiresValidation(permission); 065 } 066 067 /** 068 * Return the list of <permission> fields defined in this section. 069 */ 070 public PermissionsMap getPermissionsMap (String prefix) 071 { 072 final PermissionsMap map = new PermissionsMap(); 073 for (final Permission permission : getValidatedFieldList()) { 074 for (final Path pathField : permission.getPaths()) { 075 final String path = pathField.getPath(); 076 077 // if the path is absolute, starts with /, then add the path unmodified to the 078 // permissionsmap 079 if (path.startsWith("/")) { 080 map.addPathPermissions(path, permission.getPathPermissions()); 081 082 // if the path is relative, does not start with /, then prepend the path with 083 // the prefix, and then add it to the permissionsmap. 084 } else { 085 final String pathWithPrefix = FilenameUtils.concat(prefix, PathUtils.normalize(path)); 086 map.addPathPermissions(pathWithPrefix, permission.getPathPermissions()); 087 } 088 } 089 } 090 return map; 091 } 092 093 @Override // from BaseComponent 094 protected void validateField () 095 { 096 if (noChildFieldsDefined()) { 097 return; 098 } 099 100 switch (validateFieldList()) { 101 case ALL_INVALID: 102 case SOME_INVALID: 103 return; 104 case ALL_VALID: 105 break; 106 } 107 } 108 }