/*******************************************************************************
* 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.filterproperty;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Item;
import hydrograph.ui.common.util.Constants;
import hydrograph.ui.datastructure.expression.ExpressionEditorData;
import hydrograph.ui.datastructure.property.FilterProperties;
import hydrograph.ui.datastructure.property.mapping.MappingSheetRow;
import hydrograph.ui.expression.editor.util.ExpressionEditorUtil;
import hydrograph.ui.propertywindow.messages.Messages;
import hydrograph.ui.propertywindow.widgets.customwidgets.lookupproperty.ELTLookupMapWizard;
import hydrograph.ui.propertywindow.widgets.customwidgets.operational.AbstractExpressionComposite;
import hydrograph.ui.propertywindow.widgets.customwidgets.operational.TransformDialog;
/**
* The Class ELTCellModifier.
*
* @author Bitwise
*/
public class ELTCellModifier implements ICellModifier{
private Viewer viewer;
private TransformDialog transformDialog;
private MappingSheetRow mappingSheetRow;
/**
* Instantiates a new ELT cell modifier.
*
* @param viewer
* the viewer
*/
public ELTCellModifier(Viewer viewer) {
this.viewer = viewer;
}
public ELTCellModifier(Viewer viewer,TransformDialog transformDialog) {
this.viewer = viewer;
this.transformDialog=transformDialog;
}
public ELTCellModifier(Viewer viewer,TransformDialog transformDialog,MappingSheetRow mappingSheetRow) {
this.viewer = viewer;
this.transformDialog=transformDialog;
this.mappingSheetRow=mappingSheetRow;
}
@Override
public boolean canModify(Object element, String property) {
return true;
}
@Override
public Object getValue(Object element, String property) {
FilterProperties filter = (FilterProperties) element;
if(StringUtils.equals(Constants.COMPONENT_NAME, property))
return filter.getPropertyname();
else if(StringUtils.equals(ELTLookupMapWizard.OPERATIONAL_INPUT_FIELD, property)){
return filter.getPropertyname();
}
else if (StringUtils.equals(Messages.OUTPUT_FIELD,property)||StringUtils.equals(Messages.INNER_OPERATION_INPUT_FIELD,property)||StringUtils.equals(Messages.INNER_OPERATION_OUTPUT_FIELD, property))
return filter.getPropertyname();
return null;
}
@Override
public void modify(Object element, String property, Object value) {
if (element instanceof Item)
{
element = ((Item) element).getData();
}
FilterProperties filterProperties = (FilterProperties) element;
if(StringUtils.equals(Constants.COMPONENT_NAME, property))
{
filterProperties.setPropertyname((String)value);
}
else if(StringUtils.equals(ELTLookupMapWizard.OPERATIONAL_INPUT_FIELD, property))
{
filterProperties.setPropertyname((String)value);
}
else if(StringUtils.equals(Messages.INNER_OPERATION_INPUT_FIELD,property))
{
filterProperties.setPropertyname((String)value);
validateExpressionOnInputFieldChange(mappingSheetRow);
transformDialog.refreshOutputTable();
transformDialog.setDuplicateOperationInputFieldMap(mappingSheetRow);
transformDialog.showHideValidationMessage();
}
else if(StringUtils.equals(Messages.INNER_OPERATION_OUTPUT_FIELD, property))
{
int indexOfSelectedField= transformDialog.getATMapping().getOutputFieldList().indexOf(filterProperties);
filterProperties.setPropertyname((String )value);
if(indexOfSelectedField==-1)
transformDialog.getATMapping().getOutputFieldList().add(filterProperties);
transformDialog.refreshOutputTable();
transformDialog.showHideValidationMessage();
}
viewer.refresh();
}
private void validateExpressionOnInputFieldChange(MappingSheetRow mappingSheetRow) {
AbstractExpressionComposite composite=(AbstractExpressionComposite) viewer.getData(AbstractExpressionComposite.EXPRESSION_COMPOSITE_KEY);
if(composite!=null && mappingSheetRow.isExpression() && StringUtils.isNotBlank(mappingSheetRow.getExpressionEditorData().getExpression())){
ExpressionEditorData expressionEditorData=composite.createExpressionEditorData();
ExpressionEditorUtil.validateExpression(expressionEditorData.getExpression(), expressionEditorData.getCombinedFieldDatatypeMap(), expressionEditorData);
}
}
}