Spigot Reference Guide

Andy Gibson


Table of Contents

Preface
1. The Itch
2. The Solution
3. Benefits of Spigot
3.1. Interchangable query mechanisms
3.2. Easy Querying
3.3. Flexible and Secure Ordering Abstraction
3.4. Convert anything into a dataset
1. Introduction
1.1. Overview
1.2. Architecture
1.3. Examples
2. Database Driven Providers
2.1. Simple Fetches
2.2. Restricting Results
2.3. Parameter Resolvers
2.3.1. Using your own parameter prefix
2.4. Order in the house
2.5. Polymorphism
2.6. Mapping SQL to Objects
3. Implementing and Testing a Data Provider
3.1. Our first DataProvider
3.2. Testing our DataProvider
3.3. Using our DataProvider
3.3.1. I want it all
3.3.2. Iteratively Speaking
3.3.3. Paging Datasets
3.3.4. Manually Fetching Data
4. The Spigot Architecture
4.1. Data Provider Types
4.1.1. ParameterizedDataProvider
4.1.2. StatementDataProvider
4.1.3. QueryDataProvider
4.1.4. AbstractQlDataProvider
4.1.5. AbstractQueryDataProvider
4.2. ObjectDataset Types
4.3. ObjectDataset Usage
4.4. Guide for choosing a dataset type
4.5. Extending Datasets for custom providers
5. Non-Database Providers
5.1. In-memory based datastores
5.2. InMemoryAdapterProvider
5.3. IntegerDataProvider revisited
5.4. File Based Data Providers
5.4.1. TextFileProvider
6. Odds and Ends
6.1. IndexedDataProviderCache
6.2. Don't call record count
6.3. Seam Usage

List of Figures

1. Projects without using Spigot
2. Projects using Spigot
1.1. Architecture Overview
3.1. Execution Results
3.2. Demo application results
3.3. Returning all results
3.4. Iterating over a paginated dataset

List of Examples

1. Coding search queries the hard way.
2. Coding search queries the easy way.
1.1. The DataProvider interface
1.2. Fetching data from a provider
1.3. Limiting the data fetched from a data provider
1.4. Using an ObjectDataset
2.1. Fetching data from a database using JPA
2.2. Restricting the data fetched
2.3. Restricting Results with Constant Parameters
2.4. Restricting with variable parameters
2.5. Alternate Value Parameters
2.6. Parameter Resolving with Reflection
2.7. Built in parameter resolution
2.8. Using the Seam data provider
2.9. Using our own parameter parser.
2.10. Ordering on the data
2.11. Implementing the SQL to Object mapping
2.12. SQL to Object mapping using an external mapper.
3.1. IntegerDataProvider.java
3.2. IntegerDataProvider.java
3.3. IntegerDataProvider.java
3.4. Revised fetchResults method in IntegerDataProvider.java
3.5. Additional tests in IntegerDataProviderTest.java to validate the results returned.
3.6. Changing our demo application to use an ObjectDataset
3.7. Changing our demo application to use an ObjectDataset
3.8. Returning all results
3.9. Returning all results
3.10. Attempting manual iteration
3.11. Manually creating provider and pagination instances and fetching results
3.12. Multiple views of the same data
4.1. Poorly typed provider and dataset useage
4.2. Strongly typed data provider and dataset usage
4.3. Type safety with the QueryDataProvider
4.4. Type safety with the QueryDataProvider
4.5. Writing datasets for custom providers
4.6. Using your new data provider dataset
4.7. Using your new data provider dataset
5.1. In-memory Person data provider.
5.2. In-memory Person data provider.
5.3. Testing the InMemoryPersonProvider
5.4. Multiple views using an in-memory adapter.
5.5. In-memory implementation of our Integer provider.
5.6. Testing our in-memory Integer data provider.
5.7. Sorting the Integer data provider.