/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * 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.kie.workbench.common.screens.datamodeller.client.widgets.advanceddomain.valuepaireditor; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import org.gwtbootstrap3.client.shared.event.ModalShownEvent; import org.gwtbootstrap3.client.shared.event.ModalShownHandler; import org.gwtbootstrap3.client.ui.Column; import org.gwtbootstrap3.client.ui.Container; import org.gwtbootstrap3.client.ui.Form; import org.gwtbootstrap3.client.ui.Row; import org.gwtbootstrap3.client.ui.constants.ColumnSize; import org.kie.workbench.common.screens.datamodeller.client.resources.i18n.Constants; import org.kie.workbench.common.screens.datamodeller.client.widgets.advanceddomain.valuepaireditor.booleans.BooleanValuePairEditor; import org.kie.workbench.common.screens.datamodeller.client.widgets.advanceddomain.valuepaireditor.enums.EnumValuePairEditor; import org.kie.workbench.common.screens.datamodeller.client.widgets.advanceddomain.valuepaireditor.enums.MultipleEnumValuePairEditor; import org.kie.workbench.common.screens.datamodeller.client.widgets.advanceddomain.valuepaireditor.generic.GenericValuePairEditor; import org.kie.workbench.common.screens.datamodeller.client.widgets.advanceddomain.valuepaireditor.multiple.MultipleValuePairEditor; import org.kie.workbench.common.screens.datamodeller.client.widgets.advanceddomain.valuepaireditor.numeric.NumericValuePairEditor; import org.kie.workbench.common.screens.datamodeller.client.widgets.advanceddomain.valuepaireditor.string.AbstractStringValuePairEditor; import org.kie.workbench.common.services.datamodeller.core.AnnotationValuePairDefinition; import org.uberfire.ext.widgets.common.client.common.popups.BaseModal; import org.uberfire.ext.widgets.common.client.common.popups.footers.ModalFooterOKCancelButtons; public class ValuePairEditorPopupViewImpl extends BaseModal implements ValuePairEditorPopupView { private Presenter presenter; private ValuePairEditor valuePairEditor; private Form form = new Form(); private Container container = new Container(); private Row row = new Row(); private Column column = new Column( ColumnSize.MD_12 ); @Inject private ValuePairEditorProvider valuePairEditorProvider; @Inject public ValuePairEditorPopupViewImpl() { container.setFluid( true ); container.add( row ); row.add( column ); column.add( form ); setTitle( Constants.INSTANCE.advanced_domain_value_pair_editor_popup_title() ); setBody( container ); add( new ModalFooterOKCancelButtons( new com.google.gwt.user.client.Command() { @Override public void execute() { presenter.onOk(); } }, new com.google.gwt.user.client.Command() { @Override public void execute() { presenter.onCancel(); } } ) ); addShownHandler( new ModalShownHandler() { @Override public void onShown( ModalShownEvent shownEvent ) { if ( valuePairEditor != null ) { valuePairEditor.refresh(); } } } ); } @Override public void setPresenter( Presenter presenter ) { this.presenter = presenter; } @Override public void init( AnnotationValuePairDefinition valuePairDefinition ) { valuePairEditor = valuePairEditorProvider.getValuePairEditor( valuePairDefinition ); if ( valuePairEditor instanceof GenericValuePairEditor ) { valuePairEditor.showValidateButton( false ); } form.add( valuePairEditor ); valuePairEditor.addEditorHandler( new ValuePairEditorHandler() { @Override public void onValidate() { if ( valuePairEditor instanceof GenericValuePairEditor ) { presenter.onValidate(); } } @Override public void onValueChange() { presenter.onValueChange(); } } ); } @Override public boolean isGenericEditor() { return valuePairEditor instanceof GenericValuePairEditor; } @Override public boolean isValid() { return valuePairEditor.isValid(); } @Override public Object getValue() { return valuePairEditor.getValue(); } @Override public void setValue( Object value ) { //Not elegant if ( valuePairEditor instanceof MultipleValuePairEditor ) { List currentList = null; if ( value instanceof List ) { currentList = (List) value; } else if ( value != null ) { currentList = new ArrayList(); currentList.add( value ); } ( (MultipleValuePairEditor) valuePairEditor ).setValue( currentList ); } else if ( valuePairEditor instanceof BooleanValuePairEditor ) { ( (BooleanValuePairEditor) valuePairEditor ).setValue( value != null ? Boolean.TRUE.equals( value ) : null ); } else if ( valuePairEditor instanceof AbstractStringValuePairEditor ) { ( (AbstractStringValuePairEditor) valuePairEditor ).setValue( value != null ? value.toString() : null ); } else if ( valuePairEditor instanceof EnumValuePairEditor ) { ( (EnumValuePairEditor) valuePairEditor ).setValue( value != null ? value.toString() : null ); } else if ( valuePairEditor instanceof MultipleEnumValuePairEditor ) { List<String> enumValues = null; if ( value instanceof List ) { enumValues = new ArrayList<String>(); for ( Object enumItem : ( (List) value ) ) { enumValues.add( enumItem != null ? enumItem.toString() : null ); } } else if ( value != null ) { enumValues = new ArrayList<String>(); enumValues.add( value.toString() ); } ( (MultipleEnumValuePairEditor) valuePairEditor ).setValue( enumValues ); } else if ( valuePairEditor instanceof NumericValuePairEditor ) { ( (NumericValuePairEditor) valuePairEditor ).setValue( value ); } else if ( valuePairEditor instanceof GenericValuePairEditor ) { ( (GenericValuePairEditor) valuePairEditor ).setValue( value != null ? value.toString() : null ); } } @Override public void setErrorMessage( String errorMessage ) { valuePairEditor.setErrorMessage( errorMessage ); } @Override public void clearErrorMessage() { valuePairEditor.clearErrorMessage(); } @Override public void clear() { valuePairEditor.clear(); } }