T - class of UsageRecordpublic abstract class DefaultUsageProducer<T extends DataObjectPropertyContainer & UsageRecord> extends DataObjectPropertyFactory<T> implements UsageProducer<T>
DataObjectPropertyFactory into a UsageProducer
This class implements most of the query logic needed to implement UsageProducer
but down not constrain the class of the UsageRecord more than is required to implement UsageProducerDataObjectPropertyFactory.DataObjectTableRegistryuk.ac.ed.epcc.webapp.model.data.DataObjectFactory.CounterMapper, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.DataObjectAcceptFilter, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.DataObjectInput, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.DataObjectIntegerInput, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.DestFilter<T extends uk.ac.ed.epcc.webapp.model.data.DataObject>, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.ExistsMapper, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.FilterAdapter, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.FilterCounter, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.FilterExists, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.FilterIterator, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.FilterSet, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.Finder, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.MatchFilter, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.ReferenceAcceptFilter<R extends uk.ac.ed.epcc.webapp.Indexed,T extends uk.ac.ed.epcc.webapp.model.data.DataObject>, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.ReferencedAdapter<I extends uk.ac.ed.epcc.webapp.Indexed>, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.ReferenceIterator<I extends uk.ac.ed.epcc.webapp.Indexed>, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.RemoteFilter<T extends uk.ac.ed.epcc.webapp.model.data.DataObject>, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.SortingDataObjectInput, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.TimeAcceptFilter<T extends uk.ac.ed.epcc.webapp.model.data.DataObject>, uk.ac.ed.epcc.webapp.model.data.DataObjectFactory.TimeFilter| Modifier and Type | Field and Description |
|---|---|
static uk.ac.ed.epcc.webapp.Feature |
AUTO_CUTOFF_FEATURE |
java.util.Map<uk.ac.ed.epcc.safe.accounting.db.DefaultUsageProducer.CutoffKey,java.lang.Long> |
cutoffs |
protected uk.ac.ed.epcc.webapp.logging.Logger |
log |
| Modifier | Constructor and Description |
|---|---|
protected |
DefaultUsageProducer() |
protected |
DefaultUsageProducer(uk.ac.ed.epcc.webapp.AppContext c,
java.lang.String table) |
| Modifier and Type | Method and Description |
|---|---|
PropExpressionMap |
getDerivedProperties() |
java.lang.String |
getImplemenationInfo(PropertyTag<?> tag)
Return a text description of how the property is implemented.
|
java.util.Map<ExpressionTuple,ReductionMapResult> |
getIndexedReductionMap(java.util.Set<ReductionTarget> sum,
RecordSelector selector)
General reduction operation.
|
uk.ac.ed.epcc.webapp.jdbc.filter.BaseFilter<T> |
getPeriodFilter(uk.ac.ed.epcc.webapp.time.Period period,
PropExpression<java.util.Date> start,
PropExpression<java.util.Date> end,
OverlapType type,
long cutoff)
Generate an overlap filter
|
<R> R |
getReduction(ReductionTarget<R> type,
RecordSelector selector)
Perform a reduction over a set of records
|
<I> java.util.Map<I,java.lang.Number> |
getReductionMap(PropExpression<I> index,
ReductionTarget<java.lang.Number> property,
RecordSelector selector)
sum the specified numerical quantity over all records that match the selector
grouped by the other specified property
|
compatible, compatible, find, getAccessorMap, getFilter, getFilter, getIterator, getIterator, getNullFilter, getOrderFilter, getProperties, getRecordCount, getRelationFilter, getSelectClauseFilter, getSelectors, getSQLExpression, getTarget, getValues, hasProperty, makeTableRegistry, updategetTableTransitionID, getTableTransitionRegistry, resetStructureall, allowPreSelect, canCreate, canUpdate, customiseForm, equals, exists, find, find, find, find, find, getAllIterator, getComposite, getComposites, getConfigTag, getContext, getCount, getDefaults, getDefaultTableSpecification, getFormCreator, getFormUpdate, getIndex, getInput, getInput, getIterator, getLogger, getMaxIdentifierLength, getNullable, getOptional, getOrder, getProperty, getReferenced, getReferenceFieldType, getResult, getSelectFilter, getSupress, getTag, getTranslations, getUniqueIdName, hashCode, isMine, isMine, isMyReference, isValid, makeBDO, makeBDO, makeObject, makeRecord, makeReference, makeReference, makeSet, OrderBy, postCreateTableSetup, release, restrictDefaultInput, setContext, setContext, setContextWithMake, setProperty, toStringclone, finalize, getClass, notify, notifyAll, wait, wait, waithasPropertycompatiblecompatible, getIterator, getIterator, getRecordCount, getValuesgetFinderprotected uk.ac.ed.epcc.webapp.logging.Logger log
public java.util.Map<uk.ac.ed.epcc.safe.accounting.db.DefaultUsageProducer.CutoffKey,java.lang.Long> cutoffs
public static final uk.ac.ed.epcc.webapp.Feature AUTO_CUTOFF_FEATURE
protected DefaultUsageProducer()
protected DefaultUsageProducer(uk.ac.ed.epcc.webapp.AppContext c,
java.lang.String table)
public java.lang.String getImplemenationInfo(PropertyTag<?> tag)
UsageProducergetImplemenationInfo in interface UsageProducer<T extends DataObjectPropertyContainer & UsageRecord>tag - PropertyTagpublic final PropExpressionMap getDerivedProperties()
getDerivedProperties in interface DerivedPropertyFactorypublic uk.ac.ed.epcc.webapp.jdbc.filter.BaseFilter<T> getPeriodFilter(uk.ac.ed.epcc.webapp.time.Period period, PropExpression<java.util.Date> start, PropExpression<java.util.Date> end, OverlapType type, long cutoff) throws uk.ac.ed.epcc.webapp.jdbc.expr.CannotFilterException
ExpressionFilterTargetgetPeriodFilter in interface ExpressionFilterTarget<T extends DataObjectPropertyContainer & UsageRecord>getPeriodFilter in class DataObjectPropertyFactory<T extends DataObjectPropertyContainer & UsageRecord>uk.ac.ed.epcc.webapp.jdbc.expr.CannotFilterExceptionperiod - Period to overlapstart - start propertyend - end propertytype - OverlapTypecutoff - maximum length of records zero if not knownpublic <I> java.util.Map<I,java.lang.Number> getReductionMap(PropExpression<I> index, ReductionTarget<java.lang.Number> property, RecordSelector selector) throws java.lang.Exception
ReductionProducergetReductionMap in interface ReductionProducer<T extends DataObjectPropertyContainer & UsageRecord>java.lang.Exceptionpublic java.util.Map<ExpressionTuple,ReductionMapResult> getIndexedReductionMap(java.util.Set<ReductionTarget> sum, RecordSelector selector) throws java.lang.Exception
ReductionProducerReductionTarget objects. This method generates
Maps from the requested ReductionTarget to the result of the corresponding reduction.
If the list of ReductionTargets contains any IndexReduction objects then multiple results will
be returned so these results are themselves returned as a Map indexed by PropertyTuple objects
representing the Index values. If there are no IndexValues an empty PropertyTuple will be used.
A non-index target that does not resolve may be ignored or return the default value for
the ReductionTarget. This is so target set compatible with composite UsageProducers
can contain targets only relevant to some of its parts without suppressing all output from the
tables that don't support the property. This does run the risk that spurious index-tuples
might be generated from tables that support none of the non-index targets.
In that case the producer has to be tuned.getIndexedReductionMap in interface ReductionProducer<T extends DataObjectPropertyContainer & UsageRecord>java.lang.Exceptionpublic <R> R getReduction(ReductionTarget<R> type, RecordSelector selector) throws java.lang.Exception
ReductionProducergetReduction in interface ReductionProducer<T extends DataObjectPropertyContainer & UsageRecord>java.lang.Exceptiontype - ReductionTarget specifying reduction to performselector - RecordSelector to select target records