InquiryApp.java

package sk.iway.iwcm.components.inquiry;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import lombok.Getter;
import lombok.Setter;
import sk.iway.iwcm.LabelValueDetails;
import sk.iway.iwcm.components.WebjetComponentAbstract;
import sk.iway.iwcm.editor.rest.ComponentRequest;
import sk.iway.iwcm.i18n.Prop;
import sk.iway.iwcm.inquiry.InquiryDB;
import sk.iway.iwcm.system.annotations.WebjetAppStore;
import sk.iway.iwcm.system.annotations.WebjetComponent;
import sk.iway.iwcm.system.datatable.DataTableColumnType;
import sk.iway.iwcm.system.datatable.DatatableTools;
import sk.iway.iwcm.system.datatable.OptionDto;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumn;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnEditor;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnEditorAttr;
import sk.iway.iwcm.system.datatable.annotations.DataTableTab;
import sk.iway.iwcm.system.datatable.annotations.DataTableTabs;


@WebjetComponent("sk.iway.iwcm.components.inquiry.InquiryApp")
@WebjetAppStore(
    nameKey = "components.inquiry.title",
    descKey = "components.inquiry.desc",
    itemKey= "cmp_inquiry",
    imagePath = "/components/inquiry/editoricon.png",
    galleryImages = "/components/inquiry/",
    componentPath = "/components/inquiry/inquiry.jsp",
    customHtml = "/apps/inquiry/admin/editor-component.html"
)
@DataTableTabs(tabs = {
    @DataTableTab(id = "basic", title = "components.universalComponentDialog.title", selected = true),
    @DataTableTab(id = "styleSelectArea", title = "components.roots.new.style", content = ""),
    @DataTableTab(id = "componentIframeWindowTabList", title = "menu.inquiry", content = ""),
})
@Getter
@Setter
public class InquiryApp extends WebjetComponentAbstract {

    @DataTableColumn(
        inputType = DataTableColumnType.MULTISELECT,
        tab = "basic",
        title="components.tips.select_group"
    )
    private String[] group;

    @DataTableColumn(inputType = DataTableColumnType.NUMBER, tab = "basic", title="components.inquiry.imagesLength")
    private int imagesLength = 10;

    @DataTableColumn(inputType = DataTableColumnType.SELECT, tab = "basic", title="components.inquiry.percentageFormat", editor = {
        @DataTableColumnEditor(
            options = {
                @DataTableColumnEditorAttr(key = "0", value = "0"),
                @DataTableColumnEditorAttr(key = "0.0", value = "0.0")
            }
        )
    })
    private String percentageFormat = "0";

    @DataTableColumn(
        inputType = DataTableColumnType.SELECT,
        tab = "basic",
        title="components.inquiry.orderBy",
        editor = {
        @DataTableColumnEditor(
            options = {
                @DataTableColumnEditorAttr(key = "components.inquiry.order.answer_id", value = "answer_id"),
                @DataTableColumnEditorAttr(key = "components.inquiry.order.answer_text", value = "answer_text"),
                @DataTableColumnEditorAttr(key = "components.inquiry.order.answer_clicks", value = "answer_clicks")
            }
        )
    })
    private String orderBy = "answer_id";

    @DataTableColumn(
        inputType = DataTableColumnType.SELECT,
        tab = "basic",
        title = " ",
        editor = {
        @DataTableColumnEditor(
            options = {
                @DataTableColumnEditorAttr(key = "components.inquiry.orderAsc", value = "ascending"),
                @DataTableColumnEditorAttr(key = "components.inquiry.orderDesc", value = "descending")
            }
        )
    }
    )
    private String order = "ascending";

    @DataTableColumn(inputType = DataTableColumnType.TEXT, tab = "basic", title="components.inquiry.width")
    private String width = "100%";

    @DataTableColumn(
        inputType = DataTableColumnType.BOOLEAN_TEXT,
        title = "components.inquiry.random",
        tab = "basic"
    )
    private Boolean random = true;

    @DataTableColumn(
        inputType = DataTableColumnType.BOOLEAN_TEXT,
        title = "components.inquiry.display_total_clicks",
        tab = "basic"
    )
    private Boolean totalClicks = true;;

    @DataTableColumn(
        inputType = DataTableColumnType.BOOLEAN_TEXT,
        title = "components.inquiry.display_vote_results",
        tab = "basic"
    )
    private Boolean displayVoteResults = true;

    @DataTableColumn(
        inputType = DataTableColumnType.IMAGE_RADIO,
        title = "components.roots.new.style",
        tab = "styleSelectArea",
        className = "image-radio-horizontal image-radio-fullwidth"
    )
    private String style = "01";

    @DataTableColumn(
        inputType = DataTableColumnType.IMAGE_RADIO,
        title = "components.catalog.color",
        tab = "styleSelectArea",
        className = "image-radio-horizontal image-radio-fullwidth"
    )
    private String color = "01";

    @DataTableColumn(inputType = DataTableColumnType.IFRAME, tab = "componentIframeWindowTabList", title=" ")
    private String iframe  = "/components/inquiry/admin_inquiry_list.jsp";

    @Override
    public Map<String, List<OptionDto>> getAppOptions(ComponentRequest componentRequest, HttpServletRequest request) {
        Map<String, List<OptionDto>> options = new HashMap<>();

        //group options
        List<OptionDto> groupOptions = new ArrayList<>();
        Prop prop = Prop.getInstance(request);
        groupOptions.add(new OptionDto(prop.getText("components.inquiry.fromTemplate"), "fromTemplate", null));
        List<LabelValueDetails> groups = InquiryDB.getQuestionGroupsByUser(request);
        for (LabelValueDetails group : groups){
            groupOptions.add(new OptionDto(group.getLabel(), group.getLabel(), null));
        }
        options.put("group", addCurrentValueToOptions(groupOptions, getGroup()));

        //style & color options
        options.put("style", DatatableTools.getImageRadioOptions("/components/inquiry/admin-styles/"));
        options.put("color", DatatableTools.getImageRadioOptions("/components/inquiry/admin-colors/"));

        return options;
    }

}