Search in sources :

Example 1 with ThemeConstantsManager

use of io.jmix.ui.theme.ThemeConstantsManager in project jmix by jmix-framework.

the class AbstractTable method initComponent.

protected void initComponent(T component) {
    component.setMultiSelect(false);
    component.setValidationVisible(false);
    component.setShowBufferedSourceException(false);
    component.setCustomCellValueFormatter(this::formatCellValue);
    component.addValueChangeListener(this::tableSelectionChanged);
    component.setSpecificVariablesHandler(this::handleSpecificVariables);
    component.setIconProvider(this::getItemIcon);
    component.setBeforePaintListener(this::beforeComponentPaint);
    component.addColumnReorderListener(this::onColumnReorder);
    component.setSortAscendingLabel(messages.getMessage("tableSort.ascending"));
    component.setSortResetLabel(messages.getMessage("tableSort.reset"));
    component.setSortDescendingLabel(messages.getMessage("tableSort.descending"));
    component.setSelectAllLabel(messages.getMessage("tableColumnSelector.selectAll"));
    component.setDeselectAllLabel(messages.getMessage("tableColumnSelector.deselectAll"));
    int defaultRowHeaderWidth = 16;
    ThemeConstantsManager themeConstantsManager = applicationContext.getBean(ThemeConstantsManager.class, ThemeConstantsManager.class);
    ThemeConstants theme = themeConstantsManager.getConstants();
    if (theme != null) {
        defaultRowHeaderWidth = theme.getInt("jmix.ui.Table.defaultRowHeaderWidth", 16);
    }
    component.setColumnWidth(ROW_HEADER_PROPERTY_ID, defaultRowHeaderWidth);
    contextMenuPopup.setParent(component);
    component.setContextMenuPopup(contextMenuPopup);
    shortcutsDelegate.setAllowEnterShortcut(false);
    component.addShortcutListener(new ShortcutListenerDelegate("tableEnter", KeyCode.ENTER, null).withHandler((sender, target) -> {
        T tableImpl = AbstractTable.this.component;
        AppUI ui = (AppUI) tableImpl.getUI();
        if (!ui.isAccessibleForUser(tableImpl)) {
            LoggerFactory.getLogger(AbstractTable.class).debug("Ignore click attempt because Table is inaccessible for user");
            return;
        }
        if (target == this.component) {
            if (enterPressAction != null) {
                enterPressAction.actionPerform(this);
            } else {
                handleClickAction();
            }
        }
    }));
    component.addShortcutListener(new ShortcutListenerDelegate("tableSelectAll", KeyCode.A, new int[] { com.vaadin.event.ShortcutAction.ModifierKey.CTRL }).withHandler((sender, target) -> {
        if (target == this.component) {
            selectAll();
        }
    }));
    component.addItemClickListener(event -> {
        if (event.isDoubleClick() && event.getItem() != null) {
            T tableImpl = AbstractTable.this.component;
            AppUI ui = (AppUI) tableImpl.getUI();
            if (!ui.isAccessibleForUser(tableImpl)) {
                LoggerFactory.getLogger(AbstractTable.class).debug("Ignore click attempt because Table is inaccessible for user");
                return;
            }
            handleClickAction();
        }
    });
    component.setAfterUnregisterComponentHandler(this::onAfterUnregisterComponent);
    component.setBeforeRefreshRowCacheHandler(this::onBeforeRefreshRowCache);
    component.setSelectable(true);
    component.setTableFieldFactory(createFieldFactory());
    component.setColumnCollapsingAllowed(true);
    component.setColumnReorderingAllowed(true);
    setEditable(false);
    componentComposition = new TableComposition();
    componentComposition.setTable(component);
    componentComposition.setPrimaryStyleName("jmix-table-composition");
    componentComposition.addComponent(component);
    component.setCellStyleGenerator(createStyleGenerator());
    component.addColumnCollapseListener(this::handleColumnCollapsed);
    // force default sizes
    componentComposition.setHeightUndefined();
    componentComposition.setWidthUndefined();
    setClientCaching();
    initEmptyState();
}
Also used : PaginationEmptyBinder(io.jmix.ui.component.pagination.data.PaginationEmptyBinder) DataLoadingSettingsBinder(io.jmix.ui.settings.component.binder.DataLoadingSettingsBinder) ShortcutListenerDelegate(io.jmix.ui.widget.ShortcutListenerDelegate) Autowired(org.springframework.beans.factory.annotation.Autowired) StringUtils(org.apache.commons.lang3.StringUtils) FetchPlanRepository(io.jmix.core.FetchPlanRepository) KeyValueMetaClass(io.jmix.core.impl.keyvalue.KeyValueMetaClass) Action(io.jmix.ui.action.Action) Range(io.jmix.core.metamodel.model.Range) ColumnHeaderMode(com.vaadin.v7.ui.Table.ColumnHeaderMode) TablePresentations(io.jmix.ui.presentation.TablePresentations) Preconditions.checkNotNullArgument(io.jmix.core.common.util.Preconditions.checkNotNullArgument) Property(com.vaadin.v7.data.Property) ConverterUtil(com.vaadin.v7.data.util.converter.ConverterUtil) Subscription(io.jmix.core.common.event.Subscription) EntityPreconditions(io.jmix.core.entity.EntityPreconditions) Datatype(io.jmix.core.metamodel.datatype.Datatype) InvocationTargetException(java.lang.reflect.InvocationTargetException) ThemeConstantsManager(io.jmix.ui.theme.ThemeConstantsManager) IconResolver(io.jmix.ui.icon.IconResolver) AggregatableDelegate(io.jmix.ui.component.data.aggregation.impl.AggregatableDelegate) MessageTools(io.jmix.core.MessageTools) BindingState(io.jmix.ui.component.data.BindingState) io.jmix.ui.component(io.jmix.ui.component) java.util(java.util) UiComponentProperties(io.jmix.ui.UiComponentProperties) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath) FrameOwner(io.jmix.ui.screen.FrameOwner) BooleanUtils(org.apache.commons.lang3.BooleanUtils) Converter(com.vaadin.v7.data.util.converter.Converter) TableSettings(io.jmix.ui.settings.component.TableSettings) SettingsWrapper(io.jmix.ui.settings.component.SettingsWrapper) Strings(com.google.common.base.Strings) InstanceContainer(io.jmix.ui.model.InstanceContainer) Resource(com.vaadin.server.Resource) DatatypeRegistry(io.jmix.core.metamodel.datatype.DatatypeRegistry) BaseAction(io.jmix.ui.action.BaseAction) Nullable(javax.annotation.Nullable) Actions(io.jmix.ui.Actions) CollectionContainer(io.jmix.ui.model.CollectionContainer) FetchPlan(io.jmix.core.FetchPlan) JmixEnhancedTable(io.jmix.ui.widget.JmixEnhancedTable) TablePresentationsLayout(io.jmix.ui.component.presentation.TablePresentationsLayout) UiControllerUtils(io.jmix.ui.screen.UiControllerUtils) ValueConversionException(io.jmix.ui.component.data.ValueConversionException) Entity(io.jmix.core.Entity) com.vaadin.ui(com.vaadin.ui) MetaClass(io.jmix.core.metamodel.model.MetaClass) ComponentSettingsBinder(io.jmix.ui.settings.component.binder.ComponentSettingsBinder) Preconditions(io.jmix.core.common.util.Preconditions) Formatter(io.jmix.ui.component.formatter.Formatter) BiFunction(java.util.function.BiFunction) LoggerFactory(org.slf4j.LoggerFactory) InstallTargetHandler(io.jmix.ui.screen.InstallTargetHandler) EventHub(io.jmix.core.common.event.EventHub) EntityValues(io.jmix.core.entity.EntityValues) Messages(io.jmix.core.Messages) ParseException(java.text.ParseException) MetadataTools(io.jmix.core.MetadataTools) Method(java.lang.reflect.Method) EmptyDataUnit(io.jmix.ui.component.data.meta.EmptyDataUnit) JmixValueChangeEvent(io.jmix.ui.widget.compatibility.JmixValueChangeEvent) DataUnit(io.jmix.ui.component.data.DataUnit) ComponentSettings(io.jmix.ui.settings.component.ComponentSettings) AccessManager(io.jmix.core.AccessManager) LookupSelectionChangeNotifier(io.jmix.ui.component.LookupComponent.LookupSelectionChangeNotifier) EntityTableItems(io.jmix.ui.component.data.meta.EntityTableItems) UiEntityContext(io.jmix.ui.accesscontext.UiEntityContext) PaginationDataUnitBinder(io.jmix.ui.component.pagination.data.PaginationDataUnitBinder) Collectors(java.util.stream.Collectors) EntityDataUnit(io.jmix.ui.component.data.meta.EntityDataUnit) AbstractComponent(com.vaadin.ui.AbstractComponent) JmixButton(io.jmix.ui.widget.JmixButton) AppUI(io.jmix.ui.AppUI) AggregationContainer(io.jmix.ui.widget.data.AggregationContainer) HasValueSource(io.jmix.ui.component.data.HasValueSource) AbstractSelect(com.vaadin.v7.ui.AbstractSelect) MetaProperty(io.jmix.core.metamodel.model.MetaProperty) Aggregations(io.jmix.ui.component.data.aggregation.Aggregations) ContainerDataUnit(io.jmix.ui.component.data.meta.ContainerDataUnit) AggregationInputValueChangeContext(io.jmix.ui.widget.JmixEnhancedTable.AggregationInputValueChangeContext) SettingsHelper(io.jmix.ui.settings.SettingsHelper) CssLayout(com.vaadin.ui.CssLayout) io.jmix.ui.component.table(io.jmix.ui.component.table) Function(java.util.function.Function) InitializingBean(org.springframework.beans.factory.InitializingBean) Notifications(io.jmix.ui.Notifications) LOOKUP_ENTER_PRESSED_ACTION_ID(io.jmix.ui.screen.LookupScreen.LOOKUP_ENTER_PRESSED_ACTION_ID) Aggregation(io.jmix.ui.component.data.aggregation.Aggregation) KeyCode(com.vaadin.event.ShortcutAction.KeyCode) UiEntityAttributeContext(io.jmix.ui.accesscontext.UiEntityAttributeContext) CurrentAuthentication(io.jmix.core.security.CurrentAuthentication) ScreenContext(io.jmix.ui.screen.ScreenContext) Logger(org.slf4j.Logger) TableItems(io.jmix.ui.component.data.TableItems) ThemeConstants(io.jmix.ui.theme.ThemeConstants) LOOKUP_ITEM_CLICK_ACTION_ID(io.jmix.ui.screen.LookupScreen.LOOKUP_ITEM_CLICK_ACTION_ID) Metadata(io.jmix.core.Metadata) ComponentSettingsRegistry(io.jmix.ui.settings.ComponentSettingsRegistry) UserSettingsTools(io.jmix.ui.settings.UserSettingsTools) Sizeable(com.vaadin.server.Sizeable) TablePresentation(io.jmix.ui.presentation.model.TablePresentation) SettingsWrapperImpl(io.jmix.ui.settings.component.SettingsWrapperImpl) Consumer(java.util.function.Consumer) VaadinSession(com.vaadin.server.VaadinSession) EntityStates(io.jmix.core.EntityStates) Element(org.dom4j.Element) DataComponents(io.jmix.ui.model.DataComponents) Component(com.vaadin.ui.Component) PaginationDataBinder(io.jmix.ui.component.pagination.data.PaginationDataBinder) ThemeConstants(io.jmix.ui.theme.ThemeConstants) ThemeConstantsManager(io.jmix.ui.theme.ThemeConstantsManager) ShortcutListenerDelegate(io.jmix.ui.widget.ShortcutListenerDelegate) AppUI(io.jmix.ui.AppUI)

Example 2 with ThemeConstantsManager

use of io.jmix.ui.theme.ThemeConstantsManager in project jmix by jmix-framework.

the class DialogWindowImpl method setupDefaultSize.

protected void setupDefaultSize() {
    ThemeConstantsManager themeConstantsManager = applicationContext.getBean(ThemeConstantsManager.class);
    ThemeConstants theme = themeConstantsManager.getConstants();
    dialogWindow.setWidth(theme.get("jmix.ui.WebWindowManager.dialog.width"));
    dialogWindow.setHeightUndefined();
    component.setWidth(100, Sizeable.Unit.PERCENTAGE);
    component.setHeightUndefined();
}
Also used : ThemeConstants(io.jmix.ui.theme.ThemeConstants) ThemeConstantsManager(io.jmix.ui.theme.ThemeConstantsManager)

Example 3 with ThemeConstantsManager

use of io.jmix.ui.theme.ThemeConstantsManager in project jmix by jmix-framework.

the class BulkEditAction method actionPerform.

@Override
public void actionPerform(Component component) {
    if (beforeActionPerformedHandler != null && !beforeActionPerformedHandler.beforeActionPerformed()) {
        return;
    }
    Security security = AppBeans.get(Security.class);
    if (!security.isSpecificPermitted(BulkEditor.PERMISSION)) {
        Messages messages = AppBeans.get(Messages.class);
        Notifications notifications = getScreenContext(target.getFrame()).getNotifications();
        notifications.create(NotificationType.ERROR).withCaption(messages.getMessage("accessDenied.message")).show();
        return;
    }
    if (target.getSelected().isEmpty()) {
        Messages messages = AppBeans.get(Messages.class);
        Notifications notifications = getScreenContext(target.getFrame()).getNotifications();
        notifications.create(NotificationType.HUMANIZED).withCaption(messages.getMessage("actions.BulkEdit.emptySelection")).show();
        return;
    }
    OpenType openType = this.openType;
    if (openType.getOpenMode() == OpenMode.DIALOG) {
        ThemeConstantsManager themeManager = AppBeans.get(ThemeConstantsManager.class);
        ThemeConstants theme = themeManager.getConstants();
        openType = openType.copy().width(theme.get("cuba.gui.BulkEditAction.editorDialog.width")).height(theme.get("cuba.gui.BulkEditAction.editorDialog.height")).resizable(true);
    }
    Map<String, Object> params = ParamsMap.of().pair("metaClass", target.getDatasource().getMetaClass()).pair("selected", target.getSelected()).pair("exclude", exclude).pair("includeProperties", includeProperties != null ? includeProperties : Collections.EMPTY_LIST).pair("fieldValidators", fieldValidators).pair("modelValidators", modelValidators).pair("loadDynamicAttributes", loadDynamicAttributes).pair("useConfirmDialog", useConfirmDialog).pair("columnsMode", columnsMode).create();
    WindowManager wm = ((WindowManager) getScreenContext(target.getFrame()).getScreens());
    WindowInfo windowInfo = AppBeans.get(WindowConfig.class).getWindowInfo("bulkEditor");
    Window bulkEditor = wm.openWindow(windowInfo, openType, params);
    bulkEditor.addCloseListener(actionId -> {
        if (Window.COMMIT_ACTION_ID.equals(actionId)) {
            target.getDatasource().refresh();
        }
        if (target instanceof Component.Focusable) {
            ((Component.Focusable) target).focus();
        }
    });
}
Also used : Window(com.haulmont.cuba.gui.components.Window) OpenType(com.haulmont.cuba.gui.WindowManager.OpenType) Messages(io.jmix.core.Messages) ThemeConstantsManager(io.jmix.ui.theme.ThemeConstantsManager) Security(com.haulmont.cuba.core.global.Security) WindowManager(com.haulmont.cuba.gui.WindowManager) WindowInfo(io.jmix.ui.WindowInfo) WindowConfig(io.jmix.ui.WindowConfig) ThemeConstants(io.jmix.ui.theme.ThemeConstants) Notifications(io.jmix.ui.Notifications)

Example 4 with ThemeConstantsManager

use of io.jmix.ui.theme.ThemeConstantsManager in project jmix by jmix-framework.

the class UiControllerDependencyInjector method getInjectedInstance.

@Nullable
protected Object getInjectedInstance(Class<?> type, String name, InjectElement injectElement, FrameOwner frameOwner, ScreenOptions options) {
    AnnotatedElement element = injectElement.getElement();
    Class annotationClass = injectElement.getAnnotationClass();
    Frame frame = UiControllerUtils.getFrame(frameOwner);
    if (annotationClass == WindowParam.class) {
        if (options instanceof MapScreenOptions) {
            return ((MapScreenOptions) options).getParams().get(name);
        }
        // Injecting a parameter
        return null;
    } else if (ScreenFragment.class.isAssignableFrom(type)) {
        // Injecting inner fragment controller
        Component fragment = frame.getComponent(name);
        if (fragment == null) {
            return null;
        }
        return ((Fragment) fragment).getFrameOwner();
    } else if (Component.class.isAssignableFrom(type)) {
        // / if legacy frame - inject controller
        Component component = frame.getComponent(name);
        if (component instanceof Fragment) {
            ScreenFragment fragmentFrameOwner = ((Fragment) component).getFrameOwner();
            if (type.isAssignableFrom(fragmentFrameOwner.getClass())) {
                return fragmentFrameOwner;
            }
        }
        // Injecting a UI component
        return component;
    } else if (InstanceContainer.class.isAssignableFrom(type)) {
        // Injecting a container
        ScreenData data = getScreenData(frameOwner);
        return data.getContainer(name);
    } else if (DataLoader.class.isAssignableFrom(type)) {
        // Injecting a loader
        ScreenData data = getScreenData(frameOwner);
        return data.getLoader(name);
    } else if (DataContext.class.isAssignableFrom(type)) {
        // Injecting the data context
        ScreenData data = getScreenData(frameOwner);
        return data.getDataContext();
    } else if (FrameContext.class.isAssignableFrom(type)) {
        // Injecting the FrameContext
        return frame.getContext();
    } else if (Action.class.isAssignableFrom(type)) {
        // Injecting an action
        return ComponentsHelper.findAction(name, frame);
    } else if (Facet.class.isAssignableFrom(type)) {
        // Injecting non-visual component
        String[] elements = ValuePathHelper.parse(name);
        if (elements.length == 1) {
            return frame.getFacet(name);
        }
        String prefix = pathPrefix(elements);
        Component component = frame.getComponent(prefix);
        if (component == null) {
            return null;
        }
        if (!(component instanceof Fragment)) {
            throw new UnsupportedOperationException(String.format("Unable to inject facet with id %s and type %s. Component %s is not a fragment", name, type, prefix));
        }
        String facetId = elements[elements.length - 1];
        return ((Fragment) component).getFacet(facetId);
    } else if (Downloader.class.isAssignableFrom(type)) {
        // Injecting a Downloader
        return applicationContext.getBean(Downloader.class);
    } else if (MessageBundle.class == type) {
        return createMessageBundle(element, frameOwner, frame);
    } else if (ThemeConstants.class == type) {
        // Injecting a Theme
        ThemeConstantsManager themeManager = applicationContext.getBean(ThemeConstantsManager.class);
        return themeManager.getConstants();
    } else if (BeanFactory.class.isAssignableFrom(type)) {
        return applicationContext;
    } else if (ObjectProvider.class.isAssignableFrom(type)) {
        if (!(element instanceof Field && ((Field) element).getGenericType() instanceof ParameterizedType) && !(element instanceof Method && ((Method) element).getGenericParameterTypes().length > 0 && ((Method) element).getGenericParameterTypes()[0] instanceof ParameterizedType)) {
            throw new UnsupportedOperationException("Unable to inject ObjectProvider without generic parameter");
        }
        Type genericType;
        if (element instanceof Field) {
            genericType = ((ParameterizedType) ((Field) element).getGenericType()).getActualTypeArguments()[0];
        } else {
            genericType = ((ParameterizedType) ((Method) element).getGenericParameterTypes()[0]).getActualTypeArguments()[0];
        }
        if (genericType instanceof ParameterizedType) {
            genericType = ((ParameterizedType) genericType).getRawType();
        }
        return applicationContext.getBeanProvider((Class<?>) genericType);
    } else if (ActionsAwareDialogFacet.DialogAction.class.isAssignableFrom(type)) {
        // facet's action
        Facet facet;
        String actionId;
        String[] path = ValuePathHelper.parse(name);
        if (path.length == 2) {
            facet = frame.getFacet(path[0]);
            actionId = path[1];
        } else {
            String prefix = ValuePathHelper.pathPrefix(path, 2);
            Component component = frame.getComponent(prefix);
            if (component == null) {
                return null;
            }
            if (!(component instanceof Fragment)) {
                throw new UnsupportedOperationException(String.format("Unable to inject dialog action with id '%s'. Component '%s' is not a fragment", name, prefix));
            }
            actionId = path[path.length - 1];
            facet = ((Fragment) component).getFacet(path[path.length - 2]);
        }
        if (!(facet instanceof ActionsAwareDialogFacet)) {
            return null;
        }
        // noinspection unchecked
        Collection<ActionsAwareDialogFacet.DialogAction<Facet>> actions = ((ActionsAwareDialogFacet<Facet>) facet).getActions();
        if (CollectionUtils.isNotEmpty(actions)) {
            return actions.stream().filter(action -> action.getId().equals(actionId)).findFirst().orElse(null);
        }
    } else {
        Object instance;
        // Try to find a Spring bean
        Map<String, ?> beans = applicationContext.getBeansOfType(type);
        if (!beans.isEmpty()) {
            instance = beans.get(name);
            // If a bean with required name found, return it
            if (instance != null) {
                return instance;
            } else {
                // Otherwise get a bean from the context again to respect @Primary annotation
                return applicationContext.getBean(type);
            }
        }
    }
    return null;
}
Also used : Action(io.jmix.ui.action.Action) ThemeConstantsManager(io.jmix.ui.theme.ThemeConstantsManager) Downloader(io.jmix.ui.download.Downloader) InstanceContainer(io.jmix.ui.model.InstanceContainer) ThemeConstants(io.jmix.ui.theme.ThemeConstants) Field(java.lang.reflect.Field) DataContext(io.jmix.ui.model.DataContext) AnnotatedMethod(io.jmix.ui.sys.UiControllerReflectionInspector.AnnotatedMethod) ObjectProvider(org.springframework.beans.factory.ObjectProvider) UiControllerUtils.getScreenData(io.jmix.ui.screen.UiControllerUtils.getScreenData) ScreenData(io.jmix.ui.model.ScreenData) Nullable(javax.annotation.Nullable)

Example 5 with ThemeConstantsManager

use of io.jmix.ui.theme.ThemeConstantsManager in project jmix by jmix-framework.

the class ScreenXmlParser method replaceAssignParameters.

protected void replaceAssignParameters(Document document) {
    Map<String, String> assignedParams = new HashMap<>();
    List<Element> assignElements = document.getRootElement().elements("assign");
    ThemeConstantsManager themeManager = this.themeConstantsManager;
    for (Element assignElement : assignElements) {
        String name = assignElement.attributeValue("name");
        if (StringUtils.isEmpty(name)) {
            throw new RuntimeException("'name' attribute of assign tag is empty");
        }
        String value = assignElement.attributeValue("value");
        if (StringUtils.isEmpty(value)) {
            throw new RuntimeException("'value' attribute of assign tag is empty");
        }
        if (StringUtils.startsWith(value, ThemeConstants.PREFIX)) {
            ThemeConstants theme = themeManager.getConstants();
            value = theme.get(value.substring(ThemeConstants.PREFIX.length()));
        }
        assignedParams.put(name, value);
    }
    if (!assignedParams.isEmpty()) {
        Element layoutElement = document.getRootElement().element("layout");
        if (layoutElement != null) {
            Dom4j.walkAttributesRecursive(layoutElement, (element, attribute) -> {
                String attributeValue = attribute.getValue();
                if (StringUtils.isNotEmpty(attributeValue) && attributeValue.startsWith("${") && attributeValue.endsWith("}")) {
                    String paramKey = attributeValue.substring(2, attributeValue.length() - 1);
                    String assignedValue = assignedParams.get(paramKey);
                    if (assignedValue == null) {
                        throw new RuntimeException("Unable to find value of assign param: " + paramKey);
                    }
                    attribute.setValue(assignedValue);
                }
            });
        }
    }
}
Also used : ThemeConstants(io.jmix.ui.theme.ThemeConstants) ThemeConstantsManager(io.jmix.ui.theme.ThemeConstantsManager) HashMap(java.util.HashMap) Element(org.dom4j.Element)

Aggregations

ThemeConstants (io.jmix.ui.theme.ThemeConstants)5 ThemeConstantsManager (io.jmix.ui.theme.ThemeConstantsManager)5 Messages (io.jmix.core.Messages)2 Notifications (io.jmix.ui.Notifications)2 Strings (com.google.common.base.Strings)1 Security (com.haulmont.cuba.core.global.Security)1 WindowManager (com.haulmont.cuba.gui.WindowManager)1 OpenType (com.haulmont.cuba.gui.WindowManager.OpenType)1 Window (com.haulmont.cuba.gui.components.Window)1 KeyCode (com.vaadin.event.ShortcutAction.KeyCode)1 Resource (com.vaadin.server.Resource)1 Sizeable (com.vaadin.server.Sizeable)1 VaadinSession (com.vaadin.server.VaadinSession)1 com.vaadin.ui (com.vaadin.ui)1 AbstractComponent (com.vaadin.ui.AbstractComponent)1 Component (com.vaadin.ui.Component)1 CssLayout (com.vaadin.ui.CssLayout)1 Property (com.vaadin.v7.data.Property)1 Converter (com.vaadin.v7.data.util.converter.Converter)1 ConverterUtil (com.vaadin.v7.data.util.converter.ConverterUtil)1