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.jetspeed.om.folder.impl;
018:
019: import java.util.AbstractList;
020:
021: /**
022: * FolderMenuDefinitionElementList
023: *
024: * @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
025: * @version $Id$
026: */
027: class FolderMenuDefinitionElementList extends AbstractList {
028: private FolderMenuDefinitionImpl menuDefinition;
029:
030: FolderMenuDefinitionElementList(
031: FolderMenuDefinitionImpl menuDefinition) {
032: super ();
033: this .menuDefinition = menuDefinition;
034: }
035:
036: /**
037: * validateMenuElementForAdd
038: *
039: * Validates element to be added to this list.
040: *
041: * @param menuElement element to add
042: * @return list element to add
043: */
044: private FolderMenuDefinitionElement validateMenuElementForAdd(
045: FolderMenuDefinitionElement menuElement) {
046: // validate element instance class
047: if (menuElement == null) {
048: throw new NullPointerException(
049: "Unable to add null to list.");
050: }
051: return menuElement;
052: }
053:
054: /* (non-Javadoc)
055: * @see java.util.List#add(int,java.lang.Object)
056: */
057: public void add(int index, Object element) {
058: // implement for modifiable AbstractList:
059: // validate index
060: if ((index < 0)
061: || (index > menuDefinition.accessElements().size())) {
062: throw new IndexOutOfBoundsException(
063: "Unable to add to list at index: " + index);
064: }
065: // verify element
066: FolderMenuDefinitionElement menuElement = validateMenuElementForAdd((FolderMenuDefinitionElement) element);
067: // add to underlying ordered list
068: menuDefinition.accessElements().add(index, menuElement);
069: // set element order in added element
070: if (index > 0) {
071: menuElement
072: .setElementOrder(((FolderMenuDefinitionElement) menuDefinition
073: .accessElements().get(index - 1))
074: .getElementOrder() + 1);
075: } else {
076: menuElement.setElementOrder(0);
077: }
078: // maintain element order in subsequent elements
079: for (int i = index, limit = menuDefinition.accessElements()
080: .size() - 1; (i < limit); i++) {
081: FolderMenuDefinitionElement nextMenuElement = (FolderMenuDefinitionElement) menuDefinition
082: .accessElements().get(i + 1);
083: if (nextMenuElement.getElementOrder() <= menuElement
084: .getElementOrder()) {
085: // adjust element order for next element
086: nextMenuElement.setElementOrder(menuElement
087: .getElementOrder() + 1);
088: menuElement = nextMenuElement;
089: } else {
090: // element order maintained for remaining list elements
091: break;
092: }
093: }
094: }
095:
096: /* (non-Javadoc)
097: * @see java.util.List#get(int)
098: */
099: public Object get(int index) {
100: // implement for modifiable AbstractList
101: return menuDefinition.accessElements().get(index);
102: }
103:
104: /* (non-Javadoc)
105: * @see java.util.List#remove(int)
106: */
107: public Object remove(int index) {
108: // implement for modifiable AbstractList
109: return menuDefinition.accessElements().remove(index);
110: }
111:
112: /* (non-Javadoc)
113: * @see java.util.List#set(int,java.lang.Object)
114: */
115: public Object set(int index, Object element) {
116: // implement for modifiable AbstractList:
117: // verify element
118: FolderMenuDefinitionElement newMenuElement = validateMenuElementForAdd((FolderMenuDefinitionElement) element);
119: // set in underlying ordered list
120: FolderMenuDefinitionElement menuElement = (FolderMenuDefinitionElement) menuDefinition
121: .accessElements().set(index, newMenuElement);
122: // set element order in new element
123: newMenuElement.setElementOrder(menuElement.getElementOrder());
124: // return element
125: return menuElement;
126: }
127:
128: /* (non-Javadoc)
129: * @see java.util.List#size()
130: */
131: public int size() {
132: // implement for modifiable AbstractList
133: return menuDefinition.accessElements().size();
134: }
135: }
|