diff --git a/ccm-core/src/main/java/com/arsdigita/bebop/SaveCancelSection.java b/ccm-core/src/main/java/com/arsdigita/bebop/SaveCancelSection.java new file mode 100755 index 000000000..b9e6d20c1 --- /dev/null +++ b/ccm-core/src/main/java/com/arsdigita/bebop/SaveCancelSection.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +package com.arsdigita.bebop; + +import com.arsdigita.bebop.form.Submit; +import com.arsdigita.bebop.util.GlobalizationUtil; + +/** + * A form section with two buttons (Save and Cancel) aligned to + * the right. + * + * @author Stanislav Freidin + * @author Sören Bernstein + * @version $Id: SaveCancelSection.java 287 2005-02-22 00:29:02Z sskracic $ + */ +public class SaveCancelSection extends FormSection { + + private Submit m_saveWidget, m_cancelWidget; + + /** + * Constructs a new SaveCancelSection. + */ + public SaveCancelSection() { + super(new BoxPanel(BoxPanel.HORIZONTAL, false)); + + BoxPanel panel = (BoxPanel)getPanel(); + panel.setWidth("2%"); + + createWidgets(); + + add(m_saveWidget, BoxPanel.RIGHT); + add(m_cancelWidget, BoxPanel.RIGHT); + } + + public SaveCancelSection(Container c) { + super(c); + + createWidgets(); + add(m_saveWidget); + add(m_cancelWidget); + } + + private void createWidgets() { + m_saveWidget = new Submit("save"); + m_saveWidget.setButtonLabel(GlobalizationUtil.globalize("bebop.save")); + + m_cancelWidget = new Submit("cancel"); + m_cancelWidget.setButtonLabel(GlobalizationUtil.globalize("bebop.cancel")); + } + + /** + * Gets the Save button. + * @return the Save button. + */ + public Submit getSaveButton() { + return m_saveWidget; + } + + /** + * Gets the Cancel button. + * @return the Cancel button. + */ + public Submit getCancelButton() { + return m_cancelWidget; + } +} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserAdmin.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserAdmin.java index d09a01aa9..cc8733144 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserAdmin.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserAdmin.java @@ -20,18 +20,37 @@ package com.arsdigita.ui.admin.usersgroupsroles; import com.arsdigita.bebop.ActionLink; import com.arsdigita.bebop.BoxPanel; +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.ControlLink; import com.arsdigita.bebop.Form; +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Page; import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.ParameterSingleSelectionModel; import com.arsdigita.bebop.PropertySheet; +import com.arsdigita.bebop.SaveCancelSection; +import com.arsdigita.bebop.Table; import com.arsdigita.bebop.Text; +import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.event.TableActionEvent; +import com.arsdigita.bebop.event.TableActionListener; +import com.arsdigita.bebop.form.CheckboxGroup; +import com.arsdigita.bebop.form.Option; import com.arsdigita.bebop.form.Submit; import com.arsdigita.bebop.form.TextField; import com.arsdigita.bebop.parameters.LongParameter; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.bebop.table.TableCellRenderer; +import com.arsdigita.bebop.table.TableColumn; +import com.arsdigita.bebop.table.TableColumnModel; import com.arsdigita.globalization.GlobalizedMessage; -import org.dom4j.tree.BackedList; +import org.libreccm.cdi.utils.CdiUtil; +import org.libreccm.core.EmailAddress; +import org.libreccm.security.User; +import org.libreccm.security.UserRepository; import static com.arsdigita.ui.admin.AdminUiConstants.*; @@ -42,7 +61,9 @@ import static com.arsdigita.ui.admin.AdminUiConstants.*; public class UserAdmin extends BoxPanel { private final LongParameter userIdParameter; + private final StringParameter emailParameter; private final ParameterSingleSelectionModel selectedUserId; + private final ParameterSingleSelectionModel selectedEmailAddress; private final TextField usersTableFilter; private final BoxPanel usersTablePanel; private final UsersTable usersTable; @@ -51,24 +72,25 @@ public class UserAdmin extends BoxPanel { private final BoxPanel actionLinks; // private final UserDetails userDetails; private final BoxPanel userDetails; + private final Form emailForm; public UserAdmin() { super(); setIdAttr("userAdmin"); - + usersTablePanel = new BoxPanel(); usersTablePanel.setIdAttr("usersTablePanel"); - + final Form filterForm = new Form("usersTableFilterForm"); usersTableFilter = new TextField("usersTableFilter"); usersTableFilter.setLabel(new GlobalizedMessage( - "ui.admin.users.table.filter.term", ADMIN_BUNDLE)); + "ui.admin.users.table.filter.term", ADMIN_BUNDLE)); filterForm.add(usersTableFilter); filterForm.add(new Submit(new GlobalizedMessage( - "ui.admin.users.table.filter.submit", ADMIN_BUNDLE))); + "ui.admin.users.table.filter.submit", ADMIN_BUNDLE))); final ActionLink clearLink = new ActionLink(new GlobalizedMessage( - "ui.admin.users.table.filter.clear", ADMIN_BUNDLE)); + "ui.admin.users.table.filter.clear", ADMIN_BUNDLE)); clearLink.addActionListener((e) -> { final PageState state = e.getPageState(); usersTableFilter.setValue(state, null); @@ -80,11 +102,15 @@ public class UserAdmin extends BoxPanel { selectedUserId = new ParameterSingleSelectionModel<>(userIdParameter); //selectedUserId = new ParameterSingleSelectionModel<>(USER_ID_PARAM); + emailParameter = new StringParameter("selected_email_address"); + selectedEmailAddress = new ParameterSingleSelectionModel<>( + emailParameter); + usersTable = new UsersTable(this, usersTableFilter, selectedUserId); usersTablePanel.add(usersTable); add(usersTablePanel); - + // final Text text = new Text(); // text.setPrintListener((final PrintEvent e) -> { // final Text target = (Text) e.getTarget(); @@ -94,10 +120,8 @@ public class UserAdmin extends BoxPanel { // } // }); // add(text); - // userDetails = new UserDetails(this, selectedUserId); // add(new UserDetails(this, selectedUserId)); - userDetails = new BoxPanel(); userDetails.setIdAttr("userDetails"); @@ -107,12 +131,12 @@ public class UserAdmin extends BoxPanel { backToUsersTable.addActionListener( e -> closeUserDetails(e.getPageState())); userDetails.add(backToUsersTable); - + userProperties = new PropertySheet(new UserPropertySheetModelBuilder( this, selectedUserId)); userProperties.setIdAttr("userProperties"); userDetails.add(userProperties); - + actionLinks = new BoxPanel(BoxPanel.HORIZONTAL); actionLinks.setIdAttr("userDetailsActionLinks"); final ActionLink editUserDetailsLink = new ActionLink( @@ -122,27 +146,249 @@ public class UserAdmin extends BoxPanel { }); actionLinks.add(editUserDetailsLink); actionLinks.add(new Text(" | ")); - + final ActionLink setPasswordLink = new ActionLink( - new GlobalizedMessage("ui.admin.user_details.set_password", - ADMIN_BUNDLE)); + new GlobalizedMessage("ui.admin.user_details.set_password", + ADMIN_BUNDLE)); setPasswordLink.addActionListener(e -> { //ToDo }); actionLinks.add(setPasswordLink); actionLinks.add(new Text(" | ")); - + final ActionLink generatePasswordLink = new ActionLink( - new GlobalizedMessage("ui.admin.user_details.generate_password", - ADMIN_BUNDLE)); + new GlobalizedMessage("ui.admin.user_details.generate_password", + ADMIN_BUNDLE)); generatePasswordLink.addActionListener(e -> { //ToDo }); actionLinks.add(generatePasswordLink); - userDetails.add(actionLinks); + + final Table primaryEmailTable = new Table(); + primaryEmailTable.setModelBuilder( + new UserPrimaryEmailTableModelBuilder(selectedUserId)); + final TableColumnModel primaryEmailTableColModel = primaryEmailTable + .getColumnModel(); + primaryEmailTableColModel.add(new TableColumn( + UserPrimaryEmailTableModel.COL_ADDRESS, + new Label(new GlobalizedMessage( + "ui.admin.user.primary_email.address", + ADMIN_BUNDLE)))); + primaryEmailTableColModel.add(new TableColumn( + UserPrimaryEmailTableModel.COL_VERIFIED, + new Label(new GlobalizedMessage( + "ui.admin.user.primary_email.verified", + ADMIN_BUNDLE)))); + primaryEmailTableColModel.add(new TableColumn( + UserPrimaryEmailTableModel.COL_BOUNCING, + new Label(new GlobalizedMessage( + "ui.admin.user.primary_email.bouncing", + ADMIN_BUNDLE)))); + primaryEmailTableColModel.add(new TableColumn( + UserPrimaryEmailTableModel.COL_ACTION, + new Label(new GlobalizedMessage( + "ui.admin.user.primary_email.action", + ADMIN_BUNDLE)))); + primaryEmailTableColModel.get( + UserPrimaryEmailTableModel.COL_ACTION).setCellRenderer( + new TableCellRenderer() { + + @Override + public Component getComponent(final Table table, + final PageState state, + final Object value, + final boolean isSelected, + final Object key, + final int row, + final int column) { + return new ControlLink((Label) value); + } + + }); + + primaryEmailTable.addTableActionListener(new TableActionListener() { + + @Override + public void cellSelected(final TableActionEvent event) { + final String key = (String) event.getRowKey(); + selectedEmailAddress.setSelectedKey(event.getPageState(), key); + showEmailForm(event.getPageState()); + } + + @Override + public void headSelected(final TableActionEvent event) { + //Nothing + } + + }); + + userDetails.add(primaryEmailTable); + + final Table emailTable = new Table(); + emailTable.setModelBuilder( + new UserEmailTableModelBuilder(selectedUserId)); + final TableColumnModel emailTableColumnModel = emailTable + .getColumnModel(); + emailTableColumnModel.add(new TableColumn( + UserEmailTableModel.COL_ADDRESS, + new Label(new GlobalizedMessage( + "ui.admin.user.email_addresses.address", + ADMIN_BUNDLE)))); + emailTableColumnModel.add(new TableColumn( + UserEmailTableModel.COL_VERIFIED, + new Label(new GlobalizedMessage( + "ui.admin.user.email_addresses.verified", + ADMIN_BUNDLE)))); + emailTableColumnModel.add(new TableColumn( + UserEmailTableModel.COL_BOUNCING, + new Label(new GlobalizedMessage( + "ui.admin.user.email_addresses.bouncing", + ADMIN_BUNDLE)))); + emailTableColumnModel.add(new TableColumn( + UserEmailTableModel.COL_EDIT, + new Label(new GlobalizedMessage( + "ui.admin.user.email_addresses.edit", + ADMIN_BUNDLE)))); + emailTableColumnModel.add(new TableColumn( + UserEmailTableModel.COL_DELETE, + new Label(new GlobalizedMessage( + "ui.admin.user.email_addresses.delete", + ADMIN_BUNDLE)))); + emailTableColumnModel.get(UserEmailTableModel.COL_EDIT).setCellRenderer( + new TableCellRenderer() { + + @Override + public Component getComponent(final Table table, + final PageState state, + final Object value, + final boolean isSelected, + final Object key, + final int row, + final int column) { + return new ControlLink((Label) value); + } + + }); + emailTableColumnModel.get(UserEmailTableModel.COL_DELETE) + .setCellRenderer( + new TableCellRenderer() { + + @Override + public Component getComponent(final Table table, + final PageState state, + final Object value, + final boolean isSelected, + final Object key, + final int row, + final int column) { + return new ControlLink((Label) value); + } + + }); + emailTable.addTableActionListener(new TableActionListener() { + + @Override + public void cellSelected(final TableActionEvent event) { + //ToDo + } + + @Override + public void headSelected(final TableActionEvent event) { + //Nothing + } + + }); + emailTable.setEmptyView(new Label(new GlobalizedMessage( + "ui.admin.user.email_addresses.none", ADMIN_BUNDLE))); + + userDetails.add(emailTable); + + final ActionLink addEmailLink = new ActionLink(new GlobalizedMessage( + "ui.admin.user.email_addresses.add", ADMIN_BUNDLE)); + addEmailLink.addActionListener(e -> { + //ToDo + }); + userDetails.add(addEmailLink); + + emailForm = new Form("email_form"); +// emailForm.add(new Label(new GlobalizedMessage( +// "ui.admin.user.email_form.address", +// ADMIN_BUNDLE))); + final TextField emailFormAddress = new TextField("email_form_address"); + emailFormAddress.setLabel(new GlobalizedMessage( + "ui.admin.user.email_form.address", ADMIN_BUNDLE)); + final CheckboxGroup emailFormVerified = new CheckboxGroup( + "email_form_verified"); + emailFormVerified.addOption( + new Option("true", + new Label(new GlobalizedMessage( + "ui.admin.user.email_form.verified", + ADMIN_BUNDLE)))); + final CheckboxGroup emailFormBouncing = new CheckboxGroup( + "email_form_verified"); + emailFormBouncing.addOption( + new Option("true", + new Label(new GlobalizedMessage( + "ui.admin.user.email_form.bouncing", + ADMIN_BUNDLE)))); + + emailForm.add(new SaveCancelSection()); + + emailForm.addInitListener(e -> { + final PageState state = e.getPageState(); + + final String selected = selectedEmailAddress.getSelectedKey(state); + final String userIdStr = selectedUserId.getSelectedKey(state); + if (selected != null && !selected.isEmpty()) { + final UserRepository userRepository = CdiUtil.createCdiUtil() + .findBean(UserRepository.class); + final User user = userRepository.findById(Long.parseLong( + userIdStr)); + EmailAddress email = null; + if (user.getPrimaryEmailAddress().getAddress().equals(selected)) { + email = user.getPrimaryEmailAddress(); + } else { + for (EmailAddress current : user.getEmailAddresses()) { + if (current.getAddress().equals(selected)) { + email = current; + break; + } + } + } + + if (email != null) { + emailFormAddress.setValue(state, email.getAddress()); + if (email.isVerified()) { + emailFormVerified.setValue(state, "true"); + } + if (email.isBouncing()) { + emailFormBouncing.setValue(state, "true"); + } + } + } + }); + emailForm.addProcessListener(e -> { + closeEmailForm(e.getPageState()); + }); + + emailForm.addCancelListener(e -> closeEmailForm(e.getPageState())); + +// emailFormAddress.setLabel(new GlobalizedMessage( +// "ui.admin.user.email_form.verified", +// ADMIN_BUNDLE)); +// emailForm.add(new Label(new GlobalizedMessage( +// "ui.admin.user.email_form.verified", +// ADMIN_BUNDLE))); +// +// emailForm.add(new Label(new GlobalizedMessage( +// "ui.admin.user.email_form.bouncing", +// ADMIN_BUNDLE))); + add(emailForm); + add(userDetails); + } @Override @@ -150,20 +396,37 @@ public class UserAdmin extends BoxPanel { super.register(page); page.addGlobalStateParam(userIdParameter); - + page.addGlobalStateParam(emailParameter); + page.setVisibleDefault(usersTablePanel, true); page.setVisibleDefault(userDetails, false); + page.setVisibleDefault(emailForm, false); } protected void showUserDetails(final PageState state) { usersTablePanel.setVisible(state, false); userDetails.setVisible(state, true); + emailForm.setVisible(state, false); } - + protected void closeUserDetails(final PageState state) { selectedUserId.clearSelection(state); usersTablePanel.setVisible(state, true); userDetails.setVisible(state, false); + emailForm.setVisible(state, false); + } + + protected void showEmailForm(final PageState state) { + usersTablePanel.setVisible(state, false); + userDetails.setVisible(state, false); + emailForm.setVisible(state, true); + } + + protected void closeEmailForm(final PageState state) { + selectedEmailAddress.clearSelection(state); + usersTablePanel.setVisible(state, false); + userDetails.setVisible(state, true); + emailForm.setVisible(state, false); } } diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserEmailTableModel.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserEmailTableModel.java new file mode 100644 index 000000000..985a940fb --- /dev/null +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserEmailTableModel.java @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2016 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 com.arsdigita.ui.admin.usersgroupsroles; + +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.table.TableModel; +import com.arsdigita.globalization.GlobalizedMessage; + +import org.libreccm.core.EmailAddress; +import org.libreccm.security.User; + +import java.util.List; + +import static com.arsdigita.ui.admin.AdminUiConstants.*; + +/** + * + * @author Jens Pelzetter + */ +public class UserEmailTableModel implements TableModel { + + protected static final int COL_ADDRESS = 0; + protected static final int COL_VERIFIED = 1; + protected static final int COL_BOUNCING = 2; + protected static final int COL_EDIT = 3; + protected static final int COL_DELETE = 4; + + private final List emailAddresses; + private int index; + private boolean finished; + + public UserEmailTableModel(final User user) { + this.emailAddresses = user.getEmailAddresses(); + } + + @Override + public int getColumnCount() { + return 5; + } + + @Override + public boolean nextRow() { + if (index < emailAddresses.size()) { + index++; + return true; + } else { + return false; + } + } + + @Override + public Object getElementAt(final int columnIndex) { + switch (columnIndex) { + case COL_ADDRESS: + return emailAddresses.get(index).getAddress(); + case COL_VERIFIED: + return Boolean.toString(emailAddresses.get(index).isVerified()); + case COL_BOUNCING: + return Boolean.toString(emailAddresses.get(index).isBouncing()); + case COL_EDIT: + return new Label(new GlobalizedMessage( + "ui.admin.user.email_addresses.edit", + ADMIN_BUNDLE)); + case COL_DELETE: + return new Label(new GlobalizedMessage( + "ui.admin.user.email_addresses.delete", + ADMIN_BUNDLE)); + default: + throw new IllegalArgumentException("Invalid column index."); + } + } + + @Override + public Object getKeyAt(final int columnIndex) { + return emailAddresses.get(index).getAddress(); + } + +} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserEmailTableModelBuilder.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserEmailTableModelBuilder.java new file mode 100644 index 000000000..890389360 --- /dev/null +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserEmailTableModelBuilder.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2016 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 com.arsdigita.ui.admin.usersgroupsroles; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.ParameterSingleSelectionModel; +import com.arsdigita.bebop.Table; +import com.arsdigita.bebop.table.TableModel; +import com.arsdigita.bebop.table.TableModelBuilder; +import com.arsdigita.util.LockableImpl; + +import org.libreccm.cdi.utils.CdiUtil; +import org.libreccm.security.User; +import org.libreccm.security.UserRepository; + +/** + * + * @author Jens Pelzetter + */ +public class UserEmailTableModelBuilder extends LockableImpl + implements TableModelBuilder{ + + private final ParameterSingleSelectionModel selectedUserId; + + public UserEmailTableModelBuilder( + final ParameterSingleSelectionModel selectedUserId) { + this.selectedUserId = selectedUserId; + } + + @Override + public TableModel makeModel(final Table table, final PageState state) { + final String userIdStr = selectedUserId.getSelectedKey(state); + final User selectedUser; + if (userIdStr == null || userIdStr.isEmpty()) { + selectedUser = null; + } else { + final UserRepository userRepository = CdiUtil.createCdiUtil() + .findBean(UserRepository.class); + final long userId = Long.parseLong(userIdStr); + selectedUser = userRepository.findById(userId); + } + + return new UserEmailTableModel(selectedUser); + } + +} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPrimaryEmailTableModel.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPrimaryEmailTableModel.java new file mode 100644 index 000000000..a97ce2b24 --- /dev/null +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPrimaryEmailTableModel.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2016 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 com.arsdigita.ui.admin.usersgroupsroles; + +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.table.TableModel; +import com.arsdigita.globalization.GlobalizedMessage; + +import org.libreccm.security.User; + +import static com.arsdigita.ui.admin.AdminUiConstants.*; + +/** + * + * @author Jens Pelzetter + */ +public class UserPrimaryEmailTableModel implements TableModel { + + protected static final int COL_ADDRESS = 0; + protected static final int COL_VERIFIED = 1; + protected static final int COL_BOUNCING = 2; + protected static final int COL_ACTION = 3; + + private final User user; + private boolean finished = false; + + public UserPrimaryEmailTableModel(final User user) { + this.user = user; + } + + @Override + public int getColumnCount() { + return 4; + } + + @Override + public boolean nextRow() { + if (finished) { + return false; + } else { + finished = true; + return true; + } + } + + @Override + public Object getElementAt(final int columnIndex) { + switch(columnIndex) { + case COL_ADDRESS: + return user.getPrimaryEmailAddress().getAddress(); + case COL_VERIFIED: + return Boolean.toString(user.getPrimaryEmailAddress().isVerified()); + case COL_BOUNCING: + return Boolean.toString(user.getPrimaryEmailAddress().isBouncing()); + case COL_ACTION: + return new Label(new GlobalizedMessage( + "ui.admin.user.primary_email_address.edit", ADMIN_BUNDLE)); + default: + throw new IllegalArgumentException("Invalid column index."); + } + } + + @Override + public Object getKeyAt(final int columnIndex) { + return user.getPrimaryEmailAddress().getAddress(); + } + +} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPrimaryEmailTableModelBuilder.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPrimaryEmailTableModelBuilder.java new file mode 100644 index 000000000..99e37e85f --- /dev/null +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPrimaryEmailTableModelBuilder.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2016 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 com.arsdigita.ui.admin.usersgroupsroles; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.ParameterSingleSelectionModel; +import com.arsdigita.bebop.Table; +import com.arsdigita.bebop.table.TableModel; +import com.arsdigita.bebop.table.TableModelBuilder; +import com.arsdigita.util.LockableImpl; + +import org.libreccm.cdi.utils.CdiUtil; +import org.libreccm.security.User; +import org.libreccm.security.UserRepository; + +/** + * + * @author Jens Pelzetter + */ +public class UserPrimaryEmailTableModelBuilder extends LockableImpl + implements TableModelBuilder { + + private final ParameterSingleSelectionModel selectedUserId; + + public UserPrimaryEmailTableModelBuilder( + final ParameterSingleSelectionModel selectedUserId) { + this.selectedUserId = selectedUserId; + } + + @Override + public TableModel makeModel(final Table table, final PageState state) { + final String userIdStr = selectedUserId.getSelectedKey(state); + final User selectedUser; + if (userIdStr == null || userIdStr.isEmpty()) { + selectedUser = null; + } else { + final UserRepository userRepository = CdiUtil.createCdiUtil() + .findBean(UserRepository.class); + final long userId = Long.parseLong(userIdStr); + selectedUser = userRepository.findById(userId); + } + + return new UserPrimaryEmailTableModel(selectedUser); + } + +} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModel.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModel.java index 0e0760669..de8423889 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModel.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModel.java @@ -36,6 +36,7 @@ public class UserPropertySheetModel implements PropertySheetModel { USER_NAME, FAMILY_NAME, GIVEN_NAME, + PASSWORD_SET, BANNED, PASSWORD_RESET_REQUIRED, } @@ -89,6 +90,10 @@ public class UserPropertySheetModel implements PropertySheetModel { return selectedUser.getFamilyName(); case GIVEN_NAME: return selectedUser.getGivenName(); + case PASSWORD_SET: + return Boolean.toString( + (selectedUser.getPassword() != null + && !selectedUser.getPassword().isEmpty())); case BANNED: return Boolean.toString(selectedUser.isBanned()); case PASSWORD_RESET_REQUIRED: diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModelBuilder.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModelBuilder.java index 09ce0363e..d4b6685cd 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModelBuilder.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModelBuilder.java @@ -33,13 +33,13 @@ import org.libreccm.security.UserRepository; * @author Jens Pelzetter */ public class UserPropertySheetModelBuilder - extends LockableImpl implements PropertySheetModelBuilder { + extends LockableImpl implements PropertySheetModelBuilder { private final ParameterSingleSelectionModel selectedUserId; public UserPropertySheetModelBuilder( - final UserAdmin parent, - final ParameterSingleSelectionModel selectedUserId) { + final UserAdmin parent, + final ParameterSingleSelectionModel selectedUserId) { this.selectedUserId = selectedUserId; } @@ -52,12 +52,12 @@ public class UserPropertySheetModelBuilder selectedUser = null; } else { final UserRepository userRepository = CdiUtil.createCdiUtil(). - findBean( - UserRepository.class); + findBean(UserRepository.class); final long userId = Long.parseLong(userIdStr); selectedUser = userRepository.findById(userId); } return new UserPropertySheetModel(selectedUser); } + } diff --git a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources.properties b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources.properties index 6aa09268c..02418549c 100644 --- a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources.properties +++ b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources.properties @@ -183,3 +183,16 @@ ui.admin.user_details.back=Back to users table ui.admin.user_details.edit=Edit user details ui.admin.user_details.generate_password=Generate password and it send to user ui.admin.user_details.set_password=Set new password +ui.admin.user.property_sheet.password_set=Password set? +ui.admin.user.primary_email.address=Address +ui.admin.user.primary_email.verified=Verified? +ui.admin.user.primary_email.bouncing=Bouncing? +ui.admin.user.primary_email_address.edit=Edit +ui.admin.user.email_addresses.address=Address +ui.admin.user.email_addresses.verified=Verified? +ui.admin.user.email_addresses.bouncing=Bouncing? +ui.admin.user.email_addresses.edit=Edit +ui.admin.user.email_addresses.delete=Delete +ui.admin.user.primary_email.action=Action +ui.admin.user.email_addresses.none=No additional email addresses +ui.admin.user.email_addresses.add=Add email address diff --git a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_de.properties b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_de.properties index e89a932ec..e1f51a593 100644 --- a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_de.properties +++ b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_de.properties @@ -183,3 +183,16 @@ ui.admin.user_details.back=Zur\u00fcck zur Benutzer\u00fcbersicht ui.admin.user_details.edit=Benutzerdaten bearbeiten ui.admin.user_details.generate_password=Passwort generieren und an Benutzer senden ui.admin.user_details.set_password=Neues Passwort setzen +ui.admin.user.property_sheet.password_set=Passwort gesetzt? +ui.admin.user.primary_email.address=Adresse +ui.admin.user.primary_email.verified=Verifiziert? +ui.admin.user.primary_email.bouncing=Wird zur\u00fcckgewiesen? +ui.admin.user.primary_email_address.edit=Bearbeiten +ui.admin.user.email_addresses.address=Adresse +ui.admin.user.email_addresses.verified=Verifiziert? +ui.admin.user.email_addresses.bouncing=Wird zur\u00fcckgewiesen? +ui.admin.user.email_addresses.edit=Bearbeiten +ui.admin.user.email_addresses.delete=L\u00f6schen +ui.admin.user.primary_email.action=Aktion +ui.admin.user.email_addresses.none=Keine weiteren E-Mail-Adressen +ui.admin.user.email_addresses.add=E-Mail-Adresse hinzuf\u00fcgen diff --git a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_en.properties b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_en.properties index 9c1e9b438..05aeb5742 100755 --- a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_en.properties +++ b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_en.properties @@ -156,3 +156,16 @@ ui.admin.user_details.back=Back to users table ui.admin.user_details.edit=Edit user details ui.admin.user_details.generate_password=Generate password and it send to user ui.admin.user_details.set_password=Set new password +ui.admin.user.property_sheet.password_set=Password set? +ui.admin.user.primary_email.address=Address +ui.admin.user.primary_email.verified=Verified? +ui.admin.user.primary_email.bouncing=Bouncing? +ui.admin.user.primary_email_address.edit=Edit +ui.admin.user.email_addresses.address=Adddress +ui.admin.user.email_addresses.verified=Verified? +ui.admin.user.email_addresses.bouncing=Bouncing? +ui.admin.user.email_addresses.edit=Edit +ui.admin.user.email_addresses.delete=Delete +ui.admin.user.primary_email.action=Action +ui.admin.user.email_addresses.none=No additional email addresses +ui.admin.user.email_addresses.add=Add email address diff --git a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_fr.properties b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_fr.properties index e4ce4b4b7..2afde016d 100755 --- a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_fr.properties +++ b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_fr.properties @@ -147,3 +147,16 @@ ui.admin.user_details.back=Back to users table ui.admin.user_details.edit=Edit user details ui.admin.user_details.generate_password=Generate password and it send to user ui.admin.user_details.set_password=Set new password +ui.admin.user.property_sheet.password_set=Password set? +ui.admin.user.primary_email.address=Address +ui.admin.user.primary_email.verified=Verified? +ui.admin.user.primary_email.bouncing=Bouncing? +ui.admin.user.primary_email_address.edit=Edit +ui.admin.user.email_addresses.address=Address +ui.admin.user.email_addresses.verified=Verified? +ui.admin.user.email_addresses.bouncing=Bouncing? +ui.admin.user.email_addresses.edit=Edit +ui.admin.user.email_addresses.delete=Delete +ui.admin.user.primary_email.action=Action +ui.admin.user.email_addresses.none=No additional email addresses +ui.admin.user.email_addresses.add=Add email address