CCM NG: Code cleanup Vaadin prototype

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5091 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2017-10-28 15:15:14 +00:00
parent d9b3fcdd74
commit d80417be9f
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.ui.Button;
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.TextField;
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.security.PermissionChecker;
import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.Folder;
import org.librecms.contentsection.privileges.AdminPrivileges;
import org.librecms.contentsection.privileges.ItemPrivileges;

View File

@ -19,6 +19,7 @@
package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.cdi.CDIView;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener;
@ -27,13 +28,11 @@ import com.vaadin.ui.CssLayout;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.TabSheet;
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.inject.Inject;
import javax.servlet.ServletContext;
import java.util.ResourceBundle;
/**
@ -48,52 +47,11 @@ public class AdminView extends CustomComponent implements View {
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 final AdminViewController controller;
private final TabSheet tabSheet;
// private final Grid<User> usersTable;
private final TabSheet.Tab tabUsersGroupsRoles;
private final UsersGroupsRolesTab usersGroupsRoles;
@ -101,19 +59,28 @@ public class AdminView extends CustomComponent implements View {
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();
usersGroupsRoles = new UsersGroupsRolesTab(this);
tabUsersGroupsRoles = tabSheet.addTab(usersGroupsRoles,
"Users/Groups/Roles");
usersGroupsRoles = new UsersGroupsRolesTab(controller
.getUsersGroupsRolesController());
tabUsersGroupsRoles = tabSheet
.addTab(usersGroupsRoles,
bundle.getString("ui.admin.tab.users_groups_roles.title"));
final ServletContext servletContext = VaadinServlet
.getCurrent()
.getServletContext();
if ("true".equals(servletContext.getInitParameter("ccm.develmode"))) {
jpqlConsole = new JpqlConsole(this);
jpqlConsole = new JpqlConsole(controller.getJpqlConsoleController());
tabSheet.addTab(jpqlConsole, "JPQL Console");
} else {
jpqlConsole = null;
@ -122,42 +89,7 @@ public class AdminView extends CustomComponent implements View {
configurationTab = new ConfigurationTab();
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();
// footer.setWidth("100%");
footer.setHeight("5em");
final VerticalLayout viewLayout = new VerticalLayout(new Header(),
@ -169,64 +101,7 @@ public class AdminView extends CustomComponent implements View {
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
class AdminViewController {
protected AdminViewController() {
super();
}
@Inject
private ConfigurationsTabController confTabController;
@Inject
private GlobalizationHelper globalizationHelper;
@Inject
private GroupsController groupsController;
@Inject
private JpqlConsoleController jpqlConsoleController;
@Inject
private RolesManager rolesManager;
private UsersGroupsRolesController usersGroupsRolesController;
@Inject
private UsersController usersController;
protected AdminViewController() {
super();
}
public ConfigurationsTabController getConfTabController() {
return confTabController;
}
protected GlobalizationHelper getGlobalizationHelper() {
return globalizationHelper;
}
protected GroupsController getGroupsController() {
return groupsController;
}
protected JpqlConsoleController getJpqlConsoleController() {
return jpqlConsoleController;
}
protected RolesManager getRolesManager() {
return rolesManager;
protected UsersGroupsRolesController getUsersGroupsRolesController() {
return usersGroupsRolesController;
}
protected UsersController getUsersController() {
return usersController;
}
}

View File

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

View File

@ -19,12 +19,20 @@
package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.data.HasValue;
import com.vaadin.server.Page;
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.GroupManager;
import org.libreccm.security.GroupRepository;
import java.util.ResourceBundle;
@ -33,44 +41,34 @@ import java.util.ResourceBundle;
*
* @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 final UsersGroupsRolesTab usersGroupsRoles;
private final Group group;
private final GroupRepository groupRepo;
private final GroupManager groupManager;
private boolean dataHasChanged = false;
private TextField groupName;
public GroupEditor(final UsersGroupsRolesTab usersGroupsRoles,
final GroupRepository groupRepo,
final GroupManager groupManager) {
protected GroupEditor(final GroupRepository groupRepo) {
super("Create new group");
this.usersGroupsRoles = usersGroupsRoles;
group = null;
this.groupRepo = groupRepo;
this.groupManager = groupManager;
addWidgets();
}
public GroupEditor(final Group group,
final UsersGroupsRolesTab usersGroupsRoles,
final GroupRepository groupRepo,
final GroupManager groupManager) {
final GroupRepository groupRepo) {
super(String.format("Edit group %s", group.getName()));
this.group = group;
this.usersGroupsRoles = usersGroupsRoles;
this.groupRepo = groupRepo;
this.groupManager = groupManager;
addWidgets();
}
@ -179,9 +177,6 @@ public class GroupEditor extends Window {
groupRepo.save(currentGroup);
dataHasChanged = false;
if (usersGroupsRoles != null) {
usersGroupsRoles.refreshGroups();
}
close();
new Notification(notificationText, Notification.Type.TRAY_NOTIFICATION)
.show(Page.getCurrent());

View File

@ -35,15 +35,14 @@ import java.util.List;
*
* @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 String COL_NAME = "groupname";
public GroupSelector(final String caption,
protected GroupSelector(final String caption,
final String actionLabel,
final UsersGroupsRolesTab usersGroupsRoles,
final List<Group> excludedGroups,
final GroupSelectionAction action) {

View File

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

View File

@ -19,15 +19,28 @@
package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.data.HasValue;
import com.vaadin.data.ValueProvider;
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.Logger;
import javax.persistence.Id;
import javax.persistence.PersistenceException;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
@ -35,19 +48,29 @@ import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
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 static org.primefaces.component.schedule.Schedule.PropertyKeys.*;
/**
*
* @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 Logger LOGGER = LogManager.getLogger(JpqlConsole.class);
private final AdminView view;
private final JpqlConsoleController controller;
private final TextArea queryArea;
private final TextField maxResults;
@ -58,9 +81,9 @@ public class JpqlConsole extends CustomComponent {
private final Label noResultsLabel;
private final Panel resultsPanel;
public JpqlConsole(final AdminView view) {
JpqlConsole(final JpqlConsoleController controller) {
this.view = view;
this.controller = controller;
final ResourceBundle bundle = ResourceBundle.getBundle(
AdminUiConstants.ADMIN_BUNDLE, UI.getCurrent().getLocale());
@ -119,8 +142,7 @@ public class JpqlConsole extends CustomComponent {
final List<?> result;
try {
result = view
.getJpqlConsoleController()
result = controller
.executeQuery(queryStr,
Integer.parseInt(maxResults.getValue()),
Integer.parseInt(offset.getValue()));

View File

@ -19,8 +19,13 @@
package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants;
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.HeaderRow;
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>
*/
public class PartySelector extends Window {
class PartySelector extends Window {
private static final long serialVersionUID = 6915710902238111484L;
private static final String COL_PARTY_NAME = "partyname";
public PartySelector(final String caption,
protected PartySelector(final String caption,
final String actionLabel,
final UsersGroupsRolesTab usersGroupsRoles,
final List<Party> excludedParties,
final PartySelectionAction action) {

View File

@ -19,14 +19,27 @@
package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants;
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.HeaderRow;
import com.vaadin.ui.renderers.ButtonRenderer;
import com.vaadin.ui.themes.ValoTheme;
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;
@ -34,26 +47,26 @@ import java.util.ResourceBundle;
*
* @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 String COL_MEMBER_NAME = "partyname";
private static final String COL_MEMBER_REMOVE = "member_remove";
private final UsersGroupsRolesTab usersGroupsRoles;
// private final UsersGroupsRolesTab usersGroupsRoles;
private final Role role;
private final RoleRepository roleRepo;
private final RoleManager roleManager;
public RoleDetails(final Role role,
final UsersGroupsRolesTab usersGroupsRoles,
protected RoleDetails(final Role role,
// final UsersGroupsRolesTab usersGroupsRoles,
final RoleRepository roleRepo,
final RoleManager roleManager) {
super(String.format("Details of role %s", role.getName()));
this.usersGroupsRoles = usersGroupsRoles;
// this.usersGroupsRoles = usersGroupsRoles;
this.role = role;
this.roleRepo = roleRepo;
this.roleManager = roleManager;
@ -83,9 +96,8 @@ public class RoleDetails extends Window {
bundle.getString("ui.admin.roles.table.edit"),
event -> {
final RoleEditor editor = new RoleEditor(role,
usersGroupsRoles,
roleRepo,
roleManager);
// usersGroupsRoles,
roleRepo);
editor.center();
UI.getCurrent().addWindow(editor);
});
@ -125,7 +137,6 @@ public class RoleDetails extends Window {
final PartySelector partySelector = new PartySelector(
"Select parties to add to role",
"Add selected parties to role",
usersGroupsRoles,
partyRepo.findByRole(role),
selectedParties -> {
selectedParties.forEach(party -> {
@ -133,6 +144,9 @@ public class RoleDetails extends Window {
});
partiesGrid.getDataProvider().refreshAll();
});
partySelector.addCloseListener(closeEvent -> {
partiesGrid.getDataProvider().refreshAll();
});
partySelector.center();
partySelector.setWidth("80%");
UI.getCurrent().addWindow(partySelector);

View File

@ -19,11 +19,18 @@
package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.data.HasValue;
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.RoleManager;
import org.libreccm.security.RoleRepository;
import java.util.ResourceBundle;
@ -32,45 +39,35 @@ import java.util.ResourceBundle;
*
* @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 final UsersGroupsRolesTab usersGroupsRoles;
private final Role role;
private final RoleRepository roleRepo;
private final RoleManager roleManager;
private boolean dataHasChanged = false;
private TextField roleName;
private TextArea roleDescription;
public RoleEditor(final UsersGroupsRolesTab usersGroupsRoles,
final RoleRepository roleRepo,
final RoleManager roleManager) {
protected RoleEditor(final RoleRepository roleRepo) {
super("Create new role");
this.usersGroupsRoles = usersGroupsRoles;
role = null;
this.roleRepo = roleRepo;
this.roleManager = roleManager;
addWidgets();
}
public RoleEditor(final Role role,
final UsersGroupsRolesTab usersGroupsRoles,
final RoleRepository roleRepo,
final RoleManager roleManager) {
final RoleRepository roleRepo) {
super(String.format("Edit role %s", role.getName()));
this.role = role;
this.usersGroupsRoles = usersGroupsRoles;
this.roleRepo = roleRepo;
this.roleManager = roleManager;
addWidgets();
}
@ -195,9 +192,6 @@ public class RoleEditor extends Window {
roleRepo.save(currentRole);
dataHasChanged = false;
if (usersGroupsRoles != null) {
usersGroupsRoles.refreshRoles();
}
close();
}

View File

@ -35,15 +35,14 @@ import java.util.List;
*
* @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 String COL_NAME = "rolename";
public RoleSelector(final String caption,
protected RoleSelector(final String caption,
final String actionLabel,
final UsersGroupsRolesTab usersGroupsRoles,
final List<Role> excludedRoles,
final RoleSelectionAction action) {
@ -57,10 +56,6 @@ public class RoleSelector extends Window {
setCaption(caption);
// final ResourceBundle bundle = ResourceBundle
// .getBundle(AdminUiConstants.ADMIN_BUNDLE,
// UI.getCurrent().getLocale());
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
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;
import com.arsdigita.ui.admin.AdminUiConstants;
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.HeaderRow;
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>
*/
public class RolesTable extends Grid<Role> {
class RolesTable extends Grid<Role> {
private static final long serialVersionUID = 8298191390811634176L;
@ -50,18 +59,19 @@ public class RolesTable extends Grid<Role> {
private final Button clearFiltersButton;
private final Button createRoleButton;
public RolesTable(final AdminView view,
final UsersGroupsRolesTab usersGroupsRoles) {
protected RolesTable(final UsersGroupsRolesController controller) {
super();
super.setDataProvider(controller.getRolesTableDataProvider());
final ResourceBundle bundle = ResourceBundle
.getBundle(AdminUiConstants.ADMIN_BUNDLE,
UI.getCurrent().getLocale());
addColumn(Role::getName)
.setId(COL_NAME)
.setCaption("Name");
.setCaption(bundle.getString("ui.admin.roles.table.name"));
addColumn(role -> {
if (role.getDescription().hasValue(UI.getCurrent().getLocale())) {
return role.getDescription()
@ -83,24 +93,16 @@ public class RolesTable extends Grid<Role> {
}
})
.setId(COL_DESCRIPTION)
.setCaption("Description");
.setCaption(bundle.getString("ui.admin.roles.table.description"));
addColumn(user -> bundle.getString("ui.admin.roles.table.edit"),
new ButtonRenderer<>(event -> {
final RoleDetails roleDetails = new RoleDetails(
event.getItem(),
usersGroupsRoles,
view.getRoleRepository(),
view.getRoleManager());
controller.getRoleRepository(),
controller.getRoleManager());
roleDetails.center();
roleDetails.setWidth("80%");
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);
addColumn(user -> bundle.getString("ui.admin.roles.table.delete"),
@ -108,8 +110,7 @@ public class RolesTable extends Grid<Role> {
final ConfirmDeleteDialog dialog
= new ConfirmDeleteDialog(
event.getItem(),
usersGroupsRoles,
view.getRoleRepository());
controller.getRoleRepository());
dialog.center();
UI.getCurrent().addWindow(dialog);
}))
@ -118,8 +119,10 @@ public class RolesTable extends Grid<Role> {
final HeaderRow filterRow = appendHeaderRow();
final HeaderCell GroupNameFilterCell = filterRow.getCell(COL_NAME);
roleNameFilter = new TextField();
roleNameFilter.setPlaceholder("Role name");
roleNameFilter.setDescription("Filter Roles by name");
roleNameFilter.setPlaceholder(bundle
.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
.addValueChangeListener(event -> {
@ -133,7 +136,8 @@ public class RolesTable extends Grid<Role> {
COL_DESCRIPTION,
COL_EDIT,
COL_DELETE);
clearFiltersButton = new Button("Clear filters");
clearFiltersButton = new Button(bundle
.getString("ui.admin.users.table.filter.clear"));
clearFiltersButton.setStyleName(ValoTheme.BUTTON_TINY);
clearFiltersButton.setIcon(VaadinIcons.BACKSPACE);
clearFiltersButton.addClickListener(event -> {
@ -145,10 +149,11 @@ public class RolesTable extends Grid<Role> {
createRoleButton.setIcon(VaadinIcons.PLUS);
createRoleButton.addClickListener(event -> {
final RoleEditor roleEditor = new RoleEditor(
usersGroupsRoles,
view.getRoleRepository(),
view.getRoleManager());
controller.getRoleRepository());
roleEditor.center();
roleEditor.addCloseListener(closeEvent -> {
getDataProvider().refreshAll();
});
UI.getCurrent().addWindow(roleEditor);
});
final HorizontalLayout actionsLayout = new HorizontalLayout(
@ -157,42 +162,16 @@ public class RolesTable extends Grid<Role> {
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 static final long serialVersionUID = -1315311220464298282L;
private final Role role;
private final UsersGroupsRolesTab usersGroupsRoles;
private final RoleRepository roleRepo;
public ConfirmDeleteDialog(final Role role,
final UsersGroupsRolesTab usersGroupsRoles,
final RoleRepository roleRepo) {
this.role = role;
this.usersGroupsRoles = usersGroupsRoles;
this.roleRepo = roleRepo;
final ResourceBundle bundle = ResourceBundle
@ -222,7 +201,7 @@ public class RolesTable extends Grid<Role> {
private void deleteRole() {
roleRepo.delete(role);
usersGroupsRoles.refreshRoles();
getDataProvider().refreshAll();
close();
}

View File

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

View File

@ -19,11 +19,23 @@
package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants;
import com.vaadin.data.HasValue;
import com.vaadin.data.provider.AbstractDataProvider;
import com.vaadin.data.provider.Query;
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.Logger;
import org.libreccm.cdi.utils.CdiUtil;
@ -35,6 +47,7 @@ import org.libreccm.security.UserManager;
import org.libreccm.security.UserRepository;
import javax.mail.MessagingException;
import java.util.Arrays;
import java.util.ResourceBundle;
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>
*/
public class UserEditor extends Window {
class UserEditor extends Window {
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 UserRepository userRepo;
private final UserManager userManager;
@ -75,13 +87,11 @@ public class UserEditor extends Window {
private CheckBox passwordResetRequired;
private CheckBox banned;
public UserEditor(final UsersGroupsRolesTab usersGroupsRoles,
final UserRepository userRepo,
protected UserEditor(final UserRepository userRepo,
final UserManager userManager) {
super("Create new user");
this.usersGroupsRoles = usersGroupsRoles;
user = null;
this.userRepo = userRepo;
this.userManager = userManager;
@ -90,14 +100,12 @@ public class UserEditor extends Window {
}
public UserEditor(final User user,
final UsersGroupsRolesTab usersGroupsRoles,
final UserRepository userRepo,
final UserManager userManager) {
super(String.format("Edit user %s", user.getName()));
this.user = user;
this.usersGroupsRoles = usersGroupsRoles;
this.userRepo = userRepo;
this.userManager = userManager;
@ -425,9 +433,6 @@ public class UserEditor extends Window {
}
dataHasChanged = false;
if (usersGroupsRoles != null) {
usersGroupsRoles.refreshUsers();
}
close();
}

View File

@ -19,8 +19,13 @@
package org.libreccm.admin.ui;
import com.arsdigita.ui.admin.AdminUiConstants;
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.HeaderRow;
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>
*/
public class UserSelector extends Window {
class UserSelector extends Window {
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_EMAIL = "email";
public UserSelector(final String caption,
protected UserSelector(final String caption,
final String actionLabel,
final UsersGroupsRolesTab usersGroupsRoles,
final List<User> excludedUsers,
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>
*/
public class UsersGroupsRolesTab extends CustomComponent {
class UsersGroupsRolesTab extends CustomComponent {
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 Grid<User> usersTable;
// private final TextField userNameFilter;
// private final Button clearFiltersButton;
// private final Button createUserButton;
private final UsersTable usersTable;
private final GroupsTable groupsTable;
private final RolesTable rolesTable;
@ -60,115 +43,17 @@ public class UsersGroupsRolesTab extends CustomComponent {
private GroupsTableDataProvider groupsTableDataProvider;
private RolesTableDataProvider rolesTableDataProvider;
public UsersGroupsRolesTab(final AdminView view) {
this.view = view;
final ResourceBundle bundle = ResourceBundle
.getBundle(AdminUiConstants.ADMIN_BUNDLE,
UI.getCurrent().getLocale());
protected UsersGroupsRolesTab(final UsersGroupsRolesController controller) {
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%");
groupsTable = new GroupsTable(view, this);
groupsTable = new GroupsTable(controller);
groupsTable.setWidth("100%");
rolesTable = new RolesTable(view, this);
rolesTable = new RolesTable(controller);
rolesTable.setWidth("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;
import com.arsdigita.ui.admin.AdminUiConstants;
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.HeaderRow;
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>
*/
public class UsersTable extends Grid<User> {
class UsersTable extends Grid<User> {
private static final long serialVersionUID = -6535913368522021496L;
@ -50,28 +56,29 @@ public class UsersTable extends Grid<User> {
private final Button clearFiltersButton;
private final Button createUserButton;
public UsersTable(final AdminView view,
final UsersGroupsRolesTab usersGroupsRoles) {
protected UsersTable(final UsersGroupsRolesController controller) {
super();
setDataProvider(controller.getUsersTableDataProvider());
final ResourceBundle bundle = ResourceBundle
.getBundle(AdminUiConstants.ADMIN_BUNDLE,
UI.getCurrent().getLocale());
addColumn(User::getName)
super.addColumn(User::getName)
.setId(COL_USER_NAME)
.setCaption("User Name");
addColumn(User::getGivenName)
.setCaption(bundle.getString("ui.admin.users.table.screenname"));
super.addColumn(User::getGivenName)
.setId(COL_GIVEN_NAME)
.setCaption("Given name");
addColumn(User::getFamilyName)
.setCaption(bundle.getString("ui.admin.users.table.givenname"));
super.addColumn(User::getFamilyName)
.setId(COL_FAMILY_NAME)
.setCaption("Family name");
addColumn(user -> user.getPrimaryEmailAddress().getAddress())
.setCaption(bundle.getString("ui.admin.users.table.familyname"));
super.addColumn(user -> user.getPrimaryEmailAddress().getAddress())
.setId(COL_EMAIL)
.setCaption("E-Mail");
addColumn(user -> {
.setCaption(bundle.getString("ui.admin.users.table.primary_email"));
super.addColumn(user -> {
if (user.isBanned()) {
return bundle.getString("ui.admin.user.banned_yes");
} else {
@ -80,7 +87,7 @@ public class UsersTable extends Grid<User> {
})
.setId(COL_BANNED)
.setCaption("Banned?");
addColumn(user -> {
super.addColumn(user -> {
if (user.isPasswordResetRequired()) {
return bundle.getString(
"ui.admin.user.password_reset_required_yes");
@ -90,8 +97,9 @@ public class UsersTable extends Grid<User> {
}
})
.setId(COL_PASSWORD_RESET_REQUIRED)
.setCaption("Password reset required");
addColumn(user -> bundle.getString("ui.admin.users.table.edit"),
.setCaption(bundle
.getString("ui.admin.users.table.password_reset_required"));
super.addColumn(user -> bundle.getString("ui.admin.users.table.edit"),
new ButtonRenderer<>(event -> {
// final UserEditor editor = new UserEditor(
// event.getItem(),
@ -102,11 +110,13 @@ public class UsersTable extends Grid<User> {
// UI.getCurrent().addWindow(editor);
final UserDetails details = new UserDetails(
event.getItem(),
usersGroupsRoles,
view.getUserRepository(),
view.getUserManager());
controller.getUserRepository(),
controller.getUserManager());
details.center();
details.setWidth("66.6%");
details.addCloseListener(closeEvent -> {
getDataProvider().refreshAll();
});
UI.getCurrent().addWindow(details);
}))
.setId(COL_EDIT);
@ -114,8 +124,10 @@ public class UsersTable extends Grid<User> {
final HeaderRow filterRow = appendHeaderRow();
final HeaderCell userNameFilterCell = filterRow.getCell(COL_USER_NAME);
userNameFilter = new TextField();
userNameFilter.setPlaceholder("User name");
userNameFilter.setDescription("Filter users by username");
userNameFilter.setPlaceholder(bundle
.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
.addValueChangeListener(event -> {
@ -130,7 +142,8 @@ public class UsersTable extends Grid<User> {
COL_FAMILY_NAME,
COL_EMAIL,
COL_BANNED);
clearFiltersButton = new Button("Clear filters");
clearFiltersButton = new Button(bundle
.getString("ui.admin.users.table.filter.clear"));
clearFiltersButton.addStyleName(ValoTheme.BUTTON_TINY);
clearFiltersButton.addClickListener(event -> {
userNameFilter.setValue("");
@ -141,9 +154,11 @@ public class UsersTable extends Grid<User> {
createUserButton.setIcon(VaadinIcons.PLUS);
createUserButton.addClickListener(event -> {
final UserEditor userEditor = new UserEditor(
usersGroupsRoles,
view.getUserRepository(),
view.getUserManager());
controller.getUserRepository(),
controller.getUserManager());
userEditor.addCloseListener(closeEvent -> {
getDataProvider().refreshAll();
});
userEditor.center();
UI.getCurrent().addWindow(userEditor);
});
@ -153,34 +168,34 @@ public class UsersTable extends Grid<User> {
actionsCell.setComponent(actionsLayout);
}
public void localize() {
final ResourceBundle bundle = ResourceBundle
.getBundle(AdminUiConstants.ADMIN_BUNDLE,
UI.getCurrent().getLocale());
getColumn(COL_USER_NAME)
.setCaption(bundle.getString("ui.admin.users.table.screenname"));
getColumn(COL_GIVEN_NAME)
.setCaption(bundle.getString("ui.admin.users.table.givenname"));
getColumn(COL_FAMILY_NAME)
.setCaption(bundle.getString("ui.admin.users.table.familyname"));
getColumn(COL_EMAIL)
.setCaption(bundle.getString("ui.admin.users.table.primary_email"));
getColumn(COL_BANNED)
.setCaption(bundle.getString("ui.admin.users.table.banned"));
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"));
}
// public void localize() {
//
// final ResourceBundle bundle = ResourceBundle
// .getBundle(AdminUiConstants.ADMIN_BUNDLE,
// UI.getCurrent().getLocale());
//
// getColumn(COL_USER_NAME)
// .setCaption(bundle.getString("ui.admin.users.table.screenname"));
// getColumn(COL_GIVEN_NAME)
// .setCaption(bundle.getString("ui.admin.users.table.givenname"));
// getColumn(COL_FAMILY_NAME)
// .setCaption(bundle.getString("ui.admin.users.table.familyname"));
// getColumn(COL_EMAIL)
// .setCaption(bundle.getString("ui.admin.users.table.primary_email"));
// getColumn(COL_BANNED)
// .setCaption(bundle.getString("ui.admin.users.table.banned"));
// 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"));
//
// }
}