/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * Licensed 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 * * http://www.apache.org/licenses/LICENSE-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.kie.workbench.common.services.datamodeller.parser.descr; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public class ElementDescrList implements List<ElementDescriptor> { private ArrayList<ElementDescriptor> elements = new ArrayList<ElementDescriptor>( ); public ElementDescrList( ) { } public void addElementAfter( ElementDescriptor element, ElementDescriptor newElement ) { int index = element != null ? elements.indexOf( element ) : -1; index = index < 0 ? elements.size( ) : ( index + 1 ); elements.add( index, newElement ); } public void addMemberBefore( ElementDescriptor element, ElementDescriptor newElement ) { int index = element != null ? elements.indexOf( element ) : -1; index = index < 0 ? 0 : index; elements.add( index, newElement ); } public List<ElementDescriptor> getElementsByType( ElementDescriptor.ElementType type ) { List<ElementDescriptor> result = new ArrayList<ElementDescriptor>( ); for ( ElementDescriptor element : elements ) { if ( type == element.getElementType( ) ) { result.add( element ); } } return result; } public ElementDescriptor removeFirst( ElementDescriptor.ElementType type ) { int index = indexOf( type ); return ( index >= 0 ) ? elements.remove( index ) : null; } public ElementDescriptor getFirst( ElementDescriptor.ElementType type ) { int index = indexOf( type ); return ( index >= 0 ) ? elements.get( index ) : null; } public ElementDescriptor getLast( ElementDescriptor.ElementType type ) { int index = lastIndexOf( type ); return ( index >= 0 ) ? elements.get( index ) : null; } public int indexOf( ElementDescriptor.ElementType type ) { int index = -1; for ( ElementDescriptor element : elements ) { index++; if ( type == element.getElementType( ) ) { return index; } } return -1; } public int lastIndexOf( ElementDescriptor.ElementType type ) { int index = -1; int i = 0; for ( ElementDescriptor element : elements ) { if ( type == element.getElementType( ) ) { index = i; } i++; } return index >= elements.size( ) ? -1 : index; } @Override public int size( ) { return elements.size( ); } @Override public boolean isEmpty( ) { return elements.isEmpty( ); } @Override public boolean contains( Object o ) { return elements.contains( o ); } @Override public Iterator<ElementDescriptor> iterator( ) { return elements.iterator( ); } @Override public Object[] toArray( ) { return elements.toArray( ); } @Override public <T> T[] toArray( T[] a ) { return elements.toArray( a ); } @Override public boolean add( ElementDescriptor element ) { return elements.add( element ); } @Override public boolean remove( Object o ) { return elements.remove( o ); } @Override public boolean containsAll( Collection<?> c ) { return elements.containsAll( c ); } @Override public boolean addAll( Collection<? extends ElementDescriptor> c ) { return elements.addAll( c ); } @Override public boolean addAll( int index, Collection<? extends ElementDescriptor> c ) { return elements.addAll( index, c ); } @Override public boolean removeAll( Collection<?> c ) { return elements.removeAll( c ); } @Override public boolean retainAll( Collection<?> c ) { return elements.retainAll( c ); } @Override public void clear( ) { elements.clear( ); } @Override public ElementDescriptor get( int index ) { return elements.get( index ); } @Override public ElementDescriptor set( int index, ElementDescriptor element ) { return elements.set( index, element ); } @Override public void add( int index, ElementDescriptor element ) { elements.add( index, element ); } @Override public ElementDescriptor remove( int index ) { return elements.remove( index ); } @Override public int indexOf( Object o ) { return elements.indexOf( o ); } @Override public int lastIndexOf( Object o ) { return elements.lastIndexOf( o ); } @Override public ListIterator<ElementDescriptor> listIterator( ) { return elements.listIterator( ); } @Override public ListIterator<ElementDescriptor> listIterator( int index ) { return elements.listIterator( index ); } @Override public List<ElementDescriptor> subList( int fromIndex, int toIndex ) { return subList( fromIndex, toIndex ); } }