Package org.uberfire.client.workbench.widgets.toolbar

Source Code of org.uberfire.client.workbench.widgets.toolbar.WorkbenchToolBarPresenter$View

/*
* Copyright 2012 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.uberfire.client.workbench.widgets.toolbar;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
import javax.inject.Inject;

import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import com.google.gwt.user.client.ui.IsWidget;
import org.uberfire.client.mvp.Activity;
import org.uberfire.client.mvp.PlaceManager;
import org.uberfire.client.mvp.WorkbenchActivity;
import org.uberfire.client.workbench.events.ClosePlaceEvent;
import org.uberfire.client.workbench.events.PlaceGainFocusEvent;
import org.uberfire.mvp.PlaceRequest;
import org.uberfire.workbench.model.toolbar.ToolBar;

/**
* Presenter for WorkbenchToolBar that mediates changes to the Workbench ToolBar
* in response to changes to the selected WorkbenchPart. This implementation is
* specific to GWT. An alternative implementation should be considered for use
* within Eclipse.
*/
@ApplicationScoped
public class WorkbenchToolBarPresenter {

    public interface View
            extends
            IsWidget {

        void addToolBar( final ToolBar toolBar );

        void removeToolBar( final ToolBar toolBar );

        int getHeight();

        void hide();

        void show();
    }

    @Inject
    private View view;

    @Inject
    private PlaceManager placeManager;

    //Items relating to the Workbench as a whole
    private List<ToolBar> workbenchItems = new ArrayList<ToolBar>();

    //Transient items relating to the current Workbench Perspective
    private List<ToolBar> workbenchPerspectiveItems = new ArrayList<ToolBar>();

    //Transient items relating to the current WorkbenchPart context
    private Multimap<PlaceRequest, ToolBar> workbenchContextItems = ArrayListMultimap.create();

    public IsWidget getView() {
        return this.view;
    }

    public int getHeight() {
        return this.view.getHeight();
    }

    public void hide() {
        this.view.hide();
    }

    public void show() {
        this.view.show();
    }

    /**
     * Removes all the ToolBar items that were previously added for the given place, if any.
     */
    private void removeItemsFor(final PlaceRequest place) {
      Collection<ToolBar> removed = workbenchContextItems.removeAll(place);
        for (final ToolBar toolBar : removed) {
            view.removeToolBar(toolBar);
        }
    }
   
    /**
   * Adds all the ToolBar items associated with the given place to this
   * toolbar. The exact list of items added is remembered, and can be removed
   * later by a call to {@link #removeItemsFor(PlaceRequest)}.
   * <p>
   * The toolbar items are filtered for the current user subject to their
   * security requirements.
   * <p>
   * This method becomes a no-op when any of the following is true:
   * <ul>
   <li>The place doesn't have an associated {@link Activity}
   <li>The place's Activity is not a {@link WorkbenchActivity}
   <li>The place's WorkbenchActivity doesn't have a {@link ToolBar}
   * </ul>
   */
    public void addItemsFor(final PlaceRequest place) {
        final Activity activity = placeManager.getActivity(place);
        if ( activity == null ) {
            return;
        }
        if ( !( activity instanceof WorkbenchActivity ) ) {
            return;
        }
        final WorkbenchActivity wbActivity = (WorkbenchActivity) activity;

        final ToolBar toolBar = wbActivity.getToolBar();
        if ( toolBar == null ) {
            return;
        }
       
        final ToolBar filteredToolBar = filterToolBarItemsByPermission(toolBar);

        if ( !filteredToolBar.getItems().isEmpty() ) {
            workbenchContextItems.put(place, filteredToolBar);
            view.addToolBar( filteredToolBar );
        }
    }
   
    /**
   * Removes the toolbar items of a WorkbenchPart when that part is closed.
   */
    void onWorkbenchPartClose( @Observes ClosePlaceEvent event ) {
      removeItemsFor(event.getPlace());
    }

    /**
   * Adds the toolbar items of a WorkbenchPart when that part is created.
   * <p>
   * TODO(UF-6): change this to observe PlaceOpenedEvent when such an event exists.
   */
    void onWorkbenchPartOnFocus( @Observes PlaceGainFocusEvent event ) {
        if ( !workbenchContextItems.containsKey(event.getPlace()) ) {
            addItemsFor(event.getPlace());
        }
    }

    public void addWorkbenchItem( final ToolBar toolBar ) {

        final ToolBar filteredToolBar = filterToolBarItemsByPermission( toolBar );

        if ( !filteredToolBar.getItems().isEmpty() ) {
            workbenchItems.add( filteredToolBar );
            view.addToolBar( filteredToolBar );
        }
    }

    public void addWorkbenchPerspective( final ToolBar toolBar ) {
        final ToolBar filteredToolBar = filterToolBarItemsByPermission( toolBar );

        if ( !filteredToolBar.getItems().isEmpty() ) {
            workbenchPerspectiveItems.add( filteredToolBar );
            view.addToolBar( filteredToolBar );
        }
    }

    private ToolBar filterToolBarItemsByPermission(ToolBar toolBar) {
      return toolBar; // TODO (UF-2)
  }

  public void clearWorkbenchItems() {
        if ( workbenchItems.isEmpty() ) {
            return;
        }
        for ( ToolBar item : workbenchItems ) {
            view.removeToolBar( item );
        }
        workbenchItems.clear();
    }

    public void clearWorkbenchPerspectiveItems() {
        if ( workbenchPerspectiveItems.isEmpty() ) {
            return;
        }
        for ( ToolBar item : workbenchPerspectiveItems ) {
            view.removeToolBar( item );
        }
        workbenchPerspectiveItems.clear();
    }
}
TOP

Related Classes of org.uberfire.client.workbench.widgets.toolbar.WorkbenchToolBarPresenter$View

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.