Package org.drools.workbench.screens.guided.dtable.client.widget

Source Code of org.drools.workbench.screens.guided.dtable.client.widget.DefaultValueWidgetFactory$DefaultValueChangedEvent

/*
* Copyright 2013 JBoss 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 org.drools.workbench.screens.guided.dtable.client.widget;

import java.util.Date;

import com.github.gwtbootstrap.client.ui.CheckBox;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.*;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import org.drools.workbench.models.datamodel.oracle.DataType;
import org.drools.workbench.models.guided.dtable.shared.model.AttributeCol52;
import org.drools.workbench.models.guided.dtable.shared.model.DTCellValue52;
import org.drools.workbench.models.guided.dtable.shared.model.GuidedDecisionTable52;
import org.drools.workbench.screens.guided.rule.client.editor.RuleAttributeWidget;
import org.guvnor.common.services.shared.config.ApplicationPreferences;
import org.kie.workbench.common.widgets.client.widget.PopupDatePicker;
import org.kie.workbench.common.widgets.client.widget.TextBoxFactory;

/**
* Factory for Default Value widgets
*/
public class DefaultValueWidgetFactory {

    private static final String DATE_FORMAT = ApplicationPreferences.getDroolsDateFormat();
    private static final DateTimeFormat format = DateTimeFormat.getFormat( DATE_FORMAT );

    /**
     * BZ-996932: Default value changed event handler interface.
     *
     * Widgets using DefaultValueWidget should listen to value changed event by implementing this custom GWT Event Handler.
     */
    interface DefaultValueChangedEventHandler {
        void onDefaultValueChanged(DefaultValueChangedEvent event);
    }

    /**
     * BZ-996932: Default value changed event definition.
     *
     * When default value is changed this event if fired to notified handlers.
     */
    static class DefaultValueChangedEvent {

        private final DTCellValue52 defaultValue;

        public DefaultValueChangedEvent(DTCellValue52 defaultValue) {
            this.defaultValue = defaultValue;
        }

        public DTCellValue52 getDefaultValue() {
            return defaultValue;
        }

    }

    // BZ-996932: Added value change notifications.
    public static Widget getDefaultValueWidget( final AttributeCol52 ac,
                                        final boolean isReadOnly,
                                        final DefaultValueChangedEventHandler defaultValueChangedEventHandler ) {
        Widget editor = null;
        final AttributeCol52 originCol = ac;
        final String attributeName = ac.getAttribute();
        if ( attributeName.equals( RuleAttributeWidget.RULEFLOW_GROUP_ATTR )
                || attributeName.equals( RuleAttributeWidget.AGENDA_GROUP_ATTR )
                || attributeName.equals( RuleAttributeWidget.ACTIVATION_GROUP_ATTR )
                || attributeName.equals( RuleAttributeWidget.TIMER_ATTR )
                || attributeName.equals( RuleAttributeWidget.CALENDARS_ATTR ) ) {
            final TextBox tb = TextBoxFactory.getTextBox( DataType.TYPE_STRING );
            if ( ac.getDefaultValue() == null ) {
                ac.setDefaultValue( new DTCellValue52( "" ) );
            }
            final DTCellValue52 defaultValue = ac.getDefaultValue();
            tb.setValue( defaultValue.getStringValue() );
            tb.setEnabled( !isReadOnly );
            if ( !isReadOnly ) {
                tb.addValueChangeHandler( new ValueChangeHandler<String>() {

                    public void onValueChange( ValueChangeEvent<String> event ) {
                        defaultValue.setStringValue( tb.getValue() );
                        defaultValueChangedEventHandler.onDefaultValueChanged(new DefaultValueChangedEvent(defaultValue));
                    }

                } );
            }
            editor = tb;

        } else if ( attributeName.equals( RuleAttributeWidget.SALIENCE_ATTR ) ) {
            final TextBox tb = TextBoxFactory.getTextBox( DataType.TYPE_NUMERIC_INTEGER );
            if ( ac.getDefaultValue() == null ) {
                ac.setDefaultValue( new DTCellValue52( 0 ) );
            } else {
                assertIntegerDefaultValue( ac.getDefaultValue() );
            }
            final DTCellValue52 defaultValue = ac.getDefaultValue();
            final Integer numericValue = (Integer) defaultValue.getNumericValue();
            tb.setValue( numericValue == null ? "" : numericValue.toString() );
            tb.setEnabled( !isReadOnly );
            if ( !isReadOnly ) {
                tb.addValueChangeHandler( new ValueChangeHandler<String>() {

                    public void onValueChange( ValueChangeEvent<String> event ) {
                        try {
                            defaultValue.setNumericValue( new Integer( event.getValue() ) );
                        } catch ( NumberFormatException nfe ) {
                            defaultValue.setNumericValue( new Integer( "0" ) );
                            tb.setValue( "0" );
                        } finally {
                            defaultValueChangedEventHandler.onDefaultValueChanged(new DefaultValueChangedEvent(defaultValue));
                        }
                    }

                } );
            }
            editor = tb;

        } else if ( attributeName.equals( RuleAttributeWidget.DURATION_ATTR ) ) {
            final TextBox tb = TextBoxFactory.getTextBox( DataType.TYPE_NUMERIC_LONG );
            if ( ac.getDefaultValue() == null ) {
                ac.setDefaultValue( new DTCellValue52( 0L ) );
            } else {
                assertLongDefaultValue( ac.getDefaultValue() );
            }
            final DTCellValue52 defaultValue = ac.getDefaultValue();
            final Long numericValue = (Long) defaultValue.getNumericValue();
            tb.setValue( numericValue == null ? "" : numericValue.toString() );
            tb.setEnabled( !isReadOnly );
            if ( !isReadOnly ) {
                tb.addValueChangeHandler( new ValueChangeHandler<String>() {

                    public void onValueChange( ValueChangeEvent<String> event ) {
                        try {
                            defaultValue.setNumericValue( new Long( event.getValue() ) );
                        } catch ( NumberFormatException nfe ) {
                            defaultValue.setNumericValue( new Long( "0" ) );
                            tb.setValue( "0" );
                        } finally {
                            defaultValueChangedEventHandler.onDefaultValueChanged(new DefaultValueChangedEvent(defaultValue));
                        }
                    }

                } );
            }
            editor = tb;

        } else if ( attributeName.equals( RuleAttributeWidget.NO_LOOP_ATTR )
                || attributeName.equals( RuleAttributeWidget.LOCK_ON_ACTIVE_ATTR )
                || attributeName.equals( RuleAttributeWidget.AUTO_FOCUS_ATTR )
                || attributeName.equals( RuleAttributeWidget.ENABLED_ATTR )
                || attributeName.equals( GuidedDecisionTable52.NEGATE_RULE_ATTR ) ) {
            final CheckBox cb = new CheckBox();
            if ( ac.getDefaultValue() == null ) {
                ac.setDefaultValue( new DTCellValue52( Boolean.FALSE ) );
            } else {
                assertBooleanDefaultValue( ac.getDefaultValue() );
            }
            final DTCellValue52 defaultValue = ac.getDefaultValue();
            final Boolean booleanValue = defaultValue.getBooleanValue();
            cb.setEnabled( !isReadOnly );
            if ( booleanValue == null ) {
                cb.setValue( false );
                defaultValue.setBooleanValue( Boolean.FALSE );
            } else {
                cb.setValue( booleanValue );
            }

            cb.addClickHandler( new ClickHandler() {
                public void onClick( ClickEvent event ) {
                    defaultValue.setBooleanValue( cb.getValue() );
                    defaultValueChangedEventHandler.onDefaultValueChanged(new DefaultValueChangedEvent(defaultValue));
                }
            } );
            editor = cb;

        } else if ( attributeName.equals( RuleAttributeWidget.DATE_EFFECTIVE_ATTR )
                || attributeName.equals( RuleAttributeWidget.DATE_EXPIRES_ATTR ) ) {
            if ( ac.getDefaultValue() == null ) {
                ac.setDefaultValue( new DTCellValue52( new Date() ) );
            } else {
                assertDateDefaultValue( ac.getDefaultValue() );
            }
            final DTCellValue52 defaultValue = ac.getDefaultValue();
            if ( isReadOnly ) {
                final TextBox tb = TextBoxFactory.getTextBox( DataType.TYPE_STRING );
                tb.setValue( format.format( defaultValue.getDateValue() ) );
                tb.setEnabled( false );
            } else {
                final PopupDatePicker dp = new PopupDatePicker( false );
                final Date dateValue = defaultValue.getDateValue();
                dp.setValue( dateValue );

                dp.addValueChangeHandler( new ValueChangeHandler<Date>() {

                    public void onValueChange( ValueChangeEvent<Date> event ) {
                        defaultValue.setDateValue( event.getValue() );
                        defaultValueChangedEventHandler.onDefaultValueChanged(new DefaultValueChangedEvent(defaultValue));
                    }

                } );
                editor = dp;
            }
        } else if ( attributeName.equals( RuleAttributeWidget.DIALECT_ATTR ) ) {
            final ListBox lb = new ListBox();
            lb.addItem( RuleAttributeWidget.DIALECTS[ 0 ] );
            lb.addItem( RuleAttributeWidget.DIALECTS[ 1 ] );
            if ( ac.getDefaultValue() == null ) {
                ac.setDefaultValue( new DTCellValue52( RuleAttributeWidget.DIALECTS[ 1 ] ) );
            }
            final DTCellValue52 defaultValue = ac.getDefaultValue();
            final String stringValue = defaultValue.getStringValue();
            lb.setEnabled( !isReadOnly );
            if ( !isReadOnly ) {
                lb.addChangeHandler( new ChangeHandler() {
                    @Override
                    public void onChange( ChangeEvent event ) {
                        final int selectedIndex = lb.getSelectedIndex();
                        if ( selectedIndex < 0 ) {
                            return;
                        }
                        DTCellValue52 newValue = new DTCellValue52( lb.getValue( selectedIndex ) );
                        ac.setDefaultValue( newValue );
                        defaultValueChangedEventHandler.onDefaultValueChanged(new DefaultValueChangedEvent(newValue));
                    }
                } );
            }
            if ( stringValue == null || stringValue.isEmpty() ) {
                lb.setSelectedIndex( 1 );
                defaultValue.setStringValue( RuleAttributeWidget.DIALECTS[ 1 ] );
            } else if ( stringValue.equals( RuleAttributeWidget.DIALECTS[ 0 ] ) ) {
                lb.setSelectedIndex( 0 );
            } else if ( stringValue.equals( RuleAttributeWidget.DIALECTS[ 1 ] ) ) {
                lb.setSelectedIndex( 1 );
            } else {
                lb.setSelectedIndex( 1 );
                defaultValue.setStringValue( RuleAttributeWidget.DIALECTS[ 1 ] );
            }
            editor = lb;
        }
        return editor;
    }

    //Legacy DefaultValues always used String to store the value; so attempt to convert it
    private static void assertIntegerDefaultValue( final DTCellValue52 dcv ) {
        if ( dcv.getNumericValue() == null ) {
            try {
                dcv.setNumericValue( new Integer( dcv.getStringValue() ) );
            } catch ( NumberFormatException nfe ) {
                dcv.setNumericValue( new Integer( "0" ) );
            }
        }
    }

    //Legacy DefaultValues always used String to store the value; so attempt to convert it
    private static void assertLongDefaultValue( final DTCellValue52 dcv ) {
        if ( dcv.getNumericValue() == null ) {
            try {
                dcv.setNumericValue( new Long( dcv.getStringValue() ) );
            } catch ( NumberFormatException nfe ) {
                dcv.setNumericValue( new Long( "0" ) );
            }
        }
    }

    //Legacy DefaultValues always used String to store the value; so attempt to convert it
    private static void assertBooleanDefaultValue( final DTCellValue52 dcv ) {
        if ( dcv.getBooleanValue() == null ) {
            dcv.setBooleanValue( new Boolean( dcv.getStringValue() ) );
        }
    }

    //Legacy DefaultValues always used String to store the value; so attempt to convert it
    private static void assertDateDefaultValue( final DTCellValue52 dcv ) {
        if ( dcv.getDateValue() == null ) {
            try {
                dcv.setDateValue( format.parse( dcv.getStringValue() ) );
            } catch ( IllegalArgumentException eae ) {
                dcv.setDateValue( new Date() );
            }
        }
    }

}
TOP

Related Classes of org.drools.workbench.screens.guided.dtable.client.widget.DefaultValueWidgetFactory$DefaultValueChangedEvent

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.