/* * Copyright 2013 Robert von Burg <eitch@eitchnet.ch> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package li.strolch.runtime.query.inmemory; import java.util.ArrayList; import java.util.List; import li.strolch.model.audit.ActionSelection; import li.strolch.model.audit.AuditQuery; import li.strolch.model.audit.AuditQueryVisitor; import li.strolch.model.audit.AuditVisitor; import li.strolch.model.audit.ElementSelection; import li.strolch.model.audit.IdentitySelection; import li.strolch.utils.collections.DateRange; import li.strolch.utils.dbc.DBC; /** * @author Robert von Burg <eitch@eitchnet.ch> */ public class InMemoryAuditQueryVisitor<U> implements AuditQueryVisitor { private AuditTypeNavigator navigator; private List<AuditSelector> selectors; public InMemoryAuditQuery<U> toInMemory(AuditQuery<U> auditQuery) { AuditVisitor<U> auditVisitor = auditQuery.getAuditVisitor(); DBC.PRE.assertNotNull("auditVisitor", auditVisitor); //$NON-NLS-1$ this.selectors = new ArrayList<>(); auditQuery.accept(this); if (this.navigator == null) { String msg = "Query is missing a navigation!"; //$NON-NLS-1$ throw new QueryException(msg); } long limit = auditQuery.getLimit(); return new InMemoryAuditQuery<>(this.navigator, limit, this.selectors, auditVisitor); } @Override public void visit(ElementSelection selection) { this.selectors.add(AuditSelector.selectorFor(selection)); } @Override public void visit(IdentitySelection selection) { this.selectors.add(AuditSelector.selectorFor(selection)); } @Override public void visit(ActionSelection selection) { this.selectors.add(AuditSelector.selectorFor(selection)); } @Override public void visit(AuditQuery<?> auditQuery) { String type = auditQuery.getElementTypeSelection(); DateRange dateRange = auditQuery.getDateRange(); this.navigator = new AuditTypeNavigator(type, dateRange); } }