CCM NG: Code cleanup Vaadin prototype

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5091 8810af33-2d31-482b-a856-94f89814c4df

Former-commit-id: a971ddc7b1
pull/2/head
jensp 2017-10-28 15:15:14 +00:00
parent 2ea61d0dea
commit 4a7b2bb85c
20 changed files with 447 additions and 667 deletions

View File

@ -21,18 +21,14 @@ package org.librecms.ui;
import com.vaadin.icons.VaadinIcons; import com.vaadin.icons.VaadinIcons;
import com.vaadin.ui.Button; import com.vaadin.ui.Button;
import com.vaadin.ui.Component; import com.vaadin.ui.Component;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.Grid; import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label; import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
import com.vaadin.ui.Window;
import com.vaadin.ui.components.grid.HeaderCell; import com.vaadin.ui.components.grid.HeaderCell;
import com.vaadin.ui.components.grid.HeaderRow; import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.themes.ValoTheme; import com.vaadin.ui.themes.ValoTheme;
import org.libreccm.security.PermissionChecker; import org.libreccm.security.PermissionChecker;
import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.Folder;
import org.librecms.contentsection.privileges.AdminPrivileges; import org.librecms.contentsection.privileges.AdminPrivileges;
import org.librecms.contentsection.privileges.ItemPrivileges; import org.librecms.contentsection.privileges.ItemPrivileges;

View File

@ -19,6 +19,7 @@
package org.libreccm.admin.ui; package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants; import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.cdi.CDIView; import com.vaadin.cdi.CDIView;
import com.vaadin.navigator.View; import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener; import com.vaadin.navigator.ViewChangeListener;
@ -27,13 +28,11 @@ import com.vaadin.ui.CssLayout;
import com.vaadin.ui.CustomComponent; import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.TabSheet; import com.vaadin.ui.TabSheet;
import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.VerticalLayout;
import org.apache.shiro.subject.Subject;
import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.security.*;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.inject.Inject; import javax.inject.Inject;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import java.util.ResourceBundle; import java.util.ResourceBundle;
/** /**
@ -48,52 +47,11 @@ public class AdminView extends CustomComponent implements View {
public static final String VIEWNAME = "admin"; public static final String VIEWNAME = "admin";
@Inject
private JpqlConsoleController jpqlConsoleController;
@Inject
private Subject subject;
@Inject
private PermissionChecker permissionChecker;
@Inject
private GlobalizationHelper globalizationHelper;
@Inject
private UserRepository userRepo;
@Inject
private UserManager userManager;
@Inject
private GroupRepository groupRepo;
@Inject
private GroupManager groupManager;
@Inject
private RoleRepository roleRepo;
@Inject
private RoleManager roleManager;
@Inject
private UsersTableDataProvider usersTableDataProvider;
@Inject
private GroupsTableDataProvider groupsTableDataProvider;
@Inject
private RolesTableDataProvider rolesTableDataProvider;
@Inject
private ConfigurationsTabController configurationsTabController;
private ResourceBundle bundle; private ResourceBundle bundle;
private final AdminViewController controller;
private final TabSheet tabSheet; private final TabSheet tabSheet;
// private final Grid<User> usersTable;
private final TabSheet.Tab tabUsersGroupsRoles; private final TabSheet.Tab tabUsersGroupsRoles;
private final UsersGroupsRolesTab usersGroupsRoles; private final UsersGroupsRolesTab usersGroupsRoles;
@ -101,19 +59,28 @@ public class AdminView extends CustomComponent implements View {
private final ConfigurationTab configurationTab; private final ConfigurationTab configurationTab;
public AdminView() { @Inject
protected AdminView(final AdminViewController controller) {
this.controller = controller;
bundle = ResourceBundle
.getBundle(AdminUiConstants.ADMIN_BUNDLE,
controller.getGlobalizationHelper().getNegotiatedLocale());
tabSheet = new TabSheet(); tabSheet = new TabSheet();
usersGroupsRoles = new UsersGroupsRolesTab(this); usersGroupsRoles = new UsersGroupsRolesTab(controller
tabUsersGroupsRoles = tabSheet.addTab(usersGroupsRoles, .getUsersGroupsRolesController());
"Users/Groups/Roles"); tabUsersGroupsRoles = tabSheet
.addTab(usersGroupsRoles,
bundle.getString("ui.admin.tab.users_groups_roles.title"));
final ServletContext servletContext = VaadinServlet final ServletContext servletContext = VaadinServlet
.getCurrent() .getCurrent()
.getServletContext(); .getServletContext();
if ("true".equals(servletContext.getInitParameter("ccm.develmode"))) { if ("true".equals(servletContext.getInitParameter("ccm.develmode"))) {
jpqlConsole = new JpqlConsole(this); jpqlConsole = new JpqlConsole(controller.getJpqlConsoleController());
tabSheet.addTab(jpqlConsole, "JPQL Console"); tabSheet.addTab(jpqlConsole, "JPQL Console");
} else { } else {
jpqlConsole = null; jpqlConsole = null;
@ -122,42 +89,7 @@ public class AdminView extends CustomComponent implements View {
configurationTab = new ConfigurationTab(); configurationTab = new ConfigurationTab();
tabSheet.addTab(configurationTab, "Configuration"); tabSheet.addTab(configurationTab, "Configuration");
// final GridLayout header = new GridLayout(5, 1);
// header.setWidth("100%");
// header.addStyleName("libreccm-header");
//
// final Label headerInfoLine = new Label("LibreCCM");
// headerInfoLine.setId("libreccm-headerinfoline");
// header.addComponent(headerInfoLine, 3, 0, 4, 0);
// header.setComponentAlignment(headerInfoLine, Alignment.TOP_RIGHT);
//
// final String logoPath;
// switch (servletContext.getInitParameter("ccm.distribution")
// .toLowerCase()) {
// case "libreccm":
// logoPath = "/themes/libreccm-default/images/libreccm.png";
// break;
// case "librecms":
// logoPath = "/themes/libreccm-default/images/librecms.png";
// break;
// case "aplaws":
// logoPath = "/themes/libreccm-default/images/aplaws.png";
// break;
// case "scientificcms":
// logoPath = "/themes/libreccm-default/images/scientificcms.png";
// break;
// default:
// logoPath = "/themes/libreccm-default/images/libreccm.png";
// break;
// }
//
// final Image logo = new Image(null, new ClassResource(logoPath));
// logo.setId("libreccm-logo");
// logo.addStyleName("libreccm-logo");
// header.addComponent(logo, 0, 0);
// header.setComponentAlignment(logo, Alignment.MIDDLE_LEFT);
final CssLayout footer = new CssLayout(); final CssLayout footer = new CssLayout();
// footer.setWidth("100%");
footer.setHeight("5em"); footer.setHeight("5em");
final VerticalLayout viewLayout = new VerticalLayout(new Header(), final VerticalLayout viewLayout = new VerticalLayout(new Header(),
@ -169,64 +101,7 @@ public class AdminView extends CustomComponent implements View {
super.setCompositionRoot(viewLayout); super.setCompositionRoot(viewLayout);
} }
@PostConstruct
public void postConstruct() {
bundle = ResourceBundle
.getBundle(AdminUiConstants.ADMIN_BUNDLE,
globalizationHelper.getNegotiatedLocale());
usersGroupsRoles.setUsersTableDataProvider(usersTableDataProvider);
usersGroupsRoles.setGroupsTableDataProvider(groupsTableDataProvider);
usersGroupsRoles.setRolesTableDataProvider(rolesTableDataProvider);
tabUsersGroupsRoles.setCaption(bundle
.getString("ui.admin.tab.users_groups_roles.title"));
usersGroupsRoles.localize();
configurationTab.init(configurationsTabController);
}
@Override
public void enter(final ViewChangeListener.ViewChangeEvent event) {
// usersGroupsRoles.setUsers(userRepo.findAll());
}
protected GlobalizationHelper getGlobalizationHelper() {
return globalizationHelper;
}
protected JpqlConsoleController getJpqlConsoleController() {
return jpqlConsoleController;
}
protected ConfigurationsTabController getConfigurationsTabController() {
return configurationsTabController;
}
public UserRepository getUserRepository() {
return userRepo;
}
public UserManager getUserManager() {
return userManager;
}
public GroupRepository getGroupRepository() {
return groupRepo;
}
public GroupManager getGroupManager() {
return groupManager;
}
public RoleRepository getRoleRepository() {
return roleRepo;
}
public RoleManager getRoleManager() {
return roleManager;
}
} }

View File

@ -32,46 +32,36 @@ import javax.inject.Inject;
@ViewScoped @ViewScoped
class AdminViewController { class AdminViewController {
protected AdminViewController() { @Inject
super(); private ConfigurationsTabController confTabController;
}
@Inject @Inject
private GlobalizationHelper globalizationHelper; private GlobalizationHelper globalizationHelper;
@Inject
private GroupsController groupsController;
@Inject @Inject
private JpqlConsoleController jpqlConsoleController; private JpqlConsoleController jpqlConsoleController;
@Inject @Inject
private RolesManager rolesManager; private UsersGroupsRolesController usersGroupsRolesController;
@Inject protected AdminViewController() {
private UsersController usersController; super();
}
public ConfigurationsTabController getConfTabController() {
return confTabController;
}
protected GlobalizationHelper getGlobalizationHelper() { protected GlobalizationHelper getGlobalizationHelper() {
return globalizationHelper; return globalizationHelper;
} }
protected GroupsController getGroupsController() {
return groupsController;
}
protected JpqlConsoleController getJpqlConsoleController() { protected JpqlConsoleController getJpqlConsoleController() {
return jpqlConsoleController; return jpqlConsoleController;
} }
protected RolesManager getRolesManager() { protected UsersGroupsRolesController getUsersGroupsRolesController() {
return rolesManager; return usersGroupsRolesController;
} }
protected UsersController getUsersController() {
return usersController;
}
} }

View File

@ -19,17 +19,34 @@
package org.libreccm.admin.ui; package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants; import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.data.HasValue; import com.vaadin.data.HasValue;
import com.vaadin.icons.VaadinIcons; import com.vaadin.icons.VaadinIcons;
import com.vaadin.server.Page; import com.vaadin.server.Page;
import com.vaadin.server.UserError; import com.vaadin.server.UserError;
import com.vaadin.ui.*; import com.vaadin.ui.Button;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Notification;
import com.vaadin.ui.Panel;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.TextField;
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.HeaderCell;
import com.vaadin.ui.components.grid.HeaderRow; import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.renderers.ButtonRenderer; import com.vaadin.ui.renderers.ButtonRenderer;
import com.vaadin.ui.themes.ValoTheme; import com.vaadin.ui.themes.ValoTheme;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.security.*; import org.libreccm.security.Group;
import org.libreccm.security.GroupRepository;
import org.libreccm.security.Role;
import org.libreccm.security.RoleRepository;
import org.libreccm.security.User;
import org.libreccm.security.UserRepository;
import java.util.ResourceBundle; import java.util.ResourceBundle;
@ -37,7 +54,7 @@ import java.util.ResourceBundle;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class GroupDetails extends Window { class GroupDetails extends Window {
private static final long serialVersionUID = 4252189590984878037L; private static final long serialVersionUID = 4252189590984878037L;
@ -50,7 +67,6 @@ public class GroupDetails extends Window {
private static final String COL_ROLE_NAME = "role_name"; private static final String COL_ROLE_NAME = "role_name";
private static final String COL_ROLE_REMOVE = "remove"; private static final String COL_ROLE_REMOVE = "remove";
private final UsersGroupsRolesTab usersGroupsRoles;
private final Group group; private final Group group;
private final GroupRepository groupRepo; private final GroupRepository groupRepo;
@ -61,14 +77,12 @@ public class GroupDetails extends Window {
private Button editButton; private Button editButton;
private HorizontalLayout saveCancelButtons; private HorizontalLayout saveCancelButtons;
public GroupDetails(final Group group, protected GroupDetails(final Group group,
final UsersGroupsRolesTab usersGroupsRoles,
final GroupRepository groupRepo) { final GroupRepository groupRepo) {
super(String.format("Edit group %s", group.getName())); super(String.format("Edit group %s", group.getName()));
this.group = group; this.group = group;
this.usersGroupsRoles = usersGroupsRoles;
this.groupRepo = groupRepo; this.groupRepo = groupRepo;
addWidgets(); addWidgets();
@ -175,7 +189,6 @@ public class GroupDetails extends Window {
final UserSelector userSelector = new UserSelector( final UserSelector userSelector = new UserSelector(
"Select users to add to group", "Select users to add to group",
"Add selected users to group", "Add selected users to group",
usersGroupsRoles,
userRepo.findByGroup(group), userRepo.findByGroup(group),
(selectedUsers -> { (selectedUsers -> {
selectedUsers.forEach(user -> { selectedUsers.forEach(user -> {
@ -184,6 +197,9 @@ public class GroupDetails extends Window {
membersGrid.getDataProvider().refreshAll(); membersGrid.getDataProvider().refreshAll();
}); });
})); }));
userSelector.addCloseListener(closeEvent -> {
membersGrid.getDataProvider().refreshAll();
});
userSelector.center(); userSelector.center();
userSelector.setWidth("80%"); userSelector.setWidth("80%");
UI.getCurrent().addWindow(userSelector); UI.getCurrent().addWindow(userSelector);
@ -231,7 +247,6 @@ public class GroupDetails extends Window {
final RoleSelector roleSelector = new RoleSelector( final RoleSelector roleSelector = new RoleSelector(
"Select role(s) to add to group", "Select role(s) to add to group",
"Add selected role(s) to group", "Add selected role(s) to group",
usersGroupsRoles,
roleRepo.findByParty(group), roleRepo.findByParty(group),
(selectedRoles -> { (selectedRoles -> {
selectedRoles.forEach(role -> { selectedRoles.forEach(role -> {
@ -239,6 +254,9 @@ public class GroupDetails extends Window {
rolesGrid.getDataProvider().refreshAll(); rolesGrid.getDataProvider().refreshAll();
}); });
})); }));
roleSelector.addCloseListener(closeEvent -> {
rolesGrid.getDataProvider().refreshAll();
});
roleSelector.center(); roleSelector.center();
roleSelector.setWidth("80%"); roleSelector.setWidth("80%");
UI.getCurrent().addWindow(roleSelector); UI.getCurrent().addWindow(roleSelector);
@ -310,9 +328,6 @@ public class GroupDetails extends Window {
groupRepo.save(group); groupRepo.save(group);
dataHasChanged = false; dataHasChanged = false;
if (usersGroupsRoles != null) {
usersGroupsRoles.refreshGroups();
}
close(); close();
new Notification(notificationText, Notification.Type.TRAY_NOTIFICATION) new Notification(notificationText, Notification.Type.TRAY_NOTIFICATION)
.show(Page.getCurrent()); .show(Page.getCurrent());

View File

@ -19,12 +19,20 @@
package org.libreccm.admin.ui; package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants; import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.data.HasValue; import com.vaadin.data.HasValue;
import com.vaadin.server.Page; import com.vaadin.server.Page;
import com.vaadin.server.UserError; import com.vaadin.server.UserError;
import com.vaadin.ui.*; import com.vaadin.ui.Button;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Notification;
import com.vaadin.ui.Panel;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import org.libreccm.security.Group; import org.libreccm.security.Group;
import org.libreccm.security.GroupManager;
import org.libreccm.security.GroupRepository; import org.libreccm.security.GroupRepository;
import java.util.ResourceBundle; import java.util.ResourceBundle;
@ -33,44 +41,34 @@ import java.util.ResourceBundle;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class GroupEditor extends Window { class GroupEditor extends Window {
private static final long serialVersionUID = -5834095844674226692L; private static final long serialVersionUID = -5834095844674226692L;
private final UsersGroupsRolesTab usersGroupsRoles;
private final Group group; private final Group group;
private final GroupRepository groupRepo; private final GroupRepository groupRepo;
private final GroupManager groupManager;
private boolean dataHasChanged = false; private boolean dataHasChanged = false;
private TextField groupName; private TextField groupName;
public GroupEditor(final UsersGroupsRolesTab usersGroupsRoles, protected GroupEditor(final GroupRepository groupRepo) {
final GroupRepository groupRepo,
final GroupManager groupManager) {
super("Create new group"); super("Create new group");
this.usersGroupsRoles = usersGroupsRoles;
group = null; group = null;
this.groupRepo = groupRepo; this.groupRepo = groupRepo;
this.groupManager = groupManager;
addWidgets(); addWidgets();
} }
public GroupEditor(final Group group, public GroupEditor(final Group group,
final UsersGroupsRolesTab usersGroupsRoles, final GroupRepository groupRepo) {
final GroupRepository groupRepo,
final GroupManager groupManager) {
super(String.format("Edit group %s", group.getName())); super(String.format("Edit group %s", group.getName()));
this.group = group; this.group = group;
this.usersGroupsRoles = usersGroupsRoles;
this.groupRepo = groupRepo; this.groupRepo = groupRepo;
this.groupManager = groupManager;
addWidgets(); addWidgets();
} }
@ -179,9 +177,6 @@ public class GroupEditor extends Window {
groupRepo.save(currentGroup); groupRepo.save(currentGroup);
dataHasChanged = false; dataHasChanged = false;
if (usersGroupsRoles != null) {
usersGroupsRoles.refreshGroups();
}
close(); close();
new Notification(notificationText, Notification.Type.TRAY_NOTIFICATION) new Notification(notificationText, Notification.Type.TRAY_NOTIFICATION)
.show(Page.getCurrent()); .show(Page.getCurrent());

View File

@ -35,15 +35,14 @@ import java.util.List;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class GroupSelector extends Window { class GroupSelector extends Window {
private static final long serialVersionUID = -6227551833159691370L; private static final long serialVersionUID = -6227551833159691370L;
private static final String COL_NAME = "groupname"; private static final String COL_NAME = "groupname";
public GroupSelector(final String caption, protected GroupSelector(final String caption,
final String actionLabel, final String actionLabel,
final UsersGroupsRolesTab usersGroupsRoles,
final List<Group> excludedGroups, final List<Group> excludedGroups,
final GroupSelectionAction action) { final GroupSelectionAction action) {

View File

@ -19,8 +19,16 @@
package org.libreccm.admin.ui; package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants; import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.icons.VaadinIcons; import com.vaadin.icons.VaadinIcons;
import com.vaadin.ui.*; import com.vaadin.ui.Button;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
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.HeaderCell;
import com.vaadin.ui.components.grid.HeaderRow; import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.renderers.ButtonRenderer; import com.vaadin.ui.renderers.ButtonRenderer;
@ -35,7 +43,7 @@ import java.util.ResourceBundle;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class GroupsTable extends Grid<Group> { class GroupsTable extends Grid<Group> {
private static final long serialVersionUID = 2731047837262813862L; private static final long serialVersionUID = 2731047837262813862L;
@ -47,25 +55,25 @@ public class GroupsTable extends Grid<Group> {
private final Button clearFiltersButton; private final Button clearFiltersButton;
private final Button createGroupButton; private final Button createGroupButton;
public GroupsTable(final AdminView view, protected GroupsTable(final UsersGroupsRolesController controller) {
final UsersGroupsRolesTab usersGroupsRoles) {
super(); super();
super.setDataProvider(controller.getGroupsTableDataProvider());
final ResourceBundle bundle = ResourceBundle final ResourceBundle bundle = ResourceBundle
.getBundle(AdminUiConstants.ADMIN_BUNDLE, .getBundle(AdminUiConstants.ADMIN_BUNDLE,
UI.getCurrent().getLocale()); UI.getCurrent().getLocale());
addColumn(Group::getName) addColumn(Group::getName)
.setId(COL_NAME) .setId(COL_NAME)
.setCaption("Name"); .setCaption(bundle.getString("ui.admin.groups.table.name"));
addColumn(user -> bundle.getString("ui.admin.groups.table.edit"), addColumn(user -> bundle.getString("ui.admin.groups.table.edit"),
new ButtonRenderer<>(event -> { new ButtonRenderer<>(event -> {
// final GroupEditor groupEditor = new GroupEditor( // final GroupEditor groupEditor = new GroupEditor(
final GroupDetails groupDetails = new GroupDetails( final GroupDetails groupDetails = new GroupDetails(
event.getItem(), event.getItem(),
usersGroupsRoles, controller.getGroupRepository());
view.getGroupRepository());
groupDetails.center(); groupDetails.center();
groupDetails.setWidth("50%"); groupDetails.setWidth("50%");
groupDetails.setHeight("100%"); groupDetails.setHeight("100%");
@ -77,8 +85,7 @@ public class GroupsTable extends Grid<Group> {
final ConfirmDeleteDialog dialog final ConfirmDeleteDialog dialog
= new ConfirmDeleteDialog( = new ConfirmDeleteDialog(
event.getItem(), event.getItem(),
usersGroupsRoles, controller.getGroupRepository());
view.getGroupRepository());
dialog.center(); dialog.center();
UI.getCurrent().addWindow(dialog); UI.getCurrent().addWindow(dialog);
})) }))
@ -87,8 +94,10 @@ public class GroupsTable extends Grid<Group> {
final HeaderRow filterRow = appendHeaderRow(); final HeaderRow filterRow = appendHeaderRow();
final HeaderCell GroupNameFilterCell = filterRow.getCell(COL_NAME); final HeaderCell GroupNameFilterCell = filterRow.getCell(COL_NAME);
groupNameFilter = new TextField(); groupNameFilter = new TextField();
groupNameFilter.setPlaceholder("Group name"); groupNameFilter.setPlaceholder(bundle
groupNameFilter.setDescription("Filter Groups by name"); .getString("ui.admin.users.table.filter.groupname.placeholder"));
groupNameFilter.setDescription(bundle
.getString("ui.admin.users.table.filter.groupname.description"));
groupNameFilter.addStyleName(ValoTheme.TEXTFIELD_TINY); groupNameFilter.addStyleName(ValoTheme.TEXTFIELD_TINY);
groupNameFilter groupNameFilter
.addValueChangeListener(event -> { .addValueChangeListener(event -> {
@ -101,7 +110,8 @@ public class GroupsTable extends Grid<Group> {
final HeaderCell actionsCell = actionsRow.join(COL_NAME, final HeaderCell actionsCell = actionsRow.join(COL_NAME,
COL_EDIT, COL_EDIT,
COL_DELETE); COL_DELETE);
clearFiltersButton = new Button("Clear filters"); clearFiltersButton = new Button(bundle
.getString("ui.admin.users.table.filter.clear"));
clearFiltersButton.setStyleName(ValoTheme.BUTTON_TINY); clearFiltersButton.setStyleName(ValoTheme.BUTTON_TINY);
clearFiltersButton.setIcon(VaadinIcons.BACKSPACE); clearFiltersButton.setIcon(VaadinIcons.BACKSPACE);
clearFiltersButton.addClickListener(event -> { clearFiltersButton.addClickListener(event -> {
@ -113,9 +123,10 @@ public class GroupsTable extends Grid<Group> {
createGroupButton.setIcon(VaadinIcons.PLUS); createGroupButton.setIcon(VaadinIcons.PLUS);
createGroupButton.addClickListener(event -> { createGroupButton.addClickListener(event -> {
final GroupEditor groupEditor = new GroupEditor( final GroupEditor groupEditor = new GroupEditor(
usersGroupsRoles, controller.getGroupRepository());
view.getGroupRepository(), groupEditor.addCloseListener(closeEvent -> {
view.getGroupManager()); getDataProvider().refreshAll();
});
groupEditor.center(); groupEditor.center();
UI.getCurrent().addWindow(groupEditor); UI.getCurrent().addWindow(groupEditor);
}); });
@ -125,39 +136,17 @@ public class GroupsTable extends Grid<Group> {
actionsCell.setComponent(actionsLayout); actionsCell.setComponent(actionsLayout);
} }
public void localize() {
final ResourceBundle bundle = ResourceBundle
.getBundle(AdminUiConstants.ADMIN_BUNDLE,
UI.getCurrent().getLocale());
getColumn(COL_NAME)
.setCaption(bundle.getString("ui.admin.groups.table.name"));
groupNameFilter.setPlaceholder(
bundle
.getString("ui.admin.users.table.filter.groupname.placeholder"));
groupNameFilter.setDescription(bundle
.getString("ui.admin.users.table.filter.groupname.description"));
clearFiltersButton.setCaption(bundle
.getString("ui.admin.users.table.filter.clear"));
}
private class ConfirmDeleteDialog extends Window { private class ConfirmDeleteDialog extends Window {
private static final long serialVersionUID = -1168912882249598278L; private static final long serialVersionUID = -1168912882249598278L;
private final Group group; private final Group group;
private final UsersGroupsRolesTab usersGroupsRoles;
private final GroupRepository groupRepo; private final GroupRepository groupRepo;
public ConfirmDeleteDialog(final Group group, public ConfirmDeleteDialog(final Group group,
final UsersGroupsRolesTab usersGroupsRoles,
final GroupRepository groupRepo) { final GroupRepository groupRepo) {
this.group = group; this.group = group;
this.usersGroupsRoles = usersGroupsRoles;
this.groupRepo = groupRepo; this.groupRepo = groupRepo;
final ResourceBundle bundle = ResourceBundle final ResourceBundle bundle = ResourceBundle
@ -182,15 +171,12 @@ public class GroupsTable extends Grid<Group> {
final VerticalLayout layout = new VerticalLayout(text, buttons); final VerticalLayout layout = new VerticalLayout(text, buttons);
// final Panel panel = new Panel( super.setContent(layout);
// bundle.getString("ui.admin.groups.delete.confirm.title"),
// layout);
setContent(layout);
} }
private void deleteGroup() { private void deleteGroup() {
groupRepo.delete(group); groupRepo.delete(group);
usersGroupsRoles.refreshGroups(); getDataProvider().refreshAll();
close(); close();
} }

View File

@ -19,15 +19,28 @@
package org.libreccm.admin.ui; package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants; import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.data.HasValue; import com.vaadin.data.HasValue;
import com.vaadin.data.ValueProvider; import com.vaadin.data.ValueProvider;
import com.vaadin.server.UserError; import com.vaadin.server.UserError;
import com.vaadin.ui.*; import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.Button;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Notification;
import com.vaadin.ui.Panel;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.PersistenceException; import javax.persistence.PersistenceException;
import java.beans.BeanInfo; import java.beans.BeanInfo;
import java.beans.IntrospectionException; import java.beans.IntrospectionException;
import java.beans.Introspector; import java.beans.Introspector;
@ -35,19 +48,29 @@ import java.beans.PropertyDescriptor;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.*; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.primefaces.component.schedule.Schedule.PropertyKeys.*;
/** /**
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class JpqlConsole extends CustomComponent { class JpqlConsole extends CustomComponent {
private static final long serialVersionUID = 2585630538827827614L; private static final long serialVersionUID = 2585630538827827614L;
private static final Logger LOGGER = LogManager.getLogger(JpqlConsole.class); private static final Logger LOGGER = LogManager.getLogger(JpqlConsole.class);
private final AdminView view; private final JpqlConsoleController controller;
private final TextArea queryArea; private final TextArea queryArea;
private final TextField maxResults; private final TextField maxResults;
@ -58,9 +81,9 @@ public class JpqlConsole extends CustomComponent {
private final Label noResultsLabel; private final Label noResultsLabel;
private final Panel resultsPanel; private final Panel resultsPanel;
public JpqlConsole(final AdminView view) { JpqlConsole(final JpqlConsoleController controller) {
this.view = view; this.controller = controller;
final ResourceBundle bundle = ResourceBundle.getBundle( final ResourceBundle bundle = ResourceBundle.getBundle(
AdminUiConstants.ADMIN_BUNDLE, UI.getCurrent().getLocale()); AdminUiConstants.ADMIN_BUNDLE, UI.getCurrent().getLocale());
@ -119,8 +142,7 @@ public class JpqlConsole extends CustomComponent {
final List<?> result; final List<?> result;
try { try {
result = view result = controller
.getJpqlConsoleController()
.executeQuery(queryStr, .executeQuery(queryStr,
Integer.parseInt(maxResults.getValue()), Integer.parseInt(maxResults.getValue()),
Integer.parseInt(offset.getValue())); Integer.parseInt(offset.getValue()));

View File

@ -19,8 +19,13 @@
package org.libreccm.admin.ui; package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants; import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.icons.VaadinIcons; import com.vaadin.icons.VaadinIcons;
import com.vaadin.ui.*; import com.vaadin.ui.Button;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.UI;
import com.vaadin.ui.Window;
import com.vaadin.ui.components.grid.HeaderCell; import com.vaadin.ui.components.grid.HeaderCell;
import com.vaadin.ui.components.grid.HeaderRow; import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.themes.ValoTheme; import com.vaadin.ui.themes.ValoTheme;
@ -34,15 +39,14 @@ import java.util.ResourceBundle;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class PartySelector extends Window { class PartySelector extends Window {
private static final long serialVersionUID = 6915710902238111484L; private static final long serialVersionUID = 6915710902238111484L;
private static final String COL_PARTY_NAME = "partyname"; private static final String COL_PARTY_NAME = "partyname";
public PartySelector(final String caption, protected PartySelector(final String caption,
final String actionLabel, final String actionLabel,
final UsersGroupsRolesTab usersGroupsRoles,
final List<Party> excludedParties, final List<Party> excludedParties,
final PartySelectionAction action) { final PartySelectionAction action) {

View File

@ -19,14 +19,27 @@
package org.libreccm.admin.ui; package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants; import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.icons.VaadinIcons; import com.vaadin.icons.VaadinIcons;
import com.vaadin.ui.*; import com.vaadin.ui.Button;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TabSheet;
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.HeaderCell;
import com.vaadin.ui.components.grid.HeaderRow; import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.renderers.ButtonRenderer; import com.vaadin.ui.renderers.ButtonRenderer;
import com.vaadin.ui.themes.ValoTheme; import com.vaadin.ui.themes.ValoTheme;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.security.*; import org.libreccm.security.Party;
import org.libreccm.security.PartyRepository;
import org.libreccm.security.Role;
import org.libreccm.security.RoleManager;
import org.libreccm.security.RoleRepository;
import java.util.ResourceBundle; import java.util.ResourceBundle;
@ -34,26 +47,26 @@ import java.util.ResourceBundle;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class RoleDetails extends Window { class RoleDetails extends Window {
private static final long serialVersionUID = 8109931561947913438L; private static final long serialVersionUID = 8109931561947913438L;
private static final String COL_MEMBER_NAME = "partyname"; private static final String COL_MEMBER_NAME = "partyname";
private static final String COL_MEMBER_REMOVE = "member_remove"; private static final String COL_MEMBER_REMOVE = "member_remove";
private final UsersGroupsRolesTab usersGroupsRoles; // private final UsersGroupsRolesTab usersGroupsRoles;
private final Role role; private final Role role;
private final RoleRepository roleRepo; private final RoleRepository roleRepo;
private final RoleManager roleManager; private final RoleManager roleManager;
public RoleDetails(final Role role, protected RoleDetails(final Role role,
final UsersGroupsRolesTab usersGroupsRoles, // final UsersGroupsRolesTab usersGroupsRoles,
final RoleRepository roleRepo, final RoleRepository roleRepo,
final RoleManager roleManager) { final RoleManager roleManager) {
super(String.format("Details of role %s", role.getName())); super(String.format("Details of role %s", role.getName()));
this.usersGroupsRoles = usersGroupsRoles; // this.usersGroupsRoles = usersGroupsRoles;
this.role = role; this.role = role;
this.roleRepo = roleRepo; this.roleRepo = roleRepo;
this.roleManager = roleManager; this.roleManager = roleManager;
@ -83,9 +96,8 @@ public class RoleDetails extends Window {
bundle.getString("ui.admin.roles.table.edit"), bundle.getString("ui.admin.roles.table.edit"),
event -> { event -> {
final RoleEditor editor = new RoleEditor(role, final RoleEditor editor = new RoleEditor(role,
usersGroupsRoles, // usersGroupsRoles,
roleRepo, roleRepo);
roleManager);
editor.center(); editor.center();
UI.getCurrent().addWindow(editor); UI.getCurrent().addWindow(editor);
}); });
@ -125,7 +137,6 @@ public class RoleDetails extends Window {
final PartySelector partySelector = new PartySelector( final PartySelector partySelector = new PartySelector(
"Select parties to add to role", "Select parties to add to role",
"Add selected parties to role", "Add selected parties to role",
usersGroupsRoles,
partyRepo.findByRole(role), partyRepo.findByRole(role),
selectedParties -> { selectedParties -> {
selectedParties.forEach(party -> { selectedParties.forEach(party -> {
@ -133,6 +144,9 @@ public class RoleDetails extends Window {
}); });
partiesGrid.getDataProvider().refreshAll(); partiesGrid.getDataProvider().refreshAll();
}); });
partySelector.addCloseListener(closeEvent -> {
partiesGrid.getDataProvider().refreshAll();
});
partySelector.center(); partySelector.center();
partySelector.setWidth("80%"); partySelector.setWidth("80%");
UI.getCurrent().addWindow(partySelector); UI.getCurrent().addWindow(partySelector);

View File

@ -19,11 +19,18 @@
package org.libreccm.admin.ui; package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants; import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.data.HasValue; import com.vaadin.data.HasValue;
import com.vaadin.server.UserError; import com.vaadin.server.UserError;
import com.vaadin.ui.*; import com.vaadin.ui.Button;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import org.libreccm.security.Role; import org.libreccm.security.Role;
import org.libreccm.security.RoleManager;
import org.libreccm.security.RoleRepository; import org.libreccm.security.RoleRepository;
import java.util.ResourceBundle; import java.util.ResourceBundle;
@ -32,45 +39,35 @@ import java.util.ResourceBundle;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class RoleEditor extends Window { class RoleEditor extends Window {
private static final long serialVersionUID = -2982855646090602847L; private static final long serialVersionUID = -2982855646090602847L;
private final UsersGroupsRolesTab usersGroupsRoles;
private final Role role; private final Role role;
private final RoleRepository roleRepo; private final RoleRepository roleRepo;
private final RoleManager roleManager;
private boolean dataHasChanged = false; private boolean dataHasChanged = false;
private TextField roleName; private TextField roleName;
private TextArea roleDescription; private TextArea roleDescription;
public RoleEditor(final UsersGroupsRolesTab usersGroupsRoles, protected RoleEditor(final RoleRepository roleRepo) {
final RoleRepository roleRepo,
final RoleManager roleManager) {
super("Create new role"); super("Create new role");
this.usersGroupsRoles = usersGroupsRoles;
role = null; role = null;
this.roleRepo = roleRepo; this.roleRepo = roleRepo;
this.roleManager = roleManager;
addWidgets(); addWidgets();
} }
public RoleEditor(final Role role, public RoleEditor(final Role role,
final UsersGroupsRolesTab usersGroupsRoles, final RoleRepository roleRepo) {
final RoleRepository roleRepo,
final RoleManager roleManager) {
super(String.format("Edit role %s", role.getName())); super(String.format("Edit role %s", role.getName()));
this.role = role; this.role = role;
this.usersGroupsRoles = usersGroupsRoles;
this.roleRepo = roleRepo; this.roleRepo = roleRepo;
this.roleManager = roleManager;
addWidgets(); addWidgets();
} }
@ -195,9 +192,6 @@ public class RoleEditor extends Window {
roleRepo.save(currentRole); roleRepo.save(currentRole);
dataHasChanged = false; dataHasChanged = false;
if (usersGroupsRoles != null) {
usersGroupsRoles.refreshRoles();
}
close(); close();
} }

View File

@ -35,15 +35,14 @@ import java.util.List;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class RoleSelector extends Window { class RoleSelector extends Window {
private static final long serialVersionUID = -6893510634359633368L; private static final long serialVersionUID = -6893510634359633368L;
private static final String COL_NAME = "rolename"; private static final String COL_NAME = "rolename";
public RoleSelector(final String caption, protected RoleSelector(final String caption,
final String actionLabel, final String actionLabel,
final UsersGroupsRolesTab usersGroupsRoles,
final List<Role> excludedRoles, final List<Role> excludedRoles,
final RoleSelectionAction action) { final RoleSelectionAction action) {
@ -57,10 +56,6 @@ public class RoleSelector extends Window {
setCaption(caption); setCaption(caption);
// final ResourceBundle bundle = ResourceBundle
// .getBundle(AdminUiConstants.ADMIN_BUNDLE,
// UI.getCurrent().getLocale());
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final Grid<Role> rolesGrid = new Grid<>(); final Grid<Role> rolesGrid = new Grid<>();

View File

@ -1,43 +0,0 @@
/*
* Copyright (C) 2017 LibreCCM Foundation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.libreccm.admin.ui;
import com.vaadin.cdi.ViewScoped;
import org.libreccm.security.RoleManager;
import org.libreccm.security.RoleRepository;
import javax.inject.Inject;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@ViewScoped
class RolesManager {
@Inject
private RoleManager roleManager;
@Inject
private RoleRepository roleRepository;
@Inject
private RolesTableDataProvider rolesTableDataProvider;
}

View File

@ -19,8 +19,17 @@
package org.libreccm.admin.ui; package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants; import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.icons.VaadinIcons; import com.vaadin.icons.VaadinIcons;
import com.vaadin.ui.*; import com.vaadin.ui.Button;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
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.HeaderCell;
import com.vaadin.ui.components.grid.HeaderRow; import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.renderers.ButtonRenderer; import com.vaadin.ui.renderers.ButtonRenderer;
@ -37,7 +46,7 @@ import java.util.ResourceBundle;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class RolesTable extends Grid<Role> { class RolesTable extends Grid<Role> {
private static final long serialVersionUID = 8298191390811634176L; private static final long serialVersionUID = 8298191390811634176L;
@ -50,18 +59,19 @@ public class RolesTable extends Grid<Role> {
private final Button clearFiltersButton; private final Button clearFiltersButton;
private final Button createRoleButton; private final Button createRoleButton;
public RolesTable(final AdminView view, protected RolesTable(final UsersGroupsRolesController controller) {
final UsersGroupsRolesTab usersGroupsRoles) {
super(); super();
super.setDataProvider(controller.getRolesTableDataProvider());
final ResourceBundle bundle = ResourceBundle final ResourceBundle bundle = ResourceBundle
.getBundle(AdminUiConstants.ADMIN_BUNDLE, .getBundle(AdminUiConstants.ADMIN_BUNDLE,
UI.getCurrent().getLocale()); UI.getCurrent().getLocale());
addColumn(Role::getName) addColumn(Role::getName)
.setId(COL_NAME) .setId(COL_NAME)
.setCaption("Name"); .setCaption(bundle.getString("ui.admin.roles.table.name"));
addColumn(role -> { addColumn(role -> {
if (role.getDescription().hasValue(UI.getCurrent().getLocale())) { if (role.getDescription().hasValue(UI.getCurrent().getLocale())) {
return role.getDescription() return role.getDescription()
@ -83,24 +93,16 @@ public class RolesTable extends Grid<Role> {
} }
}) })
.setId(COL_DESCRIPTION) .setId(COL_DESCRIPTION)
.setCaption("Description"); .setCaption(bundle.getString("ui.admin.roles.table.description"));
addColumn(user -> bundle.getString("ui.admin.roles.table.edit"), addColumn(user -> bundle.getString("ui.admin.roles.table.edit"),
new ButtonRenderer<>(event -> { new ButtonRenderer<>(event -> {
final RoleDetails roleDetails = new RoleDetails( final RoleDetails roleDetails = new RoleDetails(
event.getItem(), event.getItem(),
usersGroupsRoles, controller.getRoleRepository(),
view.getRoleRepository(), controller.getRoleManager());
view.getRoleManager());
roleDetails.center(); roleDetails.center();
roleDetails.setWidth("80%"); roleDetails.setWidth("80%");
UI.getCurrent().addWindow(roleDetails); UI.getCurrent().addWindow(roleDetails);
// final RoleEditor roleEditor = new RoleEditor(
// event.getItem(),
// usersGroupsRoles,
// view.getRoleRepository(),
// view.getRoleManager());
// roleEditor.center();
// UI.getCurrent().addWindow(roleEditor);
})) }))
.setId(COL_EDIT); .setId(COL_EDIT);
addColumn(user -> bundle.getString("ui.admin.roles.table.delete"), addColumn(user -> bundle.getString("ui.admin.roles.table.delete"),
@ -108,8 +110,7 @@ public class RolesTable extends Grid<Role> {
final ConfirmDeleteDialog dialog final ConfirmDeleteDialog dialog
= new ConfirmDeleteDialog( = new ConfirmDeleteDialog(
event.getItem(), event.getItem(),
usersGroupsRoles, controller.getRoleRepository());
view.getRoleRepository());
dialog.center(); dialog.center();
UI.getCurrent().addWindow(dialog); UI.getCurrent().addWindow(dialog);
})) }))
@ -118,8 +119,10 @@ public class RolesTable extends Grid<Role> {
final HeaderRow filterRow = appendHeaderRow(); final HeaderRow filterRow = appendHeaderRow();
final HeaderCell GroupNameFilterCell = filterRow.getCell(COL_NAME); final HeaderCell GroupNameFilterCell = filterRow.getCell(COL_NAME);
roleNameFilter = new TextField(); roleNameFilter = new TextField();
roleNameFilter.setPlaceholder("Role name"); roleNameFilter.setPlaceholder(bundle
roleNameFilter.setDescription("Filter Roles by name"); .getString("ui.admin.users.table.filter.rolename.placeholder"));
roleNameFilter.setDescription(bundle
.getString("ui.admin.users.table.filter.rolename.description"));
roleNameFilter.addStyleName(ValoTheme.TEXTFIELD_TINY); roleNameFilter.addStyleName(ValoTheme.TEXTFIELD_TINY);
roleNameFilter roleNameFilter
.addValueChangeListener(event -> { .addValueChangeListener(event -> {
@ -133,7 +136,8 @@ public class RolesTable extends Grid<Role> {
COL_DESCRIPTION, COL_DESCRIPTION,
COL_EDIT, COL_EDIT,
COL_DELETE); COL_DELETE);
clearFiltersButton = new Button("Clear filters"); clearFiltersButton = new Button(bundle
.getString("ui.admin.users.table.filter.clear"));
clearFiltersButton.setStyleName(ValoTheme.BUTTON_TINY); clearFiltersButton.setStyleName(ValoTheme.BUTTON_TINY);
clearFiltersButton.setIcon(VaadinIcons.BACKSPACE); clearFiltersButton.setIcon(VaadinIcons.BACKSPACE);
clearFiltersButton.addClickListener(event -> { clearFiltersButton.addClickListener(event -> {
@ -145,10 +149,11 @@ public class RolesTable extends Grid<Role> {
createRoleButton.setIcon(VaadinIcons.PLUS); createRoleButton.setIcon(VaadinIcons.PLUS);
createRoleButton.addClickListener(event -> { createRoleButton.addClickListener(event -> {
final RoleEditor roleEditor = new RoleEditor( final RoleEditor roleEditor = new RoleEditor(
usersGroupsRoles, controller.getRoleRepository());
view.getRoleRepository(),
view.getRoleManager());
roleEditor.center(); roleEditor.center();
roleEditor.addCloseListener(closeEvent -> {
getDataProvider().refreshAll();
});
UI.getCurrent().addWindow(roleEditor); UI.getCurrent().addWindow(roleEditor);
}); });
final HorizontalLayout actionsLayout = new HorizontalLayout( final HorizontalLayout actionsLayout = new HorizontalLayout(
@ -157,42 +162,16 @@ public class RolesTable extends Grid<Role> {
actionsCell.setComponent(actionsLayout); actionsCell.setComponent(actionsLayout);
} }
public void localize() {
final ResourceBundle bundle = ResourceBundle
.getBundle(AdminUiConstants.ADMIN_BUNDLE,
UI.getCurrent().getLocale());
getColumn(COL_NAME)
.setCaption(bundle.getString("ui.admin.roles.table.name"));
getColumn(COL_DESCRIPTION)
.setCaption(bundle.getString("ui.admin.roles.table.description"));
roleNameFilter.setPlaceholder(
bundle
.getString("ui.admin.users.table.filter.rolename.placeholder"));
roleNameFilter.setDescription(bundle
.getString("ui.admin.users.table.filter.rolename.description"));
clearFiltersButton.setCaption(bundle
.getString("ui.admin.users.table.filter.clear"));
}
private class ConfirmDeleteDialog extends Window { private class ConfirmDeleteDialog extends Window {
private static final long serialVersionUID = -1315311220464298282L; private static final long serialVersionUID = -1315311220464298282L;
private final Role role; private final Role role;
private final UsersGroupsRolesTab usersGroupsRoles;
private final RoleRepository roleRepo; private final RoleRepository roleRepo;
public ConfirmDeleteDialog(final Role role, public ConfirmDeleteDialog(final Role role,
final UsersGroupsRolesTab usersGroupsRoles,
final RoleRepository roleRepo) { final RoleRepository roleRepo) {
this.role = role; this.role = role;
this.usersGroupsRoles = usersGroupsRoles;
this.roleRepo = roleRepo; this.roleRepo = roleRepo;
final ResourceBundle bundle = ResourceBundle final ResourceBundle bundle = ResourceBundle
@ -222,7 +201,7 @@ public class RolesTable extends Grid<Role> {
private void deleteRole() { private void deleteRole() {
roleRepo.delete(role); roleRepo.delete(role);
usersGroupsRoles.refreshRoles(); getDataProvider().refreshAll();
close(); close();
} }

View File

@ -19,14 +19,29 @@
package org.libreccm.admin.ui; package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants; import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.icons.VaadinIcons; import com.vaadin.icons.VaadinIcons;
import com.vaadin.ui.*; import com.vaadin.ui.Button;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TabSheet;
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.HeaderCell;
import com.vaadin.ui.components.grid.HeaderRow; import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.renderers.ButtonRenderer; import com.vaadin.ui.renderers.ButtonRenderer;
import com.vaadin.ui.themes.ValoTheme; import com.vaadin.ui.themes.ValoTheme;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.security.*; import org.libreccm.security.Group;
import org.libreccm.security.GroupRepository;
import org.libreccm.security.Role;
import org.libreccm.security.RoleRepository;
import org.libreccm.security.User;
import org.libreccm.security.UserManager;
import org.libreccm.security.UserRepository;
import java.util.ResourceBundle; import java.util.ResourceBundle;
@ -34,7 +49,7 @@ import java.util.ResourceBundle;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class UserDetails extends Window { class UserDetails extends Window {
private static final long serialVersionUID = 7852981019990845392L; private static final long serialVersionUID = 7852981019990845392L;
@ -44,19 +59,16 @@ public class UserDetails extends Window {
private static final String COL_ROLE_NAME = "role_name"; private static final String COL_ROLE_NAME = "role_name";
private static final String COL_ROLE_REMOVE = "role_remove"; private static final String COL_ROLE_REMOVE = "role_remove";
private final UsersGroupsRolesTab usersGroupsRoles;
private final User user; private final User user;
private final UserRepository userRepo; private final UserRepository userRepo;
private final UserManager userManager; private final UserManager userManager;
public UserDetails(final User user, protected UserDetails(final User user,
final UsersGroupsRolesTab usersGroupsRoles,
final UserRepository userRepo, final UserRepository userRepo,
final UserManager userManager) { final UserManager userManager) {
super(String.format("Details of user %s", user.getName())); super(String.format("Details of user %s", user.getName()));
this.usersGroupsRoles = usersGroupsRoles;
this.user = user; this.user = user;
this.userRepo = userRepo; this.userRepo = userRepo;
this.userManager = userManager; this.userManager = userManager;
@ -115,7 +127,6 @@ public class UserDetails extends Window {
bundle.getString("ui.admin.users.table.edit"), bundle.getString("ui.admin.users.table.edit"),
event -> { event -> {
final UserEditor editor = new UserEditor(user, final UserEditor editor = new UserEditor(user,
usersGroupsRoles,
userRepo, userRepo,
userManager); userManager);
editor.center(); editor.center();
@ -157,7 +168,6 @@ public class UserDetails extends Window {
final GroupSelector groupSelector = new GroupSelector( final GroupSelector groupSelector = new GroupSelector(
"Select group(s) to which the user is added.", "Select group(s) to which the user is added.",
"Add user to selected groups", "Add user to selected groups",
usersGroupsRoles,
groupRepo.findByMember(user), groupRepo.findByMember(user),
selectedGroups -> { selectedGroups -> {
selectedGroups.forEach(group -> { selectedGroups.forEach(group -> {
@ -167,6 +177,9 @@ public class UserDetails extends Window {
}); });
groupSelector.center(); groupSelector.center();
groupSelector.setWidth("80%"); groupSelector.setWidth("80%");
groupSelector.addCloseListener(closeEvent -> {
groupsGrid.getDataProvider().refreshAll();
});
UI.getCurrent().addWindow(groupSelector); UI.getCurrent().addWindow(groupSelector);
}); });
final HeaderCell groupsGridHeaderCell = groupsGridHeader final HeaderCell groupsGridHeaderCell = groupsGridHeader
@ -208,7 +221,6 @@ public class UserDetails extends Window {
final RoleSelector roleSelector = new RoleSelector( final RoleSelector roleSelector = new RoleSelector(
"Select role(s) to add to group", "Select role(s) to add to group",
"Add selected role(s) to group", "Add selected role(s) to group",
usersGroupsRoles,
roleRepo.findByParty(user), roleRepo.findByParty(user),
(selectedRoles -> { (selectedRoles -> {
selectedRoles.forEach(role -> { selectedRoles.forEach(role -> {
@ -216,6 +228,9 @@ public class UserDetails extends Window {
}); });
rolesGrid.getDataProvider().refreshAll(); rolesGrid.getDataProvider().refreshAll();
})); }));
roleSelector.addCloseListener(closeEvent -> {
rolesGrid.getDataProvider().refreshAll();
});
roleSelector.center(); roleSelector.center();
roleSelector.setWidth("80%"); roleSelector.setWidth("80%");
UI.getCurrent().addWindow(roleSelector); UI.getCurrent().addWindow(roleSelector);

View File

@ -19,11 +19,23 @@
package org.libreccm.admin.ui; package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants; import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.data.HasValue; import com.vaadin.data.HasValue;
import com.vaadin.data.provider.AbstractDataProvider; import com.vaadin.data.provider.AbstractDataProvider;
import com.vaadin.data.provider.Query; import com.vaadin.data.provider.Query;
import com.vaadin.server.UserError; import com.vaadin.server.UserError;
import com.vaadin.ui.*; import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Panel;
import com.vaadin.ui.PasswordField;
import com.vaadin.ui.RadioButtonGroup;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
@ -35,6 +47,7 @@ import org.libreccm.security.UserManager;
import org.libreccm.security.UserRepository; import org.libreccm.security.UserRepository;
import javax.mail.MessagingException; import javax.mail.MessagingException;
import java.util.Arrays; import java.util.Arrays;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -44,7 +57,7 @@ import java.util.stream.Stream;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class UserEditor extends Window { class UserEditor extends Window {
private static final long serialVersionUID = 7024424532574023431L; private static final long serialVersionUID = 7024424532574023431L;
@ -58,7 +71,6 @@ public class UserEditor extends Window {
} }
private final UsersGroupsRolesTab usersGroupsRoles;
private final User user; private final User user;
private final UserRepository userRepo; private final UserRepository userRepo;
private final UserManager userManager; private final UserManager userManager;
@ -75,13 +87,11 @@ public class UserEditor extends Window {
private CheckBox passwordResetRequired; private CheckBox passwordResetRequired;
private CheckBox banned; private CheckBox banned;
public UserEditor(final UsersGroupsRolesTab usersGroupsRoles, protected UserEditor(final UserRepository userRepo,
final UserRepository userRepo,
final UserManager userManager) { final UserManager userManager) {
super("Create new user"); super("Create new user");
this.usersGroupsRoles = usersGroupsRoles;
user = null; user = null;
this.userRepo = userRepo; this.userRepo = userRepo;
this.userManager = userManager; this.userManager = userManager;
@ -90,14 +100,12 @@ public class UserEditor extends Window {
} }
public UserEditor(final User user, public UserEditor(final User user,
final UsersGroupsRolesTab usersGroupsRoles,
final UserRepository userRepo, final UserRepository userRepo,
final UserManager userManager) { final UserManager userManager) {
super(String.format("Edit user %s", user.getName())); super(String.format("Edit user %s", user.getName()));
this.user = user; this.user = user;
this.usersGroupsRoles = usersGroupsRoles;
this.userRepo = userRepo; this.userRepo = userRepo;
this.userManager = userManager; this.userManager = userManager;
@ -425,9 +433,6 @@ public class UserEditor extends Window {
} }
dataHasChanged = false; dataHasChanged = false;
if (usersGroupsRoles != null) {
usersGroupsRoles.refreshUsers();
}
close(); close();
} }

View File

@ -19,8 +19,13 @@
package org.libreccm.admin.ui; package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants; import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.icons.VaadinIcons; import com.vaadin.icons.VaadinIcons;
import com.vaadin.ui.*; import com.vaadin.ui.Button;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.UI;
import com.vaadin.ui.Window;
import com.vaadin.ui.components.grid.HeaderCell; import com.vaadin.ui.components.grid.HeaderCell;
import com.vaadin.ui.components.grid.HeaderRow; import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.themes.ValoTheme; import com.vaadin.ui.themes.ValoTheme;
@ -34,7 +39,7 @@ import java.util.ResourceBundle;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class UserSelector extends Window { class UserSelector extends Window {
private static final long serialVersionUID = -6227551833159691370L; private static final long serialVersionUID = -6227551833159691370L;
@ -43,10 +48,8 @@ public class UserSelector extends Window {
private static final String COL_FAMILY_NAME = "family_name"; private static final String COL_FAMILY_NAME = "family_name";
private static final String COL_EMAIL = "email"; private static final String COL_EMAIL = "email";
protected UserSelector(final String caption,
public UserSelector(final String caption,
final String actionLabel, final String actionLabel,
final UsersGroupsRolesTab usersGroupsRoles,
final List<User> excludedUsers, final List<User> excludedUsers,
final UserSelectionAction action) { final UserSelectionAction action) {

View File

@ -0,0 +1,101 @@
/*
* Copyright (C) 2017 LibreCCM Foundation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.libreccm.admin.ui;
import org.libreccm.security.GroupManager;
import org.libreccm.security.GroupRepository;
import org.libreccm.security.RoleManager;
import org.libreccm.security.RoleRepository;
import org.libreccm.security.UserManager;
import org.libreccm.security.UserRepository;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
class UsersGroupsRolesController {
@Inject
private GroupManager groupManager;
@Inject
private GroupRepository groupRepository;
@Inject
private GroupsTableDataProvider groupsTableDataProvider;
@Inject
private RoleManager roleManager;
@Inject
private RoleRepository RoleRepository;
@Inject
private RolesTableDataProvider rolesTableDataProvider;
@Inject
private UserManager userManager;
@Inject
private UserRepository userRepository;
@Inject
private UsersTableDataProvider usersTableDataProvider;
public GroupManager getGroupManager() {
return groupManager;
}
public GroupRepository getGroupRepository() {
return groupRepository;
}
public GroupsTableDataProvider getGroupsTableDataProvider() {
return groupsTableDataProvider;
}
public RoleManager getRoleManager() {
return roleManager;
}
public RoleRepository getRoleRepository() {
return RoleRepository;
}
public RolesTableDataProvider getRolesTableDataProvider() {
return rolesTableDataProvider;
}
public UserManager getUserManager() {
return userManager;
}
public UserRepository getUserRepository() {
return userRepository;
}
public UsersTableDataProvider getUsersTableDataProvider() {
return usersTableDataProvider;
}
}

View File

@ -29,29 +29,12 @@ import java.util.ResourceBundle;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class UsersGroupsRolesTab extends CustomComponent { class UsersGroupsRolesTab extends CustomComponent {
private static final long serialVersionUID = 7280416743018127366L; private static final long serialVersionUID = 7280416743018127366L;
// private static final String COL_USER_NAME = "username";
// private static final String COL_GIVEN_NAME = "given_name";
// private static final String COL_FAMILY_NAME = "family_name";
// private static final String COL_EMAIL = "email";
// private static final String COL_BANNED = "banned";
// private static final String COL_PASSWORD_RESET_REQUIRED
// = "password_reset_required";
// private static final String COL_EDIT = "edit";
// private static final String COL_DELETE = "delete";
private final AdminView view;
private final TabSheet tabSheet; private final TabSheet tabSheet;
// private final Grid<User> usersTable;
// private final TextField userNameFilter;
// private final Button clearFiltersButton;
// private final Button createUserButton;
private final UsersTable usersTable; private final UsersTable usersTable;
private final GroupsTable groupsTable; private final GroupsTable groupsTable;
private final RolesTable rolesTable; private final RolesTable rolesTable;
@ -60,115 +43,17 @@ public class UsersGroupsRolesTab extends CustomComponent {
private GroupsTableDataProvider groupsTableDataProvider; private GroupsTableDataProvider groupsTableDataProvider;
private RolesTableDataProvider rolesTableDataProvider; private RolesTableDataProvider rolesTableDataProvider;
public UsersGroupsRolesTab(final AdminView view) { protected UsersGroupsRolesTab(final UsersGroupsRolesController controller) {
this.view = view;
final ResourceBundle bundle = ResourceBundle
.getBundle(AdminUiConstants.ADMIN_BUNDLE,
UI.getCurrent().getLocale());
tabSheet = new TabSheet(); tabSheet = new TabSheet();
// usersTable = new Grid<>();
// usersTable.setWidth("100%");
// usersTable.addColumn(User::getName)
// .setId(COL_USER_NAME)
// .setCaption("User name");
// usersTable
// .addColumn(User::getGivenName)
// .setId(COL_GIVEN_NAME)
// .setCaption("Given name");
// usersTable
// .addColumn(User::getFamilyName)
// .setId(COL_FAMILY_NAME)
// .setCaption("Family name");
// usersTable
// .addColumn(user -> user.getPrimaryEmailAddress().getAddress())
// .setId(COL_EMAIL)
// .setCaption("E-Mail");
// usersTable
// .addColumn(user -> {
// if (user.isBanned()) {
// return bundle.getString("ui.admin.user.banned_yes");
// } else {
// return bundle.getString("ui.admin.user.banned_no");
// }
// })
// .setId(COL_BANNED)
// .setCaption("Banned?");
// usersTable
// .addColumn(user -> {
// if (user.isPasswordResetRequired()) {
// return bundle.getString(
// "ui.admin.user.password_reset_required_yes");
// } else {
// return bundle.getString(
// "ui.admin.user.password_reset_required_no");
// }
// })
// .setId(COL_PASSWORD_RESET_REQUIRED)
// .setCaption("Password reset required");
// usersTable
// .addColumn(user -> bundle.getString("ui.admin.users.table.edit"),
// new ButtonRenderer<>(event -> {
// final UserEditor editor = new UserEditor(
// event.getItem(),
// this,
// view.getUserRepository(),
// view.getUserManager());
// editor.center();
// UI.getCurrent().addWindow(editor);
// }))
// .setId(COL_EDIT);
//
// final HeaderRow filterRow = usersTable.appendHeaderRow();
// final HeaderCell userNameFilterCell = filterRow.getCell(COL_USER_NAME);
// userNameFilter = new TextField();
// userNameFilter.setPlaceholder("User name");
// userNameFilter.setDescription("Filter users by username");
// userNameFilter.addStyleName(ValoTheme.TEXTFIELD_TINY);
// userNameFilter
// .addValueChangeListener(event -> {
// usersTableDataProvider
// .setUserNameFilter(event.getValue().toLowerCase());
// });
// userNameFilterCell.setComponent(userNameFilter);
//
// final HeaderRow actionsRow = usersTable.prependHeaderRow();
// final HeaderCell actionsCell = actionsRow.join(COL_USER_NAME,
// COL_GIVEN_NAME,
// COL_FAMILY_NAME,
// COL_EMAIL,
// COL_BANNED);
// clearFiltersButton = new Button("Clear filters");
// clearFiltersButton.addStyleName(ValoTheme.BUTTON_TINY);
// clearFiltersButton.addClickListener(event -> {
//// usersTableDataProvider.setUserNameFilter(null);
// userNameFilter.setValue("");
// });
// createUserButton = new Button("New User");
// createUserButton.addStyleName(ValoTheme.BUTTON_TINY);
// createUserButton.setIcon(VaadinIcons.PLUS);
// createUserButton.addClickListener(event -> {
// final UserEditor userEditor = new UserEditor(
// this,
// view.getUserRepository(),
// view.getUserManager());
// userEditor.center();
// UI.getCurrent().addWindow(userEditor);
// });
// final HorizontalLayout actionsLayout = new HorizontalLayout(
// clearFiltersButton,
// createUserButton);
// actionsCell.setComponent(actionsLayout);
usersTable = new UsersTable(view, this); usersTable = new UsersTable(controller);
usersTable.setWidth("100%"); usersTable.setWidth("100%");
groupsTable = new GroupsTable(view, this); groupsTable = new GroupsTable(controller);
groupsTable.setWidth("100%"); groupsTable.setWidth("100%");
rolesTable = new RolesTable(view, this); rolesTable = new RolesTable(controller);
rolesTable.setWidth("100%"); rolesTable.setWidth("100%");
rolesTable.setHeight("100%"); rolesTable.setHeight("100%");
@ -180,69 +65,4 @@ public class UsersGroupsRolesTab extends CustomComponent {
} }
public void localize() {
// final ResourceBundle bundle = ResourceBundle
// .getBundle(AdminUiConstants.ADMIN_BUNDLE,
// UI.getCurrent().getLocale());
//
// usersTable
// .getColumn(COL_USER_NAME)
// .setCaption(bundle.getString("ui.admin.users.table.screenname"));
// usersTable
// .getColumn(COL_GIVEN_NAME)
// .setCaption(bundle.getString("ui.admin.users.table.givenname"));
// usersTable
// .getColumn(COL_FAMILY_NAME)
// .setCaption(bundle.getString("ui.admin.users.table.familyname"));
// usersTable
// .getColumn(COL_EMAIL)
// .setCaption(bundle.getString("ui.admin.users.table.primary_email"));
// usersTable
// .getColumn(COL_BANNED)
// .setCaption(bundle.getString("ui.admin.users.table.banned"));
// usersTable
// .getColumn(COL_PASSWORD_RESET_REQUIRED)
// .setCaption(bundle.getString(
// "ui.admin.users.table.password_reset_required"));
//
// userNameFilter.setPlaceholder(bundle
// .getString("ui.admin.users.table.filter.screenname.placeholder"));
// userNameFilter.setDescription(bundle
// .getString("ui.admin.users.table.filter.screenname.description"));
//
// clearFiltersButton.setCaption(bundle
// .getString("ui.admin.users.table.filter.clear"));
usersTable.localize();
}
public void setUsersTableDataProvider(final UsersTableDataProvider dataProvider) {
usersTableDataProvider = dataProvider;
usersTable.setDataProvider(dataProvider);
}
public void setGroupsTableDataProvider(final GroupsTableDataProvider dataProvider) {
groupsTableDataProvider = dataProvider;
groupsTable.setDataProvider(dataProvider);
}
public void setRolesTableDataProvider(final RolesTableDataProvider dataProvider) {
rolesTableDataProvider = dataProvider;
rolesTable.setDataProvider(dataProvider);
}
protected void refreshUsers() {
usersTableDataProvider.refreshAll();
}
protected void refreshGroups() {
groupsTableDataProvider.refreshAll();
}
protected void refreshRoles() {
rolesTableDataProvider.refreshAll();
}
} }

View File

@ -19,8 +19,14 @@
package org.libreccm.admin.ui; package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants; import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.icons.VaadinIcons; import com.vaadin.icons.VaadinIcons;
import com.vaadin.ui.*; import com.vaadin.ui.Button;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.components.grid.HeaderCell; import com.vaadin.ui.components.grid.HeaderCell;
import com.vaadin.ui.components.grid.HeaderRow; import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.renderers.ButtonRenderer; import com.vaadin.ui.renderers.ButtonRenderer;
@ -33,7 +39,7 @@ import java.util.ResourceBundle;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class UsersTable extends Grid<User> { class UsersTable extends Grid<User> {
private static final long serialVersionUID = -6535913368522021496L; private static final long serialVersionUID = -6535913368522021496L;
@ -50,28 +56,29 @@ public class UsersTable extends Grid<User> {
private final Button clearFiltersButton; private final Button clearFiltersButton;
private final Button createUserButton; private final Button createUserButton;
public UsersTable(final AdminView view, protected UsersTable(final UsersGroupsRolesController controller) {
final UsersGroupsRolesTab usersGroupsRoles) {
super(); super();
setDataProvider(controller.getUsersTableDataProvider());
final ResourceBundle bundle = ResourceBundle final ResourceBundle bundle = ResourceBundle
.getBundle(AdminUiConstants.ADMIN_BUNDLE, .getBundle(AdminUiConstants.ADMIN_BUNDLE,
UI.getCurrent().getLocale()); UI.getCurrent().getLocale());
addColumn(User::getName) super.addColumn(User::getName)
.setId(COL_USER_NAME) .setId(COL_USER_NAME)
.setCaption("User Name"); .setCaption(bundle.getString("ui.admin.users.table.screenname"));
addColumn(User::getGivenName) super.addColumn(User::getGivenName)
.setId(COL_GIVEN_NAME) .setId(COL_GIVEN_NAME)
.setCaption("Given name"); .setCaption(bundle.getString("ui.admin.users.table.givenname"));
addColumn(User::getFamilyName) super.addColumn(User::getFamilyName)
.setId(COL_FAMILY_NAME) .setId(COL_FAMILY_NAME)
.setCaption("Family name"); .setCaption(bundle.getString("ui.admin.users.table.familyname"));
addColumn(user -> user.getPrimaryEmailAddress().getAddress()) super.addColumn(user -> user.getPrimaryEmailAddress().getAddress())
.setId(COL_EMAIL) .setId(COL_EMAIL)
.setCaption("E-Mail"); .setCaption(bundle.getString("ui.admin.users.table.primary_email"));
addColumn(user -> { super.addColumn(user -> {
if (user.isBanned()) { if (user.isBanned()) {
return bundle.getString("ui.admin.user.banned_yes"); return bundle.getString("ui.admin.user.banned_yes");
} else { } else {
@ -80,7 +87,7 @@ public class UsersTable extends Grid<User> {
}) })
.setId(COL_BANNED) .setId(COL_BANNED)
.setCaption("Banned?"); .setCaption("Banned?");
addColumn(user -> { super.addColumn(user -> {
if (user.isPasswordResetRequired()) { if (user.isPasswordResetRequired()) {
return bundle.getString( return bundle.getString(
"ui.admin.user.password_reset_required_yes"); "ui.admin.user.password_reset_required_yes");
@ -90,8 +97,9 @@ public class UsersTable extends Grid<User> {
} }
}) })
.setId(COL_PASSWORD_RESET_REQUIRED) .setId(COL_PASSWORD_RESET_REQUIRED)
.setCaption("Password reset required"); .setCaption(bundle
addColumn(user -> bundle.getString("ui.admin.users.table.edit"), .getString("ui.admin.users.table.password_reset_required"));
super.addColumn(user -> bundle.getString("ui.admin.users.table.edit"),
new ButtonRenderer<>(event -> { new ButtonRenderer<>(event -> {
// final UserEditor editor = new UserEditor( // final UserEditor editor = new UserEditor(
// event.getItem(), // event.getItem(),
@ -102,11 +110,13 @@ public class UsersTable extends Grid<User> {
// UI.getCurrent().addWindow(editor); // UI.getCurrent().addWindow(editor);
final UserDetails details = new UserDetails( final UserDetails details = new UserDetails(
event.getItem(), event.getItem(),
usersGroupsRoles, controller.getUserRepository(),
view.getUserRepository(), controller.getUserManager());
view.getUserManager());
details.center(); details.center();
details.setWidth("66.6%"); details.setWidth("66.6%");
details.addCloseListener(closeEvent -> {
getDataProvider().refreshAll();
});
UI.getCurrent().addWindow(details); UI.getCurrent().addWindow(details);
})) }))
.setId(COL_EDIT); .setId(COL_EDIT);
@ -114,8 +124,10 @@ public class UsersTable extends Grid<User> {
final HeaderRow filterRow = appendHeaderRow(); final HeaderRow filterRow = appendHeaderRow();
final HeaderCell userNameFilterCell = filterRow.getCell(COL_USER_NAME); final HeaderCell userNameFilterCell = filterRow.getCell(COL_USER_NAME);
userNameFilter = new TextField(); userNameFilter = new TextField();
userNameFilter.setPlaceholder("User name"); userNameFilter.setPlaceholder(bundle
userNameFilter.setDescription("Filter users by username"); .getString("ui.admin.users.table.filter.screenname.placeholder"));
userNameFilter.setDescription(bundle
.getString("ui.admin.users.table.filter.screenname.description"));
userNameFilter.addStyleName(ValoTheme.TEXTFIELD_TINY); userNameFilter.addStyleName(ValoTheme.TEXTFIELD_TINY);
userNameFilter userNameFilter
.addValueChangeListener(event -> { .addValueChangeListener(event -> {
@ -130,7 +142,8 @@ public class UsersTable extends Grid<User> {
COL_FAMILY_NAME, COL_FAMILY_NAME,
COL_EMAIL, COL_EMAIL,
COL_BANNED); COL_BANNED);
clearFiltersButton = new Button("Clear filters"); clearFiltersButton = new Button(bundle
.getString("ui.admin.users.table.filter.clear"));
clearFiltersButton.addStyleName(ValoTheme.BUTTON_TINY); clearFiltersButton.addStyleName(ValoTheme.BUTTON_TINY);
clearFiltersButton.addClickListener(event -> { clearFiltersButton.addClickListener(event -> {
userNameFilter.setValue(""); userNameFilter.setValue("");
@ -141,9 +154,11 @@ public class UsersTable extends Grid<User> {
createUserButton.setIcon(VaadinIcons.PLUS); createUserButton.setIcon(VaadinIcons.PLUS);
createUserButton.addClickListener(event -> { createUserButton.addClickListener(event -> {
final UserEditor userEditor = new UserEditor( final UserEditor userEditor = new UserEditor(
usersGroupsRoles, controller.getUserRepository(),
view.getUserRepository(), controller.getUserManager());
view.getUserManager()); userEditor.addCloseListener(closeEvent -> {
getDataProvider().refreshAll();
});
userEditor.center(); userEditor.center();
UI.getCurrent().addWindow(userEditor); UI.getCurrent().addWindow(userEditor);
}); });
@ -153,34 +168,34 @@ public class UsersTable extends Grid<User> {
actionsCell.setComponent(actionsLayout); actionsCell.setComponent(actionsLayout);
} }
public void localize() { // public void localize() {
//
final ResourceBundle bundle = ResourceBundle // final ResourceBundle bundle = ResourceBundle
.getBundle(AdminUiConstants.ADMIN_BUNDLE, // .getBundle(AdminUiConstants.ADMIN_BUNDLE,
UI.getCurrent().getLocale()); // UI.getCurrent().getLocale());
//
getColumn(COL_USER_NAME) // getColumn(COL_USER_NAME)
.setCaption(bundle.getString("ui.admin.users.table.screenname")); // .setCaption(bundle.getString("ui.admin.users.table.screenname"));
getColumn(COL_GIVEN_NAME) // getColumn(COL_GIVEN_NAME)
.setCaption(bundle.getString("ui.admin.users.table.givenname")); // .setCaption(bundle.getString("ui.admin.users.table.givenname"));
getColumn(COL_FAMILY_NAME) // getColumn(COL_FAMILY_NAME)
.setCaption(bundle.getString("ui.admin.users.table.familyname")); // .setCaption(bundle.getString("ui.admin.users.table.familyname"));
getColumn(COL_EMAIL) // getColumn(COL_EMAIL)
.setCaption(bundle.getString("ui.admin.users.table.primary_email")); // .setCaption(bundle.getString("ui.admin.users.table.primary_email"));
getColumn(COL_BANNED) // getColumn(COL_BANNED)
.setCaption(bundle.getString("ui.admin.users.table.banned")); // .setCaption(bundle.getString("ui.admin.users.table.banned"));
getColumn(COL_PASSWORD_RESET_REQUIRED) // getColumn(COL_PASSWORD_RESET_REQUIRED)
.setCaption(bundle.getString( // .setCaption(bundle.getString(
"ui.admin.users.table.password_reset_required")); // "ui.admin.users.table.password_reset_required"));
//
userNameFilter.setPlaceholder(bundle // userNameFilter.setPlaceholder(bundle
.getString("ui.admin.users.table.filter.screenname.placeholder")); // .getString("ui.admin.users.table.filter.screenname.placeholder"));
userNameFilter.setDescription(bundle // userNameFilter.setDescription(bundle
.getString("ui.admin.users.table.filter.screenname.description")); // .getString("ui.admin.users.table.filter.screenname.description"));
//
clearFiltersButton.setCaption(bundle // clearFiltersButton.setCaption(bundle
.getString("ui.admin.users.table.filter.clear")); // .getString("ui.admin.users.table.filter.clear"));
//
} // }
} }