/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/metaobj/trunk/metaobj-api/api/src/java/org/sakaiproject/metaobj/shared/model/ElementListBean.java $ * $Id: ElementListBean.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2004, 2005, 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community 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 * * http://www.opensource.org/licenses/ECL-2.0 * * 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.sakaiproject.metaobj.shared.model; import java.util.ArrayList; import java.util.List; import java.util.Iterator; import java.util.Collection; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdom.Element; import org.sakaiproject.metaobj.utils.xml.SchemaNode; /** * Created by IntelliJ IDEA. * User: John Ellis * Date: Mar 11, 2004 * Time: 3:55:06 PM * To change this template use File | Settings | File Templates. */ public class ElementListBean extends ArrayList implements LimitedList { protected final Log logger = LogFactory.getLog(getClass()); private Element parentElement; private SchemaNode schema; private boolean deferValidation = false; public ElementListBean() { } public ElementListBean(Element parentElement, SchemaNode schema, boolean deferValidation) { this.parentElement = parentElement; this.schema = schema; this.deferValidation = deferValidation; } public ElementListBean(Element parentElement, List elements, SchemaNode schema, boolean deferValidation) { super(elements); this.parentElement = parentElement; this.schema = schema; this.deferValidation = deferValidation; for (Iterator i=iterator();i.hasNext();) { ElementBean bean = (ElementBean) i.next(); bean.setParent(this); } } public ElementListBean(List elements, SchemaNode schema) { super(elements); this.schema = schema; } public Object get(int index) { logger.debug("get called with index " + index); return super.get(index); } public ElementBean createBlank() { return new ElementBean(new Element(schema.getName()), schema, deferValidation); } /** * Removes the element at the specified position in this list. * Shifts any subsequent elements to the left (subtracts one from their * indices). * * @param index the index of the element to removed. * @return the element that was removed from the list. * @throws IndexOutOfBoundsException if index out of range <tt>(index * < 0 || index >= size())</tt>. */ public Object remove(int index) { ElementBean bean = (ElementBean) get(index); bean.getBaseElement().getParent().removeContent(bean.getBaseElement()); return super.remove(index); } /** * Appends the specified element to the end of this list. * * @param o element to be appended to this list. * @return <tt>true</tt> (as per the general contract of Collection.add). */ public boolean add(Object o) { ElementBean bean = (ElementBean) o; parentElement.addContent(bean.getBaseElement()); bean.setParent(this); return super.add(o); } /** * Inserts the specified element at the specified position in this * list. Shifts the element currently at that position (if any) and * any subsequent elements to the right (adds one to their indices). * * @param index index at which the specified element is to be inserted. * @param element element to be inserted. * @throws IndexOutOfBoundsException if index is out of range * <tt>(index < 0 || index > size())</tt>. */ public void add(int index, Object element) { add(element); super.add(index, element); } public boolean addAll(Collection collection) { for (Iterator i=collection.iterator();i.hasNext();) { ElementBean bean = createBlank(); bean.getBaseElement().addContent((String) i.next()); add(bean); } return true; } public void clear() { while (size() > 0) { remove(0); } } public int getUpperLimit() { if (schema.getMaxOccurs() == -1) { return Integer.MAX_VALUE; } return schema.getMaxOccurs(); } public int getLowerLimit() { return schema.getMinOccurs(); } }