Package org.fusesource.ide.jmx.activemq.navigator

Source Code of org.fusesource.ide.jmx.activemq.navigator.QueueNode

/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Red Hat, Inc. - initial API and implementation
******************************************************************************/

package org.fusesource.ide.jmx.activemq.navigator;

import io.fabric8.activemq.facade.BrokerFacade;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.management.openmbean.CompositeData;

import org.apache.activemq.broker.jmx.QueueViewMBean;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.views.properties.IPropertySourceProvider;
import org.fusesource.ide.commons.tree.ConnectedNode;
import org.fusesource.ide.commons.tree.GraphableNode;
import org.fusesource.ide.commons.ui.ContextMenuProvider;
import org.fusesource.ide.commons.ui.Shells;
import org.fusesource.ide.jmx.activemq.ActiveMQConverter;
import org.fusesource.ide.jmx.activemq.ActiveMQJMXPlugin;
import org.fusesource.ide.jmx.activemq.Messages;
import org.fusesource.ide.jmx.commons.messages.IExchange;
import org.fusesource.ide.jmx.commons.messages.IExchangeBrowser;
import org.jboss.tools.jmx.core.tree.Node;
import org.jboss.tools.jmx.ui.ImageProvider;


public class QueueNode extends DestinationNodeSupport implements IExchangeBrowser, ImageProvider, ContextMenuProvider, IPropertySourceProvider, GraphableNode, ConnectedNode {

  private final QueuesNode queuesNode;
  private final QueueViewMBean queue;
  private final QueueConsumersNode consumersNode;
  private final QueueProducersNode producersNode;
  private ActiveMQConverter converter = new ActiveMQConverter();

  public QueueNode(QueuesNode queuesNode, QueueViewMBean queue) {
    super(queuesNode, queuesNode.getBrokerNode(), queue);
    this.queuesNode = queuesNode;
    this.queue = queue;
    consumersNode = new QueueConsumersNode(this);
    addChild(consumersNode);
    producersNode = new QueueProducersNode(this);
    addChild(producersNode);
    setPropertyBean(queue);
  }

  public QueuesNode getQueuesNode() {
    return queuesNode;
  }

  public QueueViewMBean getQueue() {
    return queue;
  }

  @Override
  public List<Node> getChildrenGraph() {
    List<Node> answer = new ArrayList<Node>();
    answer.addAll(Arrays.asList(consumersNode.getChildren()));
    answer.addAll(Arrays.asList(producersNode.getChildren()));
    return answer;
  }

  @Override
  public List<?> getConnectedTo() {
    return getConsumersNode().getChildrenList();
  }

  public QueueConsumersNode getConsumersNode() {
    return consumersNode;
  }

  public QueueProducersNode getProducersNode() {
    return producersNode;
  }

  @Override
  public List<IExchange> browseExchanges() {
    List<IExchange> answer = new ArrayList<IExchange>();
    try {
      CompositeData[] cds = queue.browse();
      if (cds != null) {
        for (CompositeData cd : cds) {
          IExchange exchange = converter.toExchange(cd);
          if (exchange != null) {
            answer.add(exchange);
          }
        }
      }
    } catch (Exception e) {
      ActiveMQJMXPlugin.getLogger().warning("Failed to browse queue " + e, e);
    }
    return answer;
  }

  @Override
  public Image getImage() {
    return ActiveMQJMXPlugin.getDefault().getImage("queue.png");
  }

  @Override
  public void provideContextMenu(IMenuManager menu) {
    Action deleteQueueAction = new Action(Messages.DeleteQueueAction, SWT.CHECK) {
      @Override
      public void run() {
        showDeleteQueueDialog();
      }

    };
    deleteQueueAction.setToolTipText(Messages.DeleteQueueActionToolTip);
    deleteQueueAction.setImageDescriptor(ActiveMQJMXPlugin.getDefault().getImageDescriptor("delete.gif"));
    menu.add(deleteQueueAction);

  }

  protected void showDeleteQueueDialog() {
    String message = Messages.bind(Messages.DeleteQueueDialogMessage, queue.getName());
    boolean confirm = MessageDialog.openConfirm(Shells.getShell(), Messages.DeleteQueueDialogTitle,
        message);
    if (confirm) {
      deleteQueue();
    }
  }

  protected void deleteQueue() {
    String name = queue.getName();
    try {
      getFacade().getBrokerAdmin().removeQueue(name);
      queuesNode.refresh();
    } catch (Exception e) {
      ActiveMQJMXPlugin.showUserError("Failed to delete Queue", "Failed to delete queue: " + queue, e);
    }
  }

  protected BrokerFacade getFacade() {
    return getBrokerNode().getFacade();
  }

}
TOP

Related Classes of org.fusesource.ide.jmx.activemq.navigator.QueueNode

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.