From a9633ce38433318c6b9395808c9b98301a57e5be Mon Sep 17 00:00:00 2001 From: baka Date: Sat, 1 Oct 2016 12:17:24 +0000 Subject: [PATCH] Adds PartyAddForm, which is needed by RolePartyAddFrom, which is needed by BaseRoleItemPane. Shamelessly replaces DataQuery with List as seen in other classes. No idea if this will work. But compiles... git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4342 8810af33-2d31-482b-a856-94f89814c4df --- .../com/arsdigita/cms/ui/PartyAddForm.java | 282 ++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100755 ccm-cms/src/main/java/com/arsdigita/cms/ui/PartyAddForm.java diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/PartyAddForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/PartyAddForm.java new file mode 100755 index 000000000..cc551d4ba --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/PartyAddForm.java @@ -0,0 +1,282 @@ +/* + * Copyright (C) 2002-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.cms.ui; + +import com.arsdigita.bebop.ColumnPanel; +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.RequestLocal; +import com.arsdigita.bebop.SimpleContainer; +import com.arsdigita.bebop.event.FormInitListener; +import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.event.PrintEvent; +import com.arsdigita.bebop.event.PrintListener; +import com.arsdigita.bebop.form.CheckboxGroup; +import com.arsdigita.bebop.form.Hidden; +import com.arsdigita.bebop.form.Option; +import com.arsdigita.bebop.form.OptionGroup; +import com.arsdigita.bebop.form.Submit; +import com.arsdigita.bebop.form.Widget; +import com.arsdigita.bebop.parameters.NotNullValidationListener; +import com.arsdigita.globalization.GlobalizedMessage; +import com.arsdigita.ui.admin.GlobalizationUtil; +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.xml.Element; +import org.libreccm.security.Party; + +import java.math.BigDecimal; +import java.util.List; +import java.util.TooManyListenersException; + + +/** + * Form for adding multiple parties to a role. + * + * @author Yannick Bülter + * @author Scott Seago (scott@arsdigita.com) + * @version Id: PartyAddForm.java 754 2005-09-02 13:26:17Z sskracic $ + */ +public abstract class PartyAddForm extends SimpleContainer + implements FormInitListener, FormProcessListener { + + private final static String SEARCH_QUERY = "searchQuery"; + private final static String PARTIES = "parties"; + private final static String SUBMIT = "addSubmit"; + private final static String CANCEL = "addCancel"; + private final static String SUBMIT_LABEL = "Add Members"; + + private final static String DQ_PARTY_ID = "partyId"; + private final static String DQ_NAME = "name"; + + private Widget m_search; + private RequestLocal m_query; + + private CMSContainer m_noMatches; + private CMSContainer m_matches; + + private Form m_form; + private Hidden m_searchQuery; + private CheckboxGroup m_parties; + private Submit m_submit; + private Submit m_cancel; + + + /** + * Private access prevents this constructor from ever being called + * directly. + */ + private PartyAddForm() { + super(); + } + + + /** + * Constructor. + * + * @param search The widget on the search form that contains the value + * of the search string. + */ + public PartyAddForm(Widget search) { + this(); + + m_search = search; + + m_query = new RequestLocal() { + protected Object initialValue(PageState state) { + return makeQuery(state); + } + }; + + m_form = makeForm(); + + Label title = new Label(GlobalizationUtil.globalize("cms.ui.matches")); + title.setFontWeight(Label.BOLD); + + Label label = new Label(GlobalizationUtil.globalize("cms.ui.there_was_no_one_matching_the_search_criteria")); + label.setFontWeight("em"); + + m_noMatches = new CMSContainer(); + m_noMatches.add(title); + m_noMatches.add(label); + add(m_noMatches); + + m_matches = new CMSContainer(); + m_matches.add(title); + m_matches.add(m_form); + add(m_matches); + } + + + /** + * Build the form used to add parties. + * + * @return The form + */ + protected Form makeForm() { + final CMSForm form = new CMSForm("AddParties") { + public final boolean isCancelled(final PageState state) { + return m_cancel.isSelected(state); + } + }; + + // This hidden field will store the search query. A hidden widget is + // used instead of a request local variable because the search query + // should only be updated when the search form is submitted. + m_searchQuery = new Hidden(SEARCH_QUERY); + form.add(m_searchQuery, ColumnPanel.FULL_WIDTH); + + Label l = new Label( + "Check the box next to the name of the person(s) to assign to this role."); + form.add(l, ColumnPanel.FULL_WIDTH); + + // Add the list of parties that can be added. + m_parties = new CheckboxGroup(PARTIES); + m_parties.addValidationListener(new NotNullValidationListener()); + try { + m_parties.addPrintListener(new PrintListener() { + public void prepare(PrintEvent event) { + CheckboxGroup target = (CheckboxGroup) event.getTarget(); + PageState state = event.getPageState(); + // Ensures that the init listener gets fired before the + // print listeners. + FormData data = m_form.getFormData(state); + addParties(state, target); + } + }); + } catch (TooManyListenersException e) { + UncheckedWrapperException.throwLoggedException(getClass(), "Too many listeners", e); + } + form.add(m_parties, ColumnPanel.FULL_WIDTH); + + // Submit and Cancel buttons. + SimpleContainer s = new SimpleContainer(); + m_submit = new Submit(SUBMIT, new GlobalizedMessage(SUBMIT_LABEL)); + s.add(m_submit); + m_cancel = new Submit(CANCEL, new GlobalizedMessage("Cancel")); + s.add(m_cancel); + form.add(s, ColumnPanel.FULL_WIDTH | ColumnPanel.CENTER); + + form.addInitListener(this); + form.addProcessListener(this); + + return form; + } + + /** + * Fetches the form for adding parties. + * + * @return The "add party" form + */ + public Form getForm() { + return m_form; + } + + /** + * Fetches the widget that contains the search string. + * + * @return The widget that contains the search string + */ + protected Widget getSearchWidget() { + return m_searchQuery; + } + + /** + * Return true if the form is cancelled, false otherwise. + * + * @param state The page state + * @return true if the form is cancelled, false otherwise. + * @pre ( state != null ) + */ + public boolean isCancelled(PageState state) { + return m_cancel.isSelected(state); + } + + + /** + * Adds parties to the option group. + * + * @param state The page state + * @param target The option group + * @pre ( state != null && target != null ) + */ + protected void addParties(PageState state, OptionGroup target) { + @SuppressWarnings("unchecked") + List parties = (List) m_query.get(state); + + for (final Party party : parties) { + target.addOption(new Option( + Long.toString(party.getPartyId()), + new Label(new GlobalizedMessage(party.getName())) + )); + } + } + + + /** + * Generates a {@link Object} that encapsulates + * search results. + * + * @param state The page state + */ + protected abstract List makeQuery(PageState state); + + + /** + * Stores the search query in the hidden field. + * + * @param event The form event + */ + public void init(FormSectionEvent event) throws FormProcessException { + PageState state = event.getPageState(); + + m_searchQuery.setValue(state, m_search.getValue(state)); + } + + /** + * Process listener for the "Add parties" form. + * + * @param event The form event + */ + public abstract void process(FormSectionEvent event) + throws FormProcessException; + + + /** + * Displays the appropriate frame. + * + * @param state The page state + * @param parent The parent DOM element + */ + public void generateXML(PageState state, Element parent) { + + @SuppressWarnings("unchecked") + List searchResults = (List) m_query.get(state); + + if ( searchResults.size() > 0 ) { + m_matches.generateXML(state, parent); + } else { + m_noMatches.generateXML(state, parent); + } + } + +}