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.widgets.customwidgets; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.stream.Stream; import org.apache.commons.lang.StringUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Listener; import hydrograph.ui.datastructure.property.MatchValueProperty; import hydrograph.ui.propertywindow.factory.ListenerFactory.Listners; import hydrograph.ui.propertywindow.property.ComponentConfigrationProperty; import hydrograph.ui.propertywindow.property.ComponentMiscellaneousProperties; import hydrograph.ui.propertywindow.property.Property; import hydrograph.ui.propertywindow.propertydialog.PropertyDialogButtonBar; import hydrograph.ui.propertywindow.widgets.customwidgets.config.RadioButtonConfig; import hydrograph.ui.propertywindow.widgets.customwidgets.config.WidgetConfig; import hydrograph.ui.propertywindow.widgets.gridwidgets.basic.AbstractELTWidget; import hydrograph.ui.propertywindow.widgets.gridwidgets.basic.ELTDefaultLable; import hydrograph.ui.propertywindow.widgets.gridwidgets.basic.ELTRadioButton; import hydrograph.ui.propertywindow.widgets.gridwidgets.container.AbstractELTContainerWidget; import hydrograph.ui.propertywindow.widgets.gridwidgets.container.ELTDefaultSubgroupComposite; import hydrograph.ui.propertywindow.widgets.listeners.IELTListener; /** * Class for displaying radio button on property window * @author Bitwise * */ public class RadioButtonsWidget extends AbstractWidget { private final String propertyName; private final LinkedHashMap<String, Object> property = new LinkedHashMap<>(); private String[] buttonText; private Button[] buttons; private MatchValueProperty matchValue; private RadioButtonConfig radioButtonConfig; public RadioButtonsWidget(ComponentConfigrationProperty componentConfigProp, ComponentMiscellaneousProperties componentMiscProps, PropertyDialogButtonBar propertyDialogButtonBar) { super(componentConfigProp, componentMiscProps, propertyDialogButtonBar); this.propertyName = componentConfigrationProperty.getPropertyName(); if (componentConfigrationProperty.getPropertyValue() == null) { matchValue = new MatchValueProperty(); } else { matchValue = (MatchValueProperty) componentConfigrationProperty.getPropertyValue(); } } public void setWidgetConfig(WidgetConfig widgetConfig) { radioButtonConfig = (RadioButtonConfig) widgetConfig; } @Override public void attachToPropertySubGroup(AbstractELTContainerWidget container) { ELTDefaultSubgroupComposite defaultSubgroupComposite = new ELTDefaultSubgroupComposite( container.getContainerControl()); buttonText = radioButtonConfig.getWidgetDisplayNames(); buttons = new Button[buttonText.length]; defaultSubgroupComposite.createContainerWidget(); defaultSubgroupComposite.numberOfBasicWidgets(buttonText.length + 1); AbstractELTWidget defaultLabel = new ELTDefaultLable(radioButtonConfig.getPropertyName()); defaultSubgroupComposite.attachWidget(defaultLabel); setPropertyHelpWidget((Control) defaultLabel.getSWTWidgetControl()); SelectionListener selectionListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { Button button = ((Button) event.widget); matchValue.setMatchValue(button.getText()); matchValue.setRadioButtonSelected(true); propertyDialogButtonBar.enableApplyButton(true); } }; for (int i = 0; i < buttonText.length; i++) { ELTRadioButton eltRadioButton = new ELTRadioButton(buttonText[i]); defaultSubgroupComposite.attachWidget(eltRadioButton); buttons[i] = ((Button) eltRadioButton.getSWTWidgetControl()); ((Button) eltRadioButton.getSWTWidgetControl()).addSelectionListener(selectionListener); } buttons[0].setSelection(true); if (!radioButtonConfig.getRadioButtonListners().isEmpty()) { Stream<Button> stream = Arrays.stream(buttons); stream.forEach(button -> { Listners radioListners = radioButtonConfig.getRadioButtonListners().get(0); IELTListener listener = radioListners.getListener(); Listener listnr = listener.getListener(propertyDialogButtonBar, null, button); button.addListener(SWT.Selection, listnr); }); } populateWidget(); } public void populateWidget() { for (int i = 1; i < buttons.length; i++) { if (StringUtils.isNotBlank(matchValue.getMatchValue())) { if (matchValue.getMatchValue().equalsIgnoreCase(buttons[i].getText())) { buttons[i].setSelection(true); buttons[0].setSelection(false); } } else { buttons[0].setSelection(true); } } } @Override public LinkedHashMap<String, Object> getProperties() { property.put(propertyName, matchValue); return property; } @Override public boolean isWidgetValid() { return true; } @Override public void addModifyListener(Property property, ArrayList<AbstractWidget> widgetList) { } }