io.siddhi.service.impl.SiddhiApiServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for io.siddhi.service.impl.SiddhiApiServiceImpl.java

Source

/*
 * Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) 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.
 */

package io.siddhi.service.impl;

import com.google.gson.Gson;
import io.siddhi.core.SiddhiAppRuntime;
import io.siddhi.core.SiddhiManager;
import io.siddhi.core.stream.input.InputHandler;
import io.siddhi.query.api.SiddhiApp;
import io.siddhi.query.api.util.AnnotationHelper;
import io.siddhi.query.compiler.SiddhiCompiler;
import io.siddhi.service.api.ApiResponseMessage;
import io.siddhi.service.api.NotFoundException;
import io.siddhi.service.api.SiddhiApiService;
import io.siddhi.service.util.SiddhiAppConfiguration;
import io.siddhi.service.util.SiddhiServiceConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.ws.rs.core.Response;

/**
 * Siddhi Service Implementataion Class
 */
public class SiddhiApiServiceImpl extends SiddhiApiService {

    private Log log = LogFactory.getLog(SiddhiApiServiceImpl.class);
    private SiddhiManager siddhiManager = new SiddhiManager();
    private Map<String, Map<String, InputHandler>> siddhiAppSpecificInputHandlerMap = new ConcurrentHashMap<>();
    private Map<String, SiddhiAppConfiguration> siddhiAppConfigurationMap = new ConcurrentHashMap<>();
    private Map<String, SiddhiAppRuntime> siddhiAppRunTimeMap = new ConcurrentHashMap<>();

    @Override
    public Response siddhiArtifactDeployPost(String siddhiApp) throws NotFoundException {

        log.info("SiddhiApp = " + siddhiApp);
        String jsonString = new Gson().toString();
        try {
            SiddhiApp parsedSiddhiApp = SiddhiCompiler.parse(siddhiApp);
            String siddhiAppName = AnnotationHelper.getAnnotationElement(
                    SiddhiServiceConstants.ANNOTATION_NAME_NAME, null, parsedSiddhiApp.getAnnotations()).getValue();
            if (!siddhiAppRunTimeMap.containsKey(siddhiApp)) {
                SiddhiAppConfiguration siddhiAppConfiguration = new SiddhiAppConfiguration();
                siddhiAppConfiguration.setName(siddhiAppName);
                siddhiAppConfigurationMap.put(siddhiAppName, siddhiAppConfiguration);

                SiddhiAppRuntime siddhiAppRuntime = siddhiManager.createSiddhiAppRuntime(siddhiApp);

                if (siddhiAppRuntime != null) {
                    Set<String> streamNames = siddhiAppRuntime.getStreamDefinitionMap().keySet();
                    Map<String, InputHandler> inputHandlerMap = new ConcurrentHashMap<>(streamNames.size());

                    for (String streamName : streamNames) {
                        inputHandlerMap.put(streamName, siddhiAppRuntime.getInputHandler(streamName));
                    }

                    siddhiAppSpecificInputHandlerMap.put(siddhiAppName, inputHandlerMap);

                    siddhiAppRunTimeMap.put(siddhiAppName, siddhiAppRuntime);
                    siddhiAppRuntime.start();

                    jsonString = new Gson().toJson(new ApiResponseMessage(ApiResponseMessage.OK,
                            "Siddhi app is deployed " + "and runtime is created"));
                }
            } else {
                jsonString = new Gson().toJson(new ApiResponseMessage(ApiResponseMessage.ERROR,
                        "There is a Siddhi app already " + "exists with same name"));
            }

        } catch (Exception e) {
            jsonString = new Gson().toJson(new ApiResponseMessage(ApiResponseMessage.ERROR, e.getMessage()));
        }

        return Response.ok().entity(jsonString).build();
    }

    @Override
    public Response siddhiArtifactUndeploySiddhiAppGet(String siddhiAppName) throws NotFoundException {

        String jsonString = new Gson().toString();
        if (siddhiAppName != null) {
            if (siddhiAppRunTimeMap.containsKey(siddhiAppName)) {
                siddhiAppRunTimeMap.remove(siddhiAppName);
                siddhiAppConfigurationMap.remove(siddhiAppName);
                siddhiAppSpecificInputHandlerMap.remove(siddhiAppName);

                jsonString = new Gson()
                        .toJson(new ApiResponseMessage(ApiResponseMessage.OK, "Siddhi app removed successfully"));
            } else {
                jsonString = new Gson().toJson(new ApiResponseMessage(ApiResponseMessage.ERROR,
                        "There is no siddhi app exist " + "with provided name : " + siddhiAppName));
            }
        } else {
            jsonString = new Gson().toJson(new ApiResponseMessage(ApiResponseMessage.ERROR, "nvalid Request"));

        }
        return Response.ok().entity(jsonString).build();
    }
}