/*
* 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.development;
import com.hybridbpm.model.FileModel;
import com.vaadin.data.Property;
import com.vaadin.data.fieldgroup.BeanFieldGroup;
import com.vaadin.data.fieldgroup.FieldGroup;
import com.vaadin.data.util.BeanItem;
import com.vaadin.server.FontAwesome;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Panel;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.ValoTheme;
import java.util.logging.Logger;
/**
*
* @author Marat Gubaidullin
*/
public class FileForm extends Panel implements Button.ClickListener {
public static final Logger logger = Logger.getLogger(FileForm.class.getCanonicalName());
private FileModel fileModel;
private final BeanFieldGroup fieldGroup = new BeanFieldGroup<>(FileModel.class);
private final TextField name = new TextField();
private final TextField description = new TextField();
private final CheckBox multiple = new CheckBox();
private final Button btnRemove = new Button(null, this);
private final Button btnUp = new Button(null, this);
private final Button btnDown = new Button(null, this);
private final HorizontalLayout elementsLayout = new HorizontalLayout(name, description, multiple);
private final HorizontalLayout buttonsLayout = new HorizontalLayout(btnUp, btnDown, btnRemove);
private final HorizontalLayout layout = new HorizontalLayout(elementsLayout, buttonsLayout);
private static final String NAME = "NAME";
public FileForm() {
setContent(layout);
layout.setMargin(true);
layout.setSpacing(true);
layout.setWidth(100, Unit.PERCENTAGE);
layout.setExpandRatio(elementsLayout, 1f);
elementsLayout.setWidth(100, Unit.PERCENTAGE);
elementsLayout.setSpacing(true);
elementsLayout.setComponentAlignment(multiple, Alignment.MIDDLE_CENTER);
elementsLayout.setExpandRatio(name, 3f);
elementsLayout.setExpandRatio(description, 3f);
elementsLayout.setExpandRatio(multiple, 1f);
description.setWidth(100, Unit.PERCENTAGE);
name.setWidth(100, Unit.PERCENTAGE);
buttonsLayout.setComponentAlignment(btnRemove, Alignment.MIDDLE_CENTER);
buttonsLayout.setComponentAlignment(btnUp, Alignment.MIDDLE_CENTER);
buttonsLayout.setComponentAlignment(btnDown, Alignment.MIDDLE_CENTER);
buttonsLayout.setHeight(100, Unit.PERCENTAGE);
// buttonsLayout.setSpacing(true);
prepareComponents();
fieldGroup.bind(name, "name");
fieldGroup.bind(description, "description");
fieldGroup.bind(multiple, "multiple");
}
public void setFileModel(FileModel fileModel) {
this.fileModel = fileModel;
fieldGroup.setItemDataSource(new BeanItem<>(fileModel));
}
public void commit() throws FieldGroup.CommitException {
fieldGroup.commit();
}
public FileModel getFileModel() {
return fileModel;
}
@Override
public void buttonClick(Button.ClickEvent event) {
if (event.getButton().equals(btnRemove)) {
((VerticalLayout) getParent()).removeComponent(this);
} else if (event.getButton().equals(btnUp)) {
int index = ((VerticalLayout) getParent()).getComponentIndex(this);
if (index != 0) {
Component upComponent = ((VerticalLayout) getParent()).getComponent(index - 1);
((VerticalLayout) getParent()).replaceComponent(upComponent, this);
}
}
if (event.getButton().equals(btnDown)) {
int index = ((VerticalLayout) getParent()).getComponentIndex(this);
if (((VerticalLayout) getParent()).getComponentCount() > 2
&& index < ((VerticalLayout) getParent()).getComponentCount() - 1) {
Component downComponent = ((VerticalLayout) getParent()).getComponent(index + 1);
if (downComponent instanceof FileForm) {
((VerticalLayout) getParent()).replaceComponent(downComponent, this);
}
}
}
}
private void prepareComponents() {
name.setCaption("Name");
name.setWidth(100, Unit.PERCENTAGE);
name.setNullRepresentation("");
name.setRequired(true);
name.setImmediate(true);
name.addValueChangeListener(new NameChangeListener());
description.setCaption("Description");
description.setWidth(100, Unit.PERCENTAGE);
description.setNullRepresentation("");
multiple.setCaption("Multiple");
multiple.setWidth(100, Unit.PERCENTAGE);
btnRemove.setHeight(100, Unit.PERCENTAGE);
btnRemove.setIcon(FontAwesome.TIMES_CIRCLE);
btnRemove.addStyleName(ValoTheme.BUTTON_LINK);
btnUp.setHeight(100, Unit.PERCENTAGE);
btnUp.setIcon(FontAwesome.ARROW_CIRCLE_UP);
btnUp.addStyleName(ValoTheme.BUTTON_LINK);
btnDown.setHeight(100, Unit.PERCENTAGE);
btnDown.setIcon(FontAwesome.ARROW_CIRCLE_DOWN);
btnDown.addStyleName(ValoTheme.BUTTON_LINK);
}
public class NameChangeListener implements Property.ValueChangeListener {
@Override
public void valueChange(Property.ValueChangeEvent event) {
}
}
}