Package org.apache.sling.ide.eclipse.ui.internal

Source Code of org.apache.sling.ide.eclipse.ui.internal.ServersActionModeFiddlerActionDelegate

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.sling.ide.eclipse.ui.internal;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.DecorationOverlayIcon;
import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IViewActionDelegate;
import org.eclipse.ui.IViewPart;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.ui.IServerModule;
import org.eclipse.wst.server.ui.internal.ImageResource;
import org.eclipse.wst.server.ui.internal.Messages;

/** prototype for changing icons and tooltip in the wst servers view - tbd properly **/
public class ServersActionModeFiddlerActionDelegate implements
    IViewActionDelegate {

  private IActionBars actionBars;
  private IViewPart view;
  private IPropertyChangeListener runTooltipListener;
  private IPropertyChangeListener debugTooltipListener;
  private IPropertyChangeListener disconnectTooltipListener;

  private List<ActionContributionItem> prependedToolbarActions = new LinkedList<ActionContributionItem>();
  private List<ActionContributionItem> appendedToolbarActionContributionItems = new LinkedList<ActionContributionItem>();
    private IServer server;
    private List<IModule[]> modules;
    private Action cleanAction;
    private Action publishAction;
    private ActionContributionItem wstPublishAction;
    private ActionContributionItem cleanActionContributionItem;
    private ActionContributionItem publishActionContributionItem;
    protected boolean doNotAskAgain = false; //TODO: move to preferences
 
  @Override
  public void run(IAction action) {

  }

  @Override
  public void selectionChanged(IAction action, ISelection selection) {
        server = null;
        modules = null;
        if (selection!=null && (selection instanceof IStructuredSelection)) {
          IStructuredSelection iss = (IStructuredSelection) selection;
          Object first = iss.getFirstElement();
          if (first instanceof IServer) {
              server = (IServer)first;
              modules = null;
              if (iss.size()>1) {
                  // verify that all selected elements are of type IServer
                  Iterator it = iss.iterator();
                  it.next(); // skip the first, we have that above already
                  while(it.hasNext()) {
                      Object next = it.next();
                      if (!(next instanceof IServer)) {
                          server = null;
                          modules = null;
                          break;
                      }
                  }
              }
          } else if (first instanceof IServerModule) {
              modules = new LinkedList<IModule[]>();
              IServerModule module = (IServerModule)first;
              modules.add(module.getModule());
              server = module.getServer();
                if (iss.size()>1) {
                    // verify that all selected elements are of type IServerModule
                    // plus add the module[] to the modules list
                    Iterator it = iss.iterator();
                    it.next(); // skip the first, we have that above already
                    while(it.hasNext()) {
                        Object next = it.next();
                        if (!(next instanceof IServerModule)) {
                            server = null;
                            module = null;
                            break;
                        } else {
                            module = (IServerModule) next;
                            modules.add(module.getModule());
                        }
                    }
                }
          }
      }
       
        if (server!=null) {
            if (server.getServerState() != IServer.STATE_STARTED) {
                server = null;
                modules = null;
            }
        }
        cleanAction.setEnabled(server!=null);
        publishAction.setEnabled(server!=null);

    action.setEnabled(true);
    final IAction serverRunAction = actionBars.getGlobalActionHandler("org.eclipse.wst.server.run");
    final IAction serverDebugAction = actionBars.getGlobalActionHandler("org.eclipse.wst.server.debug");
    IAction stopRunAction = actionBars.getGlobalActionHandler("org.eclipse.wst.server.stop");
    if (serverRunAction==null || stopRunAction==null || serverDebugAction==null) {
      return;
    }
//    serverRunAction.setHoverImageDescriptor(SharedImages.SLING_LOG);
    serverRunAction.setHoverImageDescriptor(SharedImages.RUN_CONNECT);
    serverDebugAction.setHoverImageDescriptor(SharedImages.DEBUG_CONNECT);
    stopRunAction.setHoverImageDescriptor(SharedImages.DISCONNECT);
   
    findWstPublishAction();
   
    for (Iterator it = appendedToolbarActionContributionItems.iterator(); it.hasNext();) {
        ActionContributionItem appendedAction = (ActionContributionItem) it.next();
            if (!contributionAdded(appendedAction)) {
                actionBars.getToolBarManager().add(appendedAction);
            }
        }
    if (wstPublishAction!=null) {
        wstPublishAction.setVisible(false);
        publishActionContributionItem.setVisible(true);
    } else {
        // otherwise hide it, as it is an unexpected situation
        publishActionContributionItem.setVisible(false);
    }
   
    final String runText = "Connect to server in run mode";
    if (runTooltipListener==null) {
      runTooltipListener = new IPropertyChangeListener() {
       
        @Override
        public void propertyChange(PropertyChangeEvent event) {
          if (event.getProperty().equals(IAction.TOOL_TIP_TEXT) ) {
            if (!event.getNewValue().equals(runText)) {
              serverRunAction.setToolTipText(runText);
            }
          }
        }
      };
      serverRunAction.addPropertyChangeListener(runTooltipListener);
    }
    final String debugText = "Connect to server in debug mode";
    if (debugTooltipListener==null) {
      debugTooltipListener = new IPropertyChangeListener() {
       
        @Override
        public void propertyChange(PropertyChangeEvent event) {
          if (event.getProperty().equals(IAction.TOOL_TIP_TEXT)) {
            if (!event.getNewValue().equals(debugText)) {
              serverDebugAction.setToolTipText(debugText);
            }
          }
        }
      };
      serverDebugAction.addPropertyChangeListener(debugTooltipListener);
    }
    final String disconnectText = "Disconnect from server";
    if (disconnectTooltipListener==null) {
      disconnectTooltipListener = new IPropertyChangeListener() {
       
        @Override
        public void propertyChange(PropertyChangeEvent event) {
          if (event.getProperty().equals(IAction.TOOL_TIP_TEXT)) {
            if (!event.getNewValue().equals(disconnectText)) {
              serverRunAction.setToolTipText(disconnectText);
            }
          }
        }
      };
      stopRunAction.addPropertyChangeListener(disconnectTooltipListener);
    }
   
    serverRunAction.setToolTipText(runText);
    serverDebugAction.setToolTipText(debugText);
    stopRunAction.setToolTipText(disconnectText);
   
  }

  private void findWstPublishAction() {
      if (wstPublishAction!=null) {
          return;
      }
        IContributionItem[] items = actionBars.getToolBarManager().getItems();
        for (int i = 0; i < items.length; i++) {
            IContributionItem item = items[i];
            if (item instanceof ActionContributionItem) {
                ActionContributionItem actionItem = (ActionContributionItem) item;
                IAction a = actionItem.getAction();
                if ("org.eclipse.wst.server.publish".equals(a.getActionDefinitionId())) {
                    wstPublishAction = actionItem;
//                    item.setVisible(false);
//                    actionBars.getToolBarManager().remove(item);
                }
            }
        }
       
    }

    private boolean contributionAdded(ActionContributionItem action) {
        IContributionItem[] items = actionBars.getToolBarManager().getItems();
        for (int i = 0; i < items.length; i++) {
            IContributionItem iContributionItem = items[i];
            if (iContributionItem==action) {
                return true;
            }
        }
        return false;
    }

    @Override
  public void init(IViewPart view) {
    this.view = view;
    actionBars = view.getViewSite().getActionBars();
    initToolbarContributedActions();
    for (Iterator it = prependedToolbarActions.iterator(); it.hasNext();) {
            IAction action = (IAction) it.next();
            final ActionContributionItem contribution = new ActionContributionItem(action);
            actionBars.getToolBarManager().add(contribution);
        }
  }

    private void initToolbarContributedActions() {
        cleanAction = new Action("Clean Publish...", IAction.AS_PUSH_BUTTON) {
            public void run() {
                if (server==null) {
                    MessageDialog.openInformation(view.getSite().getShell(), "No server selected", "A server must be selected");
                    return;
                }
                int selection = 2;
                if (!doNotAskAgain) {
                    MessageDialog dialog = new MessageDialog(view.getSite().getShell(), Messages.defaultDialogTitle, null, Messages.dialogPublishClean,
                            MessageDialog.QUESTION_WITH_CANCEL,
                            new String[] {"Cancel", "OK (do not ask again)", "OK"}, 1) {
                        @Override
                        protected void configureShell(Shell shell) {
                            super.configureShell(shell);
                            setShellStyle(getShellStyle() | SWT.SHEET);
                        }
                    };
                    selection = dialog.open();
                }
                if (selection != 0) {
                    if (selection==1) {
                        doNotAskAgain = true;
                    }
                    IAdaptable info = new IAdaptable() {
                        public Object getAdapter(Class adapter) {
                            if (Shell.class.equals(adapter))
                                return view.getSite().getShell();
                            if (String.class.equals(adapter))
                                return "user";
                            return null;
                        }
                    };
                   
                    server.publish(IServer.PUBLISH_CLEAN, modules, info, null);
                }
            }
        };
        cleanAction.setText("Clean Publish...");
        cleanAction.setToolTipText("Clean and Publish...");
        ImageDescriptor cleanAndPublishImageDesc = new DecorationOverlayIcon(
                ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_PUBLISH).createImage(),
                ImageDescriptor.createFromFile(SharedImages.class, "refresh.gif"), IDecoration.BOTTOM_RIGHT);
        cleanAction.setImageDescriptor(cleanAndPublishImageDesc);
        cleanAction.setId("org.apache.sling.ide.eclipse.ui.actions.CleanPublishAction");
        publishAction = new Action("Publish", IAction.AS_PUSH_BUTTON) {
            public void run() {
                if (server==null) {
                    MessageDialog.openInformation(view.getSite().getShell(), "No server selected", "A server must be selected");
                    return;
                }
                IAdaptable info = new IAdaptable() {
                    public Object getAdapter(Class adapter) {
                        if (Shell.class.equals(adapter))
                            return view.getSite().getShell();
                        if (String.class.equals(adapter))
                            return "user";
                        return null;
                    }
                };
               
                server.publish(IServer.PUBLISH_INCREMENTAL, modules, info, null);
            }
        };
        publishAction.setText("Publish");
        publishAction.setToolTipText("Publish");
        publishAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_PUBLISH));
        publishAction.setId("org.apache.sling.ide.eclipse.ui.actions.PublishAction")
        cleanAction.setEnabled(false);
        publishAction.setEnabled(false);

        cleanActionContributionItem = new ActionContributionItem(cleanAction);
        publishActionContributionItem = new ActionContributionItem(publishAction);
       
        appendedToolbarActionContributionItems.add(publishActionContributionItem);
        appendedToolbarActionContributionItems.add(cleanActionContributionItem);
    }

}
TOP

Related Classes of org.apache.sling.ide.eclipse.ui.internal.ServersActionModeFiddlerActionDelegate

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.