/******************************************************************************* * 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.expression.editor.composites; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.ControlAdapter; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import hydrograph.ui.common.util.CustomColorRegistry; import hydrograph.ui.expression.editor.Constants; import hydrograph.ui.expression.editor.Messages; import hydrograph.ui.expression.editor.util.ExpressionEditorUtil; /** * @author Bitwise * * This class creates available fields section * in expression editor. * */ public class AvailableFieldsComposite extends Composite { private Table table; private TableColumn availableFieldsNameColumn ; private List<String> inputFields; private TableViewer tableViewer; private StyledText expressionEditor; private Text searchTextBox; private Composite headerComposite_1; private TableColumn availableFieldsDataTypeColumn; private Map<String,Class<?>> fieldMap; /** * Create the composite. * @param parent * @param style */ public AvailableFieldsComposite(Composite parent, int style , Map<String,Class<?>> fieldMap) { super(parent, style); setLayout(new GridLayout(1, false)); this.inputFields=new ArrayList<>(fieldMap.keySet()); this.fieldMap=fieldMap; headerComposite_1 = new Composite(this, SWT.NONE); headerComposite_1.setLayout(new GridLayout(2, false)); GridData gd_headerComposite_1 = new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1); gd_headerComposite_1.widthHint = 437; gd_headerComposite_1.heightHint = 39; headerComposite_1.setLayoutData(gd_headerComposite_1); Label lblAvailableFields = new Label(headerComposite_1, SWT.NONE); lblAvailableFields.setText(Messages.AVAILABLE_INPUT_FIELDS); createSearchTextBox(headerComposite_1); tableViewer = new TableViewer(this, SWT.BORDER | SWT.FULL_SELECTION); table = tableViewer.getTable(); table.setLinesVisible(true); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); table.setHeaderVisible(true); availableFieldsNameColumn = new TableColumn(table, SWT.NONE); availableFieldsNameColumn.setText(Messages.FIELD_NAME); availableFieldsDataTypeColumn = new TableColumn(table, SWT.NONE); availableFieldsDataTypeColumn.setText(Messages.DATA_TYPE); ExpressionEditorUtil.INSTANCE.addDragSupport(table); loadData(); addControlListener(); addDoubleClickListener(); } private void addDoubleClickListener() { table.addMouseListener(new MouseAdapter() { @Override public void mouseDoubleClick(MouseEvent e) { if(table.getSelectionIndex()!=-1){ expressionEditor.insert(table.getItem(table.getSelectionIndex()).getText()); } } }); } private void createSearchTextBox(Composite headerComposite) { searchTextBox = new Text(headerComposite, SWT.BORDER); GridData gd_searchTextBox = new GridData(SWT.RIGHT, SWT.CENTER, true, true, 0, 0); gd_searchTextBox.widthHint = 191; searchTextBox.setLayoutData(gd_searchTextBox); searchTextBox.setForeground(CustomColorRegistry.INSTANCE.getColorFromRegistry( 128,128,128)); searchTextBox.setText(Constants.DEFAULT_SEARCH_TEXT); addListnersToSearchTextBox(); ExpressionEditorUtil.INSTANCE.addFocusListenerToSearchTextBox(searchTextBox); } private void addListnersToSearchTextBox() { searchTextBox.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { if(!StringUtils.equals(Constants.DEFAULT_SEARCH_TEXT, searchTextBox.getText())){ table.removeAll(); for(String field:inputFields){ if(StringUtils.containsIgnoreCase(field,searchTextBox.getText())){ TableItem tableItem = new TableItem(table, SWT.NONE); tableItem.setText(0,field); tableItem.setText(1, fieldMap.get(field).getSimpleName()); } } if(table.getItemCount()==0 && StringUtils.isNotBlank(searchTextBox.getText())){ new TableItem(table, SWT.NONE).setText(Messages.CANNOT_SEARCH_INPUT_STRING+searchTextBox.getText()); } } } }); } private void addControlListener() { table.addControlListener(new ControlAdapter() { @Override public void controlResized(ControlEvent e) { Table table = (Table) e.widget; table.getColumn(0).setWidth(table.getClientArea().width / 2); table.getColumn(1).setWidth((table.getClientArea().width / 2)-1); } }); } private void loadData() { if (inputFields != null) { for (String field : inputFields) { TableItem tableItem=new TableItem(table, SWT.NONE); tableItem.setText(0,field); tableItem.setText(1,fieldMap.get(field).getSimpleName()); } } if(table.getItemCount()==0){ searchTextBox.setEnabled(false); } } @Override protected void checkSubclass() { } /** * @param expressionEditor the expressionEditor to set */ public void setExpressionEditor(StyledText expressionEditor) { this.expressionEditor = expressionEditor; } }