/*******************************************************************************
* 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.evaluate;
import hydrograph.ui.datastructure.property.FixedWidthGridRow;
import hydrograph.ui.expression.editor.enums.DataTypes;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
public class EvalDialogFieldTable {
private static final String FIELD_VALUE_COLUMN = "Value";
private static final String FIELD_NAME_COLUMN = "Field Name";
static final String ORIGINAL_INPUT_LIST_KEY = "originalInputList";
private Table table;
private TableViewer tableViewer;
private List<FieldNameAndValue> propertyList;
private TableColumn fieldValueColumn;
private TableColumn fieldNameColumn;
private List<FixedWidthGridRow> inputFieldsSchema;
public static final String FIELD_NAME_PROPERTY = "FIELD_NAME_PROPERTY";
public static final String FIELD_DATATYPE_PROPERTY = "FIELD_DATATYPE_PROPERTY";
public static final String FIELD_VALUE_PROPERTY = "FIELD_VALUE_PROPERTY";
private static final String[] PROPS = { FIELD_NAME_PROPERTY, FIELD_DATATYPE_PROPERTY ,FIELD_VALUE_PROPERTY };
private static final String FIELD_DATATYPE_COLUMN = "Data Type";
EvalDialogFieldTable createFieldTable(Composite fieldTableComposite,Map<String,Class<?>> fieldMap,List<FixedWidthGridRow> inputFieldsSchema) {
this.inputFieldsSchema=inputFieldsSchema;
loadDefaultProperties(fieldMap);
tableViewer = new TableViewer(fieldTableComposite, SWT.BORDER | SWT.FULL_SELECTION);
table = tableViewer.getTable();
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
table.setHeaderVisible(true);
table.setLinesVisible(true);
fieldNameColumn = new TableColumn(table, SWT.NONE);
fieldNameColumn.setWidth(300);
fieldNameColumn.setText(FIELD_NAME_COLUMN);
fieldValueColumn = new TableColumn(table, SWT.NONE);
fieldValueColumn.setWidth(70);
fieldValueColumn.setText(FIELD_DATATYPE_COLUMN);
fieldValueColumn = new TableColumn(table, SWT.NONE);
fieldValueColumn.setWidth(148);
fieldValueColumn.setText(FIELD_VALUE_COLUMN);
tableViewer.setContentProvider(new EvalFiedContentProvider());
tableViewer.setLabelProvider(new EvalFieldLabelProvider());
tableViewer.setInput(propertyList);
createCellEditors();
addListenerToCompositeForResizingNameColumn(fieldNameColumn);
return this;
}
private void createCellEditors() {
final CellEditor fieldNameeditor = new TextCellEditor(table);
final CellEditor fieldDataTypeeeditor = new TextCellEditor(table);
final CellEditor fieldValueeditor = new TextCellEditor(table);
CellEditor[] editors = new CellEditor[] { fieldNameeditor, fieldDataTypeeeditor ,fieldValueeditor };
tableViewer.setColumnProperties(PROPS);
tableViewer.setCellModifier(new FieldNameAndValueCellModifier(tableViewer));
tableViewer.setCellEditors(editors);
}
private void loadDefaultProperties(Map<String, Class<?>> fieldMap) {
propertyList=new ArrayList<FieldNameAndValue>();
if(fieldMap!=null){
for(Entry< String, Class<?>> entry:fieldMap.entrySet()){
FieldNameAndValue fieldNameAndValue=new FieldNameAndValue(entry.getKey(),
String.valueOf(DataTypes.getDefaulltValuefromDataTypesSimpleName(entry.getValue().getSimpleName(),getShemaOfField(entry.getKey()))),
entry.getValue().getSimpleName());
propertyList.add(fieldNameAndValue);
}
}
}
private void addListenerToCompositeForResizingNameColumn(TableColumn fieldNameColumn2) {
}
public Object[] validateDataTypeValues() throws InvalidDataTypeValueException {
String[] fieldNames=new String[propertyList.size()];
Object[] fieldValues=new Object[propertyList.size()];
for(FieldNameAndValue fieldNameAndValue:propertyList){
fieldValues[propertyList.indexOf(fieldNameAndValue)] = DataTypes.validateInputeAndGetEquivalentObject(
fieldNameAndValue.getFieldValue(), fieldNameAndValue.getFieldName(),
fieldNameAndValue.getDataType(),getShemaOfField(fieldNameAndValue.getFieldName()));
fieldNames[propertyList.indexOf(fieldNameAndValue)] = fieldNameAndValue.getFieldName();
}
return new Object[]{fieldNames,fieldValues};
}
TableViewer getTableViewer() {
return tableViewer;
}
private FixedWidthGridRow getShemaOfField(String fieldName) {
if (inputFieldsSchema != null) {
for (FixedWidthGridRow inputField : inputFieldsSchema) {
if (StringUtils.equals(inputField.getFieldName(), fieldName)) {
return inputField;
}
}
}
return null;
}
}