com.haulmont.cuba.web.gui.components.WebSourceCodeEditor.java Source code

Java tutorial

Introduction

Here is the source code for com.haulmont.cuba.web.gui.components.WebSourceCodeEditor.java

Source

/*
 * Copyright (c) 2008-2016 Haulmont.
 *
 * 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 com.haulmont.cuba.web.gui.components;

import com.google.common.base.Strings;
import com.haulmont.bali.util.Preconditions;
import com.haulmont.cuba.gui.components.SourceCodeEditor;
import com.haulmont.cuba.gui.components.autocomplete.AutoCompleteSupport;
import com.haulmont.cuba.gui.components.autocomplete.Suggester;
import com.haulmont.cuba.web.toolkit.ui.CubaSourceCodeEditor;
import org.apache.commons.lang.StringUtils;
import org.vaadin.aceeditor.AceMode;
import org.vaadin.aceeditor.Suggestion;
import org.vaadin.aceeditor.SuggestionExtension;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class WebSourceCodeEditor extends WebAbstractField<CubaSourceCodeEditor> implements SourceCodeEditor {

    protected Mode mode = Mode.Text;
    protected Suggester suggester;
    protected SuggestionExtension suggestionExtension;

    protected AutoCompleteSupport autoCompleteSupport;

    public WebSourceCodeEditor() {
        component = createCubaSourceCodeEditor();

        component.setMode(AceMode.text);
        component.setImmediate(true);
        component.setInvalidCommitted(true);
        component.setInvalidAllowed(false);
        component.setBuffered(false);

        autoCompleteSupport = new AutoCompleteSupport() {
            @Override
            public int getCursorPosition() {
                return component.getCursorPosition();
            }

            @Override
            public Object getValue() {
                return component.getValue();
            }
        };

        attachListener(component);
    }

    protected CubaSourceCodeEditor createCubaSourceCodeEditor() {
        return new CubaSourceCodeEditor();
    }

    @Override
    public Mode getMode() {
        return mode;
    }

    @Override
    public void setMode(Mode mode) {
        Preconditions.checkNotNullArgument(mode, "Mode of SourceCodeEditor cannot be null");

        this.mode = mode;

        AceMode editorMode;
        switch (mode) {
        case Groovy:
            editorMode = AceMode.groovy;
            break;

        case HTML:
            editorMode = AceMode.html;
            break;

        case Java:
            editorMode = AceMode.java;
            break;

        case SQL:
            editorMode = AceMode.sql;
            break;

        case JavaScript:
            editorMode = AceMode.javascript;
            break;

        case XML:
            editorMode = AceMode.xml;
            break;

        case Properties:
            editorMode = AceMode.properties;
            break;

        case CSS:
            editorMode = AceMode.css;
            break;

        case SCSS:
            editorMode = AceMode.scss;
            break;

        default:
            editorMode = AceMode.text;
            break;
        }

        component.setMode(editorMode);
    }

    @Override
    public void resetEditHistory() {
        component.resetEditHistory();
    }

    @Override
    public Suggester getSuggester() {
        return suggester;
    }

    @Override
    public void setSuggester(Suggester suggester) {
        this.suggester = suggester;

        if (suggester != null && suggestionExtension == null) {
            suggestionExtension = new SuggestionExtension(new SourceCodeEditorSuggester());
            suggestionExtension.extend(component);
            suggestionExtension.setShowDescriptions(false);
        }
    }

    @Override
    public AutoCompleteSupport getAutoCompleteSupport() {
        return autoCompleteSupport;
    }

    @Override
    public void setShowGutter(boolean showGutter) {
        component.setShowGutter(showGutter);
    }

    @Override
    public boolean isShowGutter() {
        return component.isShowGutter();
    }

    @Override
    public void setShowPrintMargin(boolean showPrintMargin) {
        component.setShowPrintMargin(showPrintMargin);
    }

    @Override
    public boolean isShowPrintMargin() {
        return component.isShowPrintMargin();
    }

    @Override
    public void setPrintMarginColumn(int printMarginColumn) {
        component.setPrintMarginColumn(printMarginColumn);
    }

    @Override
    public int getPrintMarginColumn() {
        return component.getPrintMarginColumn();
    }

    @Override
    public void setHighlightActiveLine(boolean highlightActiveLine) {
        component.setHighlightActiveLine(highlightActiveLine);
    }

    @Override
    public boolean isHighlightActiveLine() {
        return component.isHighlightActiveLine();
    }

    @Override
    public void setHandleTabKey(boolean handleTabKey) {
        component.setHandleTabKey(handleTabKey);
    }

    @Override
    public boolean isHandleTabKey() {
        return component.isHandleTabKey();
    }

    @SuppressWarnings("unchecked")
    @Override
    public String getValue() {
        String value = super.getValue();
        return Strings.emptyToNull(value);
    }

    @Override
    public String getRawValue() {
        return component.getValue();
    }

    @Override
    public int getTabIndex() {
        return component.getTabIndex();
    }

    @Override
    public void setTabIndex(int tabIndex) {
        component.setTabIndex(tabIndex);
    }

    protected class SourceCodeEditorSuggester implements org.vaadin.aceeditor.Suggester {
        @Override
        public List<Suggestion> getSuggestions(String text, int cursor) {
            if (suggester == null) {
                return Collections.emptyList();
            }

            List<com.haulmont.cuba.gui.components.autocomplete.Suggestion> suggestions = suggester
                    .getSuggestions(getAutoCompleteSupport(), text, cursor);
            List<Suggestion> vSuggestions = new ArrayList<>();
            for (com.haulmont.cuba.gui.components.autocomplete.Suggestion s : suggestions) {
                vSuggestions.add(new Suggestion(s.getDisplayText(), "", s.getValueText()));
            }

            return vSuggestions;
        }

        @Override
        public String applySuggestion(Suggestion sugg, String text, int cursor) {
            String suggestionText = sugg.getSuggestionText();
            return StringUtils.substring(text, 0, cursor) + suggestionText + StringUtils.substring(text, cursor);
        }
    }
}