/**
* 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.node;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apereo.portal.PortalException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* A class describing a folder node fo the user layout structure.
*/
public class UserLayoutFolderDescription extends UserLayoutNodeDescription
implements IUserLayoutFolderDescription {
private String folderType = "regular";
/**
* Reconstruct folder information from an xml <code>Element</code>
*
* @param xmlNode a user layout channel <code>Element</code> value
* @exception PortalException if xml is malformed
*/
public UserLayoutFolderDescription(Element xmlNode) throws PortalException {
super(xmlNode);
if (!xmlNode.getNodeName().equals("folder")) {
throw new PortalException("Given XML Element is not a folder!");
}
this.folderType = xmlNode.getAttribute("type");
}
public UserLayoutFolderDescription() {}
/**
* Returns a type of the node, could be FOLDER or CHANNEL integer constant.
*
* @return a type
*/
public LayoutNodeType getType() {
return LayoutNodeType.FOLDER;
}
@Override
public String getFolderType() {
return this.folderType;
}
@Override
public void setFolderType(String folderTypeArg) {
if (null == folderTypeArg) {
throw new IllegalArgumentException("Folder type cannot be set to null.");
}
this.folderType = folderTypeArg;
}
/**
* Creates a <code>org.w3c.dom.Element</code> representation of the current node.
*
* @param root a <code>Document</code> for which the <code>Element</code> should be created.
* @return a <code>Node</code> value
*/
public Element getXML(Document root) {
Element node = root.createElement("folder");
this.addNodeAttributes(node);
return node;
}
public void addNodeAttributes(Element node) {
super.addNodeAttributes(node);
node.setAttribute("type", this.folderType);
}
public String toString() {
return new ToStringBuilder(this)
.append("ID", this.id)
.append("name", this.name)
.append("channel_or_folder?", this.getType())
.append("type", this.folderType)
.append("precedence", this.precedence)
.append("moveAllowed", this.moveAllowed)
.append("removable", !this.unremovable)
.append("deleteAllowed", this.deleteAllowed)
.append("immutable", this.immutable)
.append("editAllowed", this.editAllowed)
.append("precedence", this.precedence)
.toString();
}
}