public SelectResults entrySet() { ResultsCollectionWrapper res = new ResultsCollectionWrapper(new ObjectTypeImpl(Map.Entry.class), this.region.entrySet(false)); res.setModifiable(false); return res; }
@Override public boolean containsAll(Collection collection) { if (this.hasLimitIterator) { Iterator itr = collection.iterator(); boolean containsAll = true; while (itr.hasNext() && containsAll) { containsAll = this.contains(itr.next()); } return containsAll; } else { return this.base.containsAll(collection); } }
@Override public boolean retainAll(Collection collection) { /* * if( this.limit > -1) { throw new UnsupportedOperationException("Modification of the * SelectResults not allowed as the query result is constrained by LIMIT"); } */ if (this.hasLimitIterator) { Iterator itr = this.iterator(); boolean changed = false; Object element; while (itr.hasNext()) { element = itr.next(); if (!collection.contains(element)) { itr.remove(); changed = true; } } return changed; } else { return this.retainAll(collection); } }
@Override public int occurrences(Object element) { if (!this.getCollectionType().allowsDuplicates() && !this.hasLimitIterator) { return this.base.contains(element) ? 1 : 0; } // expensive!! int count = 0; for (Iterator itr = this.iterator()/* this.base.iterator() */; itr.hasNext();) { Object v = itr.next(); if (element == null ? v == null : element.equals(v)) { count++; } } return count; }
@Test public void testToArray() { List ordered = new ArrayList(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); } ResultsCollectionWrapper wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); Object[] toArray = wrapper.toArray(); assertEquals(wrapper.size(), toArray.length); Iterator itr = wrapper.iterator(); for (int i = 1; i < 6; ++i) { assertEquals(toArray[i - 1], itr.next()); } assertFalse(itr.hasNext()); }
@Test public void testRetainAll() { List ordered = new ArrayList(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); } ResultsCollectionWrapper wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); List newList = new ArrayList(); for (int i = 1; i < 6; ++i) { newList.add(new Integer(i)); } assertFalse(wrapper.retainAll(newList)); assertEquals(5, wrapper.size()); for (int i = 6; i < 11; ++i) { newList.add(new Integer(i)); } assertFalse(wrapper.retainAll(newList)); assertEquals(5, wrapper.size()); for (int i = 1; i < 6; ++i) { newList.remove(0); } assertTrue(wrapper.retainAll(newList)); assertEquals(0, wrapper.size()); Iterator itr = wrapper.iterator(); assertFalse(itr.hasNext()); }
new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); assertFalse(wrapper.remove(new Integer(6))); assertTrue(wrapper.remove(new Integer(4))); assertEquals(4, wrapper.size()); List newList = new ArrayList(); for (int i = 1; i < 6; ++i) { newList.add(new Integer(i)); assertTrue(wrapper.removeAll(newList)); assertTrue(wrapper.size() == 0); ordered = new ArrayList(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); newList = new ArrayList(); for (int i = 2; i < 11; ++i) { newList.add(new Integer(i)); assertTrue(wrapper.removeAll(newList)); assertTrue(wrapper.size() == 1); Iterator itr = wrapper.iterator(); assertEquals(itr.next(), new Integer(1)); assertFalse(itr.hasNext());
@Test public void testLimitIterator() { Collection ordered = new TreeSet(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); } ResultsCollectionWrapper wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); Iterator itr = wrapper.iterator(); assertEquals(5, wrapper.size()); while (itr.hasNext()) { itr.next(); itr.remove(); } assertEquals(0, wrapper.size()); assertFalse(wrapper.iterator().hasNext()); try { wrapper.iterator().next(); fail("Should have failed as the wrapper size is 0"); } catch (NoSuchElementException nsee) { // Ok } assertTrue(wrapper.isEmpty()); } }
new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), unordered, 15); assertEquals(10, wrapper.size()); assertFalse(wrapper.iterator() instanceof ResultsCollectionWrapper.LimitIterator); try { wrapper.add(new Integer(7)); } catch (UnsupportedOperationException uoe) { wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), unordered, 5); assertEquals(5, wrapper.size()); assertFalse(wrapper.iterator() instanceof ResultsCollectionWrapper.LimitIterator); try { wrapper.add(new Integer(7)); } catch (UnsupportedOperationException uoe) { wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 20); assertEquals(10, wrapper.size()); assertFalse(wrapper.iterator() instanceof ResultsCollectionWrapper.LimitIterator); try { wrapper.add(new Integer(7)); } catch (UnsupportedOperationException uoe) { wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); assertEquals(5, wrapper.size()); assertTrue(wrapper.iterator() instanceof ResultsCollectionWrapper.LimitIterator); try { wrapper.add(new Integer(7)); } catch (UnsupportedOperationException uoe) {
/** Creates a new instance of QRegion */ public QRegion(Region region, boolean includeKeys) { if (region == null) throw new IllegalArgumentException( "Region can not be NULL"); this.region = region; Class constraint = this.region.getAttributes().getValueConstraint(); if (constraint == null) constraint = Object.class; ResultsCollectionWrapper res = null; if (includeKeys) { res = new ResultsCollectionWrapper(TypeUtils.getObjectType(constraint), this.region.entrySet()); } else { res = new ResultsCollectionWrapper(TypeUtils.getObjectType(constraint), this.region.values()); } res.setModifiable(false); if (!DefaultQueryService.COPY_ON_READ_AT_ENTRY_LEVEL) { res.setIgnoreCopyOnReadForQuery(true); } this.values = res; }
@Test public void testRemove() { List ordered = new ArrayList(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); } ResultsCollectionWrapper wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); assertFalse(wrapper.remove(new Integer(6))); assertTrue(wrapper.remove(new Integer(4))); assertEquals(4, wrapper.size()); List newList = new ArrayList(); for (int i = 1; i < 6; ++i) { newList.add(new Integer(i)); } newList.remove(3); assertTrue(wrapper.containsAll(newList)); }
/** * Returns an appropriate, empty {@code SelectResults} * * TODO: statsOrNull is always null * * @param collectionType The {@code CollectionType} of the query results * @return an appropriate, empty {@code SelectResults} */ public static SelectResults getEmptySelectResults(CollectionType collectionType, CachePerfStats statsOrNull) { SelectResults emptyResults = null; if (collectionType.isOrdered()) { // The collectionType is ordered. // The 'order by' clause was used in the query. // Wrap an ArrayList with a ResultsCollectionWrapper emptyResults = new ResultsCollectionWrapper(collectionType.getElementType(), new ArrayList()); } else if (!collectionType.allowsDuplicates()) { // The collectionType does not allow duplicates. // The distinct keyword was used in the query. // Wrap a HashSet with a ResultsCollectionWrapper emptyResults = new ResultsCollectionWrapper(collectionType.getElementType(), new HashSet()); } else { // Use ObjectType to determine the correct SelectResults implementation emptyResults = getEmptySelectResults(collectionType.getElementType(), statsOrNull); } return emptyResults; }
@Test public void testContains() { // Create a Collection of unordered data elements HashSet unordered = new HashSet(); for (int i = 1; i < 11; ++i) { unordered.add(new Integer(i)); } ResultsCollectionWrapper wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), unordered, 15); assertTrue(wrapper.contains(new Integer(10))); assertFalse(wrapper.contains(new Integer(11))); List ordered = new ArrayList(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); } wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 20); assertTrue(wrapper.contains(new Integer(10))); assertFalse(wrapper.contains(new Integer(11))); wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); assertTrue(wrapper.contains(new Integer(1))); }
@Test public void testEmpty() { List ordered = new ArrayList(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); } ResultsCollectionWrapper wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 0); assertEquals(0, wrapper.size()); }
@Test public void testContainsAll() { List ordered = new ArrayList(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); } ResultsCollectionWrapper wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); assertFalse(wrapper.containsAll(ordered)); List newList = new ArrayList(); for (int i = 0; i < 5; ++i) { newList.add(ordered.get(4 - i)); } assertTrue(wrapper.containsAll(newList)); }
@Test public void testOccurrences() { Collection ordered = new TreeSet(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); } ResultsCollectionWrapper wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); assertEquals(0, wrapper.occurrences(new Integer(6))); for (int i = 1; i < 6; ++i) { assertEquals(1, wrapper.occurrences(new Integer(i))); } ordered = new ArrayList(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); } wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); assertEquals(0, wrapper.occurrences(new Integer(6))); for (int i = 1; i < 6; ++i) { assertEquals(1, wrapper.occurrences(new Integer(i))); } }
@Test public void testAsSet() { Collection ordered = new TreeSet(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); } ResultsCollectionWrapper wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); Set toSet = wrapper.asSet(); Set newSet = new TreeSet(); for (int i = 1; i < 6; ++i) { newSet.add(new Integer(i)); } assertEquals(newSet.size(), toSet.size()); assertTrue(newSet.containsAll(toSet)); ordered = new ArrayList(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); } wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 6); toSet = wrapper.asSet(); newSet = new TreeSet(); for (int i = 1; i < 7; ++i) { newSet.add(new Integer(i)); } assertEquals(newSet.size(), toSet.size()); assertTrue(newSet.containsAll(toSet)); }
@Test public void testAsList() { List ordered = new ArrayList(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); } ResultsCollectionWrapper wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); List toList = wrapper.asList(); List newList = new ArrayList(); for (int i = 1; i < 6; ++i) { newList.add(new Integer(i)); } assertEquals(newList.size(), toList.size()); assertTrue(newList.containsAll(toList)); ordered = new ArrayList(); for (int i = 1; i < 11; ++i) { ordered.add(new Integer(i)); } wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 2); toList = wrapper.asList(); newList = new ArrayList(); for (int i = 1; i < 3; ++i) { newList.add(new Integer(i)); } assertEquals(newList.size(), toList.size()); assertTrue(newList.containsAll(toList)); }
@Override public boolean contains(Object obj) { if (this.hasLimitIterator) { // Keith: Optimize case where contains is false, avoids iteration boolean peak = this.base.contains(obj); if (!peak) { return false; } Iterator itr = this.iterator(); boolean found = false; while (itr.hasNext()) { if (itr.next().equals(obj)) { found = true; break; } } return found; } else { return this.base.contains(obj); } }
@Override public Object[] toArray(Object[] obj) { if (this.hasLimitIterator) { return collectionToArray(this, obj); } else { return this.base.toArray(obj); } }