CCM NG: PageModel Admin UI for Vaadin Prototype

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5155 8810af33-2d31-482b-a856-94f89814c4df
ccm-docs
jensp 2017-12-03 18:52:14 +00:00
parent ddb8664356
commit 1d2c424e95
16 changed files with 393 additions and 58 deletions

View File

@ -73,20 +73,23 @@ public class CategoryTreeComponentEditor
showFullTreeCheckBox = new CheckBox(textsUtil
.getText(
"cms.ui.pagemodel.category_tree_component_form.show_full_tree.label"));
addComponent(showFullTreeCheckBox);
}
@Override
protected void initWidgets() {
final CategoryTreeComponent component = getComponentModel();
showFullTreeCheckBox.setValue(component.isShowFullTree());
if (component != null) {
showFullTreeCheckBox.setValue(component.isShowFullTree());
}
}
@Override
protected boolean validate() {
//Nothing to validate here
return true;
}
@ -98,9 +101,9 @@ public class CategoryTreeComponentEditor
@Override
protected void updateComponentModel() {
final CategoryTreeComponent component = getComponentModel();
component.setShowFullTree(showFullTreeCheckBox.getValue());
}

View File

@ -92,6 +92,7 @@ public class ItemListComponentEditor
pageSizeField = new TextField(textsUtil
.getText("cms.ui.pagemodel.itemlist_component_form.page_size.label"));
pageSizeField.setValue("25");
addComponent(pageSizeField);
listOrderArea = new TextArea(textsUtil
@ -106,9 +107,13 @@ public class ItemListComponentEditor
if (itemListComponent != null) {
descendingCheckBox.setValue(itemListComponent.isDescending());
limitToTypeField.setValue(itemListComponent.getLimitToType());
pageSizeField
.setValue(Integer.toString(itemListComponent.getPageSize()));
listOrderArea.setValue(String.join("\n",
itemListComponent.getListOrder()));
}
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override

View File

@ -128,7 +128,7 @@ public abstract class AbstractPageModelComponentEditor<T extends ComponentModel>
.getText("ui.admin.pagemodels.components.key.error.not_empty")));
return;
}
if (!validate()) {
return;
}
@ -137,14 +137,16 @@ public abstract class AbstractPageModelComponentEditor<T extends ComponentModel>
componentModel = createComponentModel();
componentModel.setKey(key);
updateComponentModel();
controller.getPageModelManager().addComponentModel(pageModel,
componentModel);
controller
.getPageModelsController()
.addComponentModel(pageModel, componentModel);
} else {
componentModel.setKey(key);
updateComponentModel();
controller.getComponentModelRepository().save(componentModel);
}
controller.refreshComponentModels();
close();
}
protected PageModelComponentEditorController getController() {
@ -167,7 +169,7 @@ public abstract class AbstractPageModelComponentEditor<T extends ComponentModel>
protected abstract void initWidgets();
/**
*
*
* @return {@code true} if form is validate, {@code false} if not.
*/
protected abstract boolean validate();

View File

@ -31,26 +31,47 @@ import javax.inject.Inject;
*/
@RequestScoped
public class PageModelComponentEditorController {
@Inject
private ComponentModelRepository componentModelRepository;
@Inject
private GlobalizationHelper globalizationHelper;
@Inject
private PageModelsController pageModelsController;
@Inject
private PageModelManager pageModelManager;
@Inject
private PageModelsTableDataProvider pageModelsTableDataProvider;
@Inject
private PageModelComponentModelsTableDataProvider pageModelComponentModelsTableDataProvider;
public ComponentModelRepository getComponentModelRepository() {
return componentModelRepository;
}
public GlobalizationHelper getGlobalizationHelper() {
return globalizationHelper;
}
public PageModelsController getPageModelsController() {
return pageModelsController;
}
public PageModelManager getPageModelManager() {
return pageModelManager;
}
public void refreshPageModelsTable() {
pageModelsTableDataProvider.refreshAll();
}
public void refreshComponentModels() {
pageModelComponentModelsTableDataProvider.refreshAll();
}
}

View File

@ -21,9 +21,12 @@ package org.libreccm.admin.ui;
import com.vaadin.cdi.ViewScoped;
import com.vaadin.data.provider.AbstractDataProvider;
import com.vaadin.data.provider.Query;
import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.l10n.LocalizedTextsUtil;
import org.libreccm.pagemodel.ComponentModels;
import org.libreccm.pagemodel.PageModelComponentModel;
import java.util.Optional;
import java.util.stream.Stream;
import javax.inject.Inject;
@ -41,6 +44,9 @@ class PageModelComponentModelTypesDataProvider
@Inject
private ComponentModels componentModels;
@Inject
private GlobalizationHelper globalizationHelper;
@Override
public boolean isInMemory() {
return true;
@ -49,18 +55,50 @@ class PageModelComponentModelTypesDataProvider
@Override
public int size(final Query<PageModelComponentModel, String> query) {
return componentModels
.findAvailableComponentModels()
.size();
final Optional<String> filter = query.getFilter();
if (filter.isPresent()) {
return (int) componentModels
.findAvailableComponentModels()
.stream()
.filter(model -> filterModels(model, filter.get()))
.count();
} else {
return componentModels
.findAvailableComponentModels()
.size();
}
}
@Override
public Stream<PageModelComponentModel> fetch(
final Query<PageModelComponentModel, String> query) {
return componentModels
.findAvailableComponentModels()
.stream();
final Optional<String> filter = query.getFilter();
if (filter.isPresent()) {
return componentModels
.findAvailableComponentModels()
.stream()
.filter(model -> filterModels(model, filter.get()));
} else {
return componentModels
.findAvailableComponentModels()
.stream();
}
}
private boolean filterModels(final PageModelComponentModel model,
final String filter) {
final LocalizedTextsUtil textsUtil = globalizationHelper
.getLocalizedTextsUtil(model.descBundle());
final String title = textsUtil
.getText(textsUtil.getText(model.titleKey()));
return title.startsWith(filter);
}
}

View File

@ -29,6 +29,10 @@ import java.util.Objects;
import java.util.stream.Stream;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import javax.transaction.Transactional;
/**
@ -41,6 +45,9 @@ class PageModelComponentModelsTableDataProvider
private static final long serialVersionUID = -8880329002442808769L;
@Inject
private EntityManager entityManager;
@Inject
private PageModelRepository pageModelRepo;
@ -60,8 +67,16 @@ class PageModelComponentModelsTableDataProvider
protected Stream<ComponentModel> fetchFromBackEnd(
final Query<ComponentModel, String> query) {
return retrievePageModel()
.getComponents()
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
final CriteriaQuery<ComponentModel> criteriaQuery = builder
.createQuery(ComponentModel.class);
final Root<ComponentModel> from = criteriaQuery
.from(ComponentModel.class);
criteriaQuery.where(builder.equal(from.get("pageModel"), pageModel));
return entityManager
.createQuery(criteriaQuery)
.getResultList()
.stream();
}
@ -69,7 +84,19 @@ class PageModelComponentModelsTableDataProvider
@Transactional(Transactional.TxType.REQUIRED)
protected int sizeInBackEnd(final Query<ComponentModel, String> query) {
return retrievePageModel().getComponents().size();
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
final CriteriaQuery<Long> criteriaQuery = builder
.createQuery(Long.class);
final Root<ComponentModel> from = criteriaQuery
.from(ComponentModel.class);
criteriaQuery.select(builder.count(from));
criteriaQuery.where(builder.equal(from.get("pageModel"), pageModel));
return entityManager
.createQuery(criteriaQuery)
.getSingleResult()
.intValue();
// return retrievePageModel().getComponents().size();
}
private PageModel retrievePageModel() {

View File

@ -23,18 +23,19 @@ import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.icons.VaadinIcons;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.NativeSelect;
import com.vaadin.ui.Notification;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.components.grid.HeaderCell;
import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.themes.ValoTheme;
import org.libreccm.configuration.ConfigurationManager;
import org.libreccm.core.UnexpectedErrorException;
import org.libreccm.l10n.GlobalizationHelper;
@ -68,7 +69,8 @@ class PageModelDetails extends Window {
private final CcmApplication application;
private final PageModel pageModel;
private final NativeSelect<PageModelComponentModel> componentModelTypeSelect;
// private final NativeSelect<PageModelComponentModel> componentModelTypeSelect;
private final ComboBox<PageModelComponentModel> componentModelTypeSelect;
PageModelDetails(final PageModel pageModel,
final CcmApplication application,
@ -121,6 +123,8 @@ class PageModelDetails extends Window {
editPropertiesButton.setIcon(VaadinIcons.EDIT);
editPropertiesButton
.addClickListener(this::editBasicPropertiesButtonClicked);
final HorizontalLayout buttonsLayout = new HorizontalLayout(
editPropertiesButton);
final PageModelsController pageModelsController = controller
.getPageModelsController();
@ -154,16 +158,32 @@ class PageModelDetails extends Window {
.setId(COL_DEL);
componentsModelGrid.setWidth("100%");
componentModelTypeSelect = new NativeSelect<>(
textsUtil.getText("ui.admin.pagemodels.add_new_component.type"),
pageModelsController.getComponentModelTypesDataProvider());
// componentModelTypeSelect = new NativeSelect<>(
// textsUtil.getText("ui.admin.pagemodels.add_new_component.type"),
// pageModelsController.getComponentModelTypesDataProvider());
componentModelTypeSelect = new ComboBox<>();
componentModelTypeSelect.setTextInputAllowed(false);
componentModelTypeSelect.setEmptySelectionAllowed(false);
componentModelTypeSelect.setDescription(textsUtil
.getText("ui.admin.pagemodels.add_new_component.type"));
componentModelTypeSelect.setDataProvider(pageModelsController
.getComponentModelTypesDataProvider());
componentModelTypeSelect
.setItemCaptionGenerator(this::generateComponentModelTypeCaption);
componentModelTypeSelect.addStyleName(ValoTheme.COMBOBOX_TINY);
final Button addComponentModelButton = new Button(textsUtil
.getText("ui.admin.pagemodels.add_new_component.submit"));
addComponentModelButton.addStyleName(ValoTheme.BUTTON_TINY);
addComponentModelButton.setIcon(VaadinIcons.PLUS_CIRCLE_O);
addComponentModelButton
.addClickListener(this::addComponentButtonClicked);
// final Panel componentsPanel = new Panel(
// "Components",
// new VerticalLayout(new HorizontalLayout(
// new FormLayout(componentModelTypeSelect),
// addComponentModelButton),
// componentsModelGrid));
final HeaderRow headerRow = componentsModelGrid.prependHeaderRow();
final HeaderCell headerCell = headerRow.join(COL_KEY,
COL_TYPE,
@ -171,8 +191,12 @@ class PageModelDetails extends Window {
COL_DEL);
headerCell.setComponent(new HorizontalLayout(componentModelTypeSelect,
addComponentModelButton));
super.setContent(new VerticalLayout(propertiesSheetLayout));
super.setContent(new VerticalLayout(propertiesSheetLayout,
buttonsLayout,
componentsModelGrid));
// super.setContent(new VerticalLayout(propertiesSheetLayout,
// buttonsLayout,
// componentsPanel));
}
@SuppressWarnings("unchecked")
@ -222,6 +246,7 @@ class PageModelDetails extends Window {
| InvocationTargetException ex) {
throw new UnexpectedErrorException(ex);
}
editor.initWidgets();
editor.setModal(true);
editor.setWidth("50%");
@ -270,6 +295,7 @@ class PageModelDetails extends Window {
final Button editButton = new Button(textsUtil
.getText("ui.admin.pagemodels.components.edit"));
editButton.setIcon(VaadinIcons.EDIT);
editButton.addStyleName(ValoTheme.BUTTON_TINY);
editButton.addClickListener(event -> editComponentModel(componentModel));
return editButton;
@ -315,8 +341,8 @@ class PageModelDetails extends Window {
try {
constructor = editorClass
.getDeclaredConstructor(PageModel.class,
ComponentModel.class,
PageModelComponentEditorController.class
componentModelInfo.get().modelClass(),
PageModelComponentEditorController.class
);
} catch (NoSuchMethodException ex) {
throw new UnexpectedErrorException(ex);
@ -333,6 +359,7 @@ class PageModelDetails extends Window {
| InvocationTargetException ex) {
throw new UnexpectedErrorException(ex);
}
editor.initWidgets();
editor.setModal(true);
editor.setWidth("50%");
@ -357,7 +384,9 @@ class PageModelDetails extends Window {
final Button deleteButton = new Button(textsUtil
.getText("ui.admin.pagemodels.components.delete"));
deleteButton.setIcon(VaadinIcons.EDIT);
deleteButton.setIcon(VaadinIcons.MINUS_CIRCLE_O);
deleteButton.addStyleNames(ValoTheme.BUTTON_TINY,
ValoTheme.BUTTON_DANGER);
deleteButton.addClickListener(event -> {
final ConfirmDialog confirmDialog = new ConfirmDialog(() -> {

View File

@ -24,11 +24,13 @@ import com.vaadin.server.UserError;
import com.vaadin.ui.Button;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Panel;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.themes.ValoTheme;
import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.l10n.LocalizedString;
import org.libreccm.l10n.LocalizedTextsUtil;
import org.libreccm.l10n.ui.LocalizedStringEditor;
import org.libreccm.pagemodel.PageModel;
@ -36,6 +38,9 @@ import org.libreccm.pagemodel.PageModelManager;
import org.libreccm.pagemodel.PageModelRepository;
import org.libreccm.web.CcmApplication;
import java.util.Locale;
import java.util.Map;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
@ -88,18 +93,39 @@ class PageModelForm extends Window {
nameField = new TextField(textsUtil.getText("ui.admin.pagemodels.name"));
nameField.setRequiredIndicatorVisible(true);
titleEditor = new LocalizedStringEditor(pageModel.getTitle(),
globalizationHelper);
titleEditor.setCaption(textsUtil.getText("ui.admin.pagemodels.title"));
if (pageModel == null) {
titleEditor = new LocalizedStringEditor(globalizationHelper);
} else {
titleEditor = new LocalizedStringEditor(pageModel.getTitle(),
globalizationHelper);
}
// titleEditor.setCaption(textsUtil.getText("ui.admin.pagemodels.title"));
titleEditor.setHeight("10em");
final Panel titlePanel = new Panel(
textsUtil.getText("ui.admin.pagemodels.title"),
titleEditor);
descriptionEditor = new LocalizedStringEditor(
pageModel.getDescription(), globalizationHelper);
descriptionEditor
.setCaption(textsUtil.getText("ui.admin.pagemodels.desc"));
if (pageModel == null) {
descriptionEditor = new LocalizedStringEditor(globalizationHelper);
} else {
descriptionEditor = new LocalizedStringEditor(
pageModel.getDescription(), globalizationHelper);
}
// descriptionEditor
// .setCaption(textsUtil.getText("ui.admin.pagemodels.desc"));
descriptionEditor.setHeight("10em");
final Panel descPanel = new Panel(
textsUtil.getText("ui.admin.pagemodels.desc"),
descriptionEditor);
final FormLayout formLayout = new FormLayout(nameField,
titleEditor,
descriptionEditor);
if (pageModel == null) {
setCaption(textsUtil.getText("ui.admin.pagemodels.caption.new"));
} else {
setCaption(textsUtil.getText("ui.admin.pagemodels.caption.edit",
new String[]{pageModel.getName()}));
}
final FormLayout formLayout = new FormLayout(nameField);
final Button saveButton = new Button(textsUtil
.getText("ui.admin.pagemodels.buttons.save"));
@ -113,7 +139,10 @@ class PageModelForm extends Window {
cancelButton);
final VerticalLayout layout = new VerticalLayout(formLayout,
titlePanel,
descPanel,
buttonsLayout);
layout.setMargin(true);
setContent(layout);
}
@ -140,15 +169,30 @@ class PageModelForm extends Window {
}
if (pageModel == null) {
pageModel = pageModelManager.createPageModel(name, application);
final LocalizedString title = titleEditor.getLocalizedString();
for (final Map.Entry<Locale, String> entry : title.getValues()
.entrySet()) {
pageModel.getTitle().addValue(entry.getKey(), entry.getValue());
}
final LocalizedString desc = descriptionEditor.getLocalizedString();
for (final Map.Entry<Locale, String> entry : desc.getValues()
.entrySet()) {
pageModel.getDescription().addValue(entry.getKey(),
entry.getValue());
}
}
pageModel.setName(name);
final PageModelRepository pageModelRepo = pageModelsController
.getPageModelRepo();
pageModelRepo.save(pageModel);
controller
.getPageModelsController()
.getPageModelsTableDataProvider()
.refreshAll();
close();
}

View File

@ -134,6 +134,22 @@ class PageModelsController implements Serializable {
pageModelsTableDataProvider.refreshAll();
}
@Transactional(Transactional.TxType.REQUIRED)
protected void addComponentModel(final PageModel pageModel,
final ComponentModel componentModel) {
Objects.requireNonNull(pageModel);
Objects.requireNonNull(componentModel);
final PageModel toPageModel = pageModelRepo
.findById(pageModel.getPageModelId())
.orElseThrow(() -> new IllegalArgumentException(String
.format("No PageModel with ID %d in the database.",
pageModel.getPageModelId())));
pageModelManager.addComponentModel(toPageModel, componentModel);
}
@Transactional(Transactional.TxType.REQUIRED)
protected void removeComponentModel(final PageModel pageModel,
final ComponentModel componentModel) {

View File

@ -109,6 +109,7 @@ class PageModelsTab extends CustomComponent {
final Button addPageModelButton = new Button(localizedTextsUtil
.getText("ui.admin.pagemodels.create_new"));
addPageModelButton.addStyleName(ValoTheme.BUTTON_TINY);
addPageModelButton.setIcon(VaadinIcons.PLUS_CIRCLE_O);
addPageModelButton.addClickListener(event -> {
final CcmApplication application
@ -118,7 +119,7 @@ class PageModelsTab extends CustomComponent {
adminViewController, application);
pageModelForm.setModal(true);
pageModelForm.setWidth("40%");
pageModelForm.setHeight("30%");
pageModelForm.setHeight("60%");
UI.getCurrent().addWindow(pageModelForm);
});

View File

@ -33,9 +33,11 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Enumeration;
import java.util.List;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.stream.Collectors;
/**
* Provides the locale which has been selected based on the available languages
@ -130,7 +132,7 @@ public class GlobalizationHelper implements Serializable {
}
public Locale getNegotiatedLocale() {
final KernelConfig kernelConfig = confManager.findConfiguration(
KernelConfig.class);
@ -139,10 +141,10 @@ public class GlobalizationHelper implements Serializable {
final Locale selectedLocale = getSelectedLocale();
if (selectedLocale == null
|| !kernelConfig.hasLanguage(selectedLocale.getLanguage())) {
final Enumeration<Locale> acceptedLocales = request.getLocales();
while (acceptedLocales.hasMoreElements()) {
final Locale current = acceptedLocales.nextElement();
if (kernelConfig.hasLanguage(current.getLanguage())) {
preferred = new Locale(current.getLanguage());
@ -185,6 +187,21 @@ public class GlobalizationHelper implements Serializable {
return selected;
}
public List<Locale> getAvailableLocales() {
final KernelConfig kernelConfig = confManager
.findConfiguration(KernelConfig.class);
return kernelConfig
.getSupportedLanguages()
.stream()
.map(lang -> new Locale(lang))
.sorted((locale1, locale2) -> {
return locale1.toString().compareTo(locale2.toString());
})
.collect(Collectors.toList());
}
public void setSelectedLocale(final Locale locale) {
final HttpSession session = request.getSession(true);

View File

@ -1,8 +1,18 @@
package org.libreccm.l10n.ui;
import com.vaadin.data.provider.ListDataProvider;
import com.vaadin.data.provider.QuerySortOrder;
import com.vaadin.icons.VaadinIcons;
import com.vaadin.server.SerializableToIntFunction;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.components.grid.HeaderCell;
import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.themes.ValoTheme;
import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.l10n.LocalizedString;
@ -10,6 +20,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/*
@ -74,7 +85,39 @@ public class LocalizedStringEditor extends CustomComponent {
grid.addColumn(LocalizedStringValue::getLocaleLabel)
.setCaption("Language")
.setId(COL_LOCALE);
grid.addColumn(LocalizedStringValue::getValue)
.setCaption("Value")
.setId(COL_VALUE);
grid.addComponentColumn(this::buildEditButton)
.setCaption("Edit")
.setId(COL_EDIT);
grid.addComponentColumn(this::buildDeleteButton)
.setCaption("Delete")
.setId(COL_REMOVE);
final ComboBox<Locale> localeSelect = new ComboBox<>();
localeSelect.setDataProvider(this::fetchAvailableLocales,
this::countAvailableLocales);
localeSelect.setDescription("Select locale to add");
localeSelect.addStyleName(ValoTheme.COMBOBOX_TINY);
localeSelect.setEmptySelectionAllowed(false);
localeSelect.setTextInputAllowed(false);
localeSelect.setItemCaptionGenerator(Locale::toString);
final Button addButton = new Button("Add value");
addButton.addStyleName(ValoTheme.BUTTON_TINY);
addButton.setIcon(VaadinIcons.PLUS_CIRCLE_O);
addButton.addClickListener(event -> {
});
final HeaderRow headerRow = grid.prependHeaderRow();
final HeaderCell headerCell = headerRow.join(COL_LOCALE,
COL_VALUE,
COL_EDIT,
COL_REMOVE);
headerCell.setComponent(new HorizontalLayout(localeSelect, addButton));
localizedString = new LocalizedString();
super.setCompositionRoot(grid);
}
public LocalizedStringEditor(final LocalizedString localizedString,
@ -90,6 +133,7 @@ public class LocalizedStringEditor extends CustomComponent {
final GlobalizationHelper globalizationHelper) {
this(globalizationHelper);
this.multiline = multiline;
localizedString = new LocalizedString();
}
public LocalizedStringEditor(final LocalizedString localizedString,
@ -116,6 +160,58 @@ public class LocalizedStringEditor extends CustomComponent {
this.localizedString = localizedString;
}
private Stream<Locale> fetchAvailableLocales(final String filter,
final int offset,
final int limit) {
final List<Locale> values = globalizationHelper
.getAvailableLocales()
.stream()
.filter(locale -> localizedString.hasValue(locale))
.sorted((locale1, locale2) -> {
return locale1.toString().compareTo(locale2.toString());
})
.collect(Collectors.toList());
if (values.size() > limit) {
return values.subList(offset, offset + limit).stream();
} else {
return values.stream();
}
}
private int countAvailableLocales(final String value) {
return (int) globalizationHelper
.getAvailableLocales()
.stream()
.filter(locale -> localizedString.hasValue(locale))
.count();
}
private Component buildEditButton(final LocalizedStringValue value) {
final Button button = new Button("Edit");
button.setIcon(VaadinIcons.EDIT);
button.addStyleName(ValoTheme.BUTTON_TINY);
button.addClickListener(event -> {
});
return button;
}
private Component buildDeleteButton(final LocalizedStringValue value) {
final Button button = new Button("Edit");
button.setIcon(VaadinIcons.MINUS_CIRCLE_O);
button.addStyleNames(ValoTheme.BUTTON_TINY,
ValoTheme.BUTTON_DANGER);
button.addClickListener(event -> {
});
return button;
}
private class LocalizedStringValue {
private Locale locale;
@ -176,11 +272,19 @@ public class LocalizedStringEditor extends CustomComponent {
.compareTo(Objects.toString(locale2));
});
return locales
.subList(offset, limit)
.stream()
.map(locale -> new LocalizedStringValue(
locale, localizedString.getValue(locale)));
if (locales.size() > limit) {
return locales
.subList(offset, limit)
.stream()
.map(locale -> new LocalizedStringValue(
locale, localizedString.getValue(locale)));
} else {
return locales
.subList(offset, locales.size())
.stream()
.map(locale -> new LocalizedStringValue(
locale, localizedString.getValue(locale)));
}
}
}

View File

@ -690,3 +690,10 @@ ui.admin.pagemodels.table.columns.headers.islive=Is live?
ui.admin.pagemodels.select_application=Please select an application
ui.admin.pagemodels.table.columns.edit.label=Edit
ui.admin.pagemodels.table.columns.delete.label=Delete
ui.admin.pagemodels.edit_basic_properties=Edit
ui.admin.pagemodels.components.save=Save
ui.admin.pagemodels.components.cancel=Cancel
ui.admin.pagemodels.buttons.save=Save
ui.admin.pagemodels.buttons.cancel=Cancel
ui.admin.pagemodels.caption.new=Create new PageModel
ui.admin.pagemodels.caption.edit=Edit PageModel {0}

View File

@ -694,3 +694,10 @@ ui.admin.pagemodels.table.columns.headers.islive=Ist publiziert?
ui.admin.pagemodels.select_application=Bitte eine Applikation ausw\u00e4hlen
ui.admin.pagemodels.table.columns.edit.label=Bearbeiten
ui.admin.pagemodels.table.columns.delete.label=L\u00f6schen
ui.admin.pagemodels.edit_basic_properties=Bearbeiten
ui.admin.pagemodels.components.save=Speichern
ui.admin.pagemodels.components.cancel=Abbrechen
ui.admin.pagemodels.buttons.save=Speichern
ui.admin.pagemodels.buttons.cancel=Abbrechen
ui.admin.pagemodels.caption.new=Neues PageModel erstellen
ui.admin.pagemodels.caption.edit=PageModel {0} bearbeiten

View File

@ -687,3 +687,10 @@ ui.admin.pagemodels.table.columns.headers.islive=Is live?
ui.admin.pagemodels.select_application=Please select an application
ui.admin.pagemodels.table.columns.edit.label=Edit
ui.admin.pagemodels.table.columns.delete.label=Delete
ui.admin.pagemodels.edit_basic_properties=Edit
ui.admin.pagemodels.components.save=Save
ui.admin.pagemodels.components.cancel=Cancel
ui.admin.pagemodels.buttons.save=Save
ui.admin.pagemodels.buttons.cancel=Cancel
ui.admin.pagemodels.caption.new=Create new PageModel
ui.admin.pagemodels.caption.edit=Edit PageModel {0}

View File

@ -678,3 +678,10 @@ ui.admin.pagemodels.table.columns.headers.islive=Is live?
ui.admin.pagemodels.select_application=Please select an application
ui.admin.pagemodels.table.columns.edit.label=Edit
ui.admin.pagemodels.table.columns.delete.label=Delete
ui.admin.pagemodels.edit_basic_properties=Edit
ui.admin.pagemodels.components.save=Save
ui.admin.pagemodels.components.cancel=Cancel
ui.admin.pagemodels.buttons.save=Save
ui.admin.pagemodels.buttons.cancel=Cancel
ui.admin.pagemodels.caption.new=Create new PageModel
ui.admin.pagemodels.caption.edit=Edit PageModel {0}