ru.codeinside.gses.apservice.ApServiceForm.java Source code

Java tutorial

Introduction

Here is the source code for ru.codeinside.gses.apservice.ApServiceForm.java

Source

/*
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 * Copyright (c) 2013, MPL CodeInside http://codeinside.ru
 */

package ru.codeinside.gses.apservice;

import com.google.common.collect.Lists;
import com.vaadin.data.Container;
import com.vaadin.data.Item;
import com.vaadin.data.Validator;
import com.vaadin.data.Validator.InvalidValueException;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Field;
import com.vaadin.ui.Form;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Layout;
import com.vaadin.ui.ListSelect;
import com.vaadin.ui.Select;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import ru.codeinside.adm.database.Service;
import ru.codeinside.adm.ui.LazyLoadingContainer2;
import ru.codeinside.gses.activiti.ftarchive.validators.FilteredLongValidator;
import ru.codeinside.gses.lazyquerycontainer.LazyQueryContainer;
import ru.codeinside.gses.manager.ManagerService;
import ru.codeinside.gses.service.DeclarantService;
import ru.codeinside.gses.service.impl.DeclarantServiceImpl;
import ru.codeinside.gses.vaadin.MaskedTextField;
import ru.codeinside.gses.webui.DeclarantTypeChanged;
import ru.codeinside.gses.webui.Flash;
import ru.codeinside.gses.webui.components.ApInfo;
import ru.codeinside.gses.webui.components.api.IRefresh;
import ru.codeinside.gses.webui.executor.DeclarantTypeQueryDefinition;
import ru.codeinside.gses.webui.executor.DeclarantTypeQueryFactory;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

public class ApServiceForm extends VerticalLayout implements IRefresh {

    private static final String CODE = "code";
    private static final String NAME = "name";
    private static final String ID = "id";

    private static final long serialVersionUID = -4762441232549644314L;

    private final Form createForm;
    private final Form editForm;
    private List<LazyLoadingContainer2> dependentContainers = Lists.newArrayList();

    public void addDependentContainer(LazyLoadingContainer2 container) {
        dependentContainers.add(container);
    }

    public void addItemSetChangeListener(Container.ItemSetChangeListener l) {
        for (LazyLoadingContainer2 d : dependentContainers) {
            d.addListener(l);
        }
    }

    public ApServiceForm() {
        createForm = createForm();
        editForm = editForm();
        addComponent(createForm);
        addComponent(editForm);
        show(createForm);
        hide(editForm);
        setSizeFull();
        Flash.bind(DeclarantTypeChanged.class, this, "refresh");
        //TODO undind DeclarantTypeChanged
    }

    protected void showForm() {
        activateForm();
    }

    private void show(Form form) {
        form.setVisible(true);
    }

    private void hide(Form form) {
        form.setVisible(false);
    }

    private void activateForm() {
        addComponent(createForm);
        show(editForm);
    }

    protected void showForm(Service s) {
        show(editForm);
        hide(createForm);
        Field idFIeld = editForm.getField(ID);
        idFIeld.setReadOnly(false);
        idFIeld.setValue(s.getId().toString());
        idFIeld.setReadOnly(true);
        editForm.getField(NAME).setValue(s.getName());
        editForm.getField(CODE).setValue(ApInfo.formatCode(s.getRegisterCode()));
        ListSelect ls = (ListSelect) editForm.getField(DeclarantServiceImpl.DECLARANT_TYPES);
        //TODO ??  
        for (Object o : ls.getItemIds()) {
            ls.unselect(o);
        }
        ls.setValue(null);
        for (String declarantType : s.getDeclarantTypes()) {
            for (Object o : ls.getItemIds()) {
                if (declarantType.equals(ls.getItem(o).getItemProperty("name").getValue().toString())) {
                    ls.select(o);
                }
            }
        }
    }

    private Form createForm() {
        final Form form = new Form();
        form.setCaption(" ?");
        form.setWidth("100%");

        TextArea field = new TextArea("?");
        field.setRequired(true);
        field.setWidth("100%");
        field.setMaxLength(1500);
        form.addField(NAME, field);

        MaskedTextField code = new MaskedTextField("  ?", "# ### ### ### ### ### ###");
        code.setColumns(19);
        code.addValidator(new FilteredLongValidator("[_ ]",
                "     " + ApInfo.formatCode(Long.MAX_VALUE)));
        form.addField(CODE, code);

        ListSelect declarantTypes = new ListSelect(" ?");
        declarantTypes.setWidth("100%");
        declarantTypes.setHeight("50px");
        declarantTypes.setMultiSelect(true);
        LazyQueryContainer container = new LazyQueryContainer(new DeclarantTypeQueryDefinition(),
                new DeclarantTypeQueryFactory());
        declarantTypes.setContainerDataSource(container);
        declarantTypes.setItemCaptionPropertyId("value");
        declarantTypes.setItemCaptionMode(Select.ITEM_CAPTION_MODE_PROPERTY);
        Flash.bind(DeclarantTypeChanged.class, container, "refresh");

        field.setRequired(true);
        field.setWidth("100%");
        field.setMaxLength(1500);
        form.addField(DeclarantServiceImpl.DECLARANT_TYPES, declarantTypes);

        Layout footer = form.getFooter();
        Button updateButton = createCreateButton();
        footer.addComponent(updateButton);
        ((HorizontalLayout) footer).setSpacing(true);
        return form;
    }

    private Form editForm() {
        final Form form = new Form();
        form.setCaption(" ?");
        form.setWidth("100%");
        TextField idField = new TextField(" ?");
        idField.setRequired(false);
        idField.setEnabled(true);
        idField.setVisible(true);
        idField.setReadOnly(true);

        form.addField(ID, idField);
        TextArea field = new TextArea("?");
        field.setRequired(true);
        field.setWidth("100%");
        field.setMaxLength(1500);
        form.addField(NAME, field);

        MaskedTextField code = new MaskedTextField("  ?", "# ### ### ### ### ### ###");
        code.setColumns(19);
        code.addValidator(new FilteredLongValidator("[_ ]",
                "     " + ApInfo.formatCode(Long.MAX_VALUE)));
        form.addField(CODE, code);

        ListSelect declarantTypes = new ListSelect(" ?");
        declarantTypes.setWidth("100%");
        declarantTypes.setHeight("50px");
        declarantTypes.setMultiSelect(true);

        LazyQueryContainer container = new LazyQueryContainer(new DeclarantTypeQueryDefinition(),
                new DeclarantTypeQueryFactory());
        declarantTypes.setContainerDataSource(container);
        declarantTypes.setItemCaptionPropertyId("value");
        declarantTypes.setItemCaptionMode(Select.ITEM_CAPTION_MODE_PROPERTY);
        Flash.bind(DeclarantTypeChanged.class, container, "refresh");

        field.setRequired(true);
        field.setWidth("100%");
        field.setMaxLength(1500);
        form.addField(DeclarantService.DECLARANT_TYPES, declarantTypes);

        Layout footer = form.getFooter();
        Button updateButton = createUpdateButton();
        Button cancelButton = createCancelButton(form);
        footer.addComponent(updateButton);
        footer.addComponent(cancelButton);
        ((HorizontalLayout) footer).setSpacing(true);
        return form;
    }

    private Button createCreateButton() {
        Button createProcedure = new Button("");
        createProcedure.addListener(new ClickListener() {
            private static final long serialVersionUID = -7774602726746226851L;

            @Override
            public void buttonClick(ClickEvent event) {
                Field fieldName = createForm.getField(NAME);
                Field fieldCode = createForm.getField(CODE);
                try {
                    fieldName.setValue(fieldName.getValue().toString().trim());
                    createForm.commit();
                } catch (InvalidValueException e) {
                    return;
                }
                String creatorLogin = getApplication().getUser().toString();
                String name = createForm.getField(NAME).getValue().toString();
                List<String> declarantTypes = getDeclarantTypes(
                        (ListSelect) createForm.getField(DeclarantService.DECLARANT_TYPES));
                Long code = null;
                if (fieldCode.getValue() != null) {
                    Iterator<Validator> i = fieldCode.getValidators().iterator();
                    i.next();// ?  ?
                    final FilteredLongValidator flv = (FilteredLongValidator) i.next();
                    code = flv.toLong(fieldCode.getValue().toString());
                }
                long apService = ManagerService.get().createApService(name, code, creatorLogin, declarantTypes);
                if (apService == 0) {
                    getWindow()
                            .showNotification("? ?    ??");
                } else {
                    for (LazyLoadingContainer2 d : dependentContainers) {
                        d.fireItemSetChange();
                    }
                    getWindow().showNotification("? " + name + " ?");
                    createForm.getField(NAME).setValue("");
                    createForm.getField(CODE).setValue("");
                    createForm.setValidationVisible(false);
                    cleanForm();
                }
            }
        });
        return createProcedure;
    }

    private List<String> getDeclarantTypes(ListSelect field) {
        Collection typeValues = (Collection) field.getValue();
        List<String> declarantTypes = new ArrayList<String>(typeValues.size());
        Iterator i = typeValues.iterator();
        while (i.hasNext()) {
            Item item = field.getItem(i.next());
            declarantTypes.add(item.getItemProperty("name").getValue().toString());
        }
        return declarantTypes;
    }

    private Button createUpdateButton() {
        Button updateProcedure = new Button("");
        updateProcedure.addListener(new ClickListener() {
            private static final long serialVersionUID = 7102711218014031544L;

            @Override
            public void buttonClick(ClickEvent event) {
                Field fieldName = editForm.getField(NAME);
                Field fieldCode = editForm.getField(CODE);
                try {
                    fieldName.setValue(fieldName.getValue().toString().trim());
                    editForm.commit();
                } catch (InvalidValueException e) {
                    return;
                }
                String id = editForm.getField(ID).getValue().toString();
                String name = editForm.getField(NAME).getValue().toString();
                List<String> declarantTypes = getDeclarantTypes(
                        (ListSelect) editForm.getField(DeclarantService.DECLARANT_TYPES));
                Long code = null;
                if (fieldCode.getValue() != null) {
                    Iterator<Validator> i = fieldCode.getValidators().iterator();
                    i.next();// ?  ?
                    final FilteredLongValidator flv = (FilteredLongValidator) i.next();
                    code = flv.toLong(fieldCode.getValue().toString());
                }
                if (ManagerService.get().updateApservice(id, name, code, declarantTypes)) {
                    getWindow()
                            .showNotification("? ?    ??");
                } else {
                    for (LazyLoadingContainer2 d : dependentContainers) {
                        d.fireItemSetChange();
                    }
                    cleanForm();
                    getWindow().showNotification("? " + name + " ");
                }
            }
        });
        return updateProcedure;

    }

    private Button createCancelButton(final Form form) {
        Button cancelButton = new Button("");
        cancelButton.addListener(new ClickListener() {

            private static final long serialVersionUID = 3836238707161959082L;

            @Override
            public void buttonClick(ClickEvent event) {
                cleanForm();
            }
        });
        return cancelButton;
    }

    private void cleanForm() {
        show(createForm);
        hide(editForm);
        //TODO ??  
        ListSelect ls = (ListSelect) createForm.getField(DeclarantService.DECLARANT_TYPES);
        for (Object o : ls.getItemIds()) {
            ls.unselect(o);
        }
        ls.setValue(null);
    }

    @Override
    public void refresh() {
        cleanForm();
    }
}