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 */
017package org.apache.activemq.kaha.impl.container;
018
019import java.util.ArrayList;
020import java.util.Collection;
021import java.util.Iterator;
022import java.util.List;
023import java.util.Set;
024
025import org.apache.activemq.kaha.impl.index.IndexItem;
026
027/**
028 * A Set of keys for the container
029 * 
030 * 
031 */
032public class ContainerKeySet extends ContainerCollectionSupport implements Set {
033
034    ContainerKeySet(MapContainerImpl container) {
035        super(container);
036    }
037
038    public boolean contains(Object o) {
039        return container.containsKey(o);
040    }
041
042    public Iterator iterator() {
043        return new ContainerKeySetIterator(container);
044    }
045
046    public Object[] toArray() {
047        List<Object> list = new ArrayList<Object>();
048        IndexItem item = container.getInternalList().getRoot();
049        while ((item = container.getInternalList().getNextEntry(item)) != null) {
050            list.add(container.getKey(item));
051        }
052        return list.toArray();
053    }
054
055    public Object[] toArray(Object[] a) {
056        List<Object> list = new ArrayList<Object>();
057        IndexItem item = container.getInternalList().getRoot();
058        while ((item = container.getInternalList().getNextEntry(item)) != null) {
059            list.add(container.getKey(item));
060        }
061        return list.toArray(a);
062    }
063
064    public boolean add(Object o) {
065        throw new UnsupportedOperationException("Cannot add here");
066    }
067
068    public boolean remove(Object o) {
069        return container.remove(o) != null;
070    }
071
072    public boolean containsAll(Collection c) {
073        for (Object key : c) {
074            if (!container.containsKey(key)) {
075                return false;
076            }
077        }
078        return true;
079    }
080
081    public boolean addAll(Collection c) {
082        throw new UnsupportedOperationException("Cannot add here");
083    }
084
085    public boolean retainAll(Collection c) {
086        List<Object> tmpList = new ArrayList<Object>();
087        for (Iterator i = c.iterator(); i.hasNext();) {
088            Object o = i.next();
089            if (!contains(o)) {
090                tmpList.add(o);
091            }
092        }
093        for (Iterator<Object> i = tmpList.iterator(); i.hasNext();) {
094            remove(i.next());
095        }
096        return !tmpList.isEmpty();
097    }
098
099    public boolean removeAll(Collection c) {
100        boolean result = true;
101        for (Iterator i = c.iterator(); i.hasNext();) {
102            if (!remove(i.next())) {
103                result = false;
104            }
105        }
106        return result;
107    }
108
109    public void clear() {
110        container.clear();
111    }
112
113    public String toString() {
114        StringBuffer result = new StringBuffer(32);
115        result.append("ContainerKeySet[");
116        IndexItem item = container.getInternalList().getRoot();
117        while ((item = container.getInternalList().getNextEntry(item)) != null) {
118            result.append(container.getKey(item));
119            result.append(",");
120        }
121        result.append("]");
122        return result.toString();
123    }
124}