/******************************************************************************* * 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 hydrograph.ui.common.util.Constants; import hydrograph.ui.common.util.OSValidator; import hydrograph.ui.datastructure.property.GridRow; import hydrograph.ui.datastructure.property.Schema; 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.SingleColumnGridConfig; import hydrograph.ui.propertywindow.widgets.customwidgets.config.WidgetConfig; import hydrograph.ui.propertywindow.widgets.dialogs.HiveOutputFieldDialog; import hydrograph.ui.propertywindow.widgets.gridwidgets.basic.AbstractELTWidget; import hydrograph.ui.propertywindow.widgets.gridwidgets.basic.ELTDefaultButton; import hydrograph.ui.propertywindow.widgets.gridwidgets.basic.ELTDefaultLable; import hydrograph.ui.propertywindow.widgets.gridwidgets.container.AbstractELTContainerWidget; import hydrograph.ui.propertywindow.widgets.gridwidgets.container.ELTDefaultSubgroupComposite; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; /** * * The class to create partition key field dialog for hive output. * * @author Bitwise * */ public class HiveOutputSingleColumnWidget extends AbstractWidget { protected String propertyName; private List<String> set; protected SingleColumnGridConfig gridConfig = null; private ArrayList<AbstractWidget> widgets; public HiveOutputSingleColumnWidget(ComponentConfigrationProperty componentConfigProp, ComponentMiscellaneousProperties componentMiscProps, PropertyDialogButtonBar propDialogButtonBar) { super(componentConfigProp, componentMiscProps, propDialogButtonBar); intialize(componentConfigProp); } protected void intialize(ComponentConfigrationProperty componentConfigProp) { propertyName = componentConfigProp.getPropertyName(); setProperties(componentConfigProp.getPropertyName(), componentConfigProp.getPropertyValue()); } @Override public void attachToPropertySubGroup(AbstractELTContainerWidget container) { ELTDefaultSubgroupComposite defaultSubgroupComposite = new ELTDefaultSubgroupComposite( container.getContainerControl()); defaultSubgroupComposite.createContainerWidget(); AbstractELTWidget defaultLable = new ELTDefaultLable(gridConfig.getLabelName()); defaultSubgroupComposite.attachWidget(defaultLable); setPropertyHelpWidget((Control) defaultLable.getSWTWidgetControl()); AbstractELTWidget defaultButton; if(OSValidator.isMac()){ defaultButton = new ELTDefaultButton(Constants.EDIT).buttonWidth(120); }else{ defaultButton = new ELTDefaultButton(Constants.EDIT); } defaultSubgroupComposite.attachWidget(defaultButton); Button button = (Button) defaultButton.getSWTWidgetControl(); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { onDoubleClick(); } }); } protected void onDoubleClick() { HiveOutputFieldDialog fieldDialog = new HiveOutputFieldDialog(new Shell(), propertyDialogButtonBar); fieldDialog.setComponentName(gridConfig.getComponentName()); if (getProperties().get(propertyName) == null) { setProperties(propertyName, new ArrayList<String>()); } fieldDialog.setRuntimePropertySet(new ArrayList<String>(set)); fieldDialog.setSourceFieldsFromPropagatedSchema(getPropagatedSchema()); fieldDialog.open(); setProperties(propertyName, fieldDialog.getFieldNameList()); showHideErrorSymbol(widgets); } private void setProperties(String propertyName, Object properties) { this.propertyName = propertyName; this.set = (List<String>) properties; } @Override public LinkedHashMap<String, Object> getProperties() { LinkedHashMap<String, Object> property = new LinkedHashMap<>(); property.put(propertyName, this.set); return property; } @Override public void setWidgetConfig(WidgetConfig widgetConfig) { gridConfig = (SingleColumnGridConfig) widgetConfig; } protected List<String> getPropagatedSchema() { List<String> list = new ArrayList<String>(); Schema schema = (Schema) getComponent().getProperties().get( Constants.SCHEMA_PROPERTY_NAME); if (schema != null && schema.getGridRow() != null) { List<GridRow> gridRows = schema.getGridRow(); if (gridRows != null) { for (GridRow gridRow : gridRows) { list.add(gridRow.getFieldName()); } } } return list; } @Override public boolean isWidgetValid() { return validateAgainstValidationRule(getProperties().get(propertyName)); } @Override public void addModifyListener(Property property, ArrayList<AbstractWidget> widgetList) { widgets=widgetList; } }