001/* 002 Licensed to the Apache Software Foundation (ASF) under one 003 or more contributor license agreements. See the NOTICE file 004 distributed with this work for additional information 005 regarding copyright ownership. The ASF licenses this file 006 to you under the Apache License, Version 2.0 (the 007 "License"); you may not use this file except in compliance 008 with the License. You may obtain a copy of the License at 009 010 http://www.apache.org/licenses/LICENSE-2.0 011 012 Unless required by applicable law or agreed to in writing, 013 software distributed under the License is distributed on an 014 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 KIND, either express or implied. See the License for the 016 specific language governing permissions and limitations 017 under the License. 018 */ 019package org.apache.wiki.ui; 020 021import java.security.Permission; 022 023import org.apache.wiki.auth.GroupPrincipal; 024import org.apache.wiki.auth.permissions.GroupPermission; 025 026/** 027 * <p>Defines Commands for viewing, editing and deleting wiki groups. 028 * GroupCommands can be combined with GroupPrincipals to produce 029 * targeted Commands.</p> 030 * <p>This class is not <code>final</code>; it may be extended in 031 * the future.</p> 032 * @since 2.4.22 033 */ 034public final class GroupCommand extends AbstractCommand 035{ 036 037 /** GroupCommand for deleting a group. */ 038 public static final Command DELETE_GROUP 039 = new GroupCommand( "deleteGroup", "%uDeleteGroup.jsp?group=%n", null, null, GroupPermission.DELETE_ACTION ); 040 041 /** GroupCommand for editing a group. */ 042 public static final Command EDIT_GROUP 043 = new GroupCommand( "editGroup", "%uEditGroup.jsp?group=%n", "EditGroupContent.jsp", null, GroupPermission.EDIT_ACTION ); 044 045 /** GroupCommand for viewing a group. */ 046 public static final Command VIEW_GROUP 047 = new GroupCommand( "viewGroup", "%uGroup.jsp?group=%n", "GroupContent.jsp", null, GroupPermission.VIEW_ACTION ); 048 049 private final String m_action; 050 051 private final Permission m_permission; 052 053 /** 054 * Constructs a new Command with a specified wiki context, URL pattern, 055 * type, and content template. The WikiPage for this command is initialized 056 * to <code>null</code>. 057 * @param requestContext the request context 058 * @param urlPattern the URL pattern 059 * @param target the target of this command (a GroupPrincipal representing a Group); may be <code>null</code> 060 * @param action the action used to construct a suitable GroupPermission 061 * @param contentTemplate the content template; may be <code>null</code> 062 * @throws IllegalArgumentException if the request content, URL pattern, or 063 * type is <code>null</code> 064 */ 065 private GroupCommand( String requestContext, String urlPattern, String contentTemplate, GroupPrincipal target, String action ) 066 { 067 super( requestContext, urlPattern, contentTemplate, target ); 068 m_action = action; 069 if ( target == null || m_action == null ) 070 { 071 m_permission = null; 072 } 073 else 074 { 075 m_permission = new GroupPermission( target.getName(), action ); 076 } 077 } 078 079 /** 080 * Creates and returns a targeted Command by combining a GroupPrincipal 081 * with this Command. The supplied <code>target</code> object 082 * must be non-<code>null</code> and of type GroupPrincipal. 083 * If the target is not of the correct type, this method throws an 084 * {@link IllegalArgumentException}. 085 * @param target the GroupPrincipal to combine into the current Command 086 * @return the new, targeted command 087 */ 088 public Command targetedCommand( Object target ) 089 { 090 if ( !( target != null && target instanceof GroupPrincipal ) ) 091 { 092 throw new IllegalArgumentException( "Target must non-null and of type GroupPrincipal." ); 093 } 094 return new GroupCommand( getRequestContext(), getURLPattern(), getContentTemplate(), (GroupPrincipal)target, m_action ); 095 } 096 097 /** 098 * Returns the name of the command, which will either be 099 * the target (if specified), or the "friendly name" for the JSP. 100 * @return the name 101 * @see org.apache.wiki.ui.Command#getName() 102 */ 103 public String getName() 104 { 105 Object target = getTarget(); 106 if ( target == null ) 107 { 108 return getJSPFriendlyName(); 109 } 110 return ( (GroupPrincipal) target ).getName(); 111 } 112 113 /** 114 * Returns the permission required to execute this GroupCommand. 115 * @return the permission 116 * @see org.apache.wiki.ui.Command#requiredPermission() 117 */ 118 public Permission requiredPermission() 119 { 120 return m_permission; 121 } 122 123}