X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=engine-d%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fholmes%2Fengine%2Fresources%2FEngineResources.java;h=0aa3a59db910d49df89cfd9ac6d42d4cf456af11;hb=c4dc95bc729afd91c00cab49d0a69bceb102eed9;hp=97243554b8946e164bda83dff86103b426f2ad10;hpb=530fcc3970550c2ddbe62f51c59b9705cbaa244b;p=holmes%2Fengine-management.git diff --git a/engine-d/src/main/java/org/onap/holmes/engine/resources/EngineResources.java b/engine-d/src/main/java/org/onap/holmes/engine/resources/EngineResources.java index 9724355..0aa3a59 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/resources/EngineResources.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/resources/EngineResources.java @@ -20,20 +20,9 @@ import com.codahale.metrics.annotation.Timed; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; -import java.util.Locale; -import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.DELETE; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; import lombok.extern.slf4j.Slf4j; import org.jvnet.hk2.annotations.Service; -import org.onap.holmes.common.dmaap.DmaapService; +import org.onap.holmes.common.dmaap.store.ClosedLoopControlNameCache; import org.onap.holmes.common.exception.CorrelationException; import org.onap.holmes.common.utils.ExceptionUtil; import org.onap.holmes.common.utils.LanguageUtil; @@ -42,46 +31,73 @@ import org.onap.holmes.engine.request.CompileRuleRequest; import org.onap.holmes.engine.request.DeployRuleRequest; import org.onap.holmes.engine.response.CorrelationRuleResponse; +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + @Service @Path("/rule") @Api(tags = {"Holmes Engine Management"}) @Produces(MediaType.APPLICATION_JSON) @Slf4j public class EngineResources { - @Inject DroolsEngine droolsEngine; + private Pattern packagePattern = Pattern.compile("package[\\s]+([^;]+)[;\\s]*"); + private ClosedLoopControlNameCache closedLoopControlNameCache; + + @Inject + public void setClosedLoopControlNameCache(ClosedLoopControlNameCache closedLoopControlNameCache) { + this.closedLoopControlNameCache = closedLoopControlNameCache; + } @PUT - @ApiOperation(value = "Deploy a rule into the Drools engine.", response = CorrelationRuleResponse.class) @Produces(MediaType.APPLICATION_JSON) @Timed public CorrelationRuleResponse deployRule( @ApiParam(value = "The request entity of the HTTP call, which comprises three " - + "fields: \"content\" , \"loopcontrolname\" and \"engineid\". " - + "The \"content\" should be a valid Drools rule string and the \"engineid\" " + + "fields: \"content\" , \"loopControlName\" and \"engineId\". " + + "The \"content\" should be a valid Drools rule string and the \"engineId\" " + "has to be \"engine-d\" in the Amsterdam release.", required = true) DeployRuleRequest deployRuleRequest, @Context HttpServletRequest httpRequest) { CorrelationRuleResponse crResponse = new CorrelationRuleResponse(); Locale locale = LanguageUtil.getLocale(httpRequest); try { - String packageName = droolsEngine.deployRule(deployRuleRequest, locale); - DmaapService.loopControlNames + String packageName = getPackageName(deployRuleRequest.getContent()); + if(packageName == null) { + throw new CorrelationException("Could not find package name in rule: "+deployRuleRequest.getContent()); + } + + closedLoopControlNameCache .put(packageName, deployRuleRequest.getLoopControlName()); - log.info("Rule deployed. Package name: " + packageName); - crResponse.setPackageName(packageName); + String packageNameRet = droolsEngine.deployRule(deployRuleRequest); + if (!packageName.equals(packageNameRet)) { + log.info("The parsed package name is different from that returned by the engine."); + closedLoopControlNameCache.remove(packageName); + closedLoopControlNameCache + .put(packageNameRet, deployRuleRequest.getLoopControlName()); + } + log.info("Rule deployed. Package name: " + packageNameRet); + crResponse.setPackageName(packageNameRet); } catch (CorrelationException correlationException) { log.error(correlationException.getMessage(), correlationException); throw ExceptionUtil.buildExceptionResponse(correlationException.getMessage()); + } catch (RuntimeException e) { + log.error(e.getMessage(), e); + throw ExceptionUtil.buildExceptionResponse(e.getMessage()); } return crResponse; } @DELETE - @ApiOperation(value = "Undeploy a rule from the Drools engine.") @Produces(MediaType.APPLICATION_JSON) @Timed @Path("/{packageName}") @@ -91,13 +107,13 @@ public class EngineResources { Locale locale = LanguageUtil.getLocale(httpRequest); try { - - droolsEngine.undeployRule(packageName, locale); - + droolsEngine.undeployRule(packageName); + closedLoopControlNameCache.remove(packageName); } catch (CorrelationException correlationException) { log.error(correlationException.getMessage(), correlationException); throw ExceptionUtil.buildExceptionResponse(correlationException.getMessage()); } + return true; } @@ -112,11 +128,21 @@ public class EngineResources { Locale locale = LanguageUtil.getLocale(httpRequest); try { - droolsEngine.compileRule(compileRuleRequest.getContent(), locale); + droolsEngine.compileRule(compileRuleRequest.getContent()); } catch (CorrelationException correlationException) { log.error(correlationException.getMessage(), correlationException); throw ExceptionUtil.buildExceptionResponse(correlationException.getMessage()); } return true; } + + private String getPackageName(String contents){ + Matcher m = packagePattern.matcher(contents); + + if (m.find( )) { + return m.group(1); + }else { + return null; + } + } }