/* * Copyright 2014-2016 CyberVision, 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.kaaproject.kaa.server.admin.client.mvp.view.dialog; import com.google.gwt.dom.client.Style.Unit; 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.user.client.ui.Button; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import org.kaaproject.avro.ui.gwt.client.widget.AlertPanel; import org.kaaproject.avro.ui.gwt.client.widget.AvroWidgetsConfig; import org.kaaproject.avro.ui.gwt.client.widget.FormPopup; import org.kaaproject.avro.ui.shared.RecordField; import org.kaaproject.kaa.server.admin.client.mvp.view.widget.RecordPanel; import org.kaaproject.kaa.server.admin.client.mvp.view.widget.SchemaInfoListBox; import org.kaaproject.kaa.server.admin.client.util.HasErrorMessage; import org.kaaproject.kaa.server.admin.client.util.Utils; import org.kaaproject.kaa.server.admin.shared.schema.SchemaInfoDto; import java.util.List; public class EditSchemaRecordDialog extends FormPopup implements ValueChangeHandler<SchemaInfoDto>, HasErrorMessage { private AlertPanel errorPanel; private SchemaInfoListBox schemaBox; private RecordPanel schemaRecordPanel; private Button saveButton; private Listener listener; /** * Instantiates a new EditSchemaRecordDialog. */ public EditSchemaRecordDialog(Listener listener, String title, List<SchemaInfoDto> schemas, int schemaVersion) { setWidth("100%"); setTitle(title); this.listener = listener; SchemaInfoDto currentValue = null; for (SchemaInfoDto schema : schemas) { if (schema.getVersion() == schemaVersion) { currentValue = schema; break; } } VerticalPanel dialogContents = new VerticalPanel(); dialogContents.setSpacing(4); setWidget(dialogContents); errorPanel = new AlertPanel(AlertPanel.Type.ERROR); errorPanel.setVisible(false); dialogContents.add(errorPanel); FlexTable table = new FlexTable(); table.setCellSpacing(6); table.addStyleName(Utils.avroUiStyle.fieldWidget()); Widget schemaVersionLabel = new Label(Utils.constants.schemaVersion()); schemaVersionLabel.addStyleName(Utils.avroUiStyle.requiredField()); schemaBox = new SchemaInfoListBox(); schemaBox.setWidth("50px"); schemaBox.getElement().getStyle().setMarginLeft(10, Unit.PX); schemaBox.setValue(currentValue); schemaBox.setAcceptableValues(schemas); schemaBox.addValueChangeHandler(this); HorizontalPanel versionPanel = new HorizontalPanel(); versionPanel.add(schemaVersionLabel); versionPanel.add(schemaBox); table.setWidget(0, 0, versionPanel); schemaRecordPanel = new RecordPanel(new AvroWidgetsConfig.Builder() .recordPanelWidth(700).createConfig(), Utils.constants.schema(), this, false, false); //schemaRecordPanel.setWidth("750px"); schemaRecordPanel.getElement().getStyle().setPropertyPx("minWidth", 750); schemaRecordPanel.getRecordWidget().setForceNavigation(true); schemaRecordPanel.setPreferredHeightPx(250); schemaRecordPanel.addValueChangeHandler(new ValueChangeHandler<RecordField>() { @Override public void onValueChange(ValueChangeEvent<RecordField> event) { validate(); } }); table.setWidget(1, 0, schemaRecordPanel); table.getFlexCellFormatter().setColSpan(1, 0, 2); dialogContents.add(table); saveButton = new Button(Utils.constants.save(), new ClickHandler() { @Override public void onClick(ClickEvent event) { performSave(); } }); Button cancelButton = new Button(Utils.constants.cancel(), new ClickHandler() { @Override public void onClick(ClickEvent event) { hide(); EditSchemaRecordDialog.this.listener.onCancel(); } }); addButton(saveButton); addButton(cancelButton); updateValue(currentValue); saveButton.setEnabled(false); } /** * Show edit schema record dialog. */ public static void showEditSchemaRecordDialog(Listener listener, String title, List<SchemaInfoDto> schemas, int schemaVersion) { EditSchemaRecordDialog dialog = new EditSchemaRecordDialog( listener, title, schemas, schemaVersion); dialog.center(); dialog.show(); } @Override public void onValueChange(ValueChangeEvent<SchemaInfoDto> event) { updateValue(event.getValue()); } private void updateValue(SchemaInfoDto schemaInfo) { schemaRecordPanel.setValue(schemaInfo.getSchemaForm()); schemaRecordPanel.setTitle(schemaInfo.getSchemaName()); validate(); } private void validate() { boolean valid = schemaRecordPanel.validate(); saveButton.setEnabled(valid); } private void performSave() { hide(); listener.onSave(schemaBox.getValue()); } @Override public void clearError() { errorPanel.setMessage(""); errorPanel.setVisible(false); } @Override public void setErrorMessage(String message) { errorPanel.setMessage(message); errorPanel.setVisible(true); } public interface Listener { public void onSave(SchemaInfoDto newValue); public void onCancel(); } }