1 /* 2 * $Id: ListAttribute.java 832867 2009-11-04 20:16:23Z apetrelli $ 3 * 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 22 package org.apache.tiles; 23 24 25 import java.util.ArrayList; 26 import java.util.List; 27 28 /** 29 * An attribute as a <code>List</code>. 30 * This attribute associates a name with a list. The list can be found by the 31 * property name. 32 * Elements in list are retrieved using List methods. 33 * This class is used to read configuration files. 34 * 35 * @version $Rev: 832867 $ $Date: 2009-11-05 07:16:23 +1100 (Thu, 05 Nov 2009) $ 36 * @since 2.1.0 37 */ 38 public class ListAttribute extends Attribute { 39 40 /** 41 * If true, the attribute will put the elements of the attribute with the 42 * same name of the parent definition before the ones specified here. By 43 * default, it is 'false'. 44 */ 45 private boolean inherit = false; 46 47 /** 48 * Constructor. 49 * 50 * @since 2.1.0 51 */ 52 public ListAttribute() { 53 setValue(new ArrayList<Object>()); 54 } 55 56 /** 57 * Constructor. 58 * 59 * @param value List. 60 * @since 2.1.0 61 */ 62 public ListAttribute(List<Attribute> value) { 63 setValue(value); 64 } 65 66 /** 67 * Copy constructor. 68 * 69 * @param toCopy The list attribute to copy. 70 * @since 2.1.3 71 */ 72 public ListAttribute(ListAttribute toCopy) { 73 super(toCopy); 74 List<Attribute> attributesToCopy = toCopy.getValue(); 75 if (attributesToCopy != null) { 76 List<Attribute> attributes = new ArrayList<Attribute>(attributesToCopy.size()); 77 for (Attribute attribute : attributesToCopy) { 78 if (attribute != null) { 79 attributes.add(attribute.clone()); 80 } else { 81 attributes.add(null); 82 } 83 } 84 setValue(attributes); 85 } 86 this.inherit = toCopy.inherit; 87 } 88 89 /** 90 * Sets the list of the attributes that are elements of this attribute. 91 * 92 * @param attributes The attributes. 93 * @since 3.0.0 94 */ 95 public void setValue(List<Attribute> attributes) { 96 super.setValue(attributes); 97 } 98 99 /** 100 * Returns the list of the attributes that are elements of this attribute. 101 * 102 * @return The attributes. 103 * @since 3.0.0 104 */ 105 @SuppressWarnings("unchecked") 106 @Override 107 public List<Attribute> getValue() { 108 return (List<Attribute>) super.getValue(); 109 } 110 111 /** 112 * Add an element in list. 113 * We use a property to avoid rewriting a new class. 114 * 115 * @param element XmlAttribute to add. 116 * @since 2.1.0 117 */ 118 public void add(Attribute element) { 119 getValue().add(element); 120 } 121 122 /** 123 * If true, the attribute will put the elements of the attribute with the 124 * same name of the parent definition before the ones specified here. By 125 * default, it is 'false' 126 * 127 * @param inherit The "inherit" value. 128 * @since 2.1.0 129 */ 130 public void setInherit(boolean inherit) { 131 this.inherit = inherit; 132 } 133 134 /** 135 * If true, the attribute will put the elements of the attribute with the 136 * same name of the parent definition before the ones specified here. By 137 * default, it is 'false' 138 * 139 * @return inherit The "inherit" value. 140 * @since 2.1.0 141 */ 142 public boolean isInherit() { 143 return inherit; 144 } 145 146 /** 147 * Inherits elements present in a "parent" list attribute. The elements will 148 * be put before the ones already present. 149 * 150 * @param parent The parent list attribute. 151 * @since 2.1.0 152 */ 153 @SuppressWarnings("unchecked") 154 public void inherit(ListAttribute parent) { 155 List<Attribute> tempList = new ArrayList<Attribute>(); 156 tempList.addAll((List<Attribute>) parent.value); 157 tempList.addAll((List<Attribute>) value); 158 setValue(tempList); 159 } 160 161 /** {@inheritDoc} */ 162 @Override 163 public boolean equals(Object obj) { 164 ListAttribute attribute = (ListAttribute) obj; 165 return super.equals(attribute) && this.inherit == attribute.inherit; 166 } 167 168 /** {@inheritDoc} */ 169 @Override 170 public int hashCode() { 171 return super.hashCode() + Boolean.valueOf(inherit).hashCode(); 172 } 173 174 /** {@inheritDoc} */ 175 @Override 176 public ListAttribute clone() { 177 return new ListAttribute(this); 178 } 179 }