001/* 002 * Copyright (C) 2014 XStream Committers. 003 * All rights reserved. 004 * 005 * Created on 09. January 2014 by Joerg Schaible 006 */ 007package com.thoughtworks.xstream.security; 008 009/** 010 * Wrapper to negate another type permission. 011 * <p> 012 * If the wrapped {@link TypePermission} allows the type, this instance will throw a {@link ForbiddenClassException} 013 * instead. An instance of this permission cannot be used to allow a type. 014 * </p> 015 * 016 * @author Jörg Schaible 017 * @since 1.4.7 018 */ 019public class NoPermission implements TypePermission { 020 021 private final TypePermission permission; 022 023 /** 024 * Construct a NoPermission. 025 * 026 * @param permission the permission to negate or <code>null</code> to forbid any type 027 * @since 1.4.7 028 */ 029 public NoPermission(final TypePermission permission) { 030 this.permission = permission; 031 } 032 033 public boolean allows(final Class type) { 034 if (permission == null || permission.allows(type)) { 035 throw new ForbiddenClassException(type); 036 } 037 return false; 038 } 039}