hydrograph.ui.propertywindow.widgets.customwidgets.schema.XPathSchemaGridWidget.java Source code

Java tutorial

Introduction

Here is the source code for hydrograph.ui.propertywindow.widgets.customwidgets.schema.XPathSchemaGridWidget.java

Source

/*******************************************************************************
 * 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.schema;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.graphics.Image;

import hydrograph.ui.datastructure.property.Schema;
import hydrograph.ui.datastructure.property.XPathGridRow;
import hydrograph.ui.propertywindow.messages.Messages;
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.AbstractWidget;
import hydrograph.ui.propertywindow.widgets.gridwidgets.container.AbstractELTContainerWidget;
import hydrograph.ui.propertywindow.widgets.listeners.grid.schema.ELTCellEditorFieldValidator;
import hydrograph.ui.propertywindow.widgets.utility.GridWidgetCommonBuilder;
import hydrograph.ui.propertywindow.widgets.utility.WidgetUtility;

/**
 * Class for XPathSchemaGridWidget.
 * 
 * @author Bitwise
 */
public class XPathSchemaGridWidget extends ELTSchemaGridWidget {

    /**
     * Instantiates a new ELT XPath schema grid widget.
     * 
     * @param componentConfigrationProperty
     *            the component configration property
     * @param componentMiscellaneousProperties
     *            the component miscellaneous properties
     * @param propertyDialogButtonBar
     *            the property dialog button bar
     */
    public XPathSchemaGridWidget(ComponentConfigrationProperty componentConfigrationProperty,
            ComponentMiscellaneousProperties componentMiscellaneousProperties,
            PropertyDialogButtonBar propertyDialogButtonBar) {
        super(componentConfigrationProperty, componentMiscellaneousProperties, propertyDialogButtonBar);
        this.gridRowType = Messages.XPATH_GRID_ROW;
    }

    @Override
    protected Map<String, Integer> getPropertiesToShow() {
        Map<String, Integer> columns = new HashMap<>();
        columns.put(FIELDNAME, 0);
        columns.put(DATATYPE, 1);
        columns.put(XPATH, 2);
        columns.put(SCALE, 3);
        columns.put(SCALE_TYPE, 4);
        columns.put(DATEFORMAT, 5);
        columns.put(PRECISION, 6);
        columns.put(FIELD_DESCRIPTION, 7);

        return columns;
        //sequence: FIELDNAME, DATATYPE, XPATH, SCALE, SCALE_TYPE, DATEFORMAT, PRECISION, FIELD_DESCRIPTION
    }

    @Override
    protected XPathGridWidgetBuilder getGridWidgetBuilder() {
        return XPathGridWidgetBuilder.INSTANCE;
    }

    protected IStructuredContentProvider getContentProvider() {
        return new IStructuredContentProvider() {

            @Override
            public Object[] getElements(Object inputElement) {
                return ((List) inputElement).toArray();
            }
        };
    }

    protected ITableLabelProvider getLableProvider() {

        return new ITableLabelProvider() {

            @Override
            public void removeListener(ILabelProviderListener listener) {
            }

            @Override
            public boolean isLabelProperty(Object element, String property) {
                return false;
            }

            @Override
            public void dispose() {
            }

            @Override
            public void addListener(ILabelProviderListener listener) {
            }

            @Override
            public String getColumnText(Object element, int columnIndex) {
                XPathGridRow xPathGrid = (XPathGridRow) element;

                switch (columnIndex) {
                case 0:
                    return xPathGrid.getFieldName();
                case 1:
                    return GridWidgetCommonBuilder.getDataTypeKey()[xPathGrid.getDataType().intValue()];
                case 2:
                    return xPathGrid.getXPath();
                case 3:
                    return xPathGrid.getScale().toString();
                case 4:
                    if (xPathGrid.getScaleType() != null) {
                        return GridWidgetCommonBuilder.getScaleTypeKey()[xPathGrid.getScaleType().intValue()];
                    } else {
                        return GridWidgetCommonBuilder.getScaleTypeKey()[0];
                    }
                case 5:
                    return xPathGrid.getDateFormat();
                case 6:
                    return xPathGrid.getPrecision();
                case 7:
                    return xPathGrid.getDescription();
                }
                return null;
            }

            @Override
            public Image getColumnImage(Object element, int columnIndex) {
                return null;
            }
        };
    }

    protected XPathSchemaGridCellModifier getCellModifier() {

        return new XPathSchemaGridCellModifier(this, tableViewer);
    }

    @Override
    protected void addValidators() {
        editors[0].setValidator(new ELTCellEditorFieldValidator(table, schemaGridRowList, fieldNameDecorator,
                isFieldNameAlphanumericDecorator, propertyDialogButtonBar));
    }

    //Adding the decorator to show error message when field name same.
    @Override
    protected void setDecorator() {
        fieldNameDecorator = WidgetUtility.addDecorator(editors[0].getControl(), Messages.FIELDNAMEERROR);
        isFieldNameAlphanumericDecorator = WidgetUtility.addDecorator(editors[0].getControl(),
                Messages.FIELDNAME_NOT_ALPHANUMERIC_ERROR);
        fieldNameDecorator.setMarginWidth(8);
        isFieldNameAlphanumericDecorator.setMarginWidth(8);
    }

    @Override
    public void attachToPropertySubGroup(AbstractELTContainerWidget container) {
        super.attachToPropertySubGroup(container);
    }

    @Override
    public boolean isWidgetValid() {
        return applySchemaValidationRule();
    }

    public void validateInternalSchemaPropogatedData(Schema propogatedSchema) {
        showHideErrorSymbol(validateAgainstValidationRule(propogatedSchema));

    }

    @Override
    public void addModifyListener(final Property property, ArrayList<AbstractWidget> widgetList) {
        attachListener();
    }
}