001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.commons.configuration.tree; 018 019 import java.util.Iterator; 020 021 /** 022 * <p> 023 * A specialized node implementation to be used in view configurations. 024 * </p> 025 * <p> 026 * Some configurations provide a logical view on the nodes of other 027 * configurations. These configurations construct their own hierarchy of nodes 028 * based on the node trees of their source configurations. This special node 029 * class can be used for this purpose. It allows child nodes and attributes to 030 * be added without changing their parent node. So a node can belong to a 031 * hierarchy of nodes of a source configuration, but be also contained in a view 032 * configuration. 033 * </p> 034 * 035 * @author <a 036 * href="http://commons.apache.org/configuration/team-list.html">Commons 037 * Configuration team</a> 038 * @version $Id: ViewNode.java 561230 2007-07-31 04:17:09Z rahul $ 039 * @since 1.3 040 */ 041 public class ViewNode extends DefaultConfigurationNode 042 { 043 /** 044 * Adds an attribute to this view node. The new attribute's parent node will 045 * be saved. 046 * 047 * @param attr the attribute node to be added 048 */ 049 public void addAttribute(ConfigurationNode attr) 050 { 051 ConfigurationNode parent = null; 052 053 if (attr != null) 054 { 055 parent = attr.getParentNode(); 056 super.addAttribute(attr); 057 attr.setParentNode(parent); 058 } 059 else 060 { 061 throw new IllegalArgumentException("Attribute node must not be null!"); 062 } 063 } 064 065 /** 066 * Adds a child node to this view node. The new child's parent node will be 067 * saved. 068 * 069 * @param child the child node to be added 070 */ 071 public void addChild(ConfigurationNode child) 072 { 073 ConfigurationNode parent = null; 074 075 if (child != null) 076 { 077 parent = child.getParentNode(); 078 super.addChild(child); 079 child.setParentNode(parent); 080 } 081 else 082 { 083 throw new IllegalArgumentException("Child node must not be null!"); 084 } 085 } 086 087 /** 088 * Adds all attribute nodes of the given source node to this view node. 089 * 090 * @param source the source node 091 */ 092 public void appendAttributes(ConfigurationNode source) 093 { 094 if (source != null) 095 { 096 for (Iterator it = source.getAttributes().iterator(); it.hasNext();) 097 { 098 addAttribute((ConfigurationNode) it.next()); 099 } 100 } 101 } 102 103 /** 104 * Adds all child nodes of the given source node to this view node. 105 * 106 * @param source the source node 107 */ 108 public void appendChildren(ConfigurationNode source) 109 { 110 if (source != null) 111 { 112 for (Iterator it = source.getChildren().iterator(); it.hasNext();) 113 { 114 addChild((ConfigurationNode) it.next()); 115 } 116 } 117 } 118 }