diff --git a/ccm-cms/src/main/java/org/librecms/ui/ContentSectionsGrid.java b/ccm-cms/src/main/java/org/librecms/ui/ContentSectionsGrid.java index 3f190947f..4d6c62fe3 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/ContentSectionsGrid.java +++ b/ccm-cms/src/main/java/org/librecms/ui/ContentSectionsGrid.java @@ -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; diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/AdminView.java b/ccm-core/src/main/java/org/libreccm/admin/ui/AdminView.java index 77c05d436..5cb1a2a14 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/AdminView.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/AdminView.java @@ -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,116 +47,49 @@ 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 usersTable; private final TabSheet.Tab tabUsersGroupsRoles; private final UsersGroupsRolesTab usersGroupsRoles; private final JpqlConsole jpqlConsole; 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; } - + 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; - } - } diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/AdminViewController.java b/ccm-core/src/main/java/org/libreccm/admin/ui/AdminViewController.java index 7d9adf408..fec111b3e 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/AdminViewController.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/AdminViewController.java @@ -32,46 +32,36 @@ import javax.inject.Inject; @ViewScoped class AdminViewController { - protected AdminViewController() { - super(); - } - - @Inject - private GlobalizationHelper globalizationHelper; + private ConfigurationsTabController confTabController; @Inject - private GroupsController groupsController; + private GlobalizationHelper globalizationHelper; @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; - } - - - } diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/GroupDetails.java b/ccm-core/src/main/java/org/libreccm/admin/ui/GroupDetails.java index f75db64f3..3a0f375bd 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/GroupDetails.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/GroupDetails.java @@ -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 Jens Pelzetter */ -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()); diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/GroupEditor.java b/ccm-core/src/main/java/org/libreccm/admin/ui/GroupEditor.java index 7896eeac1..6ef60f5fb 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/GroupEditor.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/GroupEditor.java @@ -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 Jens Pelzetter */ -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()); diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/GroupSelector.java b/ccm-core/src/main/java/org/libreccm/admin/ui/GroupSelector.java index 7ef637572..b368789bc 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/GroupSelector.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/GroupSelector.java @@ -35,15 +35,14 @@ import java.util.List; * * @author Jens Pelzetter */ -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 excludedGroups, final GroupSelectionAction action) { diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/GroupsTable.java b/ccm-core/src/main/java/org/libreccm/admin/ui/GroupsTable.java index 6e3cd99ad..3a0f71fb4 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/GroupsTable.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/GroupsTable.java @@ -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 Jens Pelzetter */ -public class GroupsTable extends Grid { +class GroupsTable extends Grid { private static final long serialVersionUID = 2731047837262813862L; @@ -47,10 +55,11 @@ public class GroupsTable extends Grid { 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, @@ -58,14 +67,13 @@ public class GroupsTable extends Grid { 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( + 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 { 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 { 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 { 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 { 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 { 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 { 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(); } diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/JpqlConsole.java b/ccm-core/src/main/java/org/libreccm/admin/ui/JpqlConsole.java index bc601874d..096b00358 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/JpqlConsole.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/JpqlConsole.java @@ -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 Jens Pelzetter */ -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,10 +81,10 @@ public class JpqlConsole extends CustomComponent { private final Label noResultsLabel; private final Panel resultsPanel; - public JpqlConsole(final AdminView view) { - - this.view = view; + JpqlConsole(final JpqlConsoleController controller) { + 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())); diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/PartySelector.java b/ccm-core/src/main/java/org/libreccm/admin/ui/PartySelector.java index d27dbf789..d2fa7dc8a 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/PartySelector.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/PartySelector.java @@ -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 Jens Pelzetter */ -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 excludedParties, final PartySelectionAction action) { diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/RoleDetails.java b/ccm-core/src/main/java/org/libreccm/admin/ui/RoleDetails.java index ff92e2e66..6c778c29f 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/RoleDetails.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/RoleDetails.java @@ -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 Jens Pelzetter */ -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); diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/RoleEditor.java b/ccm-core/src/main/java/org/libreccm/admin/ui/RoleEditor.java index 7a9a08887..ac2be3c88 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/RoleEditor.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/RoleEditor.java @@ -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 Jens Pelzetter */ -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(); } @@ -135,7 +132,7 @@ public class RoleEditor extends Window { } setContent(layout); - + dataHasChanged = false; } @@ -195,9 +192,6 @@ public class RoleEditor extends Window { roleRepo.save(currentRole); dataHasChanged = false; - if (usersGroupsRoles != null) { - usersGroupsRoles.refreshRoles(); - } close(); } diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/RoleSelector.java b/ccm-core/src/main/java/org/libreccm/admin/ui/RoleSelector.java index d8b2db47a..36cbc74e5 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/RoleSelector.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/RoleSelector.java @@ -35,15 +35,14 @@ import java.util.List; * * @author Jens Pelzetter */ -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 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 rolesGrid = new Grid<>(); diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/RolesManager.java b/ccm-core/src/main/java/org/libreccm/admin/ui/RolesManager.java deleted file mode 100644 index 81f3f83c6..000000000 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/RolesManager.java +++ /dev/null @@ -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 Jens Pelzetter - */ -@ViewScoped -class RolesManager { - - @Inject - private RoleManager roleManager; - - @Inject - private RoleRepository roleRepository; - - @Inject - private RolesTableDataProvider rolesTableDataProvider; - -} diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/RolesTable.java b/ccm-core/src/main/java/org/libreccm/admin/ui/RolesTable.java index 79347083b..611a828ac 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/RolesTable.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/RolesTable.java @@ -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 Jens Pelzetter */ -public class RolesTable extends Grid { +class RolesTable extends Grid { private static final long serialVersionUID = 8298191390811634176L; @@ -50,10 +59,11 @@ public class RolesTable extends Grid { 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, @@ -61,7 +71,7 @@ public class RolesTable extends Grid { 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 { } }) .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 { 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 { 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 { 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 { 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 { 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 { private void deleteRole() { roleRepo.delete(role); - usersGroupsRoles.refreshRoles(); + getDataProvider().refreshAll(); close(); } diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/UserDetails.java b/ccm-core/src/main/java/org/libreccm/admin/ui/UserDetails.java index ee8931132..851559313 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/UserDetails.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/UserDetails.java @@ -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 Jens Pelzetter */ -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, - final UserRepository userRepo, - final UserManager userManager) { + 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); diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/UserEditor.java b/ccm-core/src/main/java/org/libreccm/admin/ui/UserEditor.java index 312f98718..d0b5a1f35 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/UserEditor.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/UserEditor.java @@ -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 Jens Pelzetter */ -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, - final UserManager userManager) { + 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(); } diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/UserSelector.java b/ccm-core/src/main/java/org/libreccm/admin/ui/UserSelector.java index 5999ba394..dde484000 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/UserSelector.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/UserSelector.java @@ -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 Jens Pelzetter */ -public class UserSelector extends Window { +class UserSelector extends Window { private static final long serialVersionUID = -6227551833159691370L; @@ -43,12 +48,10 @@ 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, - final String actionLabel, - final UsersGroupsRolesTab usersGroupsRoles, - final List excludedUsers, - final UserSelectionAction action) { + protected UserSelector(final String caption, + final String actionLabel, + final List excludedUsers, + final UserSelectionAction action) { addWidgets(caption, actionLabel, excludedUsers, action); } diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/UsersGroupsRolesController.java b/ccm-core/src/main/java/org/libreccm/admin/ui/UsersGroupsRolesController.java new file mode 100644 index 000000000..50f51fa65 --- /dev/null +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/UsersGroupsRolesController.java @@ -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 Jens Pelzetter + */ +@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; + } + +} diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/UsersGroupsRolesTab.java b/ccm-core/src/main/java/org/libreccm/admin/ui/UsersGroupsRolesTab.java index c0e36f8ce..e9552dc9c 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/UsersGroupsRolesTab.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/UsersGroupsRolesTab.java @@ -29,29 +29,12 @@ import java.util.ResourceBundle; * * @author Jens Pelzetter */ -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 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,118 +43,20 @@ 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%"); - + tabSheet.addTab(usersTable, "Users"); tabSheet.addTab(groupsTable, "Groups"); tabSheet.addTab(rolesTable, "Roles"); @@ -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(); - } - } diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/UsersTable.java b/ccm-core/src/main/java/org/libreccm/admin/ui/UsersTable.java index f84616e93..e61631931 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/UsersTable.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/UsersTable.java @@ -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 Jens Pelzetter */ -public class UsersTable extends Grid { +class UsersTable extends Grid { private static final long serialVersionUID = -6535913368522021496L; @@ -50,28 +56,29 @@ public class UsersTable extends Grid { 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 { }) .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 { } }) .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 { // 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 { 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 { 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 { 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 { 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")); +// +// } }