All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.ade.publish.client.CmsPublishSelectPanel Maven / Gradle / Ivy

Go to download

OpenCms is an enterprise-ready, easy to use website content management system based on Java and XML technology. Offering a complete set of features, OpenCms helps content managers worldwide to create and maintain beautiful websites fast and efficiently.

There is a newer version: 18.0
Show newest version
/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (c) Alkacon Software GmbH (http://www.alkacon.com)
 *
 * 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.
 *
 * For further information about Alkacon Software, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 * 
 * 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 org.opencms.ade.publish.client;

import org.opencms.ade.publish.client.CmsPublishItemStatus.Signal;
import org.opencms.ade.publish.shared.CmsProjectBean;
import org.opencms.ade.publish.shared.CmsPublishGroup;
import org.opencms.ade.publish.shared.CmsPublishGroupList;
import org.opencms.ade.publish.shared.CmsPublishOptions;
import org.opencms.ade.publish.shared.CmsPublishResource;
import org.opencms.ade.publish.shared.CmsWorkflow;
import org.opencms.ade.publish.shared.CmsWorkflowAction;
import org.opencms.file.CmsResource;
import org.opencms.gwt.client.ui.CmsAlertDialog;
import org.opencms.gwt.client.ui.CmsPushButton;
import org.opencms.gwt.client.ui.CmsScrollPanel;
import org.opencms.gwt.client.ui.css.I_CmsInputLayoutBundle;
import org.opencms.gwt.client.ui.input.CmsCheckBox;
import org.opencms.gwt.client.ui.input.CmsSelectBox;
import org.opencms.gwt.client.ui.input.CmsTriStateCheckBox;
import org.opencms.gwt.client.ui.input.CmsTriStateCheckBox.State;
import org.opencms.gwt.client.util.CmsDomUtil;
import org.opencms.gwt.client.util.CmsMessages;
import org.opencms.gwt.client.util.CmsScrollToBottomHandler;
import org.opencms.util.CmsUUID;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.google.common.collect.Maps;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.RepeatingCommand;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Visibility;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.InlineLabel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;

/**
 * This is the main widget of the publish dialog.

* * It allows the user to choose which resources from the publish list should be published * and/or removed from the publish list. * * @since 8.0.0 */ public class CmsPublishSelectPanel extends Composite implements I_CmsPublishSelectionChangeHandler, I_CmsPublishItemStatusUpdateHandler { /** * Data with which to update a check box. */ public static class CheckBoxUpdate { /** The action (used for the tooltip). */ private String m_action; /** The new state. */ private CmsTriStateCheckBox.State m_state; /** The new text. */ private String m_text; /** * Gets the action text.

* * @return the action text */ public String getAction() { return m_action; } /** * Gets the new state.

* * @return the new state */ public CmsTriStateCheckBox.State getState() { return m_state; } /** * Gets the new text.

* * @return the new text */ public String getText() { return m_text; } /** * Sets the action text.

* * @param action the action text */ public void setAction(String action) { m_action = action; } /** * Sets the new state.

* * @param state the new state */ public void setState(CmsTriStateCheckBox.State state) { m_state = state; } /** * Sets the new text.

* * @param text the new text */ public void setText(String text) { m_text = text; } } /** The UiBinder interface for this widget. */ protected interface I_CmsPublishSelectPanelUiBinder extends UiBinder { // empty } /** * Command for adding more list items to the list of publish items.

*/ protected class MoreItemsCommand implements RepeatingCommand { /** The number of items left to add. */ private int m_numItems; /** * Creates a new instance.

* * @param numItems the maximal number of items to add */ public MoreItemsCommand(int numItems) { m_numItems = numItems; } /** * @see com.google.gwt.core.client.Scheduler.RepeatingCommand#execute() */ public boolean execute() { if (m_numItems == 0) { finishLoading(); return false; } boolean hasMore = CmsPublishSelectPanel.this.addNextItem(); if (!hasMore) { finishLoading(); return false; } m_numItems -= 1; return true; } } /** The CSS bundle used for this widget. */ private static final I_CmsPublishCss CSS = I_CmsPublishLayoutBundle.INSTANCE.publishCss(); /** * When dynamically adding groups on scrolling, the number of groups should be calculated such that the total sum of resources * in the groups is the smallest number greater or equal to this constant.

*/ private static final int MIN_BATCH_SIZE = 20; /** The scroll threshold for the list of problem resources. */ private static final int SCROLL_THRESHOLD = 200; /** The UiBinder instance used for this widget. */ private static final I_CmsPublishSelectPanelUiBinder UI_BINDER = GWT.create(I_CmsPublishSelectPanelUiBinder.class); /** The button for escaping from the publish dialog. */ @UiField protected CmsPushButton m_cancelButton; /** Checkbox for including the contents of folders in the direct publish case. */ @UiField protected CmsCheckBox m_checkboxAddContents; /** The checkbox for the "show problems only" mode. */ @UiField protected CmsCheckBox m_checkboxProblems; /** The checkbox for including related resources. */ @UiField protected CmsCheckBox m_checkboxRelated; /** The checkbox for including sibling resources. */ @UiField protected CmsCheckBox m_checkboxSiblings; /** The panel containing the publish groups. */ @UiField protected Panel m_groupPanelContainer; /** Flag to indicate whether new items are currently being added to the list. */ protected boolean m_loading; /** The data model for the publish dialog. */ protected CmsPublishDataModel m_model; /** The label which is displayed when there are no resources to publish. */ @UiField protected Label m_noResources; /** The panel which shows a message telling the user the number of problems. */ @UiField protected Panel m_problemsPanel; /** The project select box. */ @UiField protected CmsSelectBox m_projectSelector; /** The publish dialog which contains this panel. */ protected CmsPublishDialog m_publishDialog; /** The scroll panel containing the group panel. */ @UiField protected CmsScrollPanel m_scrollPanel; /** The global map of selection controllers for all groups. */ protected Map m_selectionControllers = Maps.newHashMap(); /** The label shown in front of the project selector. */ @UiField protected InlineLabel m_selectorLabel; /** The panel containing the project selector. */ @UiField protected FlowPanel m_selectorPanel; /** Label which is shown instead of the resource list when the resource list is too long. */ @UiField protected Label m_tooManyResources; /** The top button bar. */ @UiField protected Panel m_topBar; /** The workflow selector. */ @UiField protected CmsSelectBox m_workflowSelector; /** The workflow selector label. */ @UiField protected InlineLabel m_workflowsLabel; /** The action buttons. */ private List m_actionButtons; /** The available actions. */ private List m_actions; /** The current group index used for scrolling. */ private int m_currentGroupIndex; /** The current group panel. */ private CmsPublishGroupPanel m_currentGroupPanel; /** The id of the virtual project used for 'direct publish'. */ private CmsUUID m_directPublishId; /** Indicates whether a previously selected project has been found. */ private boolean m_foundOldProject; /** The list of group panels for each publish list group. */ private List m_groupPanels = new ArrayList(); /** Flag indicating that the panel has been initialized. */ private boolean m_initialized; /** Checkbox for selecting/deselecting all items. */ private CmsTriStateCheckBox m_selectAll; /** Flag which indicates whether only resources with problems should be shown. */ private boolean m_showProblemsOnly; /** Indicates whether the resources are being shown (which is not done if the resource list is too long). */ private boolean m_showResources = true; /** * Creates a new instance.

* * @param publishDialog the publish dialog to which this panel should belong * @param projects a map of projects, where the keys are the project ids and the values are the names of the projects * @param publishOptions the initial publish options * @param workflows the available workflows * @param selectedWorkflowId the selected workflow id * @param scrollPanelHeight the available scroll panel height */ public CmsPublishSelectPanel( CmsPublishDialog publishDialog, List projects, CmsPublishOptions publishOptions, Map workflows, String selectedWorkflowId, int scrollPanelHeight) { projects = new ArrayList(projects); m_publishDialog = publishDialog; m_actions = workflows.get(selectedWorkflowId).getActions(); m_actionButtons = new ArrayList(); initWidget(UI_BINDER.createAndBindUi(this)); boolean enableAddContents = false; try { enableAddContents = Boolean.parseBoolean(publishOptions.getParameters().get( CmsPublishOptions.PARAM_ENABLE_INCLUDE_CONTENTS)); } catch (Exception e) { // ignore; enableAddContents remains the default value } m_checkboxAddContents.setVisible(enableAddContents); if (enableAddContents) { m_directPublishId = publishOptions.getProjectId(); } String addContentsText = Messages.get().key(Messages.GUI_CHECKBOX_ADD_CONTENT_0); m_checkboxAddContents.setText(addContentsText); m_selectAll = new CmsTriStateCheckBox(""); m_selectAll.addStyleName(I_CmsInputLayoutBundle.INSTANCE.inputCss().alignCheckboxBottom()); m_selectAll.getElement().getStyle().setMarginLeft(4, Style.Unit.PX); m_selectAll.setNextStateAfterIntermediateState(State.on); m_selectAll.addValueChangeHandler(new ValueChangeHandler() { public void onValueChange(ValueChangeEvent event) { State state = event.getValue(); if (state == State.on) { m_model.signalAll(Signal.publish); } else if (state == State.off) { m_model.signalAll(Signal.unpublish); } } }); m_topBar.add(m_selectAll); m_scrollPanel.getElement().getStyle().setPropertyPx(CmsDomUtil.Style.maxHeight.toString(), scrollPanelHeight); m_checkboxProblems.setVisible(false); CmsMessages messages = Messages.get(); LinkedHashMap workflowSelectorItems = new LinkedHashMap(); for (CmsWorkflow workflow : workflows.values()) { workflowSelectorItems.put(workflow.getId(), workflow.getNiceName()); } LinkedHashMap projectSelectItems = new LinkedHashMap(); Collections. sort(projects); m_foundOldProject = false; boolean selectedWorkflowProject = false; for (CmsProjectBean project : projects) { if (project.isWorkflowProject()) { workflowSelectorItems.put(project.getId().toString(), project.getName()); if (project.getId().equals(publishOptions.getProjectId())) { selectedWorkflowProject = true; } } else { projectSelectItems.put(project.getId().toString(), project.getName()); // look if the project id from the last publish list is among the available projects. // (this might not be the case if the project has been deleted in the meantime.) if (project.getId().equals(publishOptions.getProjectId())) { m_foundOldProject = true; } } } m_workflowSelector.setItems(workflowSelectorItems); m_workflowSelector.addStyleName(CSS.selector()); if (!(workflows.size() > 1)) { m_workflowSelector.setEnabled(false); } m_workflowsLabel.setText(messages.key(Messages.GUI_PUBLISH_WORKFLOW_SELECT_0)); m_projectSelector.setItems(projectSelectItems); m_projectSelector.addStyleName(CSS.selector()); if (!publishOptions.getProjectId().isNullUUID() && m_foundOldProject) { m_projectSelector.setFormValueAsString(publishOptions.getProjectId().toString()); } m_checkboxRelated.setChecked(publishOptions.isIncludeRelated()); m_checkboxSiblings.setChecked(publishOptions.isIncludeSiblings()); if (selectedWorkflowProject) { m_projectSelector.setEnabled(false); m_workflowSelector.setFormValueAsString(publishOptions.getProjectId().toString()); } else { m_workflowSelector.setFormValueAsString(selectedWorkflowId); } m_cancelButton.setText(messages.key(Messages.GUI_PUBLISH_DIALOG_CANCEL_BUTTON_0)); m_cancelButton.setUseMinWidth(true); m_noResources.setText(messages.key(Messages.GUI_PUBLISH_DIALOG_NO_RES_0)); m_checkboxSiblings.setText(messages.key(Messages.GUI_PUBLISH_CHECKBOXES_SIBLINGS_0)); m_checkboxRelated.setText(messages.key(Messages.GUI_PUBLISH_CHECKBOXES_REL_RES_0)); m_checkboxProblems.setText(messages.key(Messages.GUI_PUBLISH_CHECKBOXES_PROBLEMS_0)); m_selectorLabel.setText(messages.key(Messages.GUI_PUBLISH_TOP_PANEL_RIGHT_LABEL_0)); addScrollHandler(); m_initialized = true; } /** * Formats a number of publish resources in a more user-friendly form.

* * @param resourceCount a number of resources * * @return the formatted number of resources */ public static String formatResourceCount(int resourceCount) { return Messages.get().key(Messages.GUI_RESOURCE_COUNT_1, "" + resourceCount); } /** * Updates the state of a check box used for selecting/deselecting items.

* * @param states the selection states of the items for the check box * * @return the data needed to update the check box */ public static CheckBoxUpdate updateCheckbox(CmsPublishItemStateSummary states) { CheckBoxUpdate result = new CheckBoxUpdate(); boolean hasPublish = states.getPublishCount() > 0; boolean hasNormal = states.getNormalCount() > 0; String actionSelectAll = Messages.get().key(Messages.GUI_CHECKBOX_SELECT_ALL_0); String textDeselectAll = Messages.get().key(Messages.GUI_CHECKBOX_DESELECT_ALL_0); String some = Messages.get().key( Messages.GUI_CHECKBOX_SOME_2, "" + states.getPublishCount(), "" + (states.getPublishCount() + states.getNormalCount())); String all = Messages.get().key(Messages.GUI_CHECKBOX_ALL_0); String none = Messages.get().key(Messages.GUI_CHECKBOX_NONE_0); if (hasNormal && hasPublish) { result.setAction(actionSelectAll); result.setText(some); result.setState(CmsTriStateCheckBox.State.middle); } else if (hasNormal) { result.setAction(actionSelectAll); result.setText(none); result.setState(CmsTriStateCheckBox.State.off); } else if (hasPublish) { result.setAction(textDeselectAll); result.setText(all); result.setState(CmsTriStateCheckBox.State.on); } else { result.setText(none); result.setAction(actionSelectAll); result.setState(CmsTriStateCheckBox.State.off); } return result; } /** * Check for problems with new/deleted folders in the publish selection.

* * @param resourceIds the ids of the resources selected for publishing * @return true if there are problems with nested */ public boolean checkForProblems(Set resourceIds) { List pubResources = new ArrayList(); Set publishIds = getResourcesToPublish(); for (CmsUUID publishId : publishIds) { pubResources.add(m_model.getPublishResources().get(publishId)); } for (CmsPublishResource pubResource : pubResources) { String parentPath = CmsResource.getParentFolder(pubResource.getName()); CmsPublishResource parent = m_model.getPublishResourcesByPath().get(parentPath); if (parent != null) { boolean parentIsNew = parent.getState().isNew(); boolean parentIsDeleted = parent.getState().isDeleted(); if (parentIsNew || parentIsDeleted) { if (!resourceIds.contains(parent.getId())) { String title = Messages.get().key(Messages.ERR_CANT_PUBLISH_RESOURCE_TITLE_0); String message = null; if (parentIsNew) { message = Messages.get().key( Messages.ERR_PUBLISH_CANT_PUBLISH_NEW_RESOURCE_2, pubResource.getName(), parent.getName()); } if (parentIsDeleted) { message = Messages.get().key( Messages.ERR_PUBLISH_CANT_PUBLISH_DELETED_RESOURCE_2, pubResource.getName(), parent.getName()); } CmsAlertDialog alert = new CmsAlertDialog(title, message); alert.center(); return true; } } } } return false; } /** * Returns the buttons of this panel which should be shown as the buttons of the publish dialog.

* * @return a list of buttons */ public List getButtons() { List result = new ArrayList(); result.add(m_cancelButton); m_actionButtons.clear(); boolean enable = shouldEnablePublishButton(); if (m_actions != null) { for (final CmsWorkflowAction action : m_actions) { CmsPushButton actionButton = new CmsPushButton(); actionButton.setText(action.getLabel()); actionButton.setUseMinWidth(true); actionButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { executeAction(action); } }); actionButton.setEnabled(enable); m_actionButtons.add(actionButton); } } result.addAll(m_actionButtons); return result; } /** * Returns the ids of the resources which should be published.

* * @return a set of id strings */ public Set getResourcesToPublish() { return new HashSet(m_model.getPublishIds()); } /** * Returns the set of ids of resources which have been selected for removal.

* * @return a set of id strings */ public Set getResourcesToRemove() { Set result = new HashSet(m_model.getRemoveIds()); result.addAll(m_model.getIdsOfAlreadyPublishedResources()); return result; } /** * Gets the global map of selection controllers.

* * @return the map of selection controller */ public Map getSelectionControllers() { return m_selectionControllers; } /** * Returns if the resource list is being shown.

* * The resource list is now shown if it is too long.

* * @return true if the resource list is being shown */ public boolean isShowResources() { return m_showResources; } /** * @see org.opencms.ade.publish.client.I_CmsPublishSelectionChangeHandler#onChangePublishSelection() */ public void onChangePublishSelection() { enableActions(shouldEnablePublishButton()); Map states = m_model.computeGroupSelectionStates(); for (Map.Entry entry : states.entrySet()) { int key = entry.getKey().intValue(); if (key == -1) { updateCheckboxState(entry.getValue()); } else { if (key < m_groupPanels.size()) { m_groupPanels.get(key).updateCheckboxState(entry.getValue()); } } } } /** * Sets the publish groups used by this widget.

* * @param groups the new publish groups * @param newData true if the groups are new data which has been loaded */ public void setGroupList(CmsPublishGroupList groups, boolean newData) { if (groups.getToken() == null) { setShowResources(true, ""); setGroups(groups.getGroups(), newData); } else { setShowResources(false, groups.getTooManyResourcesMessage()); } boolean isDirectPublish = m_publishDialog.getPublishOptions().getProjectId().equals(m_directPublishId); m_checkboxAddContents.setVisible(isDirectPublish); } /** * Sets the mode to either show resources, or only show a "too many resources" message.

* In the latter case, the check boxes for the siblings/related resources will be deactivated.

* * @param showResources true if the resource list should be shown, false if only the given message should be shown * @param tooManyResourcesMessage the message to show if there are too many resources to display */ public void setShowResources(boolean showResources, String tooManyResourcesMessage) { m_showResources = showResources; m_checkboxRelated.setEnabled(showResources); m_checkboxRelated.setChecked(showResources && m_publishDialog.getPublishOptions().isIncludeRelated()); m_checkboxSiblings.setEnabled(showResources); m_checkboxSiblings.setChecked(showResources && m_publishDialog.getPublishOptions().isIncludeSiblings()); m_groupPanelContainer.setVisible(showResources); m_tooManyResources.setVisible(!showResources); m_tooManyResources.setText(tooManyResourcesMessage); m_selectAll.setVisible(showResources); if (!showResources) { m_checkboxProblems.setVisible(false); m_noResources.setVisible(false); m_scrollPanel.setVisible(false); } } /** * Returns true if the publish button should be enabled.

* * @return true if the publish button should be enabled */ public boolean shouldEnablePublishButton() { boolean enablePublishButton = (getResourcesToRemove().size() != 0) || (getResourcesToPublish().size() != 0) || !m_showResources; return enablePublishButton; } /** * @see org.opencms.ade.publish.client.I_CmsPublishItemStatusUpdateHandler#update(org.opencms.util.CmsUUID, org.opencms.ade.publish.client.CmsPublishItemStatus) */ public void update(CmsUUID id, CmsPublishItemStatus status) { CmsPublishItemSelectionController selectionController = m_selectionControllers.get(id); if (selectionController != null) { selectionController.update(status); } } /** * Updates the dialog title.

**/ public void updateDialogTitle() { String title; if (m_model.getGroups().size() > 1) { title = Messages.get().key( Messages.GUI_PUBLISH_DIALOG_TITLE_3, m_publishDialog.getSelectedWorkflow().getNiceName(), String.valueOf(m_model.getGroups().size()), String.valueOf(m_model.getPublishResources().size())); } else { title = m_publishDialog.getSelectedWorkflow().getNiceName(); } m_publishDialog.setCaption(title); } /** * Adds more publish list items to the panel.

*/ protected void addMoreListItems() { MoreItemsCommand cmd = new MoreItemsCommand(MIN_BATCH_SIZE); // we use a repeating command instead of a loop because a loop locks up the browser for too long in IE7. Scheduler.get().scheduleFixedDelay(cmd, 0); } /** * Tries to add a new publish list item to the panel, and returns false if there aren't any items left.

* * @return true if an item could be added, false if no items are left */ protected boolean addNextItem() { // this method is so complicated because to add the next item, // you may need to skip to another group and create the corresponding widget if (m_model.isEmpty()) { return false; } // now we know there is at least one group if (m_currentGroupPanel == null) { // this case happens if the method is called for the first time m_currentGroupPanel = addGroupPanel(m_model.getGroups().get(0), 0); } while (true) { if (m_currentGroupPanel.hasMoreItems()) { // found next item in the current group boolean found = m_currentGroupPanel.addNextItem(); if (found) { m_scrollPanel.onResizeDescendant(); return true; } } else if (m_currentGroupIndex < (m_model.getGroups().size() - 1)) { // didn't find item in the current group, so skip to next group if available // and create the group widget m_currentGroupIndex += 1; m_currentGroupPanel = addGroupPanel(m_model.getGroups().get(m_currentGroupIndex), m_currentGroupIndex); } else { // all groups exhausted m_scrollPanel.onResizeDescendant(); return false; } } } /** * Executes the given action.

* * @param action the action to execute on the selected resources */ protected void executeAction(CmsWorkflowAction action) { m_publishDialog.executeAction(action); } /** * The method to call when the items have finished being loaded into the list.

*/ protected void finishLoading() { m_loading = false; onChangePublishSelection(); } /** * Event handler for the 'add contents' check box.

* * @param event */ @UiHandler("m_checkboxAddContents") protected void onAddContentsClick(ClickEvent event) { setAddContents(m_checkboxAddContents.isChecked()); m_publishDialog.updateResourceList(); } /** * The event handler for the Cancel button.

* * @param e the event */ @UiHandler("m_cancelButton") protected void onClickCancel(ClickEvent e) { m_publishDialog.onCancel(); } /** * Handles the click event for problem resources check box.

* * @param event the click event * * @see com.google.gwt.event.dom.client.ClickHandler#onClick(com.google.gwt.event.dom.client.ClickEvent) */ @UiHandler("m_checkboxProblems") protected void onProblemClick(ClickEvent event) { setProblemMode(m_checkboxProblems.isChecked()); } /** * Handling the value change event for the project selector.

* * @param event the change event * * @see com.google.gwt.event.logical.shared.ValueChangeHandler#onValueChange(ValueChangeEvent) */ @UiHandler("m_projectSelector") protected void onProjectChange(ValueChangeEvent event) { if (m_initialized) { m_publishDialog.setProjectId(new CmsUUID(event.getValue())); m_publishDialog.updateResourceList(); } } /** * Handles the click event for related resources check box.

* * @param event the click event * * @see com.google.gwt.event.dom.client.ClickHandler#onClick(com.google.gwt.event.dom.client.ClickEvent) */ @UiHandler("m_checkboxRelated") protected void onRelatedClick(ClickEvent event) { if (!m_showResources) { return; } m_publishDialog.setIncludeRelated(m_checkboxRelated.isChecked()); m_publishDialog.updateResourceList(); } /** * Handles the click event for sibling resources check box.

* * @param event the click event * * @see com.google.gwt.event.dom.client.ClickHandler#onClick(com.google.gwt.event.dom.client.ClickEvent) */ @UiHandler("m_checkboxSiblings") protected void onSiblingClick(ClickEvent event) { if (!m_showResources) { return; } m_publishDialog.setIncludeSiblings(m_checkboxSiblings.isChecked()); m_publishDialog.updateResourceList(); } /** * Handling the value change event for the project selector.

* * @param event the change event * * @see com.google.gwt.event.logical.shared.ValueChangeHandler#onValueChange(ValueChangeEvent) */ @UiHandler("m_workflowSelector") protected void onWorkflowChange(ValueChangeEvent event) { if (m_initialized) { m_publishDialog.setWorkflowId(event.getValue()); // check for workflow project if (!m_publishDialog.getSelectedWorkflow().getId().equals(event.getValue())) { m_publishDialog.setProjectId(new CmsUUID(event.getValue())); m_projectSelector.setEnabled(false); } else { m_projectSelector.setEnabled(true); m_publishDialog.setProjectId(new CmsUUID(m_projectSelector.getFormValueAsString())); } m_actions = m_publishDialog.getSelectedWorkflow().getActions(); m_publishDialog.updateResourceList(); } } /** * Sets the publish groups.

* * @param groups the list of publish groups * @param newData true if the data is new */ protected void setGroups(List groups, boolean newData) { m_model = new CmsPublishDataModel(groups, this); m_model.setSelectionChangeAction(new Runnable() { public void run() { onChangePublishSelection(); } }); m_currentGroupIndex = 0; m_currentGroupPanel = null; m_problemsPanel.clear(); if (newData) { m_showProblemsOnly = false; m_checkboxProblems.setChecked(false); m_checkboxProblems.setVisible(false); m_problemsPanel.setVisible(false); } m_groupPanels.clear(); m_groupPanelContainer.clear(); m_scrollPanel.onResizeDescendant(); enableActions(false); int numGroups = groups.size(); setResourcesVisible(numGroups > 0); if (numGroups == 0) { return; } enableActions(true); addMoreListItems(); showProblemCount(m_model.countProblems()); } /** * Enables or disables the "only show resources with problems" mode.

* * @param enabled if true, enable the mode, else disable it */ protected void setProblemMode(boolean enabled) { m_showProblemsOnly = enabled; setGroups(m_model.getGroups(), false); } /** * The method which should be called when new items start being inserted into the list.

*/ protected void startLoading() { m_loading = true; } /** * Adds a new group panel.

* * @param group the publish group for which a panel should be added * @param currentIndex the index of the publish group * * @return the publish group panel which has been added */ private CmsPublishGroupPanel addGroupPanel(CmsPublishGroup group, int currentIndex) { String header = group.getName(); CmsPublishGroupPanel groupPanel = new CmsPublishGroupPanel( group, header, currentIndex, this, m_model, m_selectionControllers, m_showProblemsOnly); if (m_model.hasSingleGroup()) { groupPanel.hideGroupSelectCheckBox(); } m_groupPanels.add(groupPanel); m_groupPanelContainer.add(groupPanel); return groupPanel; } /** * Adds the scroll handler to the scroll panel which makes more groups visible when the user * scrolls to the bottom.

*/ private void addScrollHandler() { m_scrollPanel.addScrollHandler(new CmsScrollToBottomHandler(new Runnable() { /** * @see java.lang.Runnable#run() */ public void run() { if (!m_loading) { startLoading(); addMoreListItems(); } } }, SCROLL_THRESHOLD)); } /** * Enables action buttons.

* * @param enable true to enable the action buttons */ private void enableActions(boolean enable) { for (CmsPushButton button : m_actionButtons) { button.setEnabled(enable); } } /** * Enables / disables the 'add contents' option in the publish options object.

* * @param addContents true if folder contents should be added */ private void setAddContents(boolean addContents) { m_publishDialog.getPublishOptions().getParameters().put( CmsPublishOptions.PARAM_INCLUDE_CONTENTS, "" + addContents); } /** * Shows either the scroll panel or the "no resources" label and hides the other one.

* * @param visible if true, set the scroll panel to visible, otherwise the "no resources" label */ private void setResourcesVisible(boolean visible) { m_noResources.setVisible(!visible); m_scrollPanel.setVisible(visible); m_topBar.getElement().getStyle().setVisibility(visible ? Visibility.VISIBLE : Visibility.HIDDEN); m_checkboxSiblings.setVisible(true); m_checkboxRelated.setVisible(true); } /** * Shows the problem count in the panel.

* * @param numProblems the number of resources with publish problems */ private void showProblemCount(int numProblems) { m_problemsPanel.clear(); if (numProblems > 0) { HorizontalPanel errorBox = new HorizontalPanel(); Label warnIcon = new Label(); warnIcon.addStyleName(org.opencms.gwt.client.ui.css.I_CmsLayoutBundle.INSTANCE.gwtImages().style().warningIcon()); String message = Messages.get().key(Messages.GUI_PUBLISH_DIALOG_PROBLEM_1, "" + numProblems); errorBox.add(warnIcon); errorBox.add(new Label(message)); m_problemsPanel.add(errorBox); m_problemsPanel.setVisible(true); } m_checkboxProblems.setVisible(numProblems > 0); } /** * Updates the state of the check box for all items.

* * @param value the state to use to update the check box */ private void updateCheckboxState(CmsPublishItemStateSummary value) { CheckBoxUpdate update = updateCheckbox(value); m_selectAll.setText(update.getText()); m_selectAll.setTitle(update.getAction()); m_selectAll.setState(update.getState(), false); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy