Package com.codeforces.graygoose.web.page.data

Source Code of com.codeforces.graygoose.web.page.data.RulesDataPage

package com.codeforces.graygoose.web.page.data;

import com.codeforces.graygoose.dao.RuleDao;
import com.codeforces.graygoose.misc.Noty;
import com.codeforces.graygoose.model.Response;
import com.codeforces.graygoose.model.Rule;
import com.codeforces.graygoose.util.ResponseCheckingService;
import com.codeforces.graygoose.util.RuleTypeUtil;
import com.codeforces.graygoose.util.UrlUtil;
import com.google.inject.Inject;
import org.nocturne.annotation.Action;
import org.nocturne.annotation.Parameter;
import org.nocturne.annotation.Validate;
import org.nocturne.link.Link;
import org.nocturne.validation.OptionValidator;
import org.nocturne.validation.RequiredValidator;

import java.util.Map;

@Link("data/rules")
public class RulesDataPage extends DataPage {
    @Parameter
    private Long ruleId;

    @Parameter
    private long siteId;

    @Parameter
    private String ruleType;

    private Rule rule;

    @Inject
    private RuleDao ruleDao;

    @Override
    public void initializeAction() {
        super.initializeAction();

        if (ruleId != null) {
            rule = ruleDao.find(ruleId);
        }
    }

    @Action("deleteRule")
    public void onDeleteRule() {
        try {
            if (rule != null) {
                ruleDao.markDeleted(rule);
                put("success", true);
            } else {
                put("error", $("No such rule"));
            }
        } catch (Exception e) {
            put("error", e.getMessage());
        }

        printTemplateMapAsStringsUsingJson("success", "error");
    }

    @SuppressWarnings({"KeySetIterationMayUseEntrySet"})
    @Action("findById")
    public void onFindById() {
        try {
            if (rule != null) {
                put("ruleType", rule.getRuleType());

                Map<String, String> settings = rule.getData();

                for (String settingName : settings.keySet()) {
                    put(settingName, settings.get(settingName));
                }

                put("success", true);
            } else {
                put("error", $("No such rule"));
            }
        } catch (Exception e) {
            put("error", e.getMessage());
        }

        printTemplateMapAsStringsUsingJson();
    }

    private boolean validateEditOrAdd() {
        addValidator("siteId", new RequiredValidator());

        addValidator("ruleType", new RequiredValidator());

        Rule.RuleType[] ruleTypes = Rule.RuleType.values();
        String[] ruleTypeNames = new String[ruleTypes.length];

        for (int ruleTypeIndex = 0; ruleTypeIndex < ruleTypes.length; ++ruleTypeIndex) {
            ruleTypeNames[ruleTypeIndex] = ruleTypes[ruleTypeIndex].toString();
        }

        addValidator("ruleType", new OptionValidator((Object[]) ruleTypeNames));

        RuleTypeUtil.addRulePropertyValidators(this, ruleType);

        return runValidationAndPrintErrors();
    }

    @Validate("add")
    public boolean validateAdd() {
        return validateEditOrAdd();
    }

    @Validate("edit")
    public boolean validateEdit() {
        addValidator("ruleId", new RequiredValidator());
        return validateEditOrAdd();
    }

    @Action("edit")
    public void onEdit() {
        if (rule != null) {
            rule.setRuleType(Rule.RuleType.valueOf(ruleType));
            setupRuleProperties(rule);

            ruleDao.update(rule);
            put("success", true);
        } else {
            put("error", $("Can't find rule to update"));
        }

        printTemplateMapAsStringsUsingJson("success", "error");
    }

    @Action("add")
    public void onAdd() {
        try {
            Rule newRule = Rule.newRule(siteId, Rule.RuleType.valueOf(ruleType));
            setupRuleProperties(newRule);

            ruleDao.insert(newRule);

            put("success", true);
            addMessage($("Rule has been added"), Noty.Type.SUCCESS);
        } catch (Exception e) {
            put("error", e.getMessage());
        }

        printTemplateMapAsStringsUsingJson("success", "error");
    }

    @Action("checkRule")
    public void onCheckRule() {
        try {
            Response response = Response.newResponse(
                    getString("url"), getInteger("responseCode"), getString("responseText"));

            String errorMessage = ResponseCheckingService.getErrorMessageOrNull(
                    getString("siteName"), response, ruleDao.find(getLong("ruleId")));

            if (errorMessage == null) {
                put("success", true);
            } else {
                put("error", errorMessage);
            }
        } catch (Exception e) {
            put("error", e.getMessage());
        }

        printTemplateMapAsStringsUsingJson("success", "error");
    }

    @Action("fetch")
    public void onFetch() {
        Response response = UrlUtil.fetchUrl(getString("url"), 1);

        put("responseCode", response.getCode());
        put("responseText", response.getText());
        put("success", true);

        printTemplateMapAsStringsUsingJson("success", "error", "responseCode", "responseText");
    }

    private void setupRuleProperties(Rule rule) {
        RuleTypeUtil.setupRuleProperties(rule, this);
    }
}
TOP

Related Classes of com.codeforces.graygoose.web.page.data.RulesDataPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.