hydrograph.ui.propertywindow.transform.viewdata.TransformViewDataDialog.java Source code

Java tutorial

Introduction

Here is the source code for hydrograph.ui.propertywindow.transform.viewdata.TransformViewDataDialog.java

Source

/*******************************************************************************
 * Copyright 2017 Capital One Services, LLC and Bitwise, Inc.
 * 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 hydrograph.ui.propertywindow.transform.viewdata;

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

import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.CoolBar;
import org.eclipse.swt.widgets.CoolItem;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

import hydrograph.ui.common.util.Constants;
import hydrograph.ui.common.util.CustomColorRegistry;
import hydrograph.ui.common.util.ImagePathConstant;
import hydrograph.ui.datastructure.property.NameValueProperty;
import hydrograph.ui.datastructure.property.mapping.MappingSheetRow;

/**
 * The Class TransformViewDataDialog displays the expressions or operations applied on Transform component.
 * 
 * @author Bitwise
 */

public class TransformViewDataDialog extends Dialog {

    private static final String COPY_BUTTON_TOOL_TIP = "Copy";
    private List<MappingSheetRow> mappingRowList;
    private List<NameValueProperty> mapAndPassthroughField;
    private StyledText styledText;
    List<StyleRange> styleRangeList = new ArrayList<>();

    /**
     * Create the dialog.
     * @param parentShell
     */
    public TransformViewDataDialog(Shell parentShell) {
        super(parentShell);
        setShellStyle(SWT.CLOSE | SWT.MIN | SWT.MAX | SWT.RESIZE | SWT.APPLICATION_MODAL);

    }

    /**
     * Create contents of the dialog.
     * @param parent
     */

    @Override
    protected Control createDialogArea(Composite parent) {
        Composite container = (Composite) super.createDialogArea(parent);
        container.setLayout(new GridLayout(1, false));

        Shell shell = container.getShell();
        shell.setText("View Transform");
        shell.setImage(ImagePathConstant.APP_ICON.getImageFromRegistry());

        CoolBar coolBar = new CoolBar(container, SWT.FLAT);
        coolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));

        CoolItem buttonItem = new CoolItem(coolBar, SWT.NONE | SWT.DROP_DOWN);
        Composite buttonComposite = new Composite(coolBar, SWT.NONE);
        buttonComposite.setLayout(new GridLayout(3, false));

        createWrapButton(buttonComposite);

        createCopyButton(buttonComposite);

        buttonComposite.pack();

        Point size = buttonComposite.getSize();
        buttonItem.setControl(buttonComposite);
        buttonItem.setSize(buttonItem.computeSize(size.x, size.y));

        createStyleTextEditor(container);

        getShell().setMinimumSize(290, 290);
        return container;
    }

    /**
     * Create contents of the button bar.
     * @param parent
     */
    @Override
    protected void createButtonsForButtonBar(Composite parent) {

        Button cancelButton = createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CLOSE_LABEL, false);

    }

    /**
     * Return the initial size of the dialog.
     */
    @Override
    protected Point getInitialSize() {
        return new Point(666, 300);
    }

    /**
     * Creates the style text editor to display transform information
     * @param container
     */
    private void createStyleTextEditor(Composite container) {
        Composite composite = new Composite(container, SWT.BORDER);
        composite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
        composite.setLayout(new GridLayout(1, false));
        composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

        styledText = new StyledText(composite, SWT.NONE | SWT.H_SCROLL | SWT.V_SCROLL);
        styledText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
        styledText.setEditable(false);

        StringBuffer stringOutput = new StringBuffer("");

        if (mappingRowList != null) {
            for (MappingSheetRow mappingSheetRow : mappingRowList) {
                if (!mappingSheetRow.getOutputList().isEmpty()) {
                    if (mappingSheetRow.isExpression()) {
                        for (int i = 0; i < mappingSheetRow.getOutputList().size(); i++)

                        {
                            Color blue = CustomColorRegistry.INSTANCE.getColorFromRegistry(92, 172, 238);
                            int start5 = stringOutput.length();
                            stringOutput.append(TransformViewDataDialogConstants.START
                                    + mappingSheetRow.getOperationID() + TransformViewDataDialogConstants.BEGIN);
                            int length5 = stringOutput.length() - start5;
                            applyStyleRange(start5, length5, blue, SWT.BOLD);
                            stringOutput.append(Constants.OUTPUT_SOCKET_TYPE + "."
                                    + mappingSheetRow.getOutputList().get(i).getPropertyname());
                            stringOutput.append(TransformViewDataDialogConstants.EQUALTO);
                            stringOutput.append(mappingSheetRow.getExpressionEditorData().getExpression());
                            stringOutput.append(TransformViewDataDialogConstants.TAB);

                            for (int k = 0; k < mappingSheetRow.getInputFields().size(); k++) {
                                stringOutput.append(Constants.INPUT_SOCKET_TYPE + "."
                                        + mappingSheetRow.getInputFields().get(k).getPropertyname());
                                if (k < mappingSheetRow.getInputFields().size() - 1) {
                                    stringOutput.append(TransformViewDataDialogConstants.COMMA);
                                }

                            }
                            stringOutput.append(TransformViewDataDialogConstants.SEMICOLON);
                            int start6 = stringOutput.length();
                            stringOutput.append(TransformViewDataDialogConstants.EXTRA_LINE
                                    + TransformViewDataDialogConstants.START + mappingSheetRow.getOperationID()
                                    + TransformViewDataDialogConstants.END);
                            int length6 = stringOutput.length() - start6;
                            applyStyleRange(start6, length6, blue, SWT.BOLD);

                            stringOutput.append(TransformViewDataDialogConstants.EXTRA_LINE);
                            stringOutput.append(TransformViewDataDialogConstants.EXTRA_LINE);

                        }

                    } else if (!mappingSheetRow.isExpression()) {
                        for (int i = 0; i < mappingSheetRow.getOutputList().size(); i++) {

                            Color green = CustomColorRegistry.INSTANCE.getColorFromRegistry(0, 199, 140);
                            int start7 = stringOutput.length();
                            stringOutput.append(TransformViewDataDialogConstants.START
                                    + mappingSheetRow.getOperationID() + TransformViewDataDialogConstants.BEGIN);
                            int length7 = stringOutput.length() - start7;
                            applyStyleRange(start7, length7, green, SWT.BOLD);
                            stringOutput.append(Constants.OUTPUT_SOCKET_TYPE + "."
                                    + mappingSheetRow.getOutputList().get(i).getPropertyname());
                            stringOutput.append(TransformViewDataDialogConstants.EQUALTO);
                            stringOutput.append(mappingSheetRow.getOperationClassPath());
                            stringOutput.append(TransformViewDataDialogConstants.TAB);

                            for (int j = 0; j < mappingSheetRow.getInputFields().size(); j++) {
                                stringOutput.append(Constants.INPUT_SOCKET_TYPE + "."
                                        + mappingSheetRow.getInputFields().get(j).getPropertyname());
                                if (j < mappingSheetRow.getInputFields().size() - 1) {
                                    stringOutput.append(TransformViewDataDialogConstants.COMMA);
                                }

                            }
                            stringOutput.append(TransformViewDataDialogConstants.SEMICOLON);
                            int start8 = stringOutput.length();
                            stringOutput.append(TransformViewDataDialogConstants.EXTRA_LINE
                                    + TransformViewDataDialogConstants.START + mappingSheetRow.getOperationID()
                                    + TransformViewDataDialogConstants.END);
                            int length8 = stringOutput.length() - start8;
                            applyStyleRange(start8, length8, green, SWT.BOLD);
                            stringOutput.append(TransformViewDataDialogConstants.EXTRA_LINE);
                            stringOutput.append(TransformViewDataDialogConstants.EXTRA_LINE);

                        }
                    }
                }

            }
        }
        StringBuffer passThrough = new StringBuffer();
        StringBuffer mapThrough = new StringBuffer();

        if (mapAndPassthroughField != null) {
            for (NameValueProperty nameValueProperty : mapAndPassthroughField) {
                if (nameValueProperty.getPropertyName().trim()
                        .equals(nameValueProperty.getPropertyValue().trim())) {
                    passThrough.append(Constants.OUTPUT_SOCKET_TYPE + "." + nameValueProperty.getPropertyValue()
                            + TransformViewDataDialogConstants.EQUALTO + "$ " + Constants.INPUT_SOCKET_TYPE + "."
                            + nameValueProperty.getPropertyName() + TransformViewDataDialogConstants.SEMICOLON
                            + TransformViewDataDialogConstants.EXTRA_LINE);
                } else if (!nameValueProperty.getPropertyName().trim()
                        .equals(nameValueProperty.getPropertyValue().trim())) {
                    mapThrough.append(Constants.OUTPUT_SOCKET_TYPE + "." + nameValueProperty.getPropertyValue()
                            + TransformViewDataDialogConstants.EQUALTO + "$ " + Constants.INPUT_SOCKET_TYPE + "."
                            + nameValueProperty.getPropertyName() + TransformViewDataDialogConstants.SEMICOLON
                            + TransformViewDataDialogConstants.EXTRA_LINE);
                }
            }
        }

        if (mapThrough.toString().length() != 0) {

            Color brown = CustomColorRegistry.INSTANCE.getColorFromRegistry(160, 103, 0);
            int start = stringOutput.length();
            stringOutput.append(
                    TransformViewDataDialogConstants.START + TransformViewDataDialogConstants.MAPTHROUGHBEGINS);
            int length = stringOutput.length() - start;
            applyStyleRange(start, length, brown, SWT.BOLD);
            stringOutput.append(TransformViewDataDialogConstants.EXTRA_LINE);
            stringOutput.append(mapThrough);
            int start1 = stringOutput.length();
            stringOutput.append(
                    TransformViewDataDialogConstants.START + TransformViewDataDialogConstants.MAPTHROUGHENDS);
            int length1 = stringOutput.length() - start1;
            applyStyleRange(start1, length1, brown, SWT.BOLD);
            stringOutput.append(TransformViewDataDialogConstants.EXTRA_LINE);
            stringOutput.append(TransformViewDataDialogConstants.EXTRA_LINE);
        }

        if (passThrough.toString().length() != 0) {

            Color cyan = CustomColorRegistry.INSTANCE.getColorFromRegistry(64, 224, 208);
            int start3 = stringOutput.length();
            stringOutput.append(
                    TransformViewDataDialogConstants.START + TransformViewDataDialogConstants.PASSTHROUGHBEGINS);
            int length3 = stringOutput.length() - start3;
            applyStyleRange(start3, length3, cyan, SWT.BOLD);
            stringOutput.append(TransformViewDataDialogConstants.EXTRA_LINE);
            stringOutput.append(passThrough);
            int start4 = stringOutput.length();
            stringOutput.append(
                    TransformViewDataDialogConstants.START + TransformViewDataDialogConstants.PASSTHROUGHENDS);
            int length4 = stringOutput.length() - start4;
            applyStyleRange(start4, length4, cyan, SWT.BOLD);
            stringOutput.append(TransformViewDataDialogConstants.EXTRA_LINE);
            stringOutput.append(TransformViewDataDialogConstants.EXTRA_LINE);
        }

        StringBuffer transformText = new StringBuffer();

        transformText.append(stringOutput.toString());
        styledText.setText(transformText.toString());
        styledText.setStyleRanges(styleRangeList.toArray(new StyleRange[styleRangeList.size()]));
    }

    /***
     * Applies style range for the style text
     * @param start
     * @param length
     * @param fgColor
     * @param fontStyle
     */
    private void applyStyleRange(int start, int length, Color fgColor, int fontStyle) {
        StyleRange range = new StyleRange();
        range.start = start;
        range.length = length;
        range.foreground = fgColor;
        range.fontStyle = fontStyle;
        styleRangeList.add(range);

    }

    /**
     * Creates the word wrap button 
     * @param buttonComposite
     */
    private void createWrapButton(Composite buttonComposite) {
        final Button btnCheckButton = new Button(buttonComposite, SWT.CHECK);
        btnCheckButton.setText("Wrap Text");
        btnCheckButton.pack();

        btnCheckButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                styledText.setWordWrap(btnCheckButton.getSelection());
            }

        });
    }

    /**
     * Creates the copy button 
     * @param buttonComposite
     */
    private void createCopyButton(Composite buttonComposite) {
        Button copyButton = new Button(buttonComposite, SWT.PUSH);

        copyButton.setImage(ImagePathConstant.ENABLE_COPY_ICON.getImageFromRegistry());
        copyButton.setToolTipText(COPY_BUTTON_TOOL_TIP);
        copyButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                if (StringUtils.isNotBlank(styledText.getSelectionText())) {
                    styledText.copy();
                } else {
                    styledText.selectAll();
                    styledText.copy();
                    styledText.setSelection(0);
                }

            }
        });
        copyButton.pack();
    }

    /**
     * Contains mapping list
     * @param mappingRowList
     */
    public void getMappingSheet(List<MappingSheetRow> mappingRowList,
            List<NameValueProperty> mapAndPassthroughField) {
        this.mappingRowList = mappingRowList;
        this.mapAndPassthroughField = mapAndPassthroughField;
    }

}