libreccm-legacy/ccm-portalworkspace/doc/unsupported/admin-ui/AddGrantForm.java

204 lines
6.7 KiB
Java
Executable File

/*
* Copyright (C) 2001, 2002, 2003 Red Hat Inc. All Rights Reserved.
*
* The contents of this file are subject to the CCM Public
* License (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.redhat.com/licenses/ccmpl.html
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
*/
package com.arsdigita.portalworkspace.ui.admin;
import com.arsdigita.portalworkspace.util.GlobalizationUtil;
import com.arsdigita.persistence.*;
import com.arsdigita.kernel.*;
import com.arsdigita.kernel.permissions.*;
import com.arsdigita.domain.*;
import com.arsdigita.bebop.*;
import com.arsdigita.bebop.form.*;
import com.arsdigita.bebop.parameters.*;
import com.arsdigita.bebop.event.*;
import org.apache.log4j.Logger;
import java.math.BigDecimal;
class AddGrantForm extends Form {
// Select value used to indicate 'all types' in situations
// where type-specific grants are possible
final static String ALL_TYPES = "ALL_TYPES";
private BigDecimalParameter m_objectParameter;
private BigDecimalParameter m_partyParameter;
private StringParameter m_privilegeParameter;
private StringParameter m_typeParameter;
private RequestLocal m_errorMessageRL;
private RequestLocal m_grantPermissionRL;
private static final Logger s_log = Logger.getLogger(AddGrantForm.class);
BigDecimalParameter getObjectParameter() {
return m_objectParameter;
}
BigDecimalParameter getPartyParameter() {
return m_partyParameter;
}
StringParameter getPrivilegeParameter() {
return m_privilegeParameter;
}
StringParameter getTypeParameter() {
return m_typeParameter;
}
AddGrantForm(String name,
Container container,
RequestLocal errorMessageRL) {
super(name, container);
setRedirecting(true);
// These make sure that fireValidate and fireProcess get
// called even when no validation or process listeners are
// added
forwardValidation();
forwardProcess();
m_objectParameter = new BigDecimalParameter("objectID");
m_partyParameter = new BigDecimalParameter("partyID");
m_privilegeParameter = new StringParameter("privName");
//m_typeParameter = new StringParameter("typeName");
m_errorMessageRL = errorMessageRL;
m_grantPermissionRL = new RequestLocal();
}
protected void fireValidate(FormSectionEvent ev) {
s_log.debug("AddGrantForm.fireValidate running");
PageState ps = ev.getPageState();
// Retrieve parameter values
FormData fd = ev.getFormData();
BigDecimal objectID =
(BigDecimal)fd.get(m_objectParameter.getName());
BigDecimal partyID =
(BigDecimal)fd.get(m_partyParameter.getName());
//String typeName =
// (String)fd.get(m_typeParameter.getName());
String privName =
(String)fd.get(m_privilegeParameter.getName());
// Get the OIDs we need for dealing with permissions
OID partyOID =
new OID(Party.BASE_DATA_OBJECT_TYPE, partyID);
OID objectOID =
new OID(ACSObject.BASE_DATA_OBJECT_TYPE, objectID);
// Determine what privileges we care about
PrivilegeDescriptor testPriv = Grant.s_interestingPrivileges[0];
PrivilegeDescriptor newPriv =
PrivilegeDescriptor.get(privName);
// if ((typeName != null) && !typeName.equals(ALL_TYPES)) {
// testPriv = ParameterizedPrivilege
// .createPrivilege(testPriv, typeName, "");
// newPriv = ParameterizedPrivilege
// .createPrivilege(newPriv, typeName, "");
// }
PermissionDescriptor testPerm =
new PermissionDescriptor(testPriv, objectOID, partyOID);
if (PermissionService.checkDirectPermission(testPerm)) {
String partyName;
try {
Party party = (Party)
DomainObjectFactory.newInstance(partyOID);
partyName = party.getName();
} catch (DataObjectNotFoundException ex) {
throw new IllegalStateException("Bad Party");
}
String objectName;
try {
ACSObject object = (ACSObject)
DomainObjectFactory.newInstance(objectOID);
objectName = object.getDisplayName();
} catch (DataObjectNotFoundException ex) {
throw new IllegalStateException("Bad Object");
}
String errMsg;
// if (typeName == null) {
errMsg =
"\"" + partyName + "\"" + " already has a defined right " +
"on \"" + objectName + "\".";
// } else if (typeName.equals(ALL_TYPES)) {
// errMsg =
// "\"" + partyName + "\" already has a defined right on \"" +
// objectName + "\" and its contents.";
// } else {
// // FIXME: get type plural pretty name and use
// // it instead of typeName in this message.
// errMsg =
// "\"" + partyName + "\" already has a defined right on " +
// "the " + typeName + "s contained in \"" + objectName +
// "\".";
// }
m_errorMessageRL.set(ps, errMsg);
fd.addError(errMsg);
} else {
PermissionDescriptor perm =
new PermissionDescriptor(newPriv, objectOID, partyOID);
m_grantPermissionRL.set(ps, perm);
}
if (s_log.isDebugEnabled()) {
if (fd.isValid()) {
s_log.debug("VALID");
} else {
s_log.debug("INVALID");
}
}
super.fireValidate(ev);
}
protected void fireProcess(FormSectionEvent ev)
throws FormProcessException {
PermissionDescriptor perm =
(PermissionDescriptor)m_grantPermissionRL.get(ev.getPageState());
PermissionService.grantPermission(perm);
// copy logic in GrantsTable
PrivilegeDescriptor pd = perm.getPrivilegeDescriptor();
if (pd.equals(PrivilegeDescriptor.EDIT)
|| pd.equals(PrivilegeDescriptor.ADMIN)) {
PermissionService.grantPermission
(new PermissionDescriptor
(PrivilegeDescriptor.CREATE,
perm.getACSObjectOID(),
perm.getPartyOID()));
}
super.fireProcess(ev);
}
}