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.activemq.kaha.impl.container;
018
019 import java.util.ArrayList;
020 import java.util.Collection;
021 import java.util.Iterator;
022 import java.util.List;
023 import java.util.Set;
024
025 import org.apache.activemq.kaha.impl.index.IndexItem;
026
027 /**
028 * A Set of keys for the container
029 *
030 *
031 */
032 public 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 }