TableRowIterator implements
        Iterator<List<Either<ResultCell, SubTable>>>,
        Iterable<List<Either<ResultCell, SubTable>>> { public List<Path> getEffectiveView() { return Collections.unmodifiableList(effectiveView); } TableRowIterator(
            PathQuery pathQuery,
            Query query,
            Results results,
            Map<String, QuerySelectable> nodeForPath,
            Page page,
            InterMineAPI im); List<Path> getEffectiveView(); @Override Iterator<List<Either<ResultCell, SubTable>>> iterator(); @Override boolean hasNext(); @Override void remove(); @Override List<Either<ResultCell, SubTable>> next();  }
@Test public void GettingEffectiveView() throws ObjectStoreException { PathQuery pq = getPQ("ungroupedOJG"); TableRowIterator iter = getResults(pq, new Page(2, 3)); List<String> expected = Arrays.asList( "Employee.name", "Employee.department.name", "Employee.department.manager.name", "Employee.department.company.name", "Employee.department.manager.title", "Employee.fullTime", "Employee.address.address", "Employee.age"); List<String> orig = pq.getView(); List<String> rejiggered = ListFunctions.map(iter.getEffectiveView(), new F<Path, String>() { public String call(Path p) { return p.getNoConstraintsString(); } }); puts(orig); puts(rejiggered); assertEquals(orig.size(), rejiggered.size()); assertEquals(new HashSet<String>(orig), new HashSet<String>(rejiggered)); assertEquals(expected, rejiggered); }