/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the License at the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package org.apereo.portal.layout.dlm; import org.apereo.portal.PortalException; import org.apereo.portal.security.IPerson; import org.w3c.dom.Element; /** * Layout processing action for changnig the set of restrictions for a fragment node. * */ public class LPAEditRestriction implements ILayoutProcessingAction { private IPerson person = null; private Element ilfNode = null; private boolean moveAllowed = false; private boolean deleteAllowed = false; private boolean editAllowed = false; private boolean addChildAllowed = false; LPAEditRestriction( IPerson p, Element ilfNode, boolean moveAllowed, boolean deleteAllowed, boolean editAllowed, boolean addChildAllowed) { this.person = p; this.ilfNode = ilfNode; this.moveAllowed = moveAllowed; this.deleteAllowed = deleteAllowed; this.editAllowed = editAllowed; this.addChildAllowed = addChildAllowed; } /** * Pushes the indicated restriction attribute changes into both the ILF and PLF versions of the * layouts since this will only be done when editing a fragment. */ public void perform() throws PortalException { Element plfNode = HandlerUtils.getPLFNode(ilfNode, person, false, false); if (plfNode == null) return; changeRestriction(Constants.ATT_MOVE_ALLOWED, plfNode, moveAllowed); changeRestriction(Constants.ATT_MOVE_ALLOWED, ilfNode, moveAllowed); changeRestriction(Constants.ATT_DELETE_ALLOWED, plfNode, deleteAllowed); changeRestriction(Constants.ATT_DELETE_ALLOWED, ilfNode, deleteAllowed); changeRestriction(Constants.ATT_EDIT_ALLOWED, plfNode, editAllowed); changeRestriction(Constants.ATT_EDIT_ALLOWED, ilfNode, editAllowed); if (plfNode.getAttribute(Constants.ATT_CHANNEL_ID).equals("")) { // if channel id is empty then this is not a channel. // childAllowed is always true for channel ad-hoc parameters. changeRestriction(Constants.ATT_ADD_CHILD_ALLOWED, plfNode, addChildAllowed); changeRestriction(Constants.ATT_ADD_CHILD_ALLOWED, ilfNode, addChildAllowed); } } private void changeRestriction(String name, Element element, boolean value) { // The default value for these attributes, // if not included on an element, is true so we remove the attribute if // we see a parm value of true and add the attribute with a value of // false if a parm value is false. This also saves on the number of // rows in the up_layout_param table and hence on read and write time. if (value == false) element.setAttributeNS(Constants.NS_URI, name, "false"); else element.removeAttribute(name); } }