/** * Returns unmodifiable SelectResults for keys. When the "keys" attribute is accessed, this is the * preferred method that will be executed. */ public SelectResults getKeys() { ResultsCollectionWrapper res; if (this.region instanceof LocalDataSet) { LocalDataSet localData = (LocalDataSet) this.region; res = new ResultsCollectionWrapper(getKeyType(), localData.localKeys()); } else { res = new ResultsCollectionWrapper(getKeyType(), this.region.keySet()); } res.setModifiable(false); return res; }
/** * Returns the entries as an unmodifiable SelectResults. This is the preferred method that is * invoked when accessing the attribute "entries". */ public SelectResults getEntries() { ResultsCollectionWrapper res; if (this.region instanceof LocalDataSet) { LocalDataSet localData = (LocalDataSet) this.region; res = new ResultsCollectionWrapper(TypeUtils.getRegionEntryType(this.region), localData.localEntrySet()); } else { res = new ResultsCollectionWrapper(TypeUtils.getRegionEntryType(this.region), this.region.entrySet(false)); } res.setModifiable(false); return res; }
/** * 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; }
public SelectResults entrySet() { ResultsCollectionWrapper res = new ResultsCollectionWrapper(new ObjectTypeImpl(Map.Entry.class), this.region.entrySet(false)); res.setModifiable(false); return res; }
private Object postProcessQueryResults(Object value) { // The result is a single value if (!(value instanceof SelectResults)) { // For query results, we don't have the region or the key return security.postProcess(null, null, value); } SelectResults<?> selectResults = (SelectResults<?>) value; // The result is a list of objects if (!selectResults.getCollectionType().getElementType().isStructType()) { List<Object> postProcessed = selectResults.stream() .map(element -> security.postProcess(null, null, element)).collect(Collectors.toList()); return new ResultsCollectionWrapper(selectResults.getCollectionType().getElementType(), postProcessed); } // The result is a list of structs SelectResults<Struct> structResults = (SelectResults<Struct>) selectResults; List<Struct> postProcessed = structResults.stream().map(this::postProcessStruct).collect(Collectors.toList()); return new ResultsCollectionWrapper(selectResults.getCollectionType().getElementType(), postProcessed); }
/** 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; }
this.region = localData; if (includeKeys) { res = new ResultsCollectionWrapper(TypeUtils.getObjectType(constraint), localData.localEntrySet()); } else { res = new ResultsCollectionWrapper(TypeUtils.getObjectType(constraint), localData.localValues()); this.region = region; if (includeKeys) { res = new ResultsCollectionWrapper(TypeUtils.getObjectType(constraint), region.entrySet()); } else { res = new ResultsCollectionWrapper(TypeUtils.getObjectType(constraint), region.values());
@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 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)); }
@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 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 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 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)); }
@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 testToArrayParameterized() { 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 = new Object[5]; wrapper.toArray(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 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()); }
new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); assertFalse(wrapper.remove(new Integer(6))); assertTrue(wrapper.remove(new Integer(4))); ordered.add(new Integer(i)); wrapper = new ResultsCollectionWrapper(new ObjectTypeImpl(Object.class), ordered, 5); newList = new ArrayList(); for (int i = 2; i < 11; ++i) {
@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()); } }
@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()); }
@Test public void testSerializingSetViewWithNulls() throws Exception { ResultsBag bag = new ResultsBag(); bag.add(new Integer(4)); bag.add(new Integer(2)); bag.add(new Integer(42)); bag.add(null); bag.add(null); bag.add(null); assertEquals(6, bag.size()); assertEquals(1, bag.occurrences(new Integer(4))); assertEquals(3, bag.occurrences(null)); Set set = bag.asSet(); assertEquals(4, set.size()); assertTrue(set.contains(new Integer(4))); assertTrue(set.contains(null)); ResultsCollectionWrapper w = new ResultsCollectionWrapper(new ObjectTypeImpl(Integer.class), set); HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT); DataSerializer.writeObject(w, hdos); DataInputStream in = new DataInputStream(hdos.getInputStream()); SelectResults setCopy = (SelectResults) DataSerializer.readObject(in); assertEquals(4, setCopy.size()); assertTrue(setCopy.contains(new Integer(4))); assertTrue(setCopy.contains(null)); }