/*******************************************************************************
* Copyright (c) 2007-2009 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
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.hibernate.ui.diagram.editors.actions;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.gef.editparts.AbstractTreeEditPart;
import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchPart;
import org.jboss.tools.hibernate.ui.diagram.DiagramViewerMessages;
import org.jboss.tools.hibernate.ui.diagram.editors.DiagramViewer;
import org.jboss.tools.hibernate.ui.diagram.editors.command.ToggleShapeExpandStateCommand;
import org.jboss.tools.hibernate.ui.diagram.editors.model.ExpandableShape;
import org.jboss.tools.hibernate.ui.diagram.editors.parts.OrmEditPart;
/**
* Toggle expand state of selected shapes.
*
* @author Vitali Yemialyanchyk
*/
public class ToggleShapeExpandStateAction extends SelectionAction {
public static final String ACTION_ID = "toggleShapeExpandStateId"; //$NON-NLS-1$
public static final ImageDescriptor img =
ImageDescriptor.createFromFile(DiagramViewer.class, "icons/toggleshapeexpandstate2.png"); //$NON-NLS-1$
public ToggleShapeExpandStateAction(IWorkbenchPart editor) {
super(editor);
setId(ACTION_ID);
setText(DiagramViewerMessages.ToggleShapeExpandStateAction_toggle_expand_state);
setToolTipText(DiagramViewerMessages.ToggleShapeExpandStateAction_toggle_expand_state_tooltip);
setImageDescriptor(img);
}
protected DiagramViewer getDiagramViewer() {
return (DiagramViewer)getWorkbenchPart();
}
public void run() {
execute(getCommand());
if (getDiagramViewer() != null) {
getDiagramViewer().updateSelectionActions();
}
}
public Command getCommand() {
CompoundCommand cc = new CompoundCommand();
if (getSelectedObjects().isEmpty()) {
return cc;
}
List<ExpandableShape> selectedShape = new ArrayList<ExpandableShape>();
Iterator<?> it = getSelectedObjects().iterator();
while (it.hasNext()) {
Object firstElement = it.next();
Object obj = null;
if (firstElement instanceof OrmEditPart) {
obj = ((OrmEditPart)firstElement).getModel();
} else if (firstElement instanceof AbstractTreeEditPart) {
obj = ((AbstractTreeEditPart)firstElement).getModel();
}
if (null != obj && obj instanceof ExpandableShape) {
selectedShape.add((ExpandableShape)obj);
}
}
ExpandableShape primalElement = null;
if (getSelection() instanceof IStructuredSelection) {
Object firstElement = ((IStructuredSelection)getSelection()).getFirstElement();
Object obj = null;
if (firstElement instanceof OrmEditPart) {
obj = ((OrmEditPart)firstElement).getModel();
} else if (firstElement instanceof AbstractTreeEditPart) {
obj = ((AbstractTreeEditPart)firstElement).getModel();
}
if (null != obj && obj instanceof ExpandableShape) {
primalElement = (ExpandableShape)obj;
}
}
if (selectedShape.size() > 0) {
cc.add(new ToggleShapeExpandStateCommand(selectedShape, primalElement));
}
return cc;
}
@Override
protected boolean calculateEnabled() {
return canPerformAction();
}
private boolean canPerformAction() {
boolean res = false;
if (getSelectedObjects().isEmpty()) {
return res;
}
Iterator<?> it = getSelectedObjects().iterator();
while (it.hasNext() && !res) {
Object firstElement = it.next();
Object obj = null;
if (firstElement instanceof OrmEditPart) {
obj = ((OrmEditPart)firstElement).getModel();
} else if (firstElement instanceof AbstractTreeEditPart) {
obj = ((AbstractTreeEditPart)firstElement).getModel();
}
if (null != obj && obj instanceof ExpandableShape) {
res = true;
}
}
return res;
}
}