Java tutorial
/* * Copyright (c) 2011-2015 Marat Gubaidullin. * * This file is part of HYBRIDBPM. * * 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 com.hybridbpm.ui.component.bpm.window; import com.hybridbpm.model.TransitionModel; import com.hybridbpm.ui.component.bpm.designer.ProcessModelLayout; import com.vaadin.data.Validator; import com.vaadin.data.fieldgroup.BeanFieldGroup; import com.vaadin.data.fieldgroup.FieldGroup; import com.vaadin.server.FontAwesome; import com.vaadin.shared.ui.MarginInfo; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.CheckBox; import com.vaadin.ui.GridLayout; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Notification; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; import com.vaadin.ui.themes.ValoTheme; import org.vaadin.aceeditor.AceEditor; import org.vaadin.aceeditor.AceMode; import org.vaadin.aceeditor.AceTheme; import org.vaadin.aceeditor.SuggestionExtension; /** * * @author Marat Gubaidullin */ public class TransitionConfigureWindow extends Window implements Button.ClickListener { private final BeanFieldGroup<TransitionModel> fieldGroup = new BeanFieldGroup<>(TransitionModel.class); private final VerticalLayout layout = new VerticalLayout(); private final GridLayout configurationLayout = new GridLayout(2, 3); private final TextField nameTextField = new TextField(); private final AceEditor expressionTextField = new AceEditor(); private final CheckBox defaultCheckBox = new CheckBox(); private final TextField xTextField = new TextField(); private final TextField yTextField = new TextField(); protected HorizontalLayout toolbar = new HorizontalLayout(); private final Button btnOk = new Button(null, this); private final Button btnClose = new Button(null, this); private final Button btnShowMore = new Button(null, this); private ProcessModelLayout processModelLayout; public TransitionConfigureWindow() { } public void initUI(ProcessModelLayout processModelLayout) { this.processModelLayout = processModelLayout; nameTextField.setCaption(("Name")); nameTextField.setWidth(300, Unit.PIXELS); nameTextField.setNullRepresentation(""); expressionTextField.setCaption(("Condition Expression")); expressionTextField.setWidth(100, Unit.PERCENTAGE); expressionTextField.setHeight(50, Unit.PIXELS); expressionTextField.setMode(AceMode.groovy); expressionTextField.setTheme(AceTheme.chrome); expressionTextField.setShowGutter(false); SuggestionExtension extension = new SuggestionExtension( new VariableSuggester(this.processModelLayout.getProcessModel())); extension.setSuggestOnDot(false); extension.extend(expressionTextField); defaultCheckBox.setCaption(("Default Transition")); yTextField.setCaption(("Y")); yTextField.setWidth(100, Unit.PIXELS); yTextField.setNullRepresentation(""); yTextField.setVisible(false); xTextField.setCaption(("Y")); xTextField.setWidth(100, Unit.PIXELS); xTextField.setNullRepresentation(""); xTextField.setVisible(false); // configurationLayout.setCaption("Transition properties"); // configurationLayout.addStyleName("process-config"); configurationLayout.setMargin(new MarginInfo(true, true, true, true)); configurationLayout.setSpacing(true); configurationLayout.addComponent(nameTextField, 0, 0, 0, 0); configurationLayout.addComponent(defaultCheckBox, 1, 0, 1, 0); configurationLayout.setComponentAlignment(defaultCheckBox, Alignment.BOTTOM_RIGHT); configurationLayout.addComponent(expressionTextField, 0, 1, 1, 1); configurationLayout.addComponent(xTextField, 0, 2, 0, 2); configurationLayout.addComponent(yTextField, 1, 2, 1, 2); configurationLayout.setColumnExpandRatio(0, 1f); configurationLayout.setColumnExpandRatio(1, 1f); configurationLayout.setColumnExpandRatio(2, 1f); fieldGroup.setBuffered(true); //important fieldGroup.bind(xTextField, "x"); fieldGroup.bind(yTextField, "y"); fieldGroup.bind(nameTextField, "name"); fieldGroup.bind(expressionTextField, "expression"); fieldGroup.bind(defaultCheckBox, "defaultTransition"); fieldGroup.setItemDataSource(processModelLayout.getActiveElement().getTransitionModel()); toolbar.setSpacing(true); toolbar.setWidth(100, Unit.PERCENTAGE); toolbar.addStyleName("toolbar"); btnShowMore.setCaption(("Show more")); btnShowMore.setStyleName(ValoTheme.BUTTON_LINK); toolbar.addComponent(btnShowMore); toolbar.setComponentAlignment(btnShowMore, Alignment.MIDDLE_LEFT); toolbar.setExpandRatio(btnShowMore, 1f); btnOk.addStyleName(ValoTheme.BUTTON_PRIMARY); btnOk.setCaption(("OK")); toolbar.addComponent(btnOk); toolbar.setComponentAlignment(btnOk, Alignment.MIDDLE_RIGHT); btnClose.setCaption(("Close")); toolbar.addComponent(btnClose); toolbar.setComponentAlignment(btnClose, Alignment.MIDDLE_RIGHT); layout.addStyleName("process-config-layout"); layout.setSpacing(true); layout.setMargin(true); layout.addComponent(configurationLayout); layout.addComponent(toolbar); layout.setComponentAlignment(toolbar, Alignment.MIDDLE_RIGHT); setCaption("Transition"); center(); setResizable(false); // setClosable(false); setModal(true); addStyleName("no-vertical-drag-hints"); addStyleName("no-horizontal-drag-hints"); addStyleName("process-config-window"); setContent(layout); } @Override public void buttonClick(Button.ClickEvent event) { if (event.getButton().equals(btnClose)) { close(); } else if (event.getButton().equals(btnShowMore)) { xTextField.setVisible(!xTextField.isVisible()); yTextField.setVisible(!yTextField.isVisible()); } else if (event.getButton().equals(btnOk)) { try { // check transition name uniqueness if (!processModelLayout.getActiveElement().getTransitionModel().getName() .equalsIgnoreCase(nameTextField.getValue()) && processModelLayout.getProcessModel() .getTransitionModelByName(nameTextField.getValue()) != null) { throw new Validator.InvalidValueException("Transition name already exists!"); } fieldGroup.commit(); close(); } catch (Validator.InvalidValueException | FieldGroup.CommitException ex) { ex.printStackTrace(); Notification.show(("error"), ex.getMessage(), Notification.Type.ERROR_MESSAGE); } } } }