diff options
author | 2018-01-31 12:31:05 -0600 | |
---|---|---|
committer | 2018-01-31 13:23:20 -0600 | |
commit | aa69a4db58140af6a605cadd3b8e6166f59d97ad (patch) | |
tree | 07b1c15b2f95421370e2f282485665cadb8ba241 /policy-core/src/main/java/org | |
parent | 9e2820c5820b3904e03cb7a4cb4292e864b1ca2b (diff) |
junits+utils to generate/test rules applications
1. utilities to generate rules applications and installing
in local maven repository programmatically.
2. using these utilities, use policy abstractions, ie.
controllers, containers, .. to junit test it.
Change-Id: I13c35e631a1120fad503feef2593d32a99e3358f
Issue-ID: POLICY-583
Signed-off-by: Jorge Hernandez <jh1730@att.com>
Diffstat (limited to 'policy-core/src/main/java/org')
-rw-r--r-- | policy-core/src/main/java/org/onap/policy/drools/util/KieUtils.java | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/policy-core/src/main/java/org/onap/policy/drools/util/KieUtils.java b/policy-core/src/main/java/org/onap/policy/drools/util/KieUtils.java new file mode 100644 index 00000000..59ee5119 --- /dev/null +++ b/policy-core/src/main/java/org/onap/policy/drools/util/KieUtils.java @@ -0,0 +1,112 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.drools.util; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import org.drools.compiler.kie.builder.impl.InternalKieModule; +import org.drools.compiler.kproject.models.KieModuleModelImpl; +import org.kie.api.KieServices; +import org.kie.api.builder.KieBuilder; +import org.kie.api.builder.KieFileSystem; +import org.kie.api.builder.Message; +import org.kie.api.builder.ReleaseId; +import org.kie.api.builder.model.KieModuleModel; +import org.kie.scanner.MavenRepository; + +/** + * Kie related utilities + */ +public class KieUtils { + + /** + * Installs a rules artifact in the local maven repository + * + * @param kmodule kmodule specification + * @param pom pom + * @param drlKJarPath path used in kjar drl to the actual drl + * @param drl rules in drl language + * + * @return releaseId result o a sucessful installation + * @throws IOException error accessing necessary resources + */ + public static ReleaseId installArtifact(String kmodule, String pom, String drlKJarPath, String drl) throws IOException { + KieModuleModel kieModule = KieModuleModelImpl.fromXML(kmodule); + + final KieFileSystem kieFileSystem = KieServices.Factory.get().newKieFileSystem(); + kieFileSystem.writeKModuleXML(kieModule.toXML()); + kieFileSystem.writePomXML(pom); + kieFileSystem.write(drlKJarPath, drl); + + KieBuilder kieBuilder = kieBuild(kieFileSystem); + + Path pomPath = Files.createTempFile("policy-core-", ".pom"); + Files.write(pomPath, pom.getBytes(StandardCharsets.UTF_8)); + File pomFile = pomPath.toFile(); + pomFile.deleteOnExit(); + + ReleaseId releaseId = kieBuilder.getKieModule().getReleaseId(); + MavenRepository.getMavenRepository(). + installArtifact(releaseId, + (InternalKieModule) kieBuilder.getKieModule(), + pomFile); + return releaseId; + } + + /** + * Installs a rules artifact in the local maven repository + * + * @param kmodule kmodule specification + * @param pom pom + * @param drlKJarPath path used in kjar drl to the actual drl + * @param drl rules in drl language + * + * @return releaseId result o a sucessful installation + * @throws IOException error accessing necessary resources + */ + public static ReleaseId installArtifact(File kmodule, File pom, String drlKJarPath, File drl) throws IOException { + KieModuleModel kieModule = KieModuleModelImpl.fromXML(kmodule); + + final KieFileSystem kieFileSystem = KieServices.Factory.get().newKieFileSystem(); + kieFileSystem.writeKModuleXML(kieModule.toXML()); + kieFileSystem.writePomXML(new String(Files.readAllBytes(pom.toPath()))); + kieFileSystem.write(drlKJarPath, new String(Files.readAllBytes(drl.toPath()))); + + KieBuilder kieBuilder = kieBuild(kieFileSystem); + + ReleaseId releaseId = kieBuilder.getKieModule().getReleaseId(); + MavenRepository.getMavenRepository(). + installArtifact(releaseId, (InternalKieModule) kieBuilder.getKieModule(), pom); + return releaseId; + } + + private static KieBuilder kieBuild(KieFileSystem kieFileSystem) { + KieBuilder kieBuilder = KieServices.Factory.get().newKieBuilder(kieFileSystem); + List<Message> messages = kieBuilder.buildAll().getResults().getMessages(); + if (messages != null && !messages.isEmpty()) + throw new IllegalArgumentException(messages.toString()); + return kieBuilder; + } +} |