de.fhrt.codenvy.bpmn.editor.widget.diagram.BpmnEditorDiagramWidget.java Source code

Java tutorial

Introduction

Here is the source code for de.fhrt.codenvy.bpmn.editor.widget.diagram.BpmnEditorDiagramWidget.java

Source

/*******************************************************************************
 * Copyright (c) 2012-2015 Codenvy, S.A.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   Codenvy, S.A. - initial API and implementation
 *******************************************************************************/
package de.fhrt.codenvy.bpmn.editor.widget.diagram;

import org.eclipse.che.ide.util.loging.Log;

import com.google.gwt.core.client.ScriptInjector;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.TabLayoutPanel;

import de.fhrt.codenvy.bpmn.BpmnResource;
import de.fhrt.codenvy.bpmn.editor.BpmnEditorView;
import de.fhrt.codenvy.bpmn.part.bpmnProperties.jso.BpmnIoElementJso;
import de.fhrt.codenvy.bpmn.part.bpmnProperties.jso.BpmnIoModelerJso;
import edu.stanford.bmir.gwtcodemirror.client.GWTCodeMirror;

public class BpmnEditorDiagramWidget extends Composite {

    public class BpmnEditorSourceWidget extends GWTCodeMirror {

        public BpmnEditorSourceWidget(String mode, String theme) {
            super(mode, theme);
        }

        public native void refresh()/*-{
                                    var cms = $doc.querySelectorAll('.CodeMirror');
                                    for(var i = 0; i < cms.length; i++){
                                       var cm = cms[i]; // element
                                      cm.CodeMirror.refresh();
                                    }
                                    }-*/;
    }

    public enum ElementType {
        UNKNOWN, START_EVENT, USER_TASK, SERVICE_TASK;
    }

    /*
     * References
     */
    private BpmnResource bpmnResource;
    private BpmnEditorView bpmnEditorView;
    private BpmnIoModelerJso bpmnIoModelerJso;
    private String diagramHtmlWrapperId;

    /*
     * Layout
     */

    private BpmnEditorSourceWidget cmWidget;
    private HTMLPanel diagramHtmlPanel;

    public BpmnEditorDiagramWidget(BpmnEditorView bpmnEditorView, BpmnResource bpmnResource, int viewNumber) {
        super();
        Log.info(BpmnEditorDiagramWidget.class, "constructor");
        this.bpmnEditorView = bpmnEditorView;
        this.bpmnResource = bpmnResource;

        diagramHtmlWrapperId = "bpmnIoCanvas_" + viewNumber++;

        loadCss();

        initDiagramSourceWidget();
        initDiagramHtmlPanel();
        initWidget(initRootLayout());

        diagramHtmlPanel.addStyleName("gwt-bpmnDigramWidget");
        cmWidget.addStyleName("gwt-bpmnSourceWidget");
    }

    private TabLayoutPanel initRootLayout() {
        TabLayoutPanel root = new TabLayoutPanel(0, Unit.PX);
        root.setSize("100%", "100%");
        root.add(diagramHtmlPanel, "Design");
        root.add(cmWidget, "Source");
        root.addStyleName("bpmnDigramWidget-tabLayoutPanel");
        root.addSelectionHandler(new SelectionHandler<Integer>() {

            @Override
            public void onSelection(SelectionEvent<Integer> event) {
                if (event.getSelectedItem() == 1) {
                    Timer t = new Timer() {
                        @Override
                        public void run() {
                            cmWidget.refresh();
                        }
                    };
                    t.schedule(10);
                }
            }
        });
        return root;
    }

    private void initDiagramSourceWidget() {
        ScriptInjector.fromString(bpmnResource.codemirrorModeXml().getText()).setWindow(ScriptInjector.TOP_WINDOW)
                .inject();

        cmWidget = new BpmnEditorSourceWidget("xml", "codenvy");
        cmWidget.setEnabled(false);
    }

    private void loadCss() {
        bpmnResource.getBpmnDiagramJsCss().ensureInjected();
        bpmnResource.getBpmnAppCss().ensureInjected();
        bpmnResource.getBpmnFontCss().ensureInjected();
        bpmnResource.getBpmnDiagramJsCustomCss().ensureInjected();
        bpmnResource.getBpmnEditorCustomCss().ensureInjected();
        bpmnResource.getBpmnPropertiesTabCss().ensureInjected();
    }

    private void initDiagramHtmlPanel() {
        diagramHtmlPanel = new HTMLPanel("<div class=\"canvas bpmnDigramWidget-diagramHtmlPanel-wrapper\" id=\""
                + diagramHtmlWrapperId + "\"></div>");
        diagramHtmlPanel.setSize("100%", "100%");
        diagramHtmlPanel.addStyleName("bpmnDigramWidget-diagramHtmlPanel");

    }

    @Override
    protected void onAttach() {
        super.onAttach();
        Log.info(BpmnEditorDiagramWidget.class, "onAttach");

        ScriptInjector.fromString(bpmnResource.bpmnIoIndexJsFile().getText()).setWindow(ScriptInjector.TOP_WINDOW)
                .setRemoveTag(false).inject();

        bpmnIoModelerJso = BpmnIoModelerJso.nativeCreateInstance(diagramHtmlWrapperId, this);
    }

    public void jsCallbackSaveDiagram(String xml) {
        Log.info(BpmnEditorDiagramWidget.class, "jsCallbackSaveDiagram");
        Log.info(BpmnEditorDiagramWidget.class, "jsCallbackSaveDiagram: xml = " + xml);
        bpmnEditorView.setCurrentXmlContent(xml);
        bpmnEditorView.setContentIsDirty();
        cmWidget.setValue(xml);
    };

    public void jsCallbackSaveSVG(String svg) {
        Log.info(BpmnEditorDiagramWidget.class, "jsCallbackSaveSVG");
        bpmnEditorView.setCurrentSvgContent(svg);
        bpmnEditorView.setContentIsDirty();
    };

    public void jsCallbackElementSelected(BpmnIoElementJso elem) {
        Log.info(BpmnEditorDiagramWidget.class, "jsCallbackElementSelected");
        bpmnEditorView.bpmnElementSelected(bpmnIoModelerJso, elem);
    };

    public void openDiagram(String xml) {
        cmWidget.setValue(xml);
        bpmnIoModelerJso.nativeOpenDiagram(xml);
    }

    public BpmnIoModelerJso getBpmnIoModelerJso() {
        return bpmnIoModelerJso;
    };

}