com.haulmont.cuba.web.app.folders.AppFolderEditWindow.java Source code

Java tutorial

Introduction

Here is the source code for com.haulmont.cuba.web.app.folders.AppFolderEditWindow.java

Source

/*
 * Copyright (c) 2008-2016 Haulmont.
 *
 * 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.haulmont.cuba.web.app.folders;

import com.haulmont.bali.util.ReflectionHelper;
import com.haulmont.cuba.core.app.FoldersService;
import com.haulmont.cuba.core.entity.AppFolder;
import com.haulmont.cuba.core.entity.Folder;
import com.haulmont.cuba.core.global.AppBeans;
import com.haulmont.cuba.core.global.Configuration;
import com.haulmont.cuba.core.global.GlobalConfig;
import com.haulmont.cuba.gui.components.Frame;
import com.haulmont.cuba.gui.presentations.Presentations;
import com.haulmont.cuba.gui.theme.ThemeConstants;
import com.haulmont.cuba.web.App;
import com.haulmont.cuba.web.AppUI;
import com.haulmont.cuba.web.toolkit.ui.CubaSourceCodeEditor;
import com.vaadin.ui.Button;
import org.apache.commons.lang.StringUtils;
import org.vaadin.aceeditor.AceMode;

import java.lang.reflect.Constructor;
import java.util.List;

public class AppFolderEditWindow extends FolderEditWindow {

    protected CubaSourceCodeEditor visibilityScriptField = null;
    protected CubaSourceCodeEditor quantityScriptField = null;

    public static FolderEditWindow create(boolean isAppFolder, boolean adding, Folder folder,
            Presentations presentations, Runnable commitHandler) {
        Configuration configuration = AppBeans.get(Configuration.NAME);
        GlobalConfig globalConfig = configuration.getConfig(GlobalConfig.class);
        String className = isAppFolder ? globalConfig.getAppFolderEditWindowClassName()
                : globalConfig.getFolderEditWindowClassName();

        if (className != null) {
            Class<FolderEditWindow> aClass = ReflectionHelper.getClass(className);
            try {
                Constructor constructor = aClass.getConstructor(boolean.class, Folder.class, Presentations.class,
                        Runnable.class);
                return (FolderEditWindow) constructor.newInstance(adding, folder, presentations, commitHandler);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        } else
            return isAppFolder ? new AppFolderEditWindow(adding, folder, presentations, commitHandler)
                    : new FolderEditWindow(adding, folder, presentations, commitHandler);
    }

    public AppFolderEditWindow(boolean adding, Folder folder, Presentations presentations, Runnable commitHandler) {
        super(adding, folder, presentations, commitHandler);
        if (!adding) {
            ThemeConstants theme = App.getInstance().getThemeConstants();
            setWidth(theme.get("cuba.web.AppFolderEditWindow.width"));

            layout.setWidth("100%");

            visibilityScriptField = new CubaSourceCodeEditor();
            visibilityScriptField.setMode(AceMode.groovy);
            visibilityScriptField.setWidth(100, Unit.PERCENTAGE);
            visibilityScriptField.setCaption(getMessage("folders.visibilityScript"));
            String vScript = StringUtils.trimToEmpty(((AppFolder) folder).getVisibilityScript());
            visibilityScriptField.setValue(vScript);
            layout.addComponent(visibilityScriptField, 3);

            quantityScriptField = new CubaSourceCodeEditor();
            String qScript = StringUtils.trimToEmpty(((AppFolder) folder).getQuantityScript());
            quantityScriptField.setValue(qScript);
            quantityScriptField.setMode(AceMode.groovy);
            quantityScriptField.setWidth(100, Unit.PERCENTAGE);
            quantityScriptField.setCaption(getMessage("folders.quantityScript"));
            layout.addComponent(quantityScriptField, 4);

            if (AppUI.getCurrent().isTestMode()) {
                setCubaId("appFolderEditWindow");

                visibilityScriptField.setCubaId("visibilityScriptField");
                quantityScriptField.setCubaId("quantityScriptField");
            }
        }
    }

    @Override
    protected void initButtonOkListener() {
        okBtn.addClickListener(new Button.ClickListener() {
            @Override
            public void buttonClick(Button.ClickEvent event) {
                commit();
            }
        });
    }

    @Override
    protected void commit() {
        AppFolder folder = (AppFolder) AppFolderEditWindow.this.folder;
        if (StringUtils.trimToNull(nameField.getValue()) == null) {
            String msg = messages.getMessage(messagesPack, "folders.folderEditWindow.emptyName");
            App.getInstance().getWindowManager().showNotification(msg, Frame.NotificationType.TRAY);
            return;
        }
        folder.setName(nameField.getValue());
        folder.setTabName(tabNameField.getValue());

        if (sortOrderField.getValue() == null || "".equals(sortOrderField.getValue())) {
            folder.setSortOrder(null);
        } else {
            Object value = sortOrderField.getValue();
            int sortOrder;
            try {
                sortOrder = Integer.parseInt((String) value);
            } catch (NumberFormatException e) {
                String msg = messages.getMessage(messagesPack, "folders.folderEditWindow.invalidSortOrder");
                App.getInstance().getWindowManager().showNotification(msg, Frame.NotificationType.TRAY);
                return;
            }
            folder.setSortOrder(sortOrder);
        }

        Object parent = parentSelect.getValue();
        if (parent instanceof Folder) {
            folder.setParent((Folder) parent);
        } else {
            folder.setParent(null);
        }

        if (visibilityScriptField != null) {
            String scriptText = visibilityScriptField.getValue();
            folder.setVisibilityScript(scriptText);
        }
        if (quantityScriptField != null) {
            String scriptText = quantityScriptField.getValue();
            folder.setQuantityScript(scriptText);
        }
        folder.setApplyDefault(Boolean.valueOf(applyDefaultCb.getValue().toString()));

        AppFolderEditWindow.this.commitHandler.run();

        close();
    }

    @Override
    protected void fillParentSelect() {
        parentSelect.removeAllItems();

        String root = getMessage("folders.appFoldersRoot");
        parentSelect.addItem(root);
        parentSelect.setNullSelectionItemId(root);

        FoldersService service = AppBeans.get(FoldersService.NAME);
        List<AppFolder> list = service.loadAppFolders();
        for (AppFolder folder : list) {
            if (!folder.equals(this.folder)) {
                parentSelect.addItem(folder);
                parentSelect.setItemCaption(folder, getMessage(folder.getName()));
            }
        }
    }
}