CCM NG:
- Removed several unused classes from the old /ccm/admin UI - First part of refactored applications admin tab for /ccm/admin/ git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4107 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
196af54d2b
commit
6bf9cc8a5d
|
|
@ -1,413 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.parameters.BigDecimalParameter;
|
||||
import com.arsdigita.bebop.parameters.LongParameter;
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
|
||||
/**
|
||||
* Centralised place for all constants used in the administration UI.
|
||||
*
|
||||
* @author David Dao
|
||||
*/
|
||||
@Deprecated
|
||||
interface AdminConstants {
|
||||
|
||||
/**
|
||||
* The XML namespace used by admin components.
|
||||
*/
|
||||
String ADMIN_XML_NS = "http://www.arsdigita.com/admin-ui/1.0";
|
||||
|
||||
/**
|
||||
* Globalization resource for admin ui.
|
||||
*/
|
||||
String BUNDLE_NAME = "com.arsdigita.ui.admin.AdminResources";
|
||||
|
||||
/**
|
||||
* Navigational dimension bar labels.
|
||||
*/
|
||||
// Label MY_WORKSPACE_LABEL = new Label
|
||||
// (new GlobalizedMessage("ui.admin.nav.workspace",
|
||||
// BUNDLE_NAME));
|
||||
// Label LOG_OUT_LABEL = new Label
|
||||
// (new GlobalizedMessage("ui.admin.nav.logout",
|
||||
// BUNDLE_NAME));
|
||||
/**
|
||||
* Administration page title
|
||||
*/
|
||||
Label PAGE_TITLE_LABEL = new Label(new GlobalizedMessage("ui.admin.dispatcher.title",
|
||||
BUNDLE_NAME));
|
||||
|
||||
/**
|
||||
* Administration main tab names.
|
||||
*/
|
||||
Label USER_TAB_TITLE = new Label(new GlobalizedMessage("ui.admin.tab.user",
|
||||
BUNDLE_NAME));
|
||||
|
||||
|
||||
|
||||
Label GROUP_TAB_TITLE = new Label(new GlobalizedMessage("ui.admin.tab.group",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label APPLICATIONS_TAB_TITLE = new Label(new GlobalizedMessage("ui.admin.tab.applications",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label SYSINFO_TAB_TITLE = new Label(new GlobalizedMessage("ui.admin.tab.sysinfo.title", BUNDLE_NAME));
|
||||
|
||||
GlobalizedMessage USER_NAVBAR_TITLE = new GlobalizedMessage("ui.admin.tab.user.navbartitle",
|
||||
BUNDLE_NAME);
|
||||
|
||||
/**
|
||||
* Tabbed pane indices
|
||||
*/
|
||||
int USER_TAB_INDEX = 2;
|
||||
int GROUP_TAB_INDEX = 3;
|
||||
|
||||
/**
|
||||
* User tab name
|
||||
*/
|
||||
Label USER_TAB_SUMMARY = new Label(new GlobalizedMessage("ui.admin.tab.user.summary",
|
||||
BUNDLE_NAME));
|
||||
Label USER_TAB_BROWSE = new Label(new GlobalizedMessage("ui.admin.tab.user.browse",
|
||||
BUNDLE_NAME));
|
||||
Label USER_TAB_SEARCH = new Label(new GlobalizedMessage("ui.admin.tab.user.search",
|
||||
BUNDLE_NAME));
|
||||
Label USER_TAB_CREATE_USER = new Label(new GlobalizedMessage("ui.admin.tab.user.createuser",
|
||||
BUNDLE_NAME));
|
||||
|
||||
int USER_TAB_SUMMARY_INDEX = 0;
|
||||
int USER_TAB_BROWSE_INDEX = 1;
|
||||
int USER_TAB_SEARCH_INDEX = 2;
|
||||
int USER_TAB_CREATE_USER_INDEX = 3;
|
||||
|
||||
/**
|
||||
* Global state parameters.
|
||||
*/
|
||||
LongParameter GROUP_ID_PARAM = new LongParameter("group_id");
|
||||
|
||||
LongParameter APPLICATIONS_ID_PARAM = new LongParameter("application_id");
|
||||
|
||||
LongParameter USER_ID_PARAM = new LongParameter("user_id");
|
||||
|
||||
/**
|
||||
* User summary panel.
|
||||
*/
|
||||
Label SUMMARY_PANEL_HEADER = new Label(
|
||||
new GlobalizedMessage("ui.admin.user.summarypanel.header", BUNDLE_NAME));
|
||||
|
||||
Label CREATE_USER_LABEL = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.summarypanel.createUser", BUNDLE_NAME));
|
||||
|
||||
Label TOTAL_USERS_LABEL = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.summarypanel.totalusers", BUNDLE_NAME));
|
||||
|
||||
/**
|
||||
* User browse panel.
|
||||
*/
|
||||
Label BROWSE_USER_PANEL_HEADER = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.browsepanel.header",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_INFO_LABEL = new Label(new GlobalizedMessage("ui.admin.user.userinfo.header",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_EDIT_PANEL_HEADER = new Label(new GlobalizedMessage("ui.admin.user.useredit.header",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_GROUP_PANEL_HEADER = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.groupmembership.header",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_DELETE_FAILED_PANEL_HEADER = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.action.delete.failed.header",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_PASSWORD_PANEL_HEADER = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.password.header",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_ACTION_PANEL_HEADER = new Label(new GlobalizedMessage("ui.admin.user.action.header",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_ACTION_CONTINUE = new Label(new GlobalizedMessage("ui.admin.user.action.continue",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_DELETE_LABEL = new Label(new GlobalizedMessage("ui.admin.user.delete.label",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_BAN_LABEL = new Label(new GlobalizedMessage("ui.admin.user.ban.label",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_UNBAN_LABEL = new Label(new GlobalizedMessage("ui.admin.user.unban.label",
|
||||
BUNDLE_NAME));
|
||||
|
||||
GlobalizedMessage USER_DELETE_CONFIRMATION = new GlobalizedMessage(
|
||||
"ui.admin.user.delete.confirm", BUNDLE_NAME);
|
||||
|
||||
GlobalizedMessage USER_BAN_CONFIRMATION = new GlobalizedMessage("ui.admin.user.ban.confirm",
|
||||
BUNDLE_NAME);
|
||||
|
||||
GlobalizedMessage USER_UNBAN_CONFIRMATION = new GlobalizedMessage("ui.admin.user.unban.confirm",
|
||||
BUNDLE_NAME);
|
||||
|
||||
GlobalizedMessage USER_DELETE_FAILED_MSG = new GlobalizedMessage(
|
||||
"ui.admin.user.delete.failed.label", BUNDLE_NAME);
|
||||
|
||||
Label USER_TAB_EXTREME_ACTION_LABEL = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.browsepanel.extremeaction",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label UPDATE_USER_PASSWORD_LABEL = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.browsepanel.updatePassword",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label BECOME_USER_LABEL = new Label(
|
||||
new GlobalizedMessage("ui.admin.user.browsepanel.becomeUser",
|
||||
BUNDLE_NAME));
|
||||
|
||||
/**
|
||||
* Create new user panel.
|
||||
*/
|
||||
Label CREATE_USER_PANEL_HEADER = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.createpanel.header",
|
||||
BUNDLE_NAME));
|
||||
|
||||
/**
|
||||
* User search panel.
|
||||
*/
|
||||
Label SEARCH_PANEL_HEADER = new Label(new GlobalizedMessage("ui.admin.user.search.header",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label PASSWORD_FORM_LABEL_PASSWORD = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.userpasswordform.passwordlabel",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label PASSWORD_FORM_LABEL_CONFIRMATION_PASSWORD = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.userpasswordform.confirmpasswordlabel",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label PASSWORD_FORM_LABEL_QUESTION = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.userpasswordform.question",
|
||||
BUNDLE_NAME), false);
|
||||
|
||||
Label PASSWORD_FORM_LABEL_ANSWER = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.userpasswordform.answer",
|
||||
BUNDLE_NAME), false);
|
||||
|
||||
GlobalizedMessage PASSWORD_FORM_SUBMIT = new GlobalizedMessage(
|
||||
"ui.admin.user.userpasswordform.submit",
|
||||
BUNDLE_NAME);
|
||||
|
||||
/**
|
||||
* Constants for user add/edit form.
|
||||
*/
|
||||
String USER_FORM_ADD = "user-add-form";
|
||||
String USER_FORM_EDIT = "user-edit-form";
|
||||
String USER_FORM_INPUT_FIRST_NAME = "firstname";
|
||||
String USER_FORM_INPUT_LAST_NAME = "lastname";
|
||||
String USER_FORM_INPUT_PASSWORD = "password";
|
||||
String USER_FORM_INPUT_PASSWORD_CONFIRMATION = "password_confirmation";
|
||||
String USER_FORM_INPUT_QUESTION = "question";
|
||||
String USER_FORM_INPUT_ANSWER = "answer";
|
||||
String USER_FORM_INPUT_PRIMARY_EMAIL = "email";
|
||||
String USER_FORM_INPUT_ADDITIONAL_EMAIL = "additional_email";
|
||||
String USER_FORM_INPUT_SCREEN_NAME = "screenname";
|
||||
String USER_FORM_INPUT_SSO = "sso_login";
|
||||
String USER_FORM_INPUT_URL = "url";
|
||||
String USER_FORM_INPUT_URL_DEFAULT = "http://";
|
||||
|
||||
Label USER_FORM_LABEL_FIRST_NAME = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.firstname",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_FORM_LABEL_LAST_NAME = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.lastname",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_FORM_LABEL_PASSWORD = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.password",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_FORM_LABEL_PASSWORD_CONFIRMATION = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.confirmation",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_FORM_LABEL_QUESTION = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.question",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_FORM_LABEL_ANSWER = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.answer",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_FORM_LABEL_PRIMARY_EMAIL = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.primaryemail",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_FORM_LABEL_ADDITIONAL_EMAIL = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.additionalemail",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_FORM_LABEL_ADDITIONAL_EMAIL_LIST = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.additionalemaillist",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_FORM_LABEL_SCREEN_NAME = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.screenname",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_FORM_LABEL_SSO = new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.ssologinname",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_FORM_LABEL_URL = new Label(new GlobalizedMessage("ui.admin.user.addeditform.url",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label USER_FORM_DELETE_ADDITIONAL_EMAIL = new Label(
|
||||
new GlobalizedMessage("ui.admin.user.addeditform.deleteemail",
|
||||
BUNDLE_NAME));
|
||||
|
||||
GlobalizedMessage USER_FORM_SUBMIT = new GlobalizedMessage("ui.admin.user.addeditform.submit",
|
||||
BUNDLE_NAME);
|
||||
|
||||
GlobalizedMessage USER_FORM_ERROR_SCREEN_NAME_NOT_UNIQUE = new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.error.screenname.notunique",
|
||||
BUNDLE_NAME);
|
||||
|
||||
GlobalizedMessage USER_FORM_ERROR_PRIMARY_EMAIL_NOT_UNIQUE = new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.error.primaryemail.notunique",
|
||||
BUNDLE_NAME);
|
||||
|
||||
GlobalizedMessage USER_FORM_ERROR_PASSWORD_NOT_MATCH = new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.error.password.notmatch",
|
||||
BUNDLE_NAME);
|
||||
|
||||
GlobalizedMessage USER_FORM_ERROR_ANSWER_NULL = new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.error.answer.null",
|
||||
BUNDLE_NAME);
|
||||
|
||||
GlobalizedMessage USER_FORM_ERROR_ANSWER_WHITESPACE = new GlobalizedMessage(
|
||||
"ui.admin.user.addeditform.error.answer.whitespace",
|
||||
BUNDLE_NAME);
|
||||
|
||||
/**
|
||||
* Constants for group add/edit form.
|
||||
*/
|
||||
String GROUP_FORM_ADD = "group-add-form";
|
||||
String GROUP_FORM_EDIT = "group-edit-form";
|
||||
String GROUP_FORM_INPUT_NAME = "name";
|
||||
String GROUP_FORM_INPUT_PRIMARY_EMAIL = "email";
|
||||
|
||||
Label GROUP_FORM_LABEL_NAME = new Label(new GlobalizedMessage(
|
||||
"ui.admin.groups.addeditform.namelabel",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label GROUP_FORM_LABEL_PRIMARY_EMAIL = new Label(new GlobalizedMessage(
|
||||
"ui.admin.groups.addeditform.primaryemaillabel",
|
||||
BUNDLE_NAME));
|
||||
|
||||
GlobalizedMessage GROUP_FORM_SUBMIT
|
||||
= new GlobalizedMessage("ui.admin.groups.addeditform.submit", BUNDLE_NAME);
|
||||
|
||||
/**
|
||||
* Constants for group administration tab.
|
||||
*/
|
||||
Label GROUP_ACTION_CONTINUE = new Label(new GlobalizedMessage("ui.admin.groups.actioncontinue",
|
||||
BUNDLE_NAME));
|
||||
|
||||
GlobalizedMessage GROUP_DELETE_FAILED_MSG = new GlobalizedMessage(
|
||||
"ui.admin.groups.groupdeletefailed",
|
||||
BUNDLE_NAME);
|
||||
|
||||
Label GROUP_INFORMATION_HEADER = new Label(new GlobalizedMessage(
|
||||
"ui.admin.groups.groupinformation",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label SUBGROUP_HEADER = new Label(new GlobalizedMessage("ui.admin.groups.subgroups",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label GROUP_EDIT_HEADER = new Label(new GlobalizedMessage("ui.admin.groups.groupedit",
|
||||
BUNDLE_NAME));
|
||||
Label ADD_SUBGROUP_LABEL = new Label(new GlobalizedMessage("ui.admin.groups.add",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label SUBMEMBER_HEADER = new Label(new GlobalizedMessage("ui.admin.groups.submembers",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label DELETE_GROUP_LABEL = new Label(new GlobalizedMessage("ui.admin.groups.delete",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label GROUP_EXTREME_ACTIONS_HEADER = new Label(new GlobalizedMessage(
|
||||
"ui.admin.groups.extremeaction",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label GROUP_DELETE_FAILED_HEADER = new Label(new GlobalizedMessage(
|
||||
"ui.admin.groups.deletefailed",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label ADD_GROUP_LABEL = new Label(new GlobalizedMessage("ui.admin.groups.addgrouplabel",
|
||||
BUNDLE_NAME));
|
||||
Label EDIT_GROUP_LABEL = new Label(new GlobalizedMessage("ui.admin.groups.edit",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label SUBGROUP_COUNT_LABEL = new Label(new GlobalizedMessage(
|
||||
"ui.admin.groups.subgroupcountlabel",
|
||||
BUNDLE_NAME));
|
||||
String GROUP_DELETE_CONFIRMATION = "Are you sure you want to delete this group?";
|
||||
|
||||
Label ADD_SUBMEMBER_LABEL = new Label(new GlobalizedMessage("ui.admin.groups.addsubmemberlabel",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label REMOVE_SUBMEMBER_LABEL = new Label(new GlobalizedMessage(
|
||||
"ui.admin.groups.removesubmemberlabel",
|
||||
BUNDLE_NAME));
|
||||
Label ADD_EXISTING_GROUP_TO_SUBGROUPS_LABEL = new Label(new GlobalizedMessage(
|
||||
"ui.admin.groups.addExisting",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label REMOVE_SUBGROUP_LABEL = new Label(new GlobalizedMessage("ui.admin.groups.removeExisting",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label GROUP_SEARCH_LABEL = new Label(
|
||||
new GlobalizedMessage("ui.admin.groups.search", BUNDLE_NAME));
|
||||
|
||||
GlobalizedMessage SEARCH_BUTTON = new GlobalizedMessage("ui.admin.groups.button.search",
|
||||
BUNDLE_NAME);
|
||||
|
||||
Label GROUP_NO_RESULTS = new Label(new GlobalizedMessage("ui.admin.groups.searchForm.noResults",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label FOUND_GROUPS_TITLE = new Label(new GlobalizedMessage("ui.admin.groups.found.title",
|
||||
BUNDLE_NAME));
|
||||
|
||||
Label PICK_GROUPS = new Label(new GlobalizedMessage("ui.admin.groups.select.explanation",
|
||||
BUNDLE_NAME));
|
||||
|
||||
GlobalizedMessage SAVE_BUTTON = new GlobalizedMessage("ui.admin.save", BUNDLE_NAME);
|
||||
|
||||
String SEARCH_QUERY = "query";
|
||||
|
||||
public final static String ADMIN_PAGE_URL = "/admin/";
|
||||
|
||||
public final static String ADMIN_SERVLET_PATH = "/admin/*";
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -71,14 +71,12 @@ import static com.arsdigita.ui.admin.AdminUiConstants.*;
|
|||
* @author pb
|
||||
*/
|
||||
@WebServlet(urlPatterns = {ADMIN_SERVLET_PATH})
|
||||
public class AdminServlet
|
||||
extends BaseApplicationServlet
|
||||
implements AdminConstants {
|
||||
public class AdminServlet extends BaseApplicationServlet {
|
||||
|
||||
private static final long serialVersionUID = -3912367600768871630L;
|
||||
|
||||
private static final Logger LOGGER = LogManager
|
||||
.getLogger(AdminServlet.class);
|
||||
.getLogger(AdminServlet.class);
|
||||
|
||||
/**
|
||||
* Logger instance for debugging
|
||||
|
|
@ -114,35 +112,35 @@ public class AdminServlet
|
|||
tabbedPane.setIdAttr("page-body");
|
||||
|
||||
tabbedPane.addTab(
|
||||
new Label(new GlobalizedMessage("ui.admin.tab.applications",
|
||||
BUNDLE_NAME)),
|
||||
new ApplicationsAdminTab());
|
||||
new Label(new GlobalizedMessage("ui.admin.tab.applications",
|
||||
ADMIN_BUNDLE)),
|
||||
new ApplicationsAdminTab());
|
||||
|
||||
tabbedPane.addTab(
|
||||
new Label(new GlobalizedMessage(
|
||||
"ui.admin.tab.users_groups_roles.title",
|
||||
BUNDLE_NAME)),
|
||||
new UsersGroupsRolesTab());
|
||||
new Label(new GlobalizedMessage(
|
||||
"ui.admin.tab.users_groups_roles.title",
|
||||
ADMIN_BUNDLE)),
|
||||
new UsersGroupsRolesTab());
|
||||
|
||||
tabbedPane.addTab(
|
||||
new Label(new GlobalizedMessage("ui.admin.tab.categories.title",
|
||||
BUNDLE_NAME)),
|
||||
new CategoriesTab());
|
||||
new Label(new GlobalizedMessage("ui.admin.tab.categories.title",
|
||||
ADMIN_BUNDLE)),
|
||||
new CategoriesTab());
|
||||
|
||||
tabbedPane.addTab(
|
||||
new Label(new GlobalizedMessage("ui.admin.tab.configuration.title",
|
||||
BUNDLE_NAME)),
|
||||
new ConfigurationTab());
|
||||
new Label(new GlobalizedMessage("ui.admin.tab.configuration.title",
|
||||
ADMIN_BUNDLE)),
|
||||
new ConfigurationTab());
|
||||
|
||||
tabbedPane.addTab(
|
||||
new Label(new GlobalizedMessage("ui.admin.tab.workflows.title",
|
||||
BUNDLE_NAME)),
|
||||
new WorkflowAdminTab());
|
||||
new Label(new GlobalizedMessage("ui.admin.tab.workflows.title",
|
||||
ADMIN_BUNDLE)),
|
||||
new WorkflowAdminTab());
|
||||
|
||||
tabbedPane.addTab(
|
||||
new Label(new GlobalizedMessage("ui.admin.tab.sysinfo.title",
|
||||
BUNDLE_NAME)),
|
||||
new SystemInformationTab());
|
||||
new Label(new GlobalizedMessage("ui.admin.tab.sysinfo.title",
|
||||
ADMIN_BUNDLE)),
|
||||
new SystemInformationTab());
|
||||
|
||||
//page.add(new Label("admin"));
|
||||
adminPage.add(tabbedPane);
|
||||
|
|
@ -166,16 +164,16 @@ public class AdminServlet
|
|||
public final void doService(final HttpServletRequest sreq,
|
||||
final HttpServletResponse sresp,
|
||||
final CcmApplication app) throws
|
||||
ServletException, IOException {
|
||||
ServletException, IOException {
|
||||
// /////// Some preparational steps ///////////////
|
||||
/* Determine access privilege: only logged in users may access */
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final Subject subject = cdiUtil.findBean(Subject.class);
|
||||
final PermissionChecker permissionChecker = cdiUtil.findBean(
|
||||
PermissionChecker.class);
|
||||
PermissionChecker.class);
|
||||
|
||||
final ConfigurationManager confManager = CDI.current().select(
|
||||
ConfigurationManager.class).get();
|
||||
ConfigurationManager.class).get();
|
||||
if (confManager == null) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
|
@ -187,17 +185,17 @@ public class AdminServlet
|
|||
subject.getSession().getId().toString());
|
||||
if (!subject.isAuthenticated()) {
|
||||
LOGGER.debug(
|
||||
"Subject {} is not authenticated, redirecting to login...",
|
||||
subject.toString());
|
||||
"Subject {} is not authenticated, redirecting to login...",
|
||||
subject.toString());
|
||||
throw new LoginSignal(sreq);
|
||||
}
|
||||
|
||||
/* Determine access privilege: Admin privileges must be granted */
|
||||
LOGGER.debug(
|
||||
"Subject is loggedin, checking if subject has required permissions...");
|
||||
"Subject is loggedin, checking if subject has required permissions...");
|
||||
if (!permissionChecker.isPermitted("admin")) {
|
||||
LOGGER.debug("Subject does *not* have required permissions. "
|
||||
+ "Access denied.");
|
||||
+ "Access denied.");
|
||||
throw new AccessDeniedException("User is not an administrator");
|
||||
}
|
||||
|
||||
|
|
@ -231,7 +229,7 @@ public class AdminServlet
|
|||
* Adds one pair of Url - Page to the internal hash map, used as a cache.
|
||||
*
|
||||
* @param pathInfo url stub for a page to display
|
||||
* @param page Page object to display
|
||||
* @param page Page object to display
|
||||
*/
|
||||
// private void addPage(final String pathInfo, final Page page) {
|
||||
// Assert.exists(pathInfo, String.class);
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@ import com.arsdigita.globalization.GlobalizedMessage;
|
|||
*/
|
||||
public final class AdminUiConstants {
|
||||
|
||||
public static final String ADMIN_APP_TYPE = "com.arsdigita.ui.Admin";
|
||||
|
||||
/**
|
||||
* The XML namespace used by administration components.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,201 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.ControlLink;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.List;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.bebop.event.ActionEvent;
|
||||
import com.arsdigita.bebop.event.ActionListener;
|
||||
import com.arsdigita.bebop.list.ListCellRenderer;
|
||||
import com.arsdigita.bebop.list.ListModel;
|
||||
import com.arsdigita.bebop.list.ListModelBuilder;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
|
||||
import org.libreccm.core.EmailAddress;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* Used to display and manage the list of additional email addresses
|
||||
* for a user.
|
||||
*/
|
||||
|
||||
class EmailList extends List
|
||||
implements ListCellRenderer,
|
||||
AdminConstants,
|
||||
ActionListener
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public EmailList() {
|
||||
setModelBuilder(new EmailListModelBuilder());
|
||||
setCellRenderer(this);
|
||||
addActionListener(this);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param list
|
||||
* @param state
|
||||
* @param value
|
||||
* @param key
|
||||
* @param index
|
||||
* @param isSelected
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Component getComponent(List list,
|
||||
PageState state,
|
||||
Object value,
|
||||
String key,
|
||||
int index,
|
||||
boolean isSelected)
|
||||
{
|
||||
SimpleContainer c = new SimpleContainer();
|
||||
|
||||
if (value != null) {
|
||||
ControlLink link =
|
||||
new ControlLink(USER_FORM_DELETE_ADDITIONAL_EMAIL);
|
||||
link.setClassAttr("deleteLink");
|
||||
|
||||
c.add(new Label(value.toString()));
|
||||
c.add(link);
|
||||
}
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
/**
|
||||
* This actionlister is executed when the user clicks the "delete"
|
||||
* link next to an email address.
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed (final ActionEvent event) {
|
||||
final PageState state = event.getPageState();
|
||||
|
||||
final Long userId = (Long) state.getValue(USER_ID_PARAM);
|
||||
if (userId != null) {
|
||||
// final CdiUtil cdiUtil = new CdiUtil();
|
||||
// final UserRepository userRepository;
|
||||
|
||||
// userRepository = cdiUtil.findBean(UserRepository.class);
|
||||
//
|
||||
// final User user = userRepository.findById(userId);
|
||||
// if (user == null) {
|
||||
// return;
|
||||
// } else {
|
||||
// final String email = (String) getSelectedKey(state);
|
||||
//
|
||||
// for(EmailAddress addr : user.getEmailAddresses()) {
|
||||
// if (addr.getAddress().equals(email)) {
|
||||
// user.removeEmailAddress(addr);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// userRepository.save(user);
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
class EmailListModelBuilder extends LockableImpl
|
||||
implements ListModelBuilder,
|
||||
AdminConstants
|
||||
{
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private class EmailListModel implements ListModel {
|
||||
private Iterator m_emails;
|
||||
private EmailAddress m_currentEmail;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param emails
|
||||
*/
|
||||
public EmailListModel(Iterator emails) {
|
||||
m_emails = emails;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean next() {
|
||||
if (m_emails.hasNext()) {
|
||||
m_currentEmail = (EmailAddress) m_emails.next();
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String getKey() {
|
||||
return m_currentEmail.getAddress();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getElement() {
|
||||
return m_currentEmail.getAddress();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param l
|
||||
* @param state
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ListModel makeModel(List l, PageState state) {
|
||||
|
||||
return null;
|
||||
|
||||
// final Long userId = (Long) state.getValue(USER_ID_PARAM);
|
||||
// if (userId == null) {
|
||||
// return null;
|
||||
// } else {
|
||||
// final CdiUtil cdiUtil = new CdiUtil();
|
||||
// final UserRepository userRepository;
|
||||
|
||||
// userRepository = cdiUtil.findBean(UserRepository.class);
|
||||
// final User user = userRepository.findById(userId);
|
||||
//
|
||||
// return new EmailListModel(user.getEmailAddresses().iterator());
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,197 +0,0 @@
|
|||
package com.arsdigita.ui.admin;
|
||||
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.arsdigita.bebop.BoxPanel;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.Page;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.RequestLocal;
|
||||
import com.arsdigita.bebop.SegmentedPanel;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.bebop.Tree;
|
||||
import com.arsdigita.bebop.parameters.ParameterModel;
|
||||
import com.arsdigita.bebop.parameters.StringParameter;
|
||||
//import org.libreccm.core.Group;
|
||||
//import org.libreccm.core.GroupRepository;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
/**
|
||||
* Series of screens required for adding existing groups as subgroups - based on
|
||||
* existing functionality for adding permissions to a folder in content/admin
|
||||
*
|
||||
* @version $Id: ExistingGroupAddPane.java,v 1.4 2004/06/21 11:34:03 cgyg9330
|
||||
* Exp $
|
||||
*/
|
||||
public class ExistingGroupAddPane extends SimpleContainer implements
|
||||
AdminConstants {
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(
|
||||
ExistingGroupAddPane.class);
|
||||
|
||||
private ParameterModel searchString = new StringParameter(SEARCH_QUERY);
|
||||
|
||||
private GroupSearchForm groupSearchForm;
|
||||
private SimpleContainer selectGroupsPanel;
|
||||
private SimpleContainer noResultsPanel;
|
||||
private Tree groupTree;
|
||||
private GroupAdministrationTab parentPage;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private RequestLocal parentGroup = new RequestLocal() {
|
||||
|
||||
@Override
|
||||
protected Object initialValue(final PageState ps) {
|
||||
String key = (String) groupTree.getSelectedKey(ps);
|
||||
//
|
||||
// Group group = null;
|
||||
//
|
||||
// if (key != null) {
|
||||
// final Long id = new Long(key);
|
||||
//
|
||||
// final CdiUtil cdiUtil = new CdiUtil();
|
||||
// final GroupRepository groupRepository;
|
||||
|
||||
// groupRepository = cdiUtil.findBean(GroupRepository.class);
|
||||
//
|
||||
// group = groupRepository.findById(id);
|
||||
// }
|
||||
//
|
||||
// return group;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param groupTree
|
||||
* @param parentPage
|
||||
*/
|
||||
public ExistingGroupAddPane(Tree groupTree,
|
||||
GroupAdministrationTab parentPage) {
|
||||
this.groupTree = groupTree;
|
||||
this.parentPage = parentPage;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param p
|
||||
*/
|
||||
@Override
|
||||
public void register(Page p) {
|
||||
super.register(p);
|
||||
add(getGroupSearchForm());
|
||||
add(getSelectGroupsPanel());
|
||||
add(getNoSearchResultPanel());
|
||||
|
||||
// set initial visibility of components
|
||||
p.setVisibleDefault(getGroupSearchForm(), true);
|
||||
p.setVisibleDefault(getSelectGroupsPanel(), false);
|
||||
p.setVisibleDefault(getNoSearchResultPanel(), false);
|
||||
|
||||
p.addGlobalStateParam(searchString);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public GroupSearchForm getGroupSearchForm() {
|
||||
|
||||
if (groupSearchForm == null) {
|
||||
groupSearchForm = new GroupSearchForm(this);
|
||||
}
|
||||
return groupSearchForm;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a panel with a set of checkboxes for groups fulfilling search
|
||||
* criteria
|
||||
*/
|
||||
public SimpleContainer getSelectGroupsPanel() {
|
||||
if (selectGroupsPanel == null) {
|
||||
SelectGroups selectGroups = new SelectGroups(this,
|
||||
getGroupSearchForm());
|
||||
selectGroupsPanel = selectGroups.getPanel();
|
||||
}
|
||||
return selectGroupsPanel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a bebop panel indicating that the user search yielded no results.
|
||||
*/
|
||||
public SimpleContainer getNoSearchResultPanel() {
|
||||
if (noResultsPanel == null) {
|
||||
Label errorMsg = GROUP_NO_RESULTS;
|
||||
errorMsg.setClassAttr("errorBullet");
|
||||
BoxPanel bp = new BoxPanel();
|
||||
bp.add(errorMsg);
|
||||
bp.add(new GroupSearchForm(this));
|
||||
noResultsPanel = new SegmentedPanel().addSegment(new Label(" "), bp);
|
||||
}
|
||||
return noResultsPanel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows panel with no results to user search.
|
||||
*/
|
||||
public void showNoResults(PageState s) {
|
||||
getGroupSearchForm().setVisible(s, false);
|
||||
getSelectGroupsPanel().setVisible(s, false);
|
||||
getNoSearchResultPanel().setVisible(s, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the select groups to add as subgroups panel
|
||||
*/
|
||||
public void showGroups(PageState s) {
|
||||
getGroupSearchForm().setVisible(s, false);
|
||||
getSelectGroupsPanel().setVisible(s, true);
|
||||
getNoSearchResultPanel().setVisible(s, false);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* show the search form
|
||||
*/
|
||||
public void showSearch(PageState s) {
|
||||
getGroupSearchForm().setVisible(s, true);
|
||||
getSelectGroupsPanel().setVisible(s, false);
|
||||
getNoSearchResultPanel().setVisible(s, false);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public ParameterModel getSearchString() {
|
||||
return searchString;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public GroupAdministrationTab getParentPage() {
|
||||
return parentPage;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param ps
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
// public Group getParentGroup(PageState ps) {
|
||||
// return (Group) parentGroup.get(ps);
|
||||
// }
|
||||
|
||||
}
|
||||
|
|
@ -1,106 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.Tree;
|
||||
|
||||
import com.arsdigita.bebop.event.FormProcessListener;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
|
||||
/**
|
||||
* Add group form.
|
||||
*
|
||||
* @author David Dao
|
||||
* @version $Id$
|
||||
*/
|
||||
class GroupAddForm extends GroupForm implements FormProcessListener {
|
||||
|
||||
private Tree m_groupTree;
|
||||
private GroupAdministrationTab m_groupTab;
|
||||
|
||||
public GroupAddForm(final Tree groupTree,
|
||||
final GroupAdministrationTab tab) {
|
||||
super(GROUP_FORM_ADD);
|
||||
addProcessListener(this);
|
||||
m_groupTree = groupTree;
|
||||
m_groupTab = tab;
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes the form.
|
||||
*/
|
||||
@Override
|
||||
public void process(final FormSectionEvent event)
|
||||
throws FormProcessException {
|
||||
|
||||
// PageState ps = event.getPageState();
|
||||
//
|
||||
// // Get super parent group.
|
||||
// String key = (String) m_groupTree.getSelectedKey(ps);
|
||||
//
|
||||
// final Group parentGroup = null;
|
||||
//// if (key != null) {
|
||||
//// BigDecimal parentID = new BigDecimal(key);
|
||||
////
|
||||
//// try {
|
||||
//// parentGroup = new Group(parentID);
|
||||
//// } catch (DataObjectNotFoundException exc) {
|
||||
//// // Parent group does not exist.
|
||||
//// // This is normal behavior with the new group
|
||||
//// // been add with no parent.
|
||||
//// }
|
||||
//// }
|
||||
//
|
||||
// final Group group = new Group();
|
||||
//
|
||||
// String name = (String) m_name.getValue(ps);
|
||||
// group.setName(name);
|
||||
//
|
||||
// // Workaround for bug #189720: there is no way to remove a
|
||||
// // Party's primary email address, so we set it directly to
|
||||
// // null if it's value on the form is null.
|
||||
//// InternetAddress email = (InternetAddress) m_email.getValue(ps);
|
||||
//// if (email != null) {
|
||||
//// group.setPrimaryEmail(new EmailAddress(email.getAddress()));
|
||||
//// } else {
|
||||
//// //group.set("primaryEmail", null);
|
||||
//// group.setPrimaryEmail(null);
|
||||
//// }
|
||||
// final CdiUtil cdiUtil = new CdiUtil();
|
||||
// final GroupRepository groupRepository;
|
||||
|
||||
// groupRepository = cdiUtil.findBean(GroupRepository.class);
|
||||
// groupRepository.save(group);
|
||||
//
|
||||
//// if (parentGroup != null) {
|
||||
//// parentGroup.addSubgroup(group);
|
||||
//// parentGroup.save();
|
||||
//// }
|
||||
// if (m_groupTab != null) {
|
||||
// m_groupTab.setGroup(ps, group);
|
||||
// }
|
||||
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,668 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.ActionLink;
|
||||
import com.arsdigita.bebop.BoxPanel;
|
||||
import com.arsdigita.bebop.ColumnPanel;
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.List;
|
||||
import com.arsdigita.bebop.Page;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.RequestLocal;
|
||||
import com.arsdigita.bebop.SegmentedPanel;
|
||||
import com.arsdigita.bebop.Tree;
|
||||
import com.arsdigita.bebop.event.ActionEvent;
|
||||
import com.arsdigita.bebop.event.ActionListener;
|
||||
import com.arsdigita.bebop.event.ChangeEvent;
|
||||
import com.arsdigita.bebop.event.ChangeListener;
|
||||
import com.arsdigita.bebop.event.PrintEvent;
|
||||
import com.arsdigita.bebop.event.PrintListener;
|
||||
import com.arsdigita.bebop.list.ListCellRenderer;
|
||||
import com.arsdigita.bebop.list.ListModel;
|
||||
import com.arsdigita.bebop.list.ListModelBuilder;
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
import com.arsdigita.toolbox.ui.LayoutPanel;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
* Constructs the panel for administration of groups.
|
||||
*
|
||||
* @author David Dao
|
||||
*
|
||||
*/
|
||||
class GroupAdministrationTab extends LayoutPanel implements AdminConstants,
|
||||
ChangeListener {
|
||||
|
||||
private static final Logger LOGGER = Logger.getLogger(
|
||||
GroupAdministrationTab.class);
|
||||
private final Tree groupTree;
|
||||
private SearchAndList subMemberSearch;
|
||||
private ActionLink addSubmemberLink;
|
||||
private final Component groupInfoPanel;
|
||||
private final Component subGroupPanel;
|
||||
private final Component subMemberPanel;
|
||||
private final Component extremeActionPanel;
|
||||
private final Component groupAddPanel;
|
||||
private final Component groupEditPanel;
|
||||
private final Component groupDeleteFailedPanel;
|
||||
private final Component existingGroupAddPanel;
|
||||
private ExistingGroupAddPane m_existingGroupAdd;
|
||||
private final java.util.List<Component> panelList
|
||||
= new ArrayList<Component>();
|
||||
private final RequestLocal requestLocalGroup;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param page
|
||||
*/
|
||||
@Override
|
||||
public void register(final Page page) {
|
||||
for (int i = 0; i < panelList.size(); i++) {
|
||||
page.setVisibleDefault(panelList.get(i), false);
|
||||
}
|
||||
|
||||
page.setVisibleDefault(groupAddPanel, true);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param state
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
// public Group getGroup(final PageState state) {
|
||||
// return (Group) requestLocalGroup.get(state);
|
||||
// }
|
||||
|
||||
// public void setGroup(final PageState state, final Group group) {
|
||||
// final String groupId = Long.toString(group.getSubjectId());
|
||||
// requestLocalGroup.set(state, group);
|
||||
// groupTree.setSelectedKey(state, groupId);
|
||||
//
|
||||
// if (!"-1".equals(groupId)) {
|
||||
// expandGroups(state, group);
|
||||
// groupTree.expand("-1", state);
|
||||
// }
|
||||
// }
|
||||
|
||||
// private void expandGroups(final PageState state, final Group group) {
|
||||
//// groupTree.expand(Long.toString(group.getSubjectId()), state);
|
||||
////
|
||||
//// final List< superGroups = group.getSupergroups();
|
||||
//// Group superGroup;
|
||||
//// while (superGroups.next()) {
|
||||
//// superGroup = (Group) superGroups.getDomainObject();
|
||||
//// expandGroups(state, superGroup);
|
||||
//// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public GroupAdministrationTab() {
|
||||
super();
|
||||
|
||||
setClassAttr("sidebarNavPanel");
|
||||
setAttribute("navbar-title", "Groups");
|
||||
|
||||
requestLocalGroup = new RequestLocal() {
|
||||
|
||||
@Override
|
||||
protected Object initialValue(final PageState state) {
|
||||
// String key = (String) groupTree.getSelectedKey(state);
|
||||
|
||||
// Group group;
|
||||
// if (key != null) {
|
||||
// final long id = Long.parseLong(key);
|
||||
//
|
||||
// final CdiUtil cdiUtil = new CdiUtil();
|
||||
// final GroupRepository groupRepository;
|
||||
|
||||
// groupRepository = cdiUtil
|
||||
// .findBean(GroupRepository.class);
|
||||
//
|
||||
// group = groupRepository.findById(id);
|
||||
//
|
||||
// return group;
|
||||
// }
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
setClassAttr("navbar");
|
||||
|
||||
groupTree = new Tree(new GroupTreeModelBuilder());
|
||||
groupTree.addChangeListener(this);
|
||||
setLeft(groupTree);
|
||||
|
||||
final SegmentedPanel body = new SegmentedPanel();
|
||||
body.setClassAttr("main");
|
||||
|
||||
groupInfoPanel = buildGroupInfoPanel(body);
|
||||
panelList.add(groupInfoPanel);
|
||||
|
||||
groupEditPanel = buildGroupEditPanel(body);
|
||||
panelList.add(groupEditPanel);
|
||||
|
||||
subGroupPanel = buildSubGroupPanel(body);
|
||||
panelList.add(subGroupPanel);
|
||||
|
||||
groupAddPanel = buildGroupAddPanel(body);
|
||||
panelList.add(groupAddPanel);
|
||||
|
||||
existingGroupAddPanel = buildExistingGroupAddPanel(body);
|
||||
panelList.add(existingGroupAddPanel);
|
||||
|
||||
subMemberPanel = buildMemberListPanel(body);
|
||||
panelList.add(subMemberPanel);
|
||||
|
||||
extremeActionPanel = buildExtremeActionPanel(body);
|
||||
panelList.add(extremeActionPanel);
|
||||
|
||||
groupDeleteFailedPanel = buildGroupDeleteFailedPanel(body);
|
||||
panelList.add(groupDeleteFailedPanel);
|
||||
|
||||
setBody(body);
|
||||
}
|
||||
|
||||
public void displayAddGroupPanel(final PageState state) {
|
||||
hideAll(state);
|
||||
groupAddPanel.setVisible(state, true);
|
||||
}
|
||||
|
||||
private void displayAddExistingGroupPanel(final PageState state) {
|
||||
hideAll(state);
|
||||
existingGroupAddPanel.setVisible(state, true);
|
||||
}
|
||||
|
||||
public void displayEditPanel(final PageState state) {
|
||||
hideAll(state);
|
||||
groupEditPanel.setVisible(state, true);
|
||||
}
|
||||
|
||||
public void displayGroupInfoPanel(final PageState state) {
|
||||
showAll(state);
|
||||
groupEditPanel.setVisible(state, false);
|
||||
groupAddPanel.setVisible(state, false);
|
||||
groupDeleteFailedPanel.setVisible(state, false);
|
||||
existingGroupAddPanel.setVisible(state, false);
|
||||
}
|
||||
|
||||
public void displayDeleteFailedPanel(final PageState state) {
|
||||
hideAll(state);
|
||||
groupDeleteFailedPanel.setVisible(state, true);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param event
|
||||
*/
|
||||
public void stateChanged(final ChangeEvent event) {
|
||||
|
||||
final PageState ps = event.getPageState();
|
||||
final String key = (String) groupTree.getSelectedKey(ps);
|
||||
// added cg - reset existing group add panel to the search screen
|
||||
// when a new group is selected from the tree
|
||||
m_existingGroupAdd.showSearch(ps);
|
||||
if (key == null || key.equals("-1")) {
|
||||
/**
|
||||
* If root node is selected then display add panel only.
|
||||
*/
|
||||
displayAddGroupPanel(ps);
|
||||
} else {
|
||||
displayGroupInfoPanel(ps);
|
||||
}
|
||||
ps.setValue(GROUP_ID_PARAM, new BigDecimal(key));
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a panel to display group basic information.
|
||||
*/
|
||||
private Component buildGroupInfoPanel(final SegmentedPanel main) {
|
||||
final BoxPanel body = new BoxPanel();
|
||||
|
||||
//body.add(new GroupInfo(this));
|
||||
final ColumnPanel infoPanel = new ColumnPanel(2);
|
||||
|
||||
infoPanel.add(new Label(new GlobalizedMessage("ui.admin.groups.name",
|
||||
BUNDLE_NAME)));
|
||||
final Label nameLabel = new Label();
|
||||
nameLabel.addPrintListener(new PrintListener() {
|
||||
|
||||
@Override
|
||||
public void prepare(final PrintEvent event) {
|
||||
// final Label target = (Label) event.getTarget();
|
||||
// final PageState state = event.getPageState();
|
||||
// final Group group = getGroup(state);
|
||||
//
|
||||
// target.setLabel(group.getName());
|
||||
}
|
||||
|
||||
});
|
||||
infoPanel.add(nameLabel);
|
||||
body.add(infoPanel);
|
||||
|
||||
ActionLink link = new ActionLink(EDIT_GROUP_LABEL);
|
||||
link.setClassAttr("actionLink");
|
||||
link.addActionListener(new ActionListener() {
|
||||
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
PageState ps = e.getPageState();
|
||||
displayEditPanel(ps);
|
||||
}
|
||||
|
||||
});
|
||||
body.add(link);
|
||||
|
||||
return main.addSegment(GROUP_INFORMATION_HEADER, body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Build group edit form.
|
||||
*/
|
||||
private Component buildGroupEditPanel(final SegmentedPanel main) {
|
||||
return main.addSegment(GROUP_EDIT_HEADER, new GroupEditForm(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Build panel to display direct subgroup information.
|
||||
*/
|
||||
private Component buildSubGroupPanel(final SegmentedPanel main) {
|
||||
final BoxPanel body = new BoxPanel();
|
||||
final BoxPanel labelStatus = new BoxPanel(BoxPanel.HORIZONTAL);
|
||||
labelStatus.add(SUBGROUP_COUNT_LABEL);
|
||||
|
||||
final Label countLabel = new Label("");
|
||||
countLabel.addPrintListener(new PrintListener() {
|
||||
|
||||
@Override
|
||||
public void prepare(final PrintEvent event) {
|
||||
// final PageState ps = event.getPageState();
|
||||
//
|
||||
// final Label target = (Label) event.getTarget();
|
||||
// Group g = getGroup(ps);
|
||||
// if (g != null) {
|
||||
// target.setLabel(String.valueOf(g.countSubgroups()));
|
||||
// }
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
final ActionLink status = new ActionLink(countLabel);
|
||||
status.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent event) {
|
||||
PageState ps = event.getPageState();
|
||||
String key = (String) groupTree.getSelectedKey(ps);
|
||||
groupTree.expand(key, ps);
|
||||
}
|
||||
|
||||
});
|
||||
labelStatus.add(status);
|
||||
|
||||
body.add(labelStatus);
|
||||
|
||||
final List subGroupList = new List(new SubGroupListModelBuilder(this));
|
||||
subGroupList.setCellRenderer(new ListCellRenderer() {
|
||||
|
||||
@Override
|
||||
public Component getComponent(final List list,
|
||||
final PageState state,
|
||||
final Object value,
|
||||
final String key,
|
||||
final int index,
|
||||
final boolean isSelected) {
|
||||
throw new UnsupportedOperationException();
|
||||
// final BoxPanel b = new BoxPanel(BoxPanel.HORIZONTAL);
|
||||
// b.add(new Label(((Group) value).getName()));
|
||||
// final ControlLink removeLink = new ControlLink(
|
||||
// REMOVE_SUBGROUP_LABEL);
|
||||
// removeLink.setClassAttr("actionLink");
|
||||
// b.add(removeLink);
|
||||
// return b;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
subGroupList.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent event) {
|
||||
final PageState state = event.getPageState();
|
||||
final String key = (String) ((List) event.getSource())
|
||||
.getSelectedKey(state);
|
||||
|
||||
if (key != null) {
|
||||
// final Long groupId = Long.parseLong(key);
|
||||
// final CdiUtil cdiUtil = new CdiUtil();
|
||||
// final GroupRepository groupRepository;
|
||||
|
||||
// groupRepository = cdiUtil
|
||||
// .findBean(GroupRepository.class);
|
||||
//
|
||||
// final Group group = groupRepository.findById(groupId);
|
||||
// final Group parent = getGroup(state);
|
||||
// if (parent != null) {
|
||||
// groupRepository.save(parent);
|
||||
// }
|
||||
//
|
||||
// final BigDecimal groupID = new BigDecimal(key);
|
||||
// try {
|
||||
// final Group group = new Group(groupID);
|
||||
// final Group parent = getGroup(state);
|
||||
// if (parent != null) {
|
||||
// parent.removeSubgroup(group);
|
||||
// parent.save();
|
||||
// }
|
||||
// } catch (DataObjectNotFoundException exc) {
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
body.add(subGroupList);
|
||||
|
||||
final ActionLink addLink = new ActionLink(ADD_SUBGROUP_LABEL);
|
||||
addLink.setClassAttr("actionLink");
|
||||
addLink.addActionListener(new ActionListener() {
|
||||
|
||||
public void actionPerformed(final ActionEvent event) {
|
||||
PageState ps = event.getPageState();
|
||||
|
||||
displayAddGroupPanel(ps);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
body.add(addLink);
|
||||
|
||||
// new actionlink and anonymous ActionListener class added cg
|
||||
final ActionLink addExistingLink = new ActionLink(
|
||||
ADD_EXISTING_GROUP_TO_SUBGROUPS_LABEL);
|
||||
addExistingLink.setClassAttr("actionLink");
|
||||
addExistingLink.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent event) {
|
||||
LOGGER.debug("Add existing group link pressed");
|
||||
PageState ps = event.getPageState();
|
||||
displayAddExistingGroupPanel(ps);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
body.add(addExistingLink);
|
||||
return main.addSegment(SUBGROUP_HEADER, body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Build group add form.
|
||||
*/
|
||||
private Component buildGroupAddPanel(final SegmentedPanel main) {
|
||||
|
||||
return main.addSegment(ADD_GROUP_LABEL,
|
||||
new GroupAddForm(groupTree, this));
|
||||
}
|
||||
|
||||
private Component buildExistingGroupAddPanel(final SegmentedPanel main) {
|
||||
m_existingGroupAdd = new ExistingGroupAddPane(groupTree, this);
|
||||
return main.addSegment(ADD_EXISTING_GROUP_TO_SUBGROUPS_LABEL,
|
||||
m_existingGroupAdd);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build group's member panel.
|
||||
*/
|
||||
private Component buildMemberListPanel(final SegmentedPanel main) {
|
||||
|
||||
BoxPanel body = new BoxPanel() {
|
||||
|
||||
@Override
|
||||
public void register(final Page page) {
|
||||
page.setVisibleDefault(subMemberSearch, false);
|
||||
}
|
||||
|
||||
};
|
||||
// body.add(new SubMemberPanel(this));
|
||||
//
|
||||
// addSubmemberLink = new ActionLink(ADD_SUBMEMBER_LABEL);
|
||||
// addSubmemberLink.setClassAttr("actionLink");
|
||||
// addSubmemberLink.addActionListener(new ActionListener() {
|
||||
//
|
||||
// @Override
|
||||
// public void actionPerformed(final ActionEvent event) {
|
||||
// PageState ps = event.getPageState();
|
||||
// addSubmemberLink.setVisible(ps, false);
|
||||
// subMemberSearch.setVisible(ps, true);
|
||||
// }
|
||||
//
|
||||
// });
|
||||
//
|
||||
// subMemberSearch = new SearchAndList("searchsubmember");
|
||||
// subMemberSearch.setListModel(new UserSearchAndListModel());
|
||||
// subMemberSearch.addChangeListener(new ChangeListener() {
|
||||
//
|
||||
// @Override
|
||||
// public void stateChanged(final ChangeEvent event) {
|
||||
// PageState ps = event.getPageState();
|
||||
//
|
||||
// String key = (String) subMemberSearch.getSelectedKey(ps);
|
||||
// if (key != null) {
|
||||
// final BigDecimal userID = new BigDecimal(key);
|
||||
//
|
||||
// final Group group = getGroup(ps);
|
||||
//
|
||||
// if (group != null) {
|
||||
// try {
|
||||
// User user = User.retrieve(userID);
|
||||
// group.addMember(user);
|
||||
// group.save();
|
||||
// } catch (DataObjectNotFoundException exc) {
|
||||
// // Ignore if user id is not valid
|
||||
// } catch (PersistenceException pexc) {
|
||||
// // Display error message that user
|
||||
// // already existed in group.
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// subMemberSearch.reset(ps);
|
||||
// subMemberSearch.setVisible(ps, false);
|
||||
// addSubmemberLink.setVisible(ps, true);
|
||||
// }
|
||||
//
|
||||
// });
|
||||
//
|
||||
// body.add(subMemberSearch);
|
||||
// body.add(addSubmemberLink);
|
||||
return main.addSegment(SUBMEMBER_HEADER, body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Build extreme action panel.
|
||||
*/
|
||||
private Component buildExtremeActionPanel(final SegmentedPanel main) {
|
||||
final BoxPanel body = new BoxPanel();
|
||||
|
||||
final ActionLink deleteLink = new ActionLink(DELETE_GROUP_LABEL);
|
||||
deleteLink.setClassAttr("actionLink");
|
||||
deleteLink.setConfirmation(GROUP_DELETE_CONFIRMATION);
|
||||
// deleteLink.addActionListener(new ActionListener() {
|
||||
//
|
||||
// @Override
|
||||
// public void actionPerformed(final ActionEvent event) {
|
||||
//
|
||||
// PageState ps = event.getPageState();
|
||||
|
||||
// final Group group = (Group) requestLocalGroup.get(ps);
|
||||
// if (group != null) {
|
||||
// final CdiUtil cdiUtil = new CdiUtil();
|
||||
// final GroupRepository groupRepository;
|
||||
|
||||
// groupRepository = cdiUtil.findBean(GroupRepository.class);
|
||||
|
||||
// groupRepository.delete(group);
|
||||
|
||||
// try {
|
||||
// group.delete();
|
||||
// groupTree.setSelectedKey(ps, "-1");
|
||||
// } catch (PersistenceException exc) {
|
||||
// LOGGER.warn("Error deleting subgroup", exc);
|
||||
// displayDeleteFailedPanel(ps);
|
||||
// }
|
||||
// }
|
||||
// Select root node
|
||||
|
||||
// }
|
||||
//
|
||||
// });
|
||||
// body.add(deleteLink);
|
||||
return main.addSegment(GROUP_EXTREME_ACTIONS_HEADER,
|
||||
body);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a panel to display an error message when unable to delete group.
|
||||
*/
|
||||
private Component buildGroupDeleteFailedPanel(final SegmentedPanel main) {
|
||||
final ActionLink link = new ActionLink(GROUP_ACTION_CONTINUE);
|
||||
link.addActionListener(new ActionListener() {
|
||||
|
||||
public void actionPerformed(final ActionEvent event) {
|
||||
PageState ps = event.getPageState();
|
||||
displayGroupInfoPanel(ps);
|
||||
}
|
||||
|
||||
});
|
||||
link.setClassAttr("actionLink");
|
||||
|
||||
final Label label = new Label(GROUP_DELETE_FAILED_MSG);
|
||||
label.setClassAttr("deleteFailedMessage");
|
||||
|
||||
final BoxPanel panel = new BoxPanel();
|
||||
panel.add(label);
|
||||
panel.add(link);
|
||||
|
||||
return main.addSegment(GROUP_DELETE_FAILED_HEADER, panel);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides all components of the in preparation for turning selected
|
||||
* components back on.
|
||||
*/
|
||||
private void hideAll(final PageState state) {
|
||||
for (int i = 0; i < panelList.size(); i++) {
|
||||
((Component) panelList.get(i)).setVisible(state, false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Show all components of the in preparation for turning visibility of
|
||||
* selected components off .
|
||||
*/
|
||||
private void showAll(final PageState state) {
|
||||
for (int i = 0; i < panelList.size(); i++) {
|
||||
((Component) panelList.get(i)).setVisible(state, true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class SubGroupListModelBuilder extends LockableImpl implements ListModelBuilder {
|
||||
|
||||
private final GroupAdministrationTab parent;
|
||||
|
||||
public SubGroupListModelBuilder(final GroupAdministrationTab parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public ListModel makeModel(final List list, final PageState state) {
|
||||
// final Group group = parent.getGroup(state);
|
||||
|
||||
// if (group != null) {
|
||||
// return new SubGroupListModel(group.getSubgroups());
|
||||
// }
|
||||
|
||||
return new SubGroupListModel(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* CLASS
|
||||
*
|
||||
*/
|
||||
class SubGroupListModel implements ListModel {
|
||||
|
||||
// private GroupCollection m_coll;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param collection
|
||||
*/
|
||||
public SubGroupListModel(final Object collection) {
|
||||
// m_coll = collection;
|
||||
// m_coll.addOrder("lower(" + Group.DISPLAY_NAME + ") asc");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Object getElement() {
|
||||
// return m_coll.getGroup();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getKey() {
|
||||
// return m_coll.getID().toString();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean next() {
|
||||
// if (m_coll != null) {
|
||||
// return m_coll.next();
|
||||
// }
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,115 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.event.FormInitListener;
|
||||
import com.arsdigita.bebop.event.FormProcessListener;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
|
||||
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
//import org.libreccm.core.Group;
|
||||
//import org.libreccm.core.GroupRepository;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
/**
|
||||
* Edit group form.
|
||||
*
|
||||
* @author David Dao
|
||||
* @version $Id$
|
||||
*/
|
||||
class GroupEditForm extends GroupForm implements FormInitListener,
|
||||
FormProcessListener {
|
||||
|
||||
private GroupAdministrationTab m_parent;
|
||||
|
||||
public GroupEditForm() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
public GroupEditForm(final GroupAdministrationTab parent) {
|
||||
super(GROUP_FORM_EDIT);
|
||||
addInitListener(this);
|
||||
addProcessListener(this);
|
||||
|
||||
m_parent = parent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes form elements by retrieving their values from the database.
|
||||
*/
|
||||
@Override
|
||||
public void init(final FormSectionEvent event) {
|
||||
final PageState state = event.getPageState();
|
||||
final Long id = (Long) state.getValue(USER_ID_PARAM);
|
||||
|
||||
// if (id != null) {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final GroupRepository groupRepository;
|
||||
//
|
||||
|
||||
// groupRepository = cdiUtil.findBean(
|
||||
// GroupRepository.class);
|
||||
//
|
||||
// final Group group = groupRepository.findById(id);
|
||||
//
|
||||
// m_name.setValue(state, group.getName());
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes the form.
|
||||
*/
|
||||
@Override
|
||||
public void process(final FormSectionEvent event)
|
||||
throws FormProcessException {
|
||||
|
||||
final PageState state = event.getPageState();
|
||||
final Long id = (Long) state.getValue(GROUP_ID_PARAM);
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final GroupRepository groupRepository;
|
||||
// groupRepository = cdiUtil.findBean(GroupRepository.class);
|
||||
|
||||
if (id == null) {
|
||||
throw new FormProcessException(GlobalizationUtil.globalize(
|
||||
"ui.admin.groups.ID_is_null"));
|
||||
}
|
||||
|
||||
// final Group group = groupRepository.findById(id);
|
||||
// if (group == null) {
|
||||
// throw new FormProcessException(GlobalizationUtil.globalize(
|
||||
// "ui.admin.groups.couldnt_find_specified_group"));
|
||||
// }
|
||||
//
|
||||
//
|
||||
// final String name = (String) m_name.getValue(state);
|
||||
// group.setName(name);
|
||||
//
|
||||
// groupRepository.save(group);
|
||||
//
|
||||
if (m_parent != null) {
|
||||
m_parent.displayGroupInfoPanel(state);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
|
||||
import com.arsdigita.bebop.Form;
|
||||
import com.arsdigita.bebop.form.TextField;
|
||||
import com.arsdigita.bebop.form.Submit;
|
||||
import com.arsdigita.bebop.parameters.EmailParameter;
|
||||
import com.arsdigita.bebop.parameters.NotEmptyValidationListener;
|
||||
import com.arsdigita.bebop.parameters.StringLengthValidationListener;
|
||||
import com.arsdigita.bebop.parameters.StringParameter;
|
||||
import com.arsdigita.bebop.ColumnPanel;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
/**
|
||||
* Base form for add/edit group.
|
||||
*
|
||||
* @author David Dao
|
||||
* @version $Id$
|
||||
*/
|
||||
class GroupForm extends Form {
|
||||
|
||||
protected TextField m_name;
|
||||
// protected TextField m_email;
|
||||
|
||||
public GroupForm(String formName) {
|
||||
super(formName);
|
||||
|
||||
m_name = new TextField(new StringParameter(GROUP_FORM_INPUT_NAME));
|
||||
m_name.setMaxLength(200);
|
||||
m_name.addValidationListener(new NotEmptyValidationListener());
|
||||
m_name.addValidationListener(new StringLengthValidationListener (200));
|
||||
|
||||
|
||||
add(GROUP_FORM_LABEL_NAME);
|
||||
add(m_name);
|
||||
|
||||
// m_email = new TextField(new EmailParameter(GROUP_FORM_INPUT_PRIMARY_EMAIL));
|
||||
// m_email.setMaxLength(100);
|
||||
// add(GROUP_FORM_LABEL_PRIMARY_EMAIL);
|
||||
// add(m_email);
|
||||
|
||||
// Submit button
|
||||
add(new Submit(GROUP_FORM_SUBMIT), ColumnPanel.CENTER |
|
||||
ColumnPanel.FULL_WIDTH);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,119 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2006 Chris Gilbert. 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.ui.admin;
|
||||
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.arsdigita.bebop.ColumnPanel;
|
||||
import com.arsdigita.bebop.Form;
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.bebop.event.FormProcessListener;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.form.Submit;
|
||||
import com.arsdigita.bebop.form.TextField;
|
||||
import com.arsdigita.bebop.parameters.NotEmptyValidationListener;
|
||||
import com.arsdigita.bebop.parameters.ParameterModel;
|
||||
import com.arsdigita.bebop.parameters.StringParameter;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
|
||||
/**
|
||||
* @author cgyg9330
|
||||
*
|
||||
* Search for groups to add as subgroups. Text entered by user is put into a
|
||||
* groupName like '%......%' query, which also excludes problematic results
|
||||
* (groups that are already supergroups or subgroups of the current group
|
||||
*
|
||||
*/
|
||||
public class GroupSearchForm extends Form implements FormProcessListener,
|
||||
AdminConstants {
|
||||
|
||||
private ExistingGroupAddPane parentPane;
|
||||
private TextField m_search;
|
||||
// private List<Group> results = null;
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(GroupSearchForm.class);
|
||||
|
||||
public GroupSearchForm(ExistingGroupAddPane parent) {
|
||||
super("SearchGroups", new SimpleContainer());
|
||||
|
||||
parentPane = parent;
|
||||
setMethod(Form.POST);
|
||||
|
||||
addProcessListener(this);
|
||||
|
||||
add(GROUP_SEARCH_LABEL);
|
||||
add(new Label(" ", false));
|
||||
|
||||
StringParameter searchParam = new StringParameter(SEARCH_QUERY);
|
||||
m_search = new TextField(searchParam);
|
||||
m_search.addValidationListener(new NotEmptyValidationListener());
|
||||
m_search.setSize(20);
|
||||
add(m_search, ColumnPanel.RIGHT);
|
||||
|
||||
Submit submit = new Submit("submit");
|
||||
submit.setButtonLabel(SEARCH_BUTTON);
|
||||
add(submit, ColumnPanel.LEFT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(final FormSectionEvent event)
|
||||
throws FormProcessException {
|
||||
PageState state = event.getPageState();
|
||||
|
||||
// Group parent = parentPane.getParentGroup(state);
|
||||
// String search = (String) m_search.getValue(state);
|
||||
//
|
||||
// final CdiUtil cdiUtil = new CdiUtil();
|
||||
// final GroupRepository groupRepository;
|
||||
// groupRepository = cdiUtil.findBean(GroupRepository.class);
|
||||
// results = groupRepository.searchGroupByName(search);
|
||||
//
|
||||
//
|
||||
// if (results.isEmpty()) {
|
||||
// parentPane.showNoResults(state);
|
||||
// } else {
|
||||
// // put search string into Page
|
||||
// state.setValue(getSearchString(), m_search.getValue(state));
|
||||
// parentPane.showGroups(state);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* allow other classes to get hold of the results, to avoid constructing the
|
||||
* same query in several places
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
// public List<Group> getResults() {
|
||||
// return Collections.unmodifiableList(results);
|
||||
// }
|
||||
|
||||
private ParameterModel getSearchString() {
|
||||
return parentPane.getSearchString();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,155 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.PageState;
|
||||
|
||||
import com.arsdigita.bebop.tree.TreeModel;
|
||||
import com.arsdigita.bebop.tree.TreeNode;
|
||||
|
||||
import org.libreccm.security.Group;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author David Dao
|
||||
*
|
||||
*/
|
||||
public class GroupTreeModel implements TreeModel {
|
||||
|
||||
// private class GroupIterator implements Iterator {
|
||||
//
|
||||
// private List< m_coll;
|
||||
//
|
||||
// public GroupIterator(ACSObjectCollection coll) {
|
||||
// m_coll = coll;
|
||||
// }
|
||||
//
|
||||
// public boolean hasNext() {
|
||||
// return m_coll.next();
|
||||
// }
|
||||
//
|
||||
// public Object next() {
|
||||
// return new GroupTreeNode(m_coll.getACSObject());
|
||||
// }
|
||||
//
|
||||
// public void remove() {
|
||||
// throw new UnsupportedOperationException();
|
||||
// }
|
||||
//
|
||||
// }
|
||||
/**
|
||||
* Obtain the root folder of the tree
|
||||
*
|
||||
* @param state
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public TreeNode getRoot(final PageState state) {
|
||||
return new RootTreeNode();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether a given node has children
|
||||
*
|
||||
* @param node
|
||||
* @param state
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean hasChildren(final TreeNode node, final PageState state) {
|
||||
|
||||
if (node instanceof RootTreeNode) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get direct children in this node.
|
||||
*
|
||||
* @param node
|
||||
* @param state
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Iterator<Group> getChildren(final TreeNode node,
|
||||
final PageState state) {
|
||||
//
|
||||
// if (node instanceof RootTreeNode) {
|
||||
//
|
||||
// final CdiUtil cdiUtil = new CdiUtil();
|
||||
// final GroupRepository groupRepository;
|
||||
|
||||
// groupRepository = cdiUtil.findBean(GroupRepository.class);
|
||||
// final List<Group> groups = groupRepository.findAll();
|
||||
//
|
||||
// return groups.iterator();
|
||||
// } else {
|
||||
// return null;
|
||||
// }
|
||||
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
//
|
||||
}
|
||||
|
||||
class RootTreeNode implements TreeNode {
|
||||
|
||||
@Override
|
||||
public Object getKey() {
|
||||
return "-1";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getElement() {
|
||||
return "/";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class GroupTreeNode implements TreeNode {
|
||||
|
||||
private String m_key;
|
||||
private String m_name;
|
||||
|
||||
public GroupTreeNode(Group group) {
|
||||
// m_key = Long.toString(group.getSubjectId());
|
||||
m_name = group.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getKey() {
|
||||
return m_key;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getElement() {
|
||||
return m_name;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2013 Jens Pelzetter
|
||||
*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.Tree;
|
||||
import com.arsdigita.bebop.tree.TreeModel;
|
||||
import com.arsdigita.bebop.tree.TreeModelBuilder;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class GroupTreeModelBuilder extends LockableImpl implements TreeModelBuilder {
|
||||
|
||||
public TreeModel makeModel(final Tree tree, final PageState state) {
|
||||
tree.expand("-1", state);
|
||||
return new GroupTreeModel();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,83 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.list.ListModel;
|
||||
|
||||
import org.libreccm.security.Party;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @version $Id$
|
||||
*/
|
||||
class PartyListModel implements ListModel {
|
||||
|
||||
private final List<Party> m_parties;
|
||||
private Party m_currentParty = null;
|
||||
private int index = 0;
|
||||
|
||||
/**
|
||||
* Constructor for the list
|
||||
* Builds the list of party list model for parties
|
||||
*
|
||||
* @param partys the partyCollection
|
||||
**/
|
||||
public PartyListModel(final List<Party> parties) {
|
||||
m_parties = parties;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether is an another party
|
||||
*
|
||||
* @return true if another party exist, false otherwise
|
||||
**/
|
||||
@Override
|
||||
public boolean next() {
|
||||
if (index < m_parties.size()) {
|
||||
index++;
|
||||
m_currentParty = m_parties.get(index);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the unqiue ID string for current Party
|
||||
*
|
||||
* @return the unqiue ID string for current Party
|
||||
**/
|
||||
@Override
|
||||
public String getKey() {
|
||||
return Long.toString(m_currentParty.getPartyId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current Party
|
||||
*
|
||||
* @return the current Party
|
||||
**/
|
||||
@Override
|
||||
public Object getElement() {
|
||||
return m_currentParty.getPartyId();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,189 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.ActionLink;
|
||||
import com.arsdigita.bebop.BoxPanel;
|
||||
import com.arsdigita.bebop.Form;
|
||||
import com.arsdigita.bebop.FormData;
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.List;
|
||||
import com.arsdigita.bebop.Page;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.Resettable;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.bebop.event.ActionEvent;
|
||||
import com.arsdigita.bebop.event.ActionListener;
|
||||
import com.arsdigita.bebop.event.FormProcessListener;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.form.Submit;
|
||||
import com.arsdigita.bebop.form.TextField;
|
||||
import com.arsdigita.bebop.list.ListCellRenderer;
|
||||
import com.arsdigita.bebop.list.ListModel;
|
||||
import com.arsdigita.bebop.list.ListModelBuilder;
|
||||
import com.arsdigita.bebop.parameters.NotNullValidationListener;
|
||||
import com.arsdigita.bebop.parameters.ParameterModel;
|
||||
import com.arsdigita.bebop.parameters.StringParameter;
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
import com.arsdigita.bebop.event.ChangeListener;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author David Dao
|
||||
*/
|
||||
class SearchAndList extends SimpleContainer
|
||||
implements AdminConstants,
|
||||
Resettable {
|
||||
|
||||
/**
|
||||
* String catalog.
|
||||
*/
|
||||
private static final String FORM_INPUT_NAME = "query";
|
||||
|
||||
private static final GlobalizedMessage LABEL_SUBMIT = new GlobalizedMessage(
|
||||
"ui.admin.searchAndList.submit",
|
||||
BUNDLE_NAME);
|
||||
private static final GlobalizedMessage SEARCH_AGAIN = new GlobalizedMessage(
|
||||
"ui.admin.searchAndList.submitAgain",
|
||||
BUNDLE_NAME);
|
||||
|
||||
private Form m_searchForm;
|
||||
|
||||
private List m_searchResultList;
|
||||
|
||||
private ParameterModel m_queryModel;
|
||||
|
||||
private SearchAndListModel m_listModel;
|
||||
|
||||
private SimpleContainer m_searchResultContainer;
|
||||
|
||||
private class SearchListModelBuilder extends LockableImpl
|
||||
implements ListModelBuilder {
|
||||
|
||||
public ListModel makeModel(List l, PageState state) {
|
||||
return m_listModel;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private ListModelBuilder m_listModelBuilder = new SearchListModelBuilder();
|
||||
|
||||
private FormProcessListener m_formProcessListener
|
||||
= new FormProcessListener() {
|
||||
|
||||
public void process(FormSectionEvent e) throws FormProcessException {
|
||||
|
||||
FormData data = e.getFormData();
|
||||
PageState state = e.getPageState();
|
||||
String query = (String) data.get(FORM_INPUT_NAME);
|
||||
|
||||
boolean visible = false;
|
||||
if (query == null || query.equals("")) {
|
||||
visible = true;
|
||||
} else {
|
||||
visible = false;
|
||||
}
|
||||
|
||||
m_listModel.setQuery(query);
|
||||
m_searchForm.setVisible(state, visible);
|
||||
m_searchResultContainer.setVisible(state, !visible);
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
public SearchAndList(String name) {
|
||||
super();
|
||||
|
||||
/**
|
||||
* Create a search form.
|
||||
*/
|
||||
m_searchForm = new Form(name, new BoxPanel(BoxPanel.HORIZONTAL));
|
||||
m_queryModel = new StringParameter(FORM_INPUT_NAME);
|
||||
TextField query = new TextField(m_queryModel);
|
||||
query.addValidationListener(new NotNullValidationListener());
|
||||
m_searchForm.add(query);
|
||||
m_searchForm.add(new Submit(LABEL_SUBMIT));
|
||||
m_searchForm.addProcessListener(m_formProcessListener);
|
||||
add(m_searchForm);
|
||||
|
||||
/**
|
||||
* Create a search result container.
|
||||
*/
|
||||
m_searchResultContainer = new SimpleContainer();
|
||||
add(m_searchResultContainer);
|
||||
|
||||
m_searchResultList = new List();
|
||||
m_searchResultList.setClassAttr("SearchResultList");
|
||||
m_searchResultList.setModelBuilder(m_listModelBuilder);
|
||||
|
||||
ActionLink link = new ActionLink(new Label(SEARCH_AGAIN));
|
||||
link.setClassAttr("actionLink");
|
||||
link.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
PageState state = e.getPageState();
|
||||
m_searchForm.setVisible(state, true);
|
||||
m_searchResultContainer.setVisible(state, false);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
m_searchResultContainer.add(m_searchResultList);
|
||||
m_searchResultContainer.add(link);
|
||||
}
|
||||
|
||||
public void addChangeListener(ChangeListener l) {
|
||||
m_searchResultList.addChangeListener(l);
|
||||
}
|
||||
|
||||
public Object getSelectedKey(PageState ps) {
|
||||
return m_searchResultList.getSelectedKey(ps);
|
||||
}
|
||||
|
||||
public void clearSelection(PageState ps) {
|
||||
m_searchResultList.clearSelection(ps);
|
||||
}
|
||||
|
||||
public void setListModel(SearchAndListModel model) {
|
||||
m_listModel = model;
|
||||
}
|
||||
|
||||
public void setResultCellRenderer(ListCellRenderer r) {
|
||||
m_searchResultList.setCellRenderer(r);
|
||||
}
|
||||
|
||||
public void register(Page p) {
|
||||
p.setVisibleDefault(m_searchForm, true);
|
||||
p.setVisibleDefault(m_searchResultContainer, false);
|
||||
|
||||
}
|
||||
|
||||
public void reset(PageState ps) {
|
||||
m_searchResultContainer.setVisible(ps, false);
|
||||
m_searchForm.setVisible(ps, true);
|
||||
clearSelection(ps);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.list.ListModel;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author David Dao
|
||||
* @version $Id$
|
||||
*/
|
||||
|
||||
public interface SearchAndListModel extends ListModel {
|
||||
|
||||
/**
|
||||
* Specify the user's search.
|
||||
*/
|
||||
|
||||
public void setQuery (String query);
|
||||
}
|
||||
|
|
@ -1,166 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2006 Chris Gilbert. 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.ui.admin;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.TooManyListenersException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.arsdigita.bebop.BoxPanel;
|
||||
import com.arsdigita.bebop.Form;
|
||||
import com.arsdigita.bebop.FormData;
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.event.FormSubmissionListener;
|
||||
import com.arsdigita.bebop.event.PrintEvent;
|
||||
import com.arsdigita.bebop.event.PrintListener;
|
||||
import com.arsdigita.bebop.form.CheckboxGroup;
|
||||
import com.arsdigita.bebop.form.Option;
|
||||
import com.arsdigita.bebop.form.OptionGroup;
|
||||
import com.arsdigita.bebop.form.Submit;
|
||||
|
||||
import org.libreccm.security.Group;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
/**
|
||||
* @author cgyg9330
|
||||
*
|
||||
* contains a form that allows the user to select desired groups to be added as
|
||||
* subgroups to the currently selected group
|
||||
*
|
||||
* NB could be improved with cancel button - currently need to use browser back
|
||||
* button
|
||||
*/
|
||||
public class SelectGroups {
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(SelectGroups.class);
|
||||
private static final String GROUPS_CBG = "groups_cbg";
|
||||
private BoxPanel groupPanel;
|
||||
private CheckboxGroup groups;
|
||||
private Form form;
|
||||
private Submit save;
|
||||
private ExistingGroupAddPane parentPane;
|
||||
private GroupSearchForm searchForm;
|
||||
|
||||
public SelectGroups(ExistingGroupAddPane parent, GroupSearchForm searchForm) {
|
||||
parentPane = parent;
|
||||
makeForm();
|
||||
groupPanel = new BoxPanel();
|
||||
groupPanel.add(form);
|
||||
this.searchForm = searchForm;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the form used to select groups.
|
||||
*/
|
||||
private void makeForm() {
|
||||
form = new Form("ChooseGroups", new BoxPanel());
|
||||
form.setMethod(Form.POST);
|
||||
form.addSubmissionListener(new AddGroupsSubmissionListener());
|
||||
form.add(PICK_GROUPS);
|
||||
groups = new CheckboxGroup(GROUPS_CBG);
|
||||
groups.setClassAttr("vertical");
|
||||
|
||||
try {
|
||||
groups.addPrintListener(new GroupSearchPrintListener());
|
||||
} catch (TooManyListenersException e) {
|
||||
throw new RuntimeException(e.getMessage());
|
||||
}
|
||||
form.add(groups);
|
||||
|
||||
save = new Submit("save", SAVE_BUTTON);
|
||||
form.add(save);
|
||||
}
|
||||
|
||||
public BoxPanel getPanel() {
|
||||
return groupPanel;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* FormSubmissionListener that sets selected groups to be subgroups of the
|
||||
* currently selected group
|
||||
*
|
||||
*/
|
||||
private class AddGroupsSubmissionListener
|
||||
implements FormSubmissionListener {
|
||||
|
||||
public void submitted(FormSectionEvent e) throws FormProcessException {
|
||||
PageState state = e.getPageState();
|
||||
FormData data = e.getFormData();
|
||||
String[] selectedGroups = (String[]) data.get(GROUPS_CBG);
|
||||
BigDecimal groupID = null;
|
||||
Group child = null;
|
||||
// if (selectedGroups != null) {
|
||||
// Group parent = parentPane.getParentGroup(state);
|
||||
// for (int i = 0; i < selectedGroups.length; i++) {
|
||||
// groupID = new BigDecimal(selectedGroups[i]);
|
||||
// try {
|
||||
// child = new Group(groupID);
|
||||
// } catch (DataObjectNotFoundException e2) {
|
||||
// s_log.warn("Non existant Group " + child
|
||||
// + " selected to be child of " + parent);
|
||||
// }
|
||||
// parent.addSubgroup(child);
|
||||
// parent.save();
|
||||
// }
|
||||
// }
|
||||
|
||||
parentPane.showSearch(state);
|
||||
parentPane.getParentPage().displayGroupInfoPanel(state);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @author cgyg9330
|
||||
*
|
||||
* Printlistener retrieves query results from the groupsearch form and uses
|
||||
* them as the entries on the checkbox group
|
||||
*/
|
||||
private class GroupSearchPrintListener implements PrintListener {
|
||||
|
||||
public void prepare(PrintEvent e) {
|
||||
PageState state = e.getPageState();
|
||||
OptionGroup cbg = (CheckboxGroup) e.getTarget();
|
||||
|
||||
// List<Group> results = searchForm.getResults();
|
||||
|
||||
String groupID;
|
||||
String groupName;
|
||||
Group child;
|
||||
|
||||
// for(Group group : results) {
|
||||
// child = group;
|
||||
// groupID = Long.toString(child.getSubjectId());
|
||||
// groupName = child.getName();
|
||||
// cbg.addOption(new Option(groupID, groupName));
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,161 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.list.ListModelBuilder;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
import com.arsdigita.bebop.list.ListModel;
|
||||
import com.arsdigita.bebop.List;
|
||||
import com.arsdigita.bebop.BoxPanel;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.list.ListCellRenderer;
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.ControlLink;
|
||||
import com.arsdigita.bebop.event.ActionListener;
|
||||
import com.arsdigita.bebop.event.ActionEvent;
|
||||
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author David Dao
|
||||
*
|
||||
*/
|
||||
class SubMemberPanel extends BoxPanel {
|
||||
|
||||
private List m_memberList;
|
||||
|
||||
|
||||
private GroupAdministrationTab m_mainTab;
|
||||
|
||||
public SubMemberPanel(final GroupAdministrationTab tab) {
|
||||
m_mainTab = tab;
|
||||
m_memberList = new List(new SubMemberListModelBuilder(tab));
|
||||
m_memberList.setCellRenderer(new ListCellRenderer() {
|
||||
@Override
|
||||
public Component getComponent(final List list,
|
||||
final PageState state,
|
||||
final Object value,
|
||||
final String key,
|
||||
final int index,
|
||||
final boolean isSelected) {
|
||||
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.HORIZONTAL);
|
||||
|
||||
// Label label = new Label(((User) value).getScreenName());
|
||||
// panel.add(label);
|
||||
|
||||
ControlLink removeLink = new ControlLink(REMOVE_SUBMEMBER_LABEL);
|
||||
removeLink.setClassAttr("actionLink");
|
||||
|
||||
panel.add(removeLink);
|
||||
return panel;
|
||||
}
|
||||
});
|
||||
m_memberList.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent event) {
|
||||
|
||||
final PageState state = event.getPageState();
|
||||
final String key = (String) m_memberList.getSelectedKey(state);
|
||||
|
||||
if (key != null) {
|
||||
final Long userID = new Long(key);
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final UserRepository userRepository;
|
||||
// final GroupManager groupManager;
|
||||
// final GroupRepository groupRepository;
|
||||
|
||||
// userRepository = cdiUtil.findBean(UserRepository.class);
|
||||
// groupManager = cdiUtil.findBean(GroupManager.class);
|
||||
// groupRepository = cdiUtil.findBean(GroupRepository.class);
|
||||
//
|
||||
// final User user = userRepository.findById(userID);
|
||||
// final Group group = m_mainTab.getGroup(state);
|
||||
// if (group != null) {
|
||||
// groupManager.removeUserFromGroup(user, group);
|
||||
// groupRepository.save(group);
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
add(m_memberList);
|
||||
}
|
||||
}
|
||||
|
||||
class SubMemberListModelBuilder extends LockableImpl
|
||||
implements ListModelBuilder {
|
||||
|
||||
private GroupAdministrationTab m_mainTab;
|
||||
public SubMemberListModelBuilder(final GroupAdministrationTab tab) {
|
||||
m_mainTab = tab;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListModel makeModel(final List list, final PageState state) {
|
||||
|
||||
// final Group group = m_mainTab.getGroup(state);
|
||||
// final java.util.List<GroupMembership> members;
|
||||
// if (group == null) {
|
||||
// members = null;
|
||||
// } else {
|
||||
// members = group.getMembers();
|
||||
// }
|
||||
|
||||
// return new SubMemberListModel(members);
|
||||
throw new UnsupportedOperationException();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//class SubMemberListModel implements ListModel {
|
||||
//
|
||||
//// private final java.util.List<GroupMembership> members;
|
||||
// private int index;
|
||||
//
|
||||
//
|
||||
// public SubMemberListModel(final java.util.List<GroupMembership> members) {
|
||||
// this.members = members;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public Object getElement() {
|
||||
// return members.get(index);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String getKey() {
|
||||
// return Long.toString(members.get(index).getMembershipId());
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public boolean next() {
|
||||
// if (index < members.size()) {
|
||||
// index++;
|
||||
// return true;
|
||||
// } else {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
|
@ -41,9 +41,8 @@ import org.xml.sax.SAXException;
|
|||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
* @version $Id: SystemInformationTab.java 2923 2014-10-27 18:55:26Z jensp $
|
||||
*/
|
||||
public class SystemInformationTab extends LayoutPanel implements AdminConstants {
|
||||
public class SystemInformationTab extends LayoutPanel {
|
||||
|
||||
public SystemInformationTab() {
|
||||
super();
|
||||
|
|
@ -273,9 +272,7 @@ public class SystemInformationTab extends LayoutPanel implements AdminConstants
|
|||
case SAX_PARSER_INDEX:
|
||||
try {
|
||||
return SAXParserFactory.newInstance().newSAXParser().getClass().getName();
|
||||
} catch(ParserConfigurationException ex) {
|
||||
return "???";
|
||||
} catch(SAXException ex) {
|
||||
} catch(ParserConfigurationException | SAXException ex) {
|
||||
return "???";
|
||||
}
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -1,192 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2013 Jens Pelzetter
|
||||
*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.BoxPanel;
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.List;
|
||||
import com.arsdigita.bebop.Page;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.Resettable;
|
||||
import com.arsdigita.bebop.TabbedPane;
|
||||
import com.arsdigita.bebop.event.ChangeEvent;
|
||||
import com.arsdigita.bebop.event.ChangeListener;
|
||||
import com.arsdigita.bebop.list.ListModel;
|
||||
import com.arsdigita.bebop.list.ListModelBuilder;
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
import com.arsdigita.toolbox.ui.LayoutPanel;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
import com.arsdigita.xml.Element;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
* @version $Id$
|
||||
*/
|
||||
class UserAdministrationTab extends LayoutPanel {
|
||||
|
||||
private final List sections;
|
||||
private final java.util.List<Component> components = new ArrayList<>();
|
||||
private final java.util.List<Label> keys = new ArrayList<>();
|
||||
private final GlobalizedMessage title = USER_NAVBAR_TITLE;
|
||||
|
||||
public UserAdministrationTab(final TabbedPane parent, final GroupAdministrationTab groupAdminTab) {
|
||||
super();
|
||||
|
||||
setClassAttr("sidebarNavPanel");
|
||||
|
||||
sections = new List(new GlobalizedTabModelBuilder());
|
||||
sections.addChangeListener(new SectionChangeListener());
|
||||
sections.setClassAttr("navbar");
|
||||
setLeft(sections);
|
||||
|
||||
// final UserBrowsePane browsePane = new UserBrowsePane();
|
||||
// final UserSummarySection summarySection = new UserSummarySection(
|
||||
// this, browsePane);
|
||||
// final UserSearchSection searchSection = new UserSearchSection(
|
||||
// this, browsePane);
|
||||
// final UserCreateSection createSection = new UserCreateSection(this);
|
||||
//
|
||||
// browsePane.setTabbedPane(parent);
|
||||
// browsePane.setGroupAdministrationTab(groupAdminTab);
|
||||
//
|
||||
//// final BoxPanel body = new BoxPanel();
|
||||
////// addSection(USER_TAB_SUMMARY, summarySection, body);
|
||||
////// addSection(USER_TAB_BROWSE, browsePane, body);
|
||||
////// addSection(USER_TAB_SEARCH, searchSection, body);
|
||||
////// addSection(USER_TAB_CREATE_USER, createSection, body);
|
||||
//
|
||||
// setBody(body);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @pre label != null && c != null
|
||||
*/
|
||||
private void addSection(final Label label, final Component component, final BoxPanel panel) {
|
||||
Assert.isUnlocked(this);
|
||||
components.add(component);
|
||||
component.setClassAttr("main");
|
||||
panel.add(component);
|
||||
keys.add(label);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param page
|
||||
*/
|
||||
@Override
|
||||
public void register(final Page page) {
|
||||
Assert.isUnlocked(this);
|
||||
|
||||
for (int i = 0; i < components.size(); i++) {
|
||||
page.setVisibleDefault(components.get(i), false);
|
||||
}
|
||||
}
|
||||
|
||||
public void setSection(final int index, final PageState state) {
|
||||
sections.setSelectedKey(state, String.valueOf(index));
|
||||
for (int i = 0; i < components.size(); i++) {
|
||||
if (i == index) {
|
||||
(components.get(i)).setVisible(state, true);
|
||||
((Resettable) components.get(i)).reset(state);
|
||||
} else {
|
||||
(components.get(i)).setVisible(state, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateXML(final PageState state, final Element parent) {
|
||||
super.generateXML(state, parent);
|
||||
|
||||
/**
|
||||
* Globalized navbar title.
|
||||
* Why did I override generateXML method to globalize the title?
|
||||
* Because CMS put title bar as an attribute of element. This
|
||||
* is the only method I could come up with.
|
||||
*/
|
||||
final Element child = (Element) parent.getChildren().get(0);
|
||||
child.addAttribute("navbar-title",
|
||||
(String) title.localize(state.getRequest()));
|
||||
}
|
||||
|
||||
private class SectionChangeListener implements ChangeListener {
|
||||
|
||||
public SectionChangeListener() {
|
||||
//Nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stateChanged(final ChangeEvent event) {
|
||||
final PageState state = event.getPageState();
|
||||
final int selectedIndex = Integer.parseInt((String) sections.getSelectedKey(state));
|
||||
setSection(selectedIndex, state);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class GlobalizedTabModelBuilder extends LockableImpl implements ListModelBuilder {
|
||||
|
||||
public GlobalizedTabModelBuilder() {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListModel makeModel(final List list, final PageState state) {
|
||||
return new TabNameListModel(state);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class TabNameListModel implements ListModel {
|
||||
|
||||
private int index = -1;
|
||||
private final PageState pageState;
|
||||
|
||||
public TabNameListModel(final PageState state) {
|
||||
pageState = state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getElement() {
|
||||
return keys.get(index).getLabel(pageState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return String.valueOf(index);
|
||||
}
|
||||
|
||||
public boolean next() {
|
||||
final boolean result = (index < keys.size() - 1);
|
||||
//return (index++ < keys.size() - 1);
|
||||
index++;
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,758 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.ActionLink;
|
||||
import com.arsdigita.bebop.BoxPanel;
|
||||
import com.arsdigita.bebop.ColumnPanel;
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.ControlLink;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.List;
|
||||
import com.arsdigita.bebop.Page;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.RequestLocal;
|
||||
import com.arsdigita.bebop.Resettable;
|
||||
import com.arsdigita.bebop.SegmentedPanel;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.bebop.Table;
|
||||
import com.arsdigita.bebop.TabbedPane;
|
||||
// import com.arsdigita.bebop.event.ActionEvent;
|
||||
import com.arsdigita.bebop.event.ActionEvent;
|
||||
// import com.arsdigita.bebop.event.ActionListener;
|
||||
import com.arsdigita.bebop.event.ActionListener;
|
||||
import com.arsdigita.bebop.event.ChangeEvent;
|
||||
import com.arsdigita.bebop.event.ChangeListener;
|
||||
import com.arsdigita.bebop.event.PrintEvent;
|
||||
import com.arsdigita.bebop.event.PrintListener;
|
||||
import com.arsdigita.bebop.event.TableActionEvent;
|
||||
import com.arsdigita.bebop.event.TableActionListener;
|
||||
import com.arsdigita.bebop.list.ListModel;
|
||||
import com.arsdigita.bebop.list.ListModelBuilder;
|
||||
import com.arsdigita.bebop.table.TableCellRenderer;
|
||||
import com.arsdigita.bebop.table.TableModel;
|
||||
import com.arsdigita.bebop.table.TableModelBuilder;
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
import com.arsdigita.ui.UI;
|
||||
import com.arsdigita.web.URL;
|
||||
import com.arsdigita.web.RedirectSignal;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.security.User;
|
||||
|
||||
/**
|
||||
* This pane contains three main segmented panel which only one is visible at
|
||||
* any given time. The first panel is a table listing all available users in the
|
||||
* system. The second panel displays read only user information. And the third
|
||||
* panel is edit form.
|
||||
*
|
||||
* @author David Dao
|
||||
* @author Ron Henderson
|
||||
* @version $Id$
|
||||
*/
|
||||
class UserBrowsePane extends SegmentedPanel
|
||||
implements TableCellRenderer,
|
||||
TableActionListener,
|
||||
Resettable,
|
||||
ActionListener,
|
||||
ChangeListener {
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(UserBrowsePane.class);
|
||||
|
||||
private Component m_userBrowsePanel;
|
||||
private Component m_userInfoPanel;
|
||||
private Component m_userEditPanel;
|
||||
private Component m_userPasswordPanel;
|
||||
private Component m_groupMembershipPanel;
|
||||
private Component m_actionPanel;
|
||||
private Component m_extremeActionPanel;
|
||||
private Component m_userDeleteFailedPanel;
|
||||
private GroupAdministrationTab m_groupAdministrationTab;
|
||||
private TabbedPane m_tabbedPane;
|
||||
|
||||
private List m_groupList = null;
|
||||
|
||||
private ArrayList m_panelList = new ArrayList();
|
||||
|
||||
private RequestLocal m_user;
|
||||
|
||||
@Override
|
||||
public void register(Page p) {
|
||||
for (int i = 0; i < m_panelList.size(); i++) {
|
||||
p.setVisibleDefault((Component) m_panelList.get(i), false);
|
||||
}
|
||||
|
||||
p.setVisibleDefault(m_userBrowsePanel, true);
|
||||
p.addActionListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent event) {
|
||||
// final PageState state = event.getPageState();
|
||||
// final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final CcmSessionContext sessionContext;
|
||||
|
||||
// sessionContext = cdiUtil.findBean(CcmSessionContext.class);
|
||||
//
|
||||
// final Subject subject = sessionContext.getCurrentSubject();
|
||||
//
|
||||
// final Long userID = (Long) state.getValue(USER_ID_PARAM);
|
||||
//
|
||||
// // Bug #167607 remove link for current user
|
||||
// if (m_userInfoPanel.isVisible(state)) {
|
||||
// if (subject.getSubjectId() == userID) {
|
||||
// m_extremeActionPanel.setVisible(state, false);
|
||||
// } else {
|
||||
// m_extremeActionPanel.setVisible(state, true);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new UserBrowsePane with multiple panels to help manage various
|
||||
* aspects of a user's account.
|
||||
*/
|
||||
public UserBrowsePane() {
|
||||
m_user = new RequestLocal() {
|
||||
|
||||
@Override
|
||||
protected Object initialValue(final PageState state) {
|
||||
final Long id = (Long) state.getValue(USER_ID_PARAM);
|
||||
|
||||
// final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final UserRepository userRepository;
|
||||
|
||||
// userRepository = cdiUtil.findBean(UserRepository.class);
|
||||
//
|
||||
// final User user = userRepository.findById(id);
|
||||
// if (user == null) {
|
||||
// throw new UncheckedWrapperException(String.format(
|
||||
// "Failed to retrieve user: %d", id));
|
||||
// }
|
||||
// return user;
|
||||
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
m_userBrowsePanel = buildUserBrowsePanel();
|
||||
m_panelList.add(m_userBrowsePanel);
|
||||
|
||||
m_userInfoPanel = buildUserInfoPanel();
|
||||
m_panelList.add(m_userInfoPanel);
|
||||
|
||||
m_userEditPanel = buildUserEditPanel();
|
||||
m_panelList.add(m_userEditPanel);
|
||||
|
||||
m_userPasswordPanel = buildUserPasswordPanel();
|
||||
m_panelList.add(m_userPasswordPanel);
|
||||
|
||||
m_groupMembershipPanel = buildGroupMembershipPanel();
|
||||
m_panelList.add(m_groupMembershipPanel);
|
||||
|
||||
m_actionPanel = buildActionPanel();
|
||||
m_panelList.add(m_actionPanel);
|
||||
|
||||
m_extremeActionPanel = buildExtremeActionPanel();
|
||||
m_panelList.add(m_extremeActionPanel);
|
||||
|
||||
m_userDeleteFailedPanel = buildUserDeleteFailedPanel();
|
||||
m_panelList.add(m_userDeleteFailedPanel);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user object for this request.
|
||||
*/
|
||||
public User getUser(PageState ps) {
|
||||
return (User) m_user.get(ps);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the User Information panel
|
||||
*/
|
||||
private Component buildUserInfoPanel() {
|
||||
// Edit user link
|
||||
|
||||
ActionLink link = new ActionLink(new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.editlink",
|
||||
BUNDLE_NAME)));
|
||||
link.addActionListener(new ActionListener() {
|
||||
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
PageState ps = e.getPageState();
|
||||
displayEditPanel(ps);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
link.setClassAttr("actionLink");
|
||||
|
||||
BoxPanel panel = new BoxPanel();
|
||||
|
||||
// panel.add(new UserInfo(this));
|
||||
final ColumnPanel colPanel = new ColumnPanel(2);
|
||||
|
||||
colPanel.add(new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.userinfo.name", BUNDLE_NAME)));
|
||||
final Label userName = new Label();
|
||||
userName.addPrintListener(new PrintListener() {
|
||||
|
||||
@Override
|
||||
public void prepare(final PrintEvent event) {
|
||||
final Label target = (Label) event.getTarget();
|
||||
final PageState state = event.getPageState();
|
||||
final User user = getUser(state);
|
||||
|
||||
target.setLabel(user.getName());
|
||||
}
|
||||
|
||||
});
|
||||
colPanel.add(userName);
|
||||
|
||||
colPanel.add(new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.userinfo.screenname",
|
||||
BUNDLE_NAME)));
|
||||
final Label userScreenname = new Label();
|
||||
userScreenname.addPrintListener(new PrintListener() {
|
||||
|
||||
@Override
|
||||
public void prepare(final PrintEvent event) {
|
||||
final Label target = (Label) event.getTarget();
|
||||
final PageState state = event.getPageState();
|
||||
final User user = getUser(state);
|
||||
|
||||
target.setLabel(user.getName());
|
||||
}
|
||||
|
||||
});
|
||||
colPanel.add(userScreenname);
|
||||
|
||||
colPanel.add(new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.userinfo.primaryemail",
|
||||
BUNDLE_NAME)));
|
||||
final Label userEmail = new Label();
|
||||
userEmail.addPrintListener(new PrintListener() {
|
||||
|
||||
@Override
|
||||
public void prepare(final PrintEvent event) {
|
||||
final Label target = (Label) event.getTarget();
|
||||
final PageState state = event.getPageState();
|
||||
final User user = getUser(state);
|
||||
|
||||
target.setLabel(user.getEmailAddresses().get(0).getAddress());
|
||||
}
|
||||
|
||||
});
|
||||
colPanel.add(userEmail);
|
||||
|
||||
panel.add(colPanel);
|
||||
panel.add(link);
|
||||
|
||||
return addSegment(USER_INFO_LABEL, panel);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the User Edit panel
|
||||
*/
|
||||
private Component buildUserEditPanel() {
|
||||
return addSegment(USER_EDIT_PANEL_HEADER, new UserEditForm(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the User Password Update panel
|
||||
*/
|
||||
private Component buildUserPasswordPanel() {
|
||||
BoxPanel p = new BoxPanel();
|
||||
p.add(new UserPasswordForm(this));
|
||||
p.add(new SimpleContainer("admin:PasswordNote", ADMIN_XML_NS));
|
||||
|
||||
return addSegment(USER_PASSWORD_PANEL_HEADER, p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the Group Membership panel
|
||||
*/
|
||||
private Component buildGroupMembershipPanel() {
|
||||
m_groupList = new List();
|
||||
m_groupList.setClassAttr("UserGroupsResultList");
|
||||
m_groupList.setModelBuilder(new GroupsModelBuilder());
|
||||
m_groupList.addChangeListener(this);
|
||||
|
||||
return addSegment(USER_GROUP_PANEL_HEADER, m_groupList);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the Action panel
|
||||
*/
|
||||
private Component buildActionPanel() {
|
||||
BoxPanel p = new BoxPanel();
|
||||
|
||||
// Update password link
|
||||
ActionLink link = new ActionLink(UPDATE_USER_PASSWORD_LABEL);
|
||||
link.addActionListener(new ActionListener() {
|
||||
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
PageState ps = e.getPageState();
|
||||
displayUserPasswordPanel(ps);
|
||||
}
|
||||
|
||||
});
|
||||
link.setClassAttr("actionLink");
|
||||
p.add(link);
|
||||
|
||||
// Become user link
|
||||
// This will not be shown when the user is banned to prevent security issues
|
||||
link = new ActionLink(BECOME_USER_LABEL) {
|
||||
|
||||
public boolean isVisible(PageState s) {
|
||||
if (!super.isVisible(s)) {
|
||||
return false;
|
||||
}
|
||||
User u = getUser(s);
|
||||
return (!u.isBanned());
|
||||
}
|
||||
|
||||
};
|
||||
link.setClassAttr("actionLink");
|
||||
link.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent event) {
|
||||
final PageState state = event.getPageState();
|
||||
// final BigDecimal id = (BigDecimal) state.getValue(USER_ID_PARAM);
|
||||
//
|
||||
// final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final LoginManager loginManager;
|
||||
|
||||
// loginManager = cdiUtil.findBean(
|
||||
// LoginManager.class);
|
||||
//
|
||||
// loginManager.login(CLASS, CLASS);
|
||||
//
|
||||
// try {
|
||||
// UserContext uc = Web.getUserContext();
|
||||
// uc.login(id);
|
||||
// } catch (javax.security.auth.login.LoginException ex) {
|
||||
// throw new UncheckedWrapperException("access denied", ex);
|
||||
// }
|
||||
|
||||
// Redirect to workspace URL
|
||||
final String path = UI.getUserRedirectURL(state.getRequest());
|
||||
|
||||
final URL url = URL.there(state.getRequest(), path);
|
||||
|
||||
throw new RedirectSignal(url, true);
|
||||
}
|
||||
|
||||
});
|
||||
p.add(link);
|
||||
|
||||
// Show all users
|
||||
link = new ActionLink(new Label(new GlobalizedMessage(
|
||||
"ui.admin.user.browselink",
|
||||
BUNDLE_NAME)));
|
||||
link.setClassAttr("actionLink");
|
||||
link.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
PageState ps = e.getPageState();
|
||||
displayUserBrowsePanel(ps);
|
||||
}
|
||||
|
||||
});
|
||||
p.add(link);
|
||||
|
||||
return addSegment(USER_ACTION_PANEL_HEADER, p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the Extreme Action panel
|
||||
*/
|
||||
private Component buildExtremeActionPanel() {
|
||||
|
||||
ActionLink deleteLink = new ActionLink(USER_DELETE_LABEL) {
|
||||
|
||||
@Override
|
||||
public boolean isVisible(PageState s) {
|
||||
if (!super.isVisible(s)) {
|
||||
return false;
|
||||
}
|
||||
// We show the delete link if the user has never published an item
|
||||
// This implicitly checks whether the user is banned - if they
|
||||
// are deletable they cannot ever have been banned
|
||||
User u = getUser(s);
|
||||
return false;
|
||||
}
|
||||
|
||||
};
|
||||
deleteLink.setClassAttr("actionLink");
|
||||
deleteLink.setConfirmation(USER_DELETE_CONFIRMATION.localize()
|
||||
.toString());
|
||||
deleteLink.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent event) {
|
||||
final PageState state = event.getPageState();
|
||||
final User user = getUser(state);
|
||||
|
||||
// final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final UserRepository userRepository;
|
||||
|
||||
// userRepository = cdiUtil.findBean(UserRepository.class);
|
||||
|
||||
// userRepository.delete(user);
|
||||
|
||||
displayUserBrowsePanel(state);
|
||||
|
||||
} // End ActionPerformed method
|
||||
|
||||
} // End of new ActionListener definition
|
||||
);
|
||||
|
||||
// Add link inside a BoxPanel for correct alignment with other
|
||||
// page elements.
|
||||
ActionLink banLink = new ActionLink(USER_BAN_LABEL) {
|
||||
|
||||
@Override
|
||||
public boolean isVisible(PageState s) {
|
||||
if (!super.isVisible(s)) {
|
||||
return false;
|
||||
}
|
||||
// We show the ban link if the user is not already banned and has never published
|
||||
// an item
|
||||
User u = getUser(s);
|
||||
return (!u.isBanned());
|
||||
}
|
||||
|
||||
};
|
||||
banLink.setClassAttr("actionLink");
|
||||
banLink.setConfirmation(USER_BAN_CONFIRMATION.localize().toString());
|
||||
banLink.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
// PageState state = e.getPageState();
|
||||
// User user = getUser(state);
|
||||
// user.setBanned(true);
|
||||
//
|
||||
// final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final UserRepository userRepository;
|
||||
|
||||
// userRepository = cdiUtil.findBean(UserRepository.class);
|
||||
// userRepository.save(user);
|
||||
} // End ActionPerformed method
|
||||
|
||||
} // End of new ActionListener definition
|
||||
);
|
||||
|
||||
ActionLink unbanLink = new ActionLink(USER_UNBAN_LABEL) {
|
||||
|
||||
public boolean isVisible(PageState s) {
|
||||
if (!super.isVisible(s)) {
|
||||
return false;
|
||||
}
|
||||
PageState state = s.getPageState();
|
||||
User user = getUser(state);
|
||||
return user.isBanned();
|
||||
}
|
||||
|
||||
};
|
||||
unbanLink.setClassAttr("actionLink");
|
||||
unbanLink.setConfirmation(USER_UNBAN_CONFIRMATION.localize().toString());
|
||||
unbanLink.addActionListener(new ActionListener() {
|
||||
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
// PageState state = e.getPageState();
|
||||
// User user = getUser(state);
|
||||
// user.setBanned(false);
|
||||
//
|
||||
// final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final UserRepository userRepository;
|
||||
|
||||
// userRepository = cdiUtil.findBean(UserRepository.class);
|
||||
// userRepository.save(user);
|
||||
} // End ActionPerformed method
|
||||
|
||||
} // End of new ActionListener definition
|
||||
);
|
||||
|
||||
// Add link inside a BoxPanel for correct alignment with other
|
||||
// page elements.
|
||||
BoxPanel p = new BoxPanel();
|
||||
p.add(deleteLink);
|
||||
p.add(banLink);
|
||||
p.add(unbanLink);
|
||||
return addSegment(USER_TAB_EXTREME_ACTION_LABEL, p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a panel to display an error message when unable to delete a user.
|
||||
*/
|
||||
private Component buildUserDeleteFailedPanel() {
|
||||
ActionLink link = new ActionLink(USER_ACTION_CONTINUE);
|
||||
link.addActionListener(new ActionListener() {
|
||||
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
PageState state = e.getPageState();
|
||||
displayUserInfoPanel(state);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
Label label = new Label(USER_DELETE_FAILED_MSG);
|
||||
label.setClassAttr("deleteFailedMessage");
|
||||
|
||||
BoxPanel p = new BoxPanel();
|
||||
p.add(label);
|
||||
p.add(link);
|
||||
|
||||
return addSegment(USER_DELETE_FAILED_PANEL_HEADER, p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the Browse User panel. Displays a list of all registered users.
|
||||
*/
|
||||
private Component buildUserBrowsePanel() {
|
||||
String headers[] = new String[]{
|
||||
"ID", "Name", "Screen Name", "Email", "SSO login"
|
||||
};
|
||||
|
||||
Table table = new Table(new UserTableModelBuilder(), headers);
|
||||
table.setClassAttr("AlternateTable");
|
||||
table.setDefaultCellRenderer(this);
|
||||
table.addTableActionListener(this);
|
||||
|
||||
return addSegment(BROWSE_USER_PANEL_HEADER, table);
|
||||
}
|
||||
|
||||
private class GroupsModelBuilder extends LockableImpl
|
||||
implements ListModelBuilder {
|
||||
|
||||
@Override
|
||||
public ListModel makeModel(final List list, final PageState state) {
|
||||
final User user = getUser(state);
|
||||
// final java.util.List<GroupMembership> memberships = user
|
||||
// .getGroupMemberships();
|
||||
// final java.util.List<Subject> groups = new ArrayList<>();
|
||||
// for (GroupMembership membership : memberships) {
|
||||
// groups.add(membership.getGroup());
|
||||
// }
|
||||
|
||||
// return new PartyListModel(groups);
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void displayUserInfoPanel(PageState ps) {
|
||||
hideAll(ps);
|
||||
m_userInfoPanel.setVisible(ps, true);
|
||||
m_groupMembershipPanel.setVisible(ps, true);
|
||||
m_actionPanel.setVisible(ps, true);
|
||||
m_extremeActionPanel.setVisible(ps, true);
|
||||
}
|
||||
|
||||
void displayEditPanel(PageState ps) {
|
||||
hideAll(ps);
|
||||
m_userEditPanel.setVisible(ps, true);
|
||||
}
|
||||
|
||||
public void displayUserBrowsePanel(PageState ps) {
|
||||
hideAll(ps);
|
||||
m_userBrowsePanel.setVisible(ps, true);
|
||||
}
|
||||
|
||||
public void displayUserPasswordPanel(PageState ps) {
|
||||
hideAll(ps);
|
||||
m_userPasswordPanel.setVisible(ps, true);
|
||||
}
|
||||
|
||||
public void displayUserDeleteFailedPanel(PageState ps) {
|
||||
hideAll(ps);
|
||||
m_userDeleteFailedPanel.setVisible(ps, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides all components of the UserBrowsePane in preparation for turning
|
||||
* selected components back on.
|
||||
*/
|
||||
private void hideAll(PageState ps) {
|
||||
for (int i = 0; i < m_panelList.size(); i++) {
|
||||
((Component) m_panelList.get(i)).setVisible(ps, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component getComponent(Table table, PageState state, Object value,
|
||||
boolean isSelected, Object key, int row,
|
||||
int col) {
|
||||
if (col == 0) {
|
||||
ControlLink link = new ControlLink(value.toString());
|
||||
return link;
|
||||
} else {
|
||||
if (value != null) {
|
||||
return new Label(value.toString());
|
||||
} else {
|
||||
return new Label(" ", false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cellSelected(TableActionEvent e) {
|
||||
PageState ps = e.getPageState();
|
||||
|
||||
ps.setValue(USER_ID_PARAM, new BigDecimal((String) e.getRowKey()));
|
||||
displayUserInfoPanel(ps);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void headSelected(TableActionEvent e) {
|
||||
// Empty
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset(PageState ps) {
|
||||
displayUserBrowsePanel(ps);
|
||||
}
|
||||
|
||||
public void setTabbedPane(TabbedPane tabbedPane) {
|
||||
m_tabbedPane = tabbedPane;
|
||||
}
|
||||
|
||||
public void setGroupAdministrationTab(
|
||||
GroupAdministrationTab groupAdministrationTab) {
|
||||
m_groupAdministrationTab = groupAdministrationTab;
|
||||
}
|
||||
|
||||
// // This is how we check if a user is banned or not
|
||||
// private boolean hasUserPublishedItems(User user) {
|
||||
// DataQuery query = user.getSession().retrieveQuery(
|
||||
// "com.arsdigita.versioning.UserPublications");
|
||||
// query.setParameter("value", new Integer(user.getID().intValue()));
|
||||
// query.next();
|
||||
// Integer count = (Integer) query.get("theCount");
|
||||
// query.close();
|
||||
// return count.intValue() != 0;
|
||||
// }
|
||||
/**
|
||||
* Display group information panel when a group name is clicked.
|
||||
*/
|
||||
@Override
|
||||
public void stateChanged(final ChangeEvent event) {
|
||||
if (event.getSource() == m_groupList) {
|
||||
if (m_tabbedPane != null && m_groupAdministrationTab != null) {
|
||||
PageState ps = event.getPageState();
|
||||
String id = (String) m_groupList.getSelectedKey(ps);
|
||||
if (id != null) {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final GroupRepository groupRepository;
|
||||
|
||||
// groupRepository = cdiUtil
|
||||
// .findBean(GroupRepository.class);
|
||||
// final Group group = groupRepository.findById(Long.parseLong(
|
||||
// id));
|
||||
// m_groupAdministrationTab.setGroup(ps, group);
|
||||
m_groupAdministrationTab.displayGroupInfoPanel(ps);
|
||||
m_tabbedPane.setSelectedIndex(ps, GROUP_TAB_INDEX);
|
||||
} else {
|
||||
reset(ps);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class UserTableModelBuilder extends LockableImpl implements TableModelBuilder {
|
||||
|
||||
public TableModel makeModel(Table t, PageState s) {
|
||||
return new UserTableModel();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class UserTableModel implements TableModel {
|
||||
|
||||
private final java.util.List<User> users;
|
||||
private int index = 0;
|
||||
|
||||
public UserTableModel() {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final UserRepository userRepository;
|
||||
|
||||
// userRepository = cdiUtil.findBean(UserRepository.class);
|
||||
|
||||
// users = userRepository.findAll();
|
||||
|
||||
users = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getColumnCount() {
|
||||
return 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getElementAt(final int columnIndex) {
|
||||
final User user = users.get(index);
|
||||
|
||||
// if (columnIndex == 0) {
|
||||
// return user.getSubjectId();
|
||||
// } else if (columnIndex == 1) {
|
||||
// return String.format("%s %s",
|
||||
// user.getName().getGivenName(),
|
||||
// user.getName().getFamilyName());
|
||||
// } else if (columnIndex == 2) {
|
||||
// return user.getScreenName();
|
||||
// } else if (columnIndex == 3) {
|
||||
// return user.getEmailAddresses().get(0).getAddress();
|
||||
// } else if (columnIndex == 4) {
|
||||
// return user.getSsoLogin();
|
||||
// } else {
|
||||
// return null;
|
||||
// }
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getKeyAt(final int columnIndex) {
|
||||
return users.get(index).getPartyId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean nextRow() {
|
||||
index++;
|
||||
return index < users.size();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,136 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.event.FormInitListener;
|
||||
import com.arsdigita.bebop.event.FormProcessListener;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.libreccm.core.EmailAddress;
|
||||
|
||||
import org.libreccm.security.User;
|
||||
|
||||
/**
|
||||
* Form used to edit the information for a user.
|
||||
*
|
||||
* @version $Id$
|
||||
*/
|
||||
class UserEditForm extends UserForm
|
||||
implements FormInitListener,
|
||||
FormProcessListener {
|
||||
// Logging
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(UserEditForm.class);
|
||||
|
||||
private UserBrowsePane m_browsePane;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public UserEditForm(UserBrowsePane browsePane) {
|
||||
super(USER_FORM_EDIT);
|
||||
m_browsePane = browsePane;
|
||||
|
||||
addInitListener(this);
|
||||
addProcessListener(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the form
|
||||
*/
|
||||
public void init(FormSectionEvent e) {
|
||||
|
||||
PageState state = e.getPageState();
|
||||
|
||||
hideSecurityInfo(state);
|
||||
|
||||
// final User user = m_browsePane.getUser(state);
|
||||
//
|
||||
// final PersonName name = user.getName();
|
||||
// m_firstName.setValue(state, name.getGivenName());
|
||||
// m_lastName.setValue(state, name.getFamilyName());
|
||||
//
|
||||
// m_primaryEmail.setValue(state, user.getEmailAddresses().get(
|
||||
// 0).getAddress());
|
||||
//
|
||||
// m_screenName.setValue(state, user.getScreenName());
|
||||
//
|
||||
// USER_FORM_LABEL_ADDITIONAL_EMAIL_LIST.setVisible(state, true);
|
||||
// m_emailList.setVisible(state, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the form
|
||||
*/
|
||||
@Override
|
||||
public void process(final FormSectionEvent event)
|
||||
throws FormProcessException {
|
||||
final PageState state = event.getPageState();
|
||||
|
||||
final User user = m_browsePane.getUser(state);
|
||||
//
|
||||
// final PersonName name = user.getName();
|
||||
// name.setGivenName((String) m_firstName.getValue(state));
|
||||
// name.setFamilyName((String) m_lastName.getValue(state));
|
||||
//
|
||||
// user.setScreenName((String) m_screenName.getValue(state));
|
||||
//
|
||||
// InternetAddress additional = (InternetAddress) m_additionalEmail
|
||||
// .getValue(state);
|
||||
// if (additional != null) {
|
||||
// final EmailAddress additionalEmail = new EmailAddress();
|
||||
// additional.setAddress(additional.getAddress());
|
||||
// user.addEmailAddress(additionalEmail);
|
||||
// }
|
||||
|
||||
// Check to see if the primary email address has changed, and
|
||||
// if so set it to the new value and delete the association
|
||||
// with the old. If it hasn't change don't do anything.
|
||||
final EmailAddress oaddr = user.getEmailAddresses().get(0);
|
||||
final EmailAddress naddr = new EmailAddress();
|
||||
naddr.setAddress((String) m_primaryEmail.getValue(state));
|
||||
|
||||
if (!oaddr.equals(naddr)) {
|
||||
if (s_log.isDebugEnabled()) {
|
||||
s_log.debug("Changing primary email " + oaddr + " to " + naddr);
|
||||
}
|
||||
|
||||
// user.addEmailAddress(naddr);
|
||||
// user.removeEmailAddress(oaddr);
|
||||
}
|
||||
|
||||
// final CdiUtil cdiUtil = new CdiUtil();
|
||||
// final UserRepository userRepository;
|
||||
// try {
|
||||
// userRepository = cdiUtil.findBean(UserRepository.class);
|
||||
// } catch(CdiLookupException ex) {
|
||||
// throw new UncheckedWrapperException(ex);
|
||||
// }
|
||||
//
|
||||
// userRepository.save(user);
|
||||
|
||||
m_browsePane.displayUserInfoPanel(state);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,301 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.Form;
|
||||
import com.arsdigita.bebop.FormData;
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.event.FormValidationListener;
|
||||
import com.arsdigita.bebop.event.ParameterEvent;
|
||||
import com.arsdigita.bebop.form.Password;
|
||||
import com.arsdigita.bebop.form.Submit;
|
||||
import com.arsdigita.bebop.form.TextField;
|
||||
import com.arsdigita.bebop.parameters.EmailParameter;
|
||||
import com.arsdigita.bebop.parameters.NotEmptyValidationListener;
|
||||
import com.arsdigita.bebop.parameters.StringLengthValidationListener;
|
||||
import com.arsdigita.bebop.parameters.StringParameter;
|
||||
import com.arsdigita.kernel.KernelConfig;
|
||||
import com.arsdigita.kernel.security.SecurityConfig;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
import com.arsdigita.ui.login.PasswordValidationListener;
|
||||
import com.arsdigita.util.StringUtils;
|
||||
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* Generic form for adding and editting user.
|
||||
*
|
||||
* @author David Dao
|
||||
* @version $Id$
|
||||
*/
|
||||
class UserForm extends Form implements FormValidationListener, AdminConstants {
|
||||
|
||||
protected TextField m_firstName;
|
||||
protected TextField m_lastName;
|
||||
protected TextField m_primaryEmail;
|
||||
protected TextField m_additionalEmail;
|
||||
protected Password m_password;
|
||||
protected Password m_confirmPassword;
|
||||
protected TextField m_question;
|
||||
protected TextField m_answer;
|
||||
protected TextField m_screenName;
|
||||
protected EmailList m_emailList;
|
||||
private final PasswordValidationListener m_pwListener;
|
||||
private final NotEmptyValidationListener m_notNullListener;
|
||||
private final SecurityConfig securityConfig = SecurityConfig.getConfig();
|
||||
|
||||
public UserForm(String formName) {
|
||||
super(formName);
|
||||
|
||||
m_pwListener = new PasswordValidationListener();
|
||||
m_notNullListener = new NotEmptyValidationListener();
|
||||
|
||||
addValidationListener(this);
|
||||
|
||||
// Bug #163373 add length checking for first/last names. We
|
||||
// do this with both maximum length parameters in the user/add
|
||||
// form and with validation of the value that come in for
|
||||
// processing.
|
||||
int max = 60;
|
||||
|
||||
m_firstName = new TextField(
|
||||
new StringParameter(USER_FORM_INPUT_FIRST_NAME));
|
||||
m_firstName.setMaxLength(max);
|
||||
m_firstName.setSize(20);
|
||||
m_firstName.addValidationListener(new NotEmptyValidationListener());
|
||||
m_firstName.addValidationListener(
|
||||
new StringLengthValidationListener(max));
|
||||
|
||||
add(USER_FORM_LABEL_FIRST_NAME);
|
||||
add(m_firstName);
|
||||
|
||||
m_lastName = new TextField(
|
||||
new StringParameter(USER_FORM_INPUT_LAST_NAME));
|
||||
m_lastName.setMaxLength(max);
|
||||
m_lastName.setSize(25);
|
||||
m_lastName.addValidationListener(new NotEmptyValidationListener());
|
||||
m_lastName
|
||||
.addValidationListener(new StringLengthValidationListener(max));
|
||||
|
||||
add(USER_FORM_LABEL_LAST_NAME);
|
||||
add(m_lastName);
|
||||
|
||||
// Password
|
||||
m_password = new Password(new StringParameter(USER_FORM_INPUT_PASSWORD));
|
||||
add(USER_FORM_LABEL_PASSWORD);
|
||||
add(m_password);
|
||||
|
||||
// Password confirmation
|
||||
m_confirmPassword = new Password(new StringParameter(
|
||||
USER_FORM_INPUT_PASSWORD_CONFIRMATION));
|
||||
|
||||
add(USER_FORM_LABEL_PASSWORD_CONFIRMATION);
|
||||
add(m_confirmPassword);
|
||||
|
||||
// Password question
|
||||
m_question
|
||||
= new TextField(new StringParameter(USER_FORM_INPUT_QUESTION));
|
||||
m_question.setSize(50);
|
||||
|
||||
if (securityConfig.isPasswordRecoveryEnabled()) {
|
||||
add(USER_FORM_LABEL_QUESTION);
|
||||
add(m_question);
|
||||
}
|
||||
|
||||
// Password answer
|
||||
m_answer = new TextField(new StringParameter(USER_FORM_INPUT_ANSWER));
|
||||
m_answer.setSize(50);
|
||||
|
||||
if (securityConfig.isPasswordRecoveryEnabled()) {
|
||||
add(USER_FORM_LABEL_ANSWER);
|
||||
add(m_answer);
|
||||
}
|
||||
|
||||
// Primary email address
|
||||
m_primaryEmail = new TextField(new EmailParameter(
|
||||
USER_FORM_INPUT_PRIMARY_EMAIL));
|
||||
m_primaryEmail.addValidationListener(new NotEmptyValidationListener());
|
||||
m_primaryEmail.setSize(50);
|
||||
add(USER_FORM_LABEL_PRIMARY_EMAIL);
|
||||
add(m_primaryEmail);
|
||||
|
||||
// Additional email addresses
|
||||
m_emailList = new EmailList();
|
||||
add(USER_FORM_LABEL_ADDITIONAL_EMAIL_LIST);
|
||||
add(m_emailList);
|
||||
|
||||
m_additionalEmail = new TextField(new EmailParameter(
|
||||
USER_FORM_INPUT_ADDITIONAL_EMAIL));
|
||||
m_additionalEmail.setSize(50);
|
||||
add(USER_FORM_LABEL_ADDITIONAL_EMAIL);
|
||||
add(m_additionalEmail);
|
||||
|
||||
// Screen name
|
||||
m_screenName = new TextField(new StringParameter(
|
||||
USER_FORM_INPUT_SCREEN_NAME));
|
||||
if (KernelConfig.getConfig().screenNameIsPrimaryIdentifier()) {
|
||||
m_screenName.addValidationListener(new NotEmptyValidationListener());
|
||||
}
|
||||
add(USER_FORM_LABEL_SCREEN_NAME);
|
||||
add(m_screenName);
|
||||
|
||||
// Submit
|
||||
add(new Label(""));
|
||||
add(new Submit(USER_FORM_SUBMIT));
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the form. Verifies that the password and password-confirm fields
|
||||
* match. If not it adds an error to the password-confirm field. Also
|
||||
* verifies that primary email address and screen name are unique amoung all
|
||||
* users.
|
||||
*/
|
||||
@Override
|
||||
public void validate(FormSectionEvent event)
|
||||
throws FormProcessException {
|
||||
PageState ps = event.getPageState();
|
||||
FormData data = event.getFormData();
|
||||
HttpServletRequest req = ps.getRequest();
|
||||
|
||||
// UserID will be null if this is an add form.
|
||||
BigDecimal userID = (BigDecimal) ps.getValue(USER_ID_PARAM);
|
||||
|
||||
/**
|
||||
* Verify that password and confirmation match.
|
||||
*/
|
||||
if (userID == null) {
|
||||
|
||||
m_pwListener.validate(
|
||||
new ParameterEvent(event.getSource(),
|
||||
data.getParameter(
|
||||
USER_FORM_INPUT_PASSWORD)));
|
||||
m_notNullListener.validate(
|
||||
new ParameterEvent(event.getSource(),
|
||||
data.getParameter(
|
||||
USER_FORM_INPUT_PASSWORD_CONFIRMATION)));
|
||||
String password = (String) m_password.getValue(ps);
|
||||
String confirm = (String) m_confirmPassword.getValue(ps);
|
||||
|
||||
if (!StringUtils.emptyString(password) && !StringUtils.emptyString(
|
||||
confirm)) {
|
||||
if (!password.equals(confirm)) {
|
||||
data.addError(USER_FORM_INPUT_PASSWORD_CONFIRMATION,
|
||||
(String) USER_FORM_ERROR_PASSWORD_NOT_MATCH.
|
||||
localize(req));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (securityConfig.isPasswordRecoveryEnabled()) {
|
||||
// If the password answer is anything but null, make sure it
|
||||
// contains some non-whitespace characters
|
||||
String answer = (String) m_answer.getValue(ps);
|
||||
if (userID == null) {
|
||||
// Check for add form.
|
||||
if (answer == null || answer.trim().length() == 0) {
|
||||
data.addError(USER_FORM_INPUT_ANSWER,
|
||||
(String) USER_FORM_ERROR_ANSWER_NULL.localize(
|
||||
req));
|
||||
}
|
||||
} else {
|
||||
// Check for edit form
|
||||
if (answer != null && answer.length() > 0 && answer.trim().
|
||||
length()
|
||||
== 0) {
|
||||
data.addError(USER_FORM_INPUT_ANSWER,
|
||||
(String) USER_FORM_ERROR_ANSWER_NULL.localize(
|
||||
req));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify that primary email and screen name are unique
|
||||
*/
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final UserRepository userRepository;
|
||||
|
||||
// userRepository = cdiUtil.findBean(UserRepository.class);
|
||||
//
|
||||
// final String screenName = (String) m_screenName.getValue(ps);
|
||||
// final User userByScreenname = userRepository.findByScreenName(
|
||||
// screenName);
|
||||
// final String email;
|
||||
// if (m_primaryEmail.getValue(ps) != null) {
|
||||
// email = ((InternetAddress) m_primaryEmail.getValue(ps)).getAddress();
|
||||
// } else {
|
||||
// email = null;
|
||||
// }
|
||||
// final User userByEmail = userRepository.findByEmailAddress(email);
|
||||
//
|
||||
// if (userByScreenname != null && screenName != null && screenName.equals(
|
||||
// userByScreenname.getScreenName())) {
|
||||
// data.addError(USER_FORM_INPUT_SCREEN_NAME,
|
||||
// USER_FORM_ERROR_SCREEN_NAME_NOT_UNIQUE);
|
||||
// }
|
||||
//
|
||||
// if (userByEmail != null
|
||||
// && email != null
|
||||
// && email.equals(userByEmail.getEmailAddresses().get(0).getAddress())) {
|
||||
// data.addError(USER_FORM_INPUT_PRIMARY_EMAIL,
|
||||
// USER_FORM_ERROR_PRIMARY_EMAIL_NOT_UNIQUE);
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide all security-related components
|
||||
*/
|
||||
protected void hideSecurityInfo(PageState state) {
|
||||
setSecurityInfo(state, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show all security-related components
|
||||
*/
|
||||
protected void showSecurityInfo(PageState state) {
|
||||
setSecurityInfo(state, true);
|
||||
}
|
||||
|
||||
private void setSecurityInfo(PageState state, boolean isVisible) {
|
||||
|
||||
USER_FORM_LABEL_PASSWORD.setVisible(state, isVisible);
|
||||
USER_FORM_LABEL_PASSWORD_CONFIRMATION.setVisible(state, isVisible);
|
||||
if (securityConfig.isPasswordRecoveryEnabled()) {
|
||||
USER_FORM_LABEL_QUESTION.setVisible(state, isVisible);
|
||||
USER_FORM_LABEL_ANSWER.setVisible(state, isVisible);
|
||||
}
|
||||
|
||||
m_password.setVisible(state, isVisible);
|
||||
m_confirmPassword.setVisible(state, isVisible);
|
||||
if (securityConfig.isPasswordRecoveryEnabled()) {
|
||||
m_question.setVisible(state, isVisible);
|
||||
m_answer.setVisible(state, isVisible);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,273 +0,0 @@
|
|||
/*
|
||||
* 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.ui.admin;
|
||||
|
||||
import com.arsdigita.bebop.Form;
|
||||
import com.arsdigita.bebop.FormData;
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.event.FormInitListener;
|
||||
import com.arsdigita.bebop.event.FormProcessListener;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.event.FormValidationListener;
|
||||
import com.arsdigita.bebop.form.Password;
|
||||
import com.arsdigita.bebop.form.Submit;
|
||||
import com.arsdigita.bebop.form.TextField;
|
||||
import com.arsdigita.bebop.parameters.NotEmptyValidationListener;
|
||||
import com.arsdigita.bebop.parameters.NotNullValidationListener;
|
||||
import com.arsdigita.bebop.parameters.StringParameter;
|
||||
import com.arsdigita.mail.Mail;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
|
||||
import com.arsdigita.ui.login.PasswordValidationListener;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.security.User;
|
||||
|
||||
/**
|
||||
* Form used to update a user's password. It just provides form elements to
|
||||
* enter the new password and confirm it. If the user doesn't have an
|
||||
* authentication record, it will be created as part of setting the new value of
|
||||
* the password.
|
||||
*
|
||||
* @version $Id$
|
||||
*/
|
||||
class UserPasswordForm extends Form
|
||||
implements FormInitListener,
|
||||
FormProcessListener,
|
||||
FormValidationListener {
|
||||
|
||||
// Logging
|
||||
private static final Logger s_log = Logger.getLogger(UserPasswordForm.class
|
||||
.getName());
|
||||
|
||||
// Constants
|
||||
final static String PASSWORD_FORM_NAME = "password-update";
|
||||
final static String NEW_PASSWORD_PARAM_NAME = "password-new";
|
||||
final static String CONFIRM_PASSWORD_PARAM_NAME = "password-confirm";
|
||||
|
||||
private UserBrowsePane m_userBrowsePane;
|
||||
|
||||
private TextField m_question;
|
||||
private TextField m_answer;
|
||||
private TextField m_ssoLogin;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public UserPasswordForm(UserBrowsePane pane) {
|
||||
super(PASSWORD_FORM_NAME);
|
||||
|
||||
m_userBrowsePane = pane;
|
||||
|
||||
setMethod(Form.POST);
|
||||
|
||||
addInitListener(this);
|
||||
addValidationListener(this);
|
||||
addProcessListener(this);
|
||||
|
||||
// Password
|
||||
Password newPassword = new Password(NEW_PASSWORD_PARAM_NAME);
|
||||
newPassword.addValidationListener(new PasswordValidationListener());
|
||||
add(PASSWORD_FORM_LABEL_PASSWORD);
|
||||
add(newPassword);
|
||||
|
||||
// Password confirmation
|
||||
Password confirmPassword = new Password(CONFIRM_PASSWORD_PARAM_NAME);
|
||||
confirmPassword.addValidationListener(new NotNullValidationListener());
|
||||
add(PASSWORD_FORM_LABEL_CONFIRMATION_PASSWORD);
|
||||
add(confirmPassword);
|
||||
|
||||
// Password question
|
||||
m_question
|
||||
= new TextField(new StringParameter(USER_FORM_INPUT_QUESTION));
|
||||
m_question.setSize(50);
|
||||
m_question.addValidationListener(new NotEmptyValidationListener());
|
||||
add(PASSWORD_FORM_LABEL_QUESTION);
|
||||
add(m_question);
|
||||
|
||||
// Password answer
|
||||
m_answer = new TextField(new StringParameter(USER_FORM_INPUT_ANSWER));
|
||||
m_answer.setSize(50);
|
||||
add(PASSWORD_FORM_LABEL_ANSWER);
|
||||
add(m_answer);
|
||||
|
||||
m_ssoLogin = new TextField(new StringParameter(USER_FORM_INPUT_SSO));
|
||||
m_ssoLogin.setSize(50);
|
||||
add(USER_FORM_LABEL_SSO);
|
||||
add(m_ssoLogin);
|
||||
|
||||
// submit button
|
||||
add(new Label(""));
|
||||
add(new Submit(PASSWORD_FORM_SUBMIT));
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the form
|
||||
*/
|
||||
@Override
|
||||
public void init(final FormSectionEvent event) {
|
||||
|
||||
final PageState state = event.getPageState();
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final UserRepository userRepository;
|
||||
|
||||
// userRepository = cdiUtil.findBean(UserRepository.class);
|
||||
// final User user = userRepository.findById((Long) state.getValue(
|
||||
// USER_ID_PARAM));
|
||||
//
|
||||
|
||||
// m_question.setValue(state, user.getPasswordQuestion());
|
||||
// m_ssoLogin.setValue(state, user.getSsoLogin());
|
||||
|
||||
m_answer.setValue(state, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the form input.
|
||||
*/
|
||||
@Override
|
||||
public void validate(final FormSectionEvent event)
|
||||
throws FormProcessException {
|
||||
PageState state = event.getPageState();
|
||||
FormData data = event.getFormData();
|
||||
HttpServletRequest req = state.getRequest();
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final UserRepository userRepository;
|
||||
|
||||
// userRepository = cdiUtil.findBean(UserRepository.class);
|
||||
// final User user = userRepository.findById((Long) state.getValue(
|
||||
// USER_ID_PARAM));
|
||||
// if (user == null) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
try {
|
||||
// get parameter values
|
||||
String newPassword = (String) data.get(NEW_PASSWORD_PARAM_NAME);
|
||||
String confirmPassword = (String) data.get(
|
||||
CONFIRM_PASSWORD_PARAM_NAME);
|
||||
|
||||
// check new password
|
||||
if (!newPassword.equals(confirmPassword)) {
|
||||
data.addError(CONFIRM_PASSWORD_PARAM_NAME,
|
||||
(String) USER_FORM_ERROR_PASSWORD_NOT_MATCH
|
||||
.localize(req));
|
||||
return;
|
||||
}
|
||||
} finally {
|
||||
if (!data.isValid()) {
|
||||
// clear passwords from form data
|
||||
data.put(NEW_PASSWORD_PARAM_NAME, "");
|
||||
data.put(CONFIRM_PASSWORD_PARAM_NAME, "");
|
||||
}
|
||||
}
|
||||
|
||||
// If the password answer is anything but null, make sure it
|
||||
// contains some non-whitespace characters
|
||||
String answer = (String) m_answer.getValue(state);
|
||||
if (answer != null && answer.length() > 0 && answer.trim().length() == 0) {
|
||||
data.addError(USER_FORM_INPUT_ANSWER,
|
||||
(String) USER_FORM_ERROR_ANSWER_NULL.localize(req));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the form
|
||||
*/
|
||||
public void process(FormSectionEvent event)
|
||||
throws FormProcessException {
|
||||
|
||||
final PageState state = event.getPageState();
|
||||
final FormData data = event.getFormData();
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
// final UserRepository userRepository;
|
||||
// final UserManager userManager;
|
||||
|
||||
// userRepository = cdiUtil.findBean(UserRepository.class);
|
||||
// userManager = cdiUtil.findBean(UserManager.class);
|
||||
// final User user = userRepository.findById((Long) state.getValue(
|
||||
// USER_ID_PARAM));
|
||||
// if (user == null) {
|
||||
// throw new FormProcessException(GlobalizationUtil.globalize(
|
||||
// "ui.admin.user.userpasswordform.retrieving_user_failed"));
|
||||
// }
|
||||
|
||||
// userManager.updatePassword(user, (String) data.get(NEW_PASSWORD_PARAM_NAME));
|
||||
// user.setPasswordQuestion((String) m_question.getValue(state));
|
||||
// final String answer = (String) m_answer.getValue(state);
|
||||
// if (answer != null && answer.length() > 0) {
|
||||
// user.setPasswordAnswer(answer);
|
||||
// }
|
||||
// user.setSsoLogin((String) m_ssoLogin.getValue(state));
|
||||
//
|
||||
// userRepository.save(user);
|
||||
|
||||
BigDecimal id = (BigDecimal) state.getValue(USER_ID_PARAM);
|
||||
|
||||
s_log.debug("Committed password change");
|
||||
|
||||
// notifyUser(user);
|
||||
m_userBrowsePane.displayUserInfoPanel(state);
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify user of the change to their password.
|
||||
*
|
||||
* TODO:
|
||||
* <ol>
|
||||
* <li>Message should be from the syadmin</li>
|
||||
* <li>Globalize the subject and content</li>
|
||||
* </ol>
|
||||
*
|
||||
* @param user is the User who's password was just changed.
|
||||
*/
|
||||
private void notifyUser(final User user) {
|
||||
String to = user.getEmailAddresses().get(0).getAddress();
|
||||
String from = to;
|
||||
String subject = "Your password has been changed";
|
||||
String nl = System.getProperty("line.separator");
|
||||
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append("Dear ");
|
||||
sb.append(user.getGivenName());
|
||||
sb.append(":");
|
||||
sb.append(nl).append(nl);
|
||||
sb.append("Your password has been changed by the ");
|
||||
sb.append("system administrator.");
|
||||
sb.append(nl);
|
||||
|
||||
try {
|
||||
Mail.send(to, from, subject, sb.toString());
|
||||
} catch (javax.mail.MessagingException e) {
|
||||
s_log.error("Failed to notify user of password change");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -22,27 +22,31 @@ import com.arsdigita.bebop.Form;
|
|||
|
||||
import org.libreccm.web.CcmApplication;
|
||||
|
||||
|
||||
/**
|
||||
* An abstract class providing a default implementation of {@link ApplicationManager#getApplicationCreateForm()}.
|
||||
*
|
||||
* @param <T> Type of the application for which this ApplicationManager provides the administration forms.
|
||||
*
|
||||
* An abstract class providing a default implementation of
|
||||
* {@link ApplicationManager#getApplicationCreateForm()}.
|
||||
*
|
||||
* @param <T> Type of the application for which this ApplicationManager provides
|
||||
* the administration forms.
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
* @version $Id$
|
||||
* @version $Id: AbstractSingletonApplicationManager.java 3703 2015-10-21
|
||||
* 08:52:39Z jensp $
|
||||
*/
|
||||
public abstract class AbstractSingletonApplicationManager<T extends CcmApplication> implements ApplicationManager<T>{
|
||||
|
||||
public abstract class AbstractSingletonApplicationManager<T extends CcmApplication>
|
||||
implements ApplicationManager<T> {
|
||||
|
||||
/**
|
||||
* Implementation of {@link ApplicationManager#getApplicationCreateForm()}
|
||||
* Implementation of {@link ApplicationManager#getApplicationCreateForm()}
|
||||
* for singleton applications.
|
||||
*
|
||||
* @return {@code} null because it is not possible to create instances
|
||||
* of singleton applications.
|
||||
*
|
||||
* @return {@code} null because it is not possible to create instances of
|
||||
* singleton applications.
|
||||
*/
|
||||
@SuppressWarnings("PMD.EmptyMethodInAbstractClassShouldBeAbstract")
|
||||
@Override
|
||||
public final Form getApplicationCreateForm() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*/
|
||||
package com.arsdigita.ui.admin;
|
||||
package com.arsdigita.ui.admin.applications;
|
||||
|
||||
import org.libreccm.web.ApplicationCreator;
|
||||
import org.libreccm.web.ApplicationRepository;
|
||||
|
|
@ -26,7 +26,7 @@ import org.libreccm.web.CcmApplication;
|
|||
import javax.enterprise.context.RequestScoped;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminConstants.*;
|
||||
import static com.arsdigita.ui.admin.AdminUiConstants.*;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -16,23 +16,24 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*/
|
||||
package com.arsdigita.ui.admin;
|
||||
package com.arsdigita.ui.admin.applications;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.libreccm.modules.InstallEvent;
|
||||
import org.libreccm.web.CcmApplication;
|
||||
import org.libreccm.web.AbstractCcmApplicationSetup;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import static com.arsdigita.ui.admin.AdminUiConstants.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public class AdminApplicationSetup extends AbstractCcmApplicationSetup {
|
||||
|
||||
|
||||
public static final String ADMIN_APP_NAME = "CcmAdmin";
|
||||
|
||||
|
||||
public AdminApplicationSetup(final InstallEvent event) {
|
||||
super(event);
|
||||
}
|
||||
|
|
@ -41,12 +42,10 @@ public class AdminApplicationSetup extends AbstractCcmApplicationSetup {
|
|||
public void setup() {
|
||||
final CcmApplication admin = new CcmApplication();
|
||||
admin.setUuid(UUID.randomUUID().toString());
|
||||
admin.setApplicationType(ADMIN_APP_NAME);
|
||||
admin.setPrimaryUrl(AdminConstants.ADMIN_PAGE_URL);
|
||||
|
||||
admin.setApplicationType(ADMIN_APP_TYPE);
|
||||
admin.setPrimaryUrl(ADMIN_PAGE_URL);
|
||||
|
||||
getEntityManager().persist(admin);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* 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.applications;
|
||||
|
||||
import com.arsdigita.bebop.tree.TreeNode;
|
||||
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.l10n.GlobalizationHelper;
|
||||
import org.libreccm.web.CcmApplication;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public class ApplicationInstanceTreeNode implements TreeNode {
|
||||
|
||||
private final CcmApplication application;
|
||||
|
||||
public ApplicationInstanceTreeNode(final CcmApplication application) {
|
||||
this.application = application;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getKey() {
|
||||
return application.getObjectId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getElement() {
|
||||
final GlobalizationHelper globalizationHelper = CdiUtil.createCdiUtil()
|
||||
.findBean(GlobalizationHelper.class);
|
||||
return application.getTitle().getValue(globalizationHelper
|
||||
.getNegotiatedLocale());
|
||||
}
|
||||
|
||||
public CcmApplication getApplication() {
|
||||
return application;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -19,8 +19,9 @@
|
|||
package com.arsdigita.ui.admin.applications;
|
||||
|
||||
import com.arsdigita.bebop.Form;
|
||||
import com.arsdigita.ui.admin.ApplicationsAdministrationTab;
|
||||
|
||||
import java.util.ServiceLoader;
|
||||
|
||||
import org.libreccm.web.CcmApplication;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -16,9 +16,8 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
package com.arsdigita.ui.admin;
|
||||
package com.arsdigita.ui.admin.applications;
|
||||
|
||||
import com.arsdigita.ui.admin.applications.ApplicationManager;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
/*
|
||||
* 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.applications;
|
||||
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.tree.TreeModel;
|
||||
import com.arsdigita.bebop.tree.TreeNode;
|
||||
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.web.ApplicationRepository;
|
||||
import org.libreccm.web.ApplicationType;
|
||||
import org.libreccm.web.CcmApplication;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public class ApplicationTreeModel implements TreeModel {
|
||||
|
||||
public ApplicationTreeModel() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public TreeNode getRoot(final PageState state) {
|
||||
return new RootTreeNode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasChildren(final TreeNode node,
|
||||
final PageState state) {
|
||||
if (node instanceof RootTreeNode) {
|
||||
return true;
|
||||
} else if (node instanceof ApplicationTypeTreeNode) {
|
||||
final ApplicationTypeTreeNode typeNode
|
||||
= (ApplicationTypeTreeNode) node;
|
||||
final ApplicationType appType = typeNode.getApplicationType();
|
||||
if (appType.singleton()) {
|
||||
return false;
|
||||
} else {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final ApplicationRepository appRepo = cdiUtil.findBean(
|
||||
ApplicationRepository.class);
|
||||
final List<CcmApplication> apps = appRepo.findByType(appType
|
||||
.name());
|
||||
return !apps.isEmpty();
|
||||
}
|
||||
} else if (node instanceof ApplicationInstanceTreeNode) {
|
||||
return false;
|
||||
} else {
|
||||
throw new IllegalArgumentException(
|
||||
"The ApplicationTreeModel can only work with "
|
||||
+ "ApplicationTypeTreeNodes and "
|
||||
+ "ApplicationInstanceTreeNodes.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator getChildren(final TreeNode node,
|
||||
final PageState state) {
|
||||
if (node instanceof RootTreeNode) {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final org.libreccm.web.ApplicationManager appManager = cdiUtil
|
||||
.findBean(org.libreccm.web.ApplicationManager.class);
|
||||
return new AppTypesIterator(appManager.getApplicationTypes()
|
||||
.values());
|
||||
} else if (node instanceof ApplicationTypeTreeNode) {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final ApplicationRepository appRepo = cdiUtil.findBean(
|
||||
ApplicationRepository.class);
|
||||
return new AppIterator(appRepo.findByType(
|
||||
((ApplicationTypeTreeNode) node).getApplicationType().name()));
|
||||
} else {
|
||||
throw new IllegalArgumentException(
|
||||
"ApplicationTreeModel#getChildren can only process "
|
||||
+ "the RootTreeNode and the instances of "
|
||||
+ "ApplicationTypeTreeNode.");
|
||||
}
|
||||
}
|
||||
|
||||
private class RootTreeNode implements TreeNode {
|
||||
|
||||
public RootTreeNode() {
|
||||
//Nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getKey() {
|
||||
return "-1";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getElement() {
|
||||
return "/";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class AppTypesIterator
|
||||
implements Iterator<ApplicationTypeTreeNode> {
|
||||
|
||||
private final Iterator<ApplicationType> appTypes;
|
||||
|
||||
public AppTypesIterator(final Collection<ApplicationType> appTypes) {
|
||||
this.appTypes = appTypes.iterator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return appTypes.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApplicationTypeTreeNode next() {
|
||||
return new ApplicationTypeTreeNode(appTypes.next());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class AppIterator implements Iterator<ApplicationInstanceTreeNode> {
|
||||
|
||||
private final Iterator<CcmApplication> applications;
|
||||
|
||||
public AppIterator(final Collection<CcmApplication> applications) {
|
||||
this.applications = applications.iterator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return applications.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApplicationInstanceTreeNode next() {
|
||||
return new ApplicationInstanceTreeNode(applications.next());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* 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.applications;
|
||||
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.Tree;
|
||||
import com.arsdigita.bebop.tree.TreeModel;
|
||||
import com.arsdigita.bebop.tree.TreeModelBuilder;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public class ApplicationTreeModelBuilder
|
||||
extends LockableImpl implements TreeModelBuilder {
|
||||
|
||||
@Override
|
||||
public TreeModel makeModel(final Tree tree,
|
||||
final PageState state) {
|
||||
tree.expand("-1", state);
|
||||
return new ApplicationTreeModel();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* 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.applications;
|
||||
|
||||
import com.arsdigita.bebop.tree.TreeNode;
|
||||
|
||||
import org.libreccm.web.ApplicationType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public class ApplicationTypeTreeNode implements TreeNode {
|
||||
|
||||
private final ApplicationType applicationType;
|
||||
|
||||
public ApplicationTypeTreeNode(final ApplicationType applicationType) {
|
||||
this.applicationType = applicationType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getKey() {
|
||||
return applicationType.applicationClass().getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getElement() {
|
||||
return applicationType.name();
|
||||
}
|
||||
|
||||
public ApplicationType getApplicationType() {
|
||||
return applicationType;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
package com.arsdigita.ui.admin;
|
||||
package com.arsdigita.ui.admin.applications;
|
||||
|
||||
import com.arsdigita.bebop.BoxPanel;
|
||||
import com.arsdigita.bebop.Form;
|
||||
|
|
@ -27,14 +27,9 @@ import com.arsdigita.bebop.SimpleContainer;
|
|||
import com.arsdigita.bebop.Tree;
|
||||
import com.arsdigita.bebop.event.ChangeEvent;
|
||||
import com.arsdigita.bebop.event.ChangeListener;
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
import com.arsdigita.toolbox.ui.LayoutPanel;
|
||||
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
|
||||
import com.arsdigita.ui.admin.applications.ApplicationInstancePane;
|
||||
import com.arsdigita.ui.admin.applications.ApplicationManager;
|
||||
import com.arsdigita.ui.admin.applications.BaseApplicationPane;
|
||||
import com.arsdigita.ui.admin.applications.MultiInstanceApplicationPane;
|
||||
import com.arsdigita.ui.admin.applications.SingletonApplicationPane;
|
||||
import com.arsdigita.ui.admin.applications.tree.ApplicationTreeModelBuilder;
|
||||
import com.arsdigita.ui.admin.applications.tree.LegacyApplicationTreeModelBuilder;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
|
|
@ -45,14 +40,15 @@ import org.libreccm.web.ApplicationRepository;
|
|||
import org.libreccm.web.ApplicationType;
|
||||
import org.libreccm.web.CcmApplication;
|
||||
|
||||
import static com.arsdigita.ui.admin.AdminUiConstants.*;
|
||||
|
||||
/**
|
||||
* A tab for managing CcmApplication and application instances.
|
||||
*
|
||||
* @author pb
|
||||
* @author Jens Pelzetter
|
||||
*/
|
||||
public class ApplicationsAdministrationTab extends LayoutPanel implements
|
||||
AdminConstants {
|
||||
public class ApplicationsAdministrationTab extends LayoutPanel {
|
||||
|
||||
private final Tree applicationTree;
|
||||
private final Map<String, BaseApplicationPane> appPanes
|
||||
|
|
@ -71,7 +67,7 @@ public class ApplicationsAdministrationTab extends LayoutPanel implements
|
|||
setClassAttr("sidebarNavPanel");
|
||||
setAttribute("navbar-title", "Sitemap");
|
||||
|
||||
applicationTree = new Tree(new ApplicationTreeModelBuilder());
|
||||
applicationTree = new Tree(new LegacyApplicationTreeModelBuilder());
|
||||
applicationTree.addChangeListener(new TreeStateChangeListener());
|
||||
|
||||
setClassAttr("navbar");
|
||||
|
|
@ -244,8 +240,8 @@ public class ApplicationsAdministrationTab extends LayoutPanel implements
|
|||
|
||||
public Placeholder() {
|
||||
super();
|
||||
final Label label = new Label(GlobalizationUtil.globalize(
|
||||
"ui.admin.applications.placeholder"));
|
||||
final Label label = new Label(new GlobalizedMessage(
|
||||
"ui.admin.applications.placeholder", ADMIN_BUNDLE));
|
||||
add(label);
|
||||
}
|
||||
|
||||
|
|
@ -16,25 +16,29 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*/
|
||||
package com.arsdigita.ui.admin;
|
||||
package com.arsdigita.ui.admin.applications;
|
||||
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.Tree;
|
||||
import com.arsdigita.toolbox.ui.LayoutPanel;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@Deprecated
|
||||
public class CategoriesAdminTab extends LayoutPanel {
|
||||
|
||||
public CategoriesAdminTab() {
|
||||
public class ApplicationsTab extends LayoutPanel {
|
||||
|
||||
private final Tree applicationTree;
|
||||
|
||||
public ApplicationsTab() {
|
||||
super();
|
||||
|
||||
setLeft(new Label("Categories Admin Tab Left"));
|
||||
|
||||
setBody(new Label("Categories Admin Tab Body"));
|
||||
|
||||
|
||||
setClassAttr("sidebarNavPanel");
|
||||
|
||||
applicationTree = new Tree(new ApplicationTreeModelBuilder());
|
||||
|
||||
setLeft(applicationTree);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -19,14 +19,15 @@
|
|||
package com.arsdigita.ui.admin.applications.tree;
|
||||
|
||||
import com.arsdigita.bebop.tree.TreeNode;
|
||||
import com.arsdigita.ui.admin.ApplicationsAdministrationTab;
|
||||
import com.arsdigita.ui.admin.applications.ApplicationsAdministrationTab;
|
||||
|
||||
import org.libreccm.web.CcmApplication;
|
||||
|
||||
/**
|
||||
* Tree Node for the application tree representing an instance of a application.
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
* @version $Id: ApplicationInstanceTreeNode.java 2282 2013-08-01 10:45:42Z jensp $
|
||||
* @version $Id: LegacyApplicationInstanceTreeNode.java 2282 2013-08-01 10:45:42Z jensp $
|
||||
*
|
||||
* @see ApplicationTreeModel
|
||||
* @see ApplicationTreeModelBuilder
|
||||
|
|
@ -34,7 +35,7 @@ import org.libreccm.web.CcmApplication;
|
|||
* @see ApplicationsAdministrationTab
|
||||
* @see TreeNode
|
||||
*/
|
||||
public class ApplicationInstanceTreeNode implements TreeNode {
|
||||
public class LegacyApplicationInstanceTreeNode implements TreeNode {
|
||||
|
||||
/**
|
||||
* The application instance represented by this {@code TreeNode}
|
||||
|
|
@ -49,7 +50,7 @@ public class ApplicationInstanceTreeNode implements TreeNode {
|
|||
*
|
||||
* @param application The application instance to represent by this {@code TreeNode}
|
||||
*/
|
||||
public ApplicationInstanceTreeNode(final CcmApplication application) {
|
||||
public LegacyApplicationInstanceTreeNode(final CcmApplication application) {
|
||||
//this.application = application;
|
||||
path = application.getPrimaryUrl();
|
||||
title = application.getTitle().getValue();
|
||||
|
|
@ -21,7 +21,7 @@ package com.arsdigita.ui.admin.applications.tree;
|
|||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.tree.TreeModel;
|
||||
import com.arsdigita.bebop.tree.TreeNode;
|
||||
import com.arsdigita.ui.admin.ApplicationsAdministrationTab;
|
||||
import com.arsdigita.ui.admin.applications.ApplicationsAdministrationTab;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
|
@ -40,11 +40,11 @@ import org.libreccm.web.CcmApplication;
|
|||
* {@link CCmApplication} instances.
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
* @version $Id: ApplicationTreeModel.java 2406 2013-10-31 19:52:22Z jensp $
|
||||
* @version $Id: LegacyApplicationTreeModel.java 2406 2013-10-31 19:52:22Z jensp $
|
||||
*/
|
||||
public class ApplicationTreeModel implements TreeModel {
|
||||
public class LegacyApplicationTreeModel implements TreeModel {
|
||||
|
||||
public ApplicationTreeModel() {
|
||||
public LegacyApplicationTreeModel() {
|
||||
//Nothing
|
||||
}
|
||||
|
||||
|
|
@ -57,9 +57,9 @@ public class ApplicationTreeModel implements TreeModel {
|
|||
public boolean hasChildren(final TreeNode node, final PageState state) {
|
||||
if (node instanceof RootTreeNode) {
|
||||
return true;
|
||||
} else if (node instanceof ApplicationTypeTreeNode) {
|
||||
final ApplicationTypeTreeNode typeTreeNode
|
||||
= (ApplicationTypeTreeNode) node;
|
||||
} else if (node instanceof LegacyApplicationTypeTreeNode) {
|
||||
final LegacyApplicationTypeTreeNode typeTreeNode
|
||||
= (LegacyApplicationTypeTreeNode) node;
|
||||
|
||||
//if (typeTreeNode.getApplicationType().isSingleton()) {
|
||||
if (typeTreeNode.isSingleton()) {
|
||||
|
|
@ -70,7 +70,7 @@ public class ApplicationTreeModel implements TreeModel {
|
|||
return !retrieveApplicationInstances(typeTreeNode.getObjecType())
|
||||
.isEmpty();
|
||||
}
|
||||
} else if (node instanceof ApplicationInstanceTreeNode) {
|
||||
} else if (node instanceof LegacyApplicationInstanceTreeNode) {
|
||||
return false;
|
||||
} else {
|
||||
throw new IllegalArgumentException(
|
||||
|
|
@ -89,9 +89,9 @@ public class ApplicationTreeModel implements TreeModel {
|
|||
.getApplicationTypes().values();
|
||||
|
||||
return new AppTypesIterator(appTypes);
|
||||
} else if (node instanceof ApplicationTypeTreeNode) {
|
||||
final ApplicationTypeTreeNode typeTreeNode
|
||||
= (ApplicationTypeTreeNode) node;
|
||||
} else if (node instanceof LegacyApplicationTypeTreeNode) {
|
||||
final LegacyApplicationTypeTreeNode typeTreeNode
|
||||
= (LegacyApplicationTypeTreeNode) node;
|
||||
|
||||
final ApplicationRepository appRepo = CdiUtil.createCdiUtil()
|
||||
.findBean(ApplicationRepository.class);
|
||||
|
|
@ -100,7 +100,7 @@ public class ApplicationTreeModel implements TreeModel {
|
|||
typeTreeNode.getObjecType());
|
||||
|
||||
return new AppIterator(applications);
|
||||
} else if (node instanceof ApplicationInstanceTreeNode) {
|
||||
} else if (node instanceof LegacyApplicationInstanceTreeNode) {
|
||||
return null;
|
||||
} else {
|
||||
throw new IllegalArgumentException(
|
||||
|
|
@ -143,7 +143,7 @@ public class ApplicationTreeModel implements TreeModel {
|
|||
|
||||
}
|
||||
|
||||
private class AppTypesIterator implements Iterator<ApplicationTypeTreeNode> {
|
||||
private class AppTypesIterator implements Iterator<LegacyApplicationTypeTreeNode> {
|
||||
|
||||
private final Iterator<ApplicationType> appTypes;
|
||||
|
||||
|
|
@ -157,8 +157,8 @@ public class ApplicationTreeModel implements TreeModel {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ApplicationTypeTreeNode next() {
|
||||
return new ApplicationTypeTreeNode(appTypes.next());
|
||||
public LegacyApplicationTypeTreeNode next() {
|
||||
return new LegacyApplicationTypeTreeNode(appTypes.next());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -168,7 +168,7 @@ public class ApplicationTreeModel implements TreeModel {
|
|||
|
||||
}
|
||||
|
||||
private class AppIterator implements Iterator<ApplicationInstanceTreeNode> {
|
||||
private class AppIterator implements Iterator<LegacyApplicationInstanceTreeNode> {
|
||||
|
||||
private final Iterator<CcmApplication> applications;
|
||||
|
||||
|
|
@ -182,8 +182,8 @@ public class ApplicationTreeModel implements TreeModel {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ApplicationInstanceTreeNode next() {
|
||||
return new ApplicationInstanceTreeNode(applications.next());
|
||||
public LegacyApplicationInstanceTreeNode next() {
|
||||
return new LegacyApplicationInstanceTreeNode(applications.next());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -22,7 +22,7 @@ import com.arsdigita.bebop.PageState;
|
|||
import com.arsdigita.bebop.Tree;
|
||||
import com.arsdigita.bebop.tree.TreeModel;
|
||||
import com.arsdigita.bebop.tree.TreeModelBuilder;
|
||||
import com.arsdigita.ui.admin.ApplicationsAdministrationTab;
|
||||
import com.arsdigita.ui.admin.applications.ApplicationsAdministrationTab;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
|
||||
/**
|
||||
|
|
@ -30,15 +30,15 @@ import com.arsdigita.util.LockableImpl;
|
|||
* applications tree used in {@link ApplicationsAdministrationTab}.
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
* @version $Id: ApplicationTreeModelBuilder.java 2294 2013-08-05 18:39:46Z
|
||||
* jensp $
|
||||
* @version $Id: LegacyApplicationTreeModelBuilder.java 2294 2013-08-05 18:39:46Z
|
||||
jensp $
|
||||
*/
|
||||
public class ApplicationTreeModelBuilder extends LockableImpl
|
||||
public class LegacyApplicationTreeModelBuilder extends LockableImpl
|
||||
implements TreeModelBuilder {
|
||||
|
||||
@Override
|
||||
public TreeModel makeModel(final Tree tree, final PageState state) {
|
||||
tree.expand("-1", state);
|
||||
return new ApplicationTreeModel();
|
||||
return new LegacyApplicationTreeModel();
|
||||
}
|
||||
}
|
||||
|
|
@ -26,9 +26,9 @@ import org.libreccm.web.ApplicationType;
|
|||
* Tree Node implementation for the Application Tree in the Application admin tab.
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
* @version $Id: ApplicationTypeTreeNode.java 2282 2013-08-01 10:45:42Z jensp $
|
||||
* @version $Id: LegacyApplicationTypeTreeNode.java 2282 2013-08-01 10:45:42Z jensp $
|
||||
*/
|
||||
public class ApplicationTypeTreeNode implements TreeNode {
|
||||
public class LegacyApplicationTypeTreeNode implements TreeNode {
|
||||
|
||||
private final String name;
|
||||
private final String objectType;
|
||||
|
|
@ -38,7 +38,7 @@ public class ApplicationTypeTreeNode implements TreeNode {
|
|||
// isSingleton
|
||||
// getObjectType
|
||||
|
||||
public ApplicationTypeTreeNode(final ApplicationType applicationType) {
|
||||
public LegacyApplicationTypeTreeNode(final ApplicationType applicationType) {
|
||||
//this.applicationType = applicationType;
|
||||
name = applicationType.name();
|
||||
objectType = applicationType.name();
|
||||
|
|
@ -40,7 +40,7 @@ public class LoginApplicationSetup extends AbstractCcmApplicationSetup {
|
|||
public void setup() {
|
||||
final CcmApplication login = new CcmApplication();
|
||||
login.setUuid(UUID.randomUUID().toString());
|
||||
login.setApplicationType(LOGIN_APP_NAME);
|
||||
login.setApplicationType(LoginConstants.LOGIN_APP_TYPE);
|
||||
login.setPrimaryUrl(LoginConstants.LOGIN_PAGE_URL);
|
||||
|
||||
getEntityManager().persist(login);
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@ import com.arsdigita.globalization.GlobalizedMessage;
|
|||
*/
|
||||
public interface LoginConstants {
|
||||
|
||||
public static final String LOGIN_APP_TYPE = "com.arsdigita.ui.Login";
|
||||
|
||||
public static final String LOGIN_BUNDLE
|
||||
= "com.arsdigita.ui.login.LoginResources";
|
||||
|
||||
|
|
|
|||
|
|
@ -18,12 +18,14 @@
|
|||
*/
|
||||
package org.libreccm.core;
|
||||
|
||||
import com.arsdigita.ui.admin.AdminApplicationCreator;
|
||||
import com.arsdigita.ui.admin.applications.AdminApplicationCreator;
|
||||
import com.arsdigita.ui.admin.AdminServlet;
|
||||
import com.arsdigita.ui.admin.AdminApplicationSetup;
|
||||
import com.arsdigita.ui.admin.AdminUiConstants;
|
||||
import com.arsdigita.ui.admin.applications.AdminApplicationSetup;
|
||||
import com.arsdigita.ui.login.LoginApplicationCreator;
|
||||
import com.arsdigita.ui.login.LoginServlet;
|
||||
import com.arsdigita.ui.login.LoginApplicationSetup;
|
||||
import com.arsdigita.ui.login.LoginConstants;
|
||||
|
||||
import org.libreccm.modules.CcmModule;
|
||||
import org.libreccm.modules.InitEvent;
|
||||
|
|
@ -40,12 +42,12 @@ import org.libreccm.web.ApplicationType;
|
|||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@Module(applicationTypes = {
|
||||
@ApplicationType(name = LoginApplicationSetup.LOGIN_APP_NAME,
|
||||
@ApplicationType(name = LoginConstants.LOGIN_APP_TYPE,
|
||||
description = "Login Application",
|
||||
singleton = true,
|
||||
creator = LoginApplicationCreator.class,
|
||||
servlet = LoginServlet.class),
|
||||
@ApplicationType(name = AdminApplicationSetup.ADMIN_APP_NAME,
|
||||
@ApplicationType(name = AdminUiConstants.ADMIN_APP_TYPE,
|
||||
description = "Site-wide admin application",
|
||||
singleton = true,
|
||||
creator = AdminApplicationCreator.class,
|
||||
|
|
|
|||
Loading…
Reference in New Issue