/* * Copyright 2015 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. * * 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.benchmark.benchmarks; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import org.drools.benchmark.BenchmarkDefinition; import org.drools.benchmark.model.waltz.Line; import org.drools.benchmark.model.waltz.Stage; import org.kie.internal.KnowledgeBase; import org.kie.internal.KnowledgeBaseFactory; import org.kie.internal.builder.KnowledgeBuilder; import org.kie.internal.builder.KnowledgeBuilderFactory; import org.kie.internal.io.ResourceFactory; import org.kie.api.io.ResourceType; import org.kie.internal.runtime.StatefulKnowledgeSession; public class WaltzBenchmark extends AbstractBenchmark { private KnowledgeBase kbase; private List<Line> lines = new ArrayList<Line>(); @Override public void init(BenchmarkDefinition definition) { try { kbase = readRule(); loadLines("/waltz50.dat"); } catch (Exception e) { throw new RuntimeException(e); } } public void execute(int repNr) { StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession(); for (Line l : lines) { session.insert( l ); } session.insert( new Stage( Stage.DUPLICATE ) ); session.fireAllRules(); session.dispose(); } private KnowledgeBase readRule() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newInputStreamResource(getClass().getResourceAsStream("/waltz.drl")), ResourceType.DRL ); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); return kbase; } private void loadLines(final String filename) throws IOException { if (!lines.isEmpty()) { return; } BufferedReader reader = new BufferedReader( new InputStreamReader( WaltzBenchmark.class.getResourceAsStream( filename ) ) ); java.util.regex.Pattern pat = java.util.regex.Pattern.compile(".*make line \\^p1 ([0-9]*) \\^p2 ([0-9]*).*"); String line = reader.readLine(); while ( line != null ) { final Matcher m = pat.matcher( line ); if ( m.matches() ) { Line l = new Line( Integer.parseInt( m.group( 1 ) ), Integer.parseInt( m.group( 2 ) ) ); lines.add( l ); } line = reader.readLine(); } reader.close(); } }