/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * 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 org.drools.workbench.services.verifier.api.client.index.query; import org.drools.workbench.services.verifier.api.client.index.Columns; import org.drools.workbench.services.verifier.api.client.index.ObjectTypes; import org.drools.workbench.services.verifier.api.client.index.Rules; import org.drools.workbench.services.verifier.api.client.index.matchers.Matcher; import org.drools.workbench.services.verifier.api.client.index.select.QueryCallback; import org.drools.workbench.services.verifier.api.client.index.select.Select; import org.drools.workbench.services.verifier.api.client.maps.KeyTreeMap; public class QueryableIndex { private Rules rules; private Columns columns; private ObjectTypes objectTypes; public QueryableIndex( final Rules rules, final Columns columns, final ObjectTypes objectTypes ) { this.rules = rules; this.columns = columns; this.objectTypes = objectTypes; } private void queryAll( Query query, QueryCallback callback ) { callback.callback( new Select<>( getMap( query.getMapId() ).get( query.getMatcher() .getKeyDefinition() ), query.getMatcher() ).all() ); } private KeyTreeMap getMap( final String mapId ) { if ( "Rules".equals( mapId ) ) { return rules.map; } else if ( "Columns".equals( mapId ) ) { return columns.map; } else if ( "ObjectTypes".equals( mapId ) ) { return objectTypes.map; } else { throw new IllegalArgumentException( "Could not find map with the id: " + mapId ); } } private void queryFirst( Query query, QueryCallback callback ) { callback.callback( new Select<>( getMap( query.getMapId() ).get( query.getMatcher() .getKeyDefinition() ), query.getMatcher() ).first() ); } private void queryLast( Query query, QueryCallback callback ) { callback.callback( new Select<>( getMap( query.getMapId() ).get( query.getMatcher() .getKeyDefinition() ), query.getMatcher() ).last() ); } public Where getRules() { return new Where( "Rules" ); } public Where getColumns() { return new Where( "Columns" ); } public Where getObjectTypes() { return new Where( "ObjectTypes" ); } class Where { private Matcher matcher; private String mapId; public Where( final String mapId ) { this.mapId = mapId; } public Select where( final Matcher matcher ) { this.matcher = matcher; return new Select(); } class Select { public Callbacks select() { return new Callbacks(); } class Callbacks { public void all( final QueryCallback callback ) { queryAll( new Query( mapId, matcher ), callback ); } public void first( final QueryCallback callback ) { queryFirst( new Query( mapId, matcher ), callback ); } public void last( final QueryCallback callback ) { queryLast( new Query( mapId, matcher ), callback ); } } } } }