Java tutorial
/******************************************************************************* * 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; } }