
org.drools.impact.analysis.parser.ModelBuilder Maven / Gradle / Ivy
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.impact.analysis.parser;
import java.util.UUID;
import org.drools.impact.analysis.model.AnalysisModel;
import org.drools.impact.analysis.parser.internal.ImpactAnalysisKieModule;
import org.drools.impact.analysis.parser.internal.ImpactAnalysisProject;
import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.ReleaseId;
import org.kie.api.builder.model.KieModuleModel;
public class ModelBuilder {
public AnalysisModel build(String... stringRules) {
KieBuilder kieBuilder = createKieBuilder( stringRules );
ImpactAnalysisKieModule analysisKieModule = (ImpactAnalysisKieModule) kieBuilder.getKieModule();
return analysisKieModule.getAnalysisModel();
}
protected KieBuilder createKieBuilder( String... stringRules ) {
KieServices ks = KieServices.get();
ReleaseId releaseId = ks.newReleaseId( "org.kie", "kjar-test-" + UUID.randomUUID(), "1.0" );
return createKieBuilder( ks, null, releaseId, false, toKieFiles( stringRules ) );
}
protected KieBuilder createKieBuilder( KieServices ks, KieModuleModel model, ReleaseId releaseId, KieFile... stringRules ) {
return createKieBuilder( ks, model, releaseId, true, stringRules );
}
protected KieBuilder createKieBuilder( KieServices ks, KieModuleModel model, ReleaseId releaseId, boolean failIfBuildError, KieFile... stringRules ) {
KieFileSystem kfs = ks.newKieFileSystem();
if ( model != null ) {
kfs.writeKModuleXML( model.toXML() );
}
kfs.writePomXML( getPom( releaseId ) );
for (int i = 0; i < stringRules.length; i++) {
kfs.write( stringRules[i].path, stringRules[i].content );
}
KieBuilder kieBuilder = ks.newKieBuilder(kfs).buildAll( ImpactAnalysisProject.class);
return kieBuilder;
}
public static class KieFile {
public final String path;
public final String content;
public KieFile( int index, String content ) {
this( String.format("src/main/resources/r%d.drl", index), content );
}
public KieFile( String path, String content ) {
this.path = path;
this.content = content;
}
}
private KieFile[] toKieFiles(String[] stringRules) {
KieFile[] kieFiles = new KieFile[stringRules.length];
for (int i = 0; i < stringRules.length; i++) {
kieFiles[i] = new KieFile( i, stringRules[i] );
}
return kieFiles;
}
private static String getPom(ReleaseId releaseId) {
String pom =
"\n" +
"\n" +
" 4.0.0 \n" +
"\n" +
" " + releaseId.getGroupId() + " \n" +
" " + releaseId.getArtifactId() + " \n" +
" " + releaseId.getVersion() + " \n" +
" ";
return pom;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy