net.swas.explorer.servlet.mgt.EditSemRule.java Source code

Java tutorial

Introduction

Here is the source code for net.swas.explorer.servlet.mgt.EditSemRule.java

Source

/*
 * This file is part of WebSiren.
 *
 *  WebSiren is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
    
 *  WebSiren is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with WebSiren.  If not, see <http://www.gnu.org/licenses/>.
 */
package net.swas.explorer.servlet.mgt;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.swas.explorer.ec.ChainRule;
import net.swas.explorer.ec.CollectionExpression;
import net.swas.explorer.ec.Condition;
import net.swas.explorer.ec.MetaData;
import net.swas.explorer.ec.Rule;
import net.swas.explorer.ec.RuleGroup;
import net.swas.explorer.ec.User;
import net.swas.explorer.ec.UserDefinedVariable;
import net.swas.explorer.ec.Variable;
import net.swas.explorer.ec.VariableExpression;
import net.swas.explorer.oh.handler.ChainRuleHandler;
import net.swas.explorer.oh.handler.RuleHandler;
import net.swas.explorer.oh.lo.OntologyLoader;
import net.swas.explorer.translator.SemTranslator;
import net.swas.explorer.util.FormFieldValidator;

import org.json.simple.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * This servlet class is responsible for updation of semantic rule in ontology
 */
@WebServlet(description = "This servlet is for handling edit rule request", urlPatterns = { "/editSemRule" })
public class EditSemRule extends HttpServlet {

    private static final long serialVersionUID = 1L;
    private final static Logger log = LoggerFactory.getLogger(EditSemRule.class);
    private RuleHandler rulehandler = null;
    private ChainRuleHandler chainHandler = null;
    private OntologyLoader loader = null;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public EditSemRule() {
        super();
    }

    @Override
    public void init(ServletConfig config) throws ServletException {

        super.init(config);
        this.loader = OntologyLoader.getOntLoader(getServletContext());
        this.rulehandler = new RuleHandler(loader);
        this.chainHandler = new ChainRuleHandler(loader);

    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    @SuppressWarnings("unchecked")
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        JSONObject json = new JSONObject();
        String status = "0";
        List<String> msg = new ArrayList<String>();

        if (FormFieldValidator.isLogin(request.getSession())) {
            log.info("Getting form parameters .. ");
            // request parameters
            String userID = request.getParameter("userID");
            String ruleID = request.getParameter("ruleID");
            String ruleGroup = request.getParameter("selectedGroup");
            String ruleType = request.getParameter("selectedType");
            String severity = request.getParameter("selectedSeverity");
            String ruleTitle = request.getParameter("selectedTitle");
            String revision = request.getParameter("selectedRevision");
            String tags = request.getParameter("selectedTags");
            String message = request.getParameter("selectedMessage");

            String description = request.getParameter("selectedDescription");
            String phase = request.getParameter("selectedPhase");
            String action = request.getParameter("selectedAction");

            String[] transformations = request.getParameterValues("selectedTransformations");
            String[] transVarNames = request.getParameterValues("selectedTransVarName");
            String[] transVarValues = request.getParameterValues("selectedTransVarValue");

            String[] conditionValues = request.getParameterValues("selectedConditionValues");
            String[] operators = request.getParameterValues("selectedOperators");
            String[] expressions = request.getParameterValues("selectedExpressions");

            Rule rule = null;
            ChainRule chainRule = null;

            log.info(
                    "ruleID :" + ruleGroup + "\t  Severity:" + severity + "\t Title :" + ruleTitle + "\t revision :"
                            + revision + "\n\t  tags:" + tags + "\t action :" + action + "\t\n transformations  :"
                            + transformations + "\t  phase :" + phase + "\t  description :" + description);

            log.info("setting values to beans ...");

            msg.addAll(FormFieldValidator.validateRule(ruleType, ruleGroup, ruleTitle, phase, action));
            if (msg.size() > 0) {
                status = "1";
            }

            if (status.equals("0")) {

                String[] tagList = tags.split(",");
                User user = SemTranslator.toUserBeans(userID, "", "");
                MetaData md = SemTranslator.toMetaDataBean("", message, revision, severity, Arrays.asList(tagList));
                RuleGroup group = SemTranslator.toRuleGroupBeans(ruleGroup, "");

                if (ruleType.equals("SimpleRule")) {

                    String[] transList = transformations[0].split(",");
                    List<VariableExpression> varExpList = SemTranslator.toVariableExpBeans(expressions[0]);
                    List<CollectionExpression> colExpList = SemTranslator.toCollectionExpBeans(expressions[0]);
                    List<UserDefinedVariable> udvList = new ArrayList<UserDefinedVariable>();

                    Variable var = SemTranslator.toVariableBean(
                            FormFieldValidator.normaliseTransformtions(transList), varExpList, colExpList);

                    if (transVarNames[0].contains(",")) {
                        udvList = SemTranslator.toUserDefVariablesBeans(transVarNames[0].split(","),
                                transVarValues[0].split(","));
                    } else {
                        udvList = SemTranslator.toUserDefVariablesBeans(transVarNames[0], transVarValues[0]);
                    }
                    Condition cond = SemTranslator.toConditionBean(false, operators[0], conditionValues[0], var,
                            udvList);

                    int ph = Integer.parseInt(phase);
                    rule = SemTranslator.toRuleBean(ruleTitle, md, cond, action, ph, description, group);
                    rule.setUserEditedBy(user);
                    Rule preRule = (Rule) this.rulehandler.get(ruleID.split("\\.")[1]);
                    rule.setID(preRule.getID());
                    rule.getMetaData().setID(preRule.getMetaData().getID());
                    rule.getCondition().setID(preRule.getCondition().getID());
                    rule.getCondition().getVariable().setID(preRule.getCondition().getVariable().getID());

                } else {

                    List<Condition> conditions = new ArrayList<Condition>();
                    for (int i = 0; i < expressions.length; i++) {

                        String[] transList = transformations[i].split(",");
                        List<VariableExpression> varExpList = SemTranslator.toVariableExpBeans(expressions[i]);
                        List<CollectionExpression> colExpList = SemTranslator.toCollectionExpBeans(expressions[i]);
                        List<UserDefinedVariable> udvList = new ArrayList<UserDefinedVariable>();

                        Variable var = SemTranslator.toVariableBean(
                                FormFieldValidator.normaliseTransformtions(transList), varExpList, colExpList);

                        if (transVarNames[0].contains(",")) {
                            udvList = SemTranslator.toUserDefVariablesBeans(transVarNames[0].split(","),
                                    transVarValues[0].split(","));
                        } else {
                            udvList = SemTranslator.toUserDefVariablesBeans(transVarNames[0], transVarValues[0]);
                        }

                        Condition cond = SemTranslator.toConditionBean(false, operators[i], conditionValues[i], var,
                                udvList);
                        conditions.add(cond);

                    }

                    int ph = Integer.parseInt(phase);
                    chainRule = SemTranslator.toChainRuleBean(ruleTitle, md, conditions, action, ph, description,
                            group);
                    chainRule.setUserEditedBy(user);
                    ChainRule preRule = (ChainRule) this.chainHandler.get(ruleID.split("\\.")[1]);
                    chainRule.setID(preRule.getID());
                    chainRule.getMetaData().setID(preRule.getMetaData().getID());

                }

                if (rule instanceof Rule) {

                    if (rulehandler.update(rule) != null) {

                        log.info("rule stored successfully ...");
                        status = "0";
                        msg.add("rule added sucessfully");

                    } else {

                        status = "1";
                        msg.add("Rule is not stored");

                    }

                } else {

                    if (chainHandler.update(chainRule) != null) {

                        log.info("rule stored successfully ...");
                        status = "0";
                        msg.add("rule added sucessfully");

                    } else {

                        status = "1";
                        msg.add("Rule is not stored");

                    }
                }
            }
        } else {
            status = "2";
            msg.add("User Session Expired");
        }

        json.put("status", status);
        json.put("message", msg);

        try {
            log.info("Sending Json : " + json.toString());
            out.print(json.toString());
        } finally {
            out.close();
        }

    }

}