/*******************************************************************************
* ***** BEGIN LICENSE BLOCK Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (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.mozilla.org/MPL/
*
* 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.
*
* The Original Code is the OpenCustomer CRM.
*
* The Initial Developer of the Original Code is Thomas Bader (Bader & Jene
* Software-Ingenieurb�ro). Portions created by the Initial Developer are
* Copyright (C) 2005 the Initial Developer. All Rights Reserved.
*
* Contributor(s): Thomas Bader <thomas.bader@bader-jene.de>
*
* ***** END LICENSE BLOCK *****
*/
package org.opencustomer.webapp.module.generic;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.opencustomer.db.EntityAccessUtility;
import org.opencustomer.db.UserAssigned;
import org.opencustomer.db.vo.system.UserVO;
import org.opencustomer.db.vo.system.UsergroupVO;
import org.opencustomer.framework.db.vo.EntityAccess;
import org.opencustomer.framework.util.EnumUtility;
import org.opencustomer.framework.webapp.util.MessageUtil;
import org.opencustomer.webapp.Globals;
import org.opencustomer.webapp.action.EditPageForm;
public class PageSystemForm extends EditPageForm
{
private static final long serialVersionUID = 3977018439913322801L;
private final static Logger log = Logger.getLogger(PageSystemForm.class);
private String groupAccess;
private int group;
private String globalAccess;
public final void validate(ActionMapping mapping, ActionMessages errors, HttpServletRequest request)
{
if (globalAccess == null)
errors.add("globalAccess", new ActionMessage("default.error.missingInput", MessageUtil.message(request, "entity.entityAccess.globalAccess")));
else if (EnumUtility.valueOf(EntityAccess.Access.class, globalAccess) == null)
errors.add("globalAccess", new ActionMessage("default.error.invalidValue", MessageUtil.message(request, "entity.entityAccess.globalAccess")));
if (groupAccess == null)
errors.add("groupAccess", new ActionMessage("default.error.missingInput", MessageUtil.message(request, "entity.entityAccess.groupAccess")));
else if (EnumUtility.valueOf(EntityAccess.Access.class, groupAccess) == null)
errors.add("groupAccess", new ActionMessage("default.error.invalidValue", MessageUtil.message(request, "entity.entityAccess.groupAccess")));
if (group <= 0)
errors.add("group", new ActionMessage("default.error.missingInput", MessageUtil.message(request, "entity.entityAccess.groupOwner")));
else
{
UsergroupVO usergroup = null;
List<UsergroupVO> usergroups = (List<UsergroupVO>)getPanel().getAttribute("system_usergroups");
for (UsergroupVO ug : usergroups)
{
if (ug.getId() == group)
{
usergroup = ug;
break;
}
}
if (usergroup == null)
{
errors.add("group", new ActionMessage("default.error.invalidValue", MessageUtil.message(request, "entity.entityAccess.groupOwner")));
}
}
if(getEntityAccess(request) != null)
{
UserVO user = (UserVO)request.getSession().getAttribute(Globals.USER_KEY);
EntityAccess entity = getEntityAccess(request);
TestEntityAccess test = new TestEntityAccess(entity);
test.setAccessGlobal(EnumUtility.valueOf(EntityAccess.Access.class, globalAccess));
test.setAccessGroup(EnumUtility.valueOf(EntityAccess.Access.class, groupAccess));
test.setOwnerGroup(group);
validateAccess(errors, user, test);
}
}
protected void validateAccess(ActionMessages errors, UserVO activeUser, EntityAccess testEntity) {
if(!EntityAccessUtility.isAccessGranted(activeUser, testEntity, EntityAccess.Access.WRITE_SYSTEM))
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("module.generic.pageSystem.error.noRightsLeft"));
if(getPanel().getEntity() instanceof UserAssigned) {
UserAssigned userAssigned = (UserAssigned)getPanel().getEntity();
if(userAssigned.getAssignedUser() != null && !EntityAccessUtility.isAccessGranted(userAssigned.getAssignedUser(), testEntity, EntityAccess.Access.WRITE))
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("module.generic.pageSystem.error.missingWriteAccessForAssignedUser", userAssigned.getAssignedUser().getUserName()));
}
}
protected EntityAccess getEntityAccess(HttpServletRequest request) {
if(getPanel().getEntity() instanceof EntityAccess) {
return (EntityAccess)getPanel().getEntity();
} else {
return null;
}
}
public final String getGlobalAccess()
{
return globalAccess;
}
public final void setGlobalAccess(String globalAccess)
{
this.globalAccess = globalAccess;
}
public final int getGroup()
{
return group;
}
public final void setGroup(int group)
{
this.group = group;
}
public final String getGroupAccess()
{
return groupAccess;
}
public final void setGroupAccess(String groupAccess)
{
this.groupAccess = groupAccess;
}
private final class TestEntityAccess implements EntityAccess
{
public TestEntityAccess()
{
}
public TestEntityAccess(EntityAccess entity)
{
this.setAccessGlobal(entity.getAccessGlobal());
this.setAccessGroup(entity.getAccessGroup());
this.setOwnerGroup(entity.getOwnerGroup());
this.setAccessUser(entity.getAccessUser());
this.setOwnerUser(entity.getOwnerUser());
}
private Integer ownerUser;
private Integer ownerGroup;
private EntityAccess.Access accessUser;
private EntityAccess.Access accessGroup;
private EntityAccess.Access accessGlobal;
public EntityAccess.Access getAccessGlobal()
{
return accessGlobal;
}
public void setAccessGlobal(EntityAccess.Access accessGlobal)
{
this.accessGlobal = accessGlobal;
}
public EntityAccess.Access getAccessGroup()
{
return accessGroup;
}
public void setAccessGroup(EntityAccess.Access accessGroup)
{
this.accessGroup = accessGroup;
}
public EntityAccess.Access getAccessUser()
{
return accessUser;
}
public void setAccessUser(EntityAccess.Access accessUser)
{
this.accessUser = accessUser;
}
public Integer getOwnerGroup()
{
return ownerGroup;
}
public void setOwnerGroup(Integer ownerGroup)
{
this.ownerGroup = ownerGroup;
}
public Integer getOwnerUser()
{
return ownerUser;
}
public void setOwnerUser(Integer ownerUser)
{
this.ownerUser = ownerUser;
}
}
}