[jboss-cvs] jbosside/core/plugins/org.jboss.ide.eclipse.packages.ui/src/main/org/jboss/ide/eclipse/archives/ui/views ...
Robert Stryker
rob.stryker at jboss.com
Wed Apr 18 12:52:16 EDT 2007
User: rawb
Date: 07/04/18 12:52:16
Added: core/plugins/org.jboss.ide.eclipse.packages.ui/src/main/org/jboss/ide/eclipse/archives/ui/views
PackagesMenuHandler.java ProjectArchivesView.java
Log:
refactored to archive rather than package, a la max
Revision Changes Path
1.1 date: 2007/04/18 16:52:16; author: rawb; state: Exp;jbosside/core/plugins/org.jboss.ide.eclipse.packages.ui/src/main/org/jboss/ide/eclipse/archives/ui/views/PackagesMenuHandler.java
Index: PackagesMenuHandler.java
===================================================================
package org.jboss.ide.eclipse.archives.ui.views;
import java.util.Arrays;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.PlatformUI;
import org.jboss.ide.eclipse.archives.core.model.IArchive;
import org.jboss.ide.eclipse.archives.core.model.IArchiveFileSet;
import org.jboss.ide.eclipse.archives.core.model.IArchiveFolder;
import org.jboss.ide.eclipse.archives.core.model.IArchiveNode;
import org.jboss.ide.eclipse.archives.core.model.internal.ArchivesModel;
import org.jboss.ide.eclipse.archives.ui.ExtensionManager;
import org.jboss.ide.eclipse.archives.ui.NodeContribution;
import org.jboss.ide.eclipse.archives.ui.PackageNodeFactory;
import org.jboss.ide.eclipse.archives.ui.PackagesSharedImages;
import org.jboss.ide.eclipse.archives.ui.PackagesUIMessages;
import org.jboss.ide.eclipse.archives.ui.actions.NewJARAction;
import org.jboss.ide.eclipse.archives.ui.actions.NewPackageAction;
import org.jboss.ide.eclipse.archives.ui.providers.PackagesContentProvider.WrappedProject;
import org.jboss.ide.eclipse.archives.ui.wizards.FilesetWizard;
import org.jboss.ide.eclipse.archives.ui.wizards.NewJARWizard;
/**
* Manages the actions associated with the view
* @author rstryker
*
*/
public class PackagesMenuHandler {
public static final String NEW_PACKAGE_MENU_ID = "org.jboss.ide.eclipse.archives.ui.newPackageMenu";
public static final String NODE_CONTEXT_MENU_ID = "org.jboss.ide.eclipse.archives.ui.nodeContextMenu";
public static final String NEW_PACKAGE_ADDITIONS = "newPackageAdditions";
private MenuManager newPackageManager, contextMenuManager;
private NodeContribution[] nodePopupMenuContributions;
private NewPackageAction[] newPackageActions;
private Menu treeContextMenu;
private TreeViewer packageTree;
private Action editAction, deleteAction, newFolderAction, newFilesetAction;
private NewJARAction newJARAction;
// private BuildPackagesAction buildAllAction, buildPackageAction;
public PackagesMenuHandler(TreeViewer viewer) {
this.packageTree = viewer;
// load from extensions
newPackageActions = ExtensionManager.findNewArchiveActions();
nodePopupMenuContributions = ExtensionManager.findNodePopupMenuContributions();
Arrays.sort(nodePopupMenuContributions);
createActions();
createMenu();
createContextMenu();
}
/**
* Creates the primary menu as well as adds the package actions to it
*
*/
private void createMenu () {
newPackageManager = new MenuManager(PackagesUIMessages.ProjectPackagesView_newPackageMenu_label, NEW_PACKAGE_MENU_ID);
addNewPackageActions(newPackageManager);
}
private void createContextMenu () {
contextMenuManager = new MenuManager(NODE_CONTEXT_MENU_ID); //$NON-NLS-1$
contextMenuManager.setRemoveAllWhenShown(true);
contextMenuManager.addMenuListener(new IMenuListener () {
public void menuAboutToShow(IMenuManager manager) {
IStructuredSelection selection = (IStructuredSelection) packageTree.getSelection();
if (selection != null && !selection.isEmpty()) {
Object element = selection.getFirstElement();
if (element instanceof WrappedProject) {
newJARAction.setEnabled(true);
manager.add(newPackageManager);
} else if( element instanceof IArchiveNode ){
IArchiveNode node = (IArchiveNode)element;
if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE
|| node.getNodeType() == IArchiveNode.TYPE_ARCHIVE_FOLDER)
{
newJARAction.setEnabled(true);
manager.add(newPackageManager);
manager.add(newFolderAction);
manager.add(newFilesetAction);
manager.add(new Separator());
}
if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE) {
editAction.setText(PackagesUIMessages.ProjectPackagesView_editPackageAction_label); //$NON-NLS-1$
deleteAction.setText(PackagesUIMessages.ProjectPackagesView_deletePackageAction_label); //$NON-NLS-1$
editAction.setImageDescriptor(PackagesSharedImages.getImageDescriptor(PackagesSharedImages.IMG_PACKAGE_EDIT));
// manager.add(buildPackageAction);
} else if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE_FOLDER) {
editAction.setText(PackagesUIMessages.ProjectPackagesView_editFolderAction_label); //$NON-NLS-1$
deleteAction.setText(PackagesUIMessages.ProjectPackagesView_deleteFolderAction_label); //$NON-NLS-1$
editAction.setImageDescriptor(platformDescriptor(ISharedImages.IMG_OBJ_FOLDER));
} else if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE_FILESET) {
editAction.setText(PackagesUIMessages.ProjectPackagesView_editFilesetAction_label); //$NON-NLS-1$
deleteAction.setText(PackagesUIMessages.ProjectPackagesView_deleteFilesetAction_label); //$NON-NLS-1$
editAction.setImageDescriptor(PackagesSharedImages.getImageDescriptor(PackagesSharedImages.IMG_MULTIPLE_FILES));
}
manager.add(editAction);
manager.add(deleteAction);
addContextMenuContributions(node);
}
} else {
manager.add(newPackageManager);
}
}
});
treeContextMenu = contextMenuManager.createContextMenu(packageTree.getTree());
packageTree.getTree().setMenu(treeContextMenu);
getSite().registerContextMenu(NEW_PACKAGE_MENU_ID, newPackageManager, packageTree);
}
protected void createActions() {
newJARAction = new NewJARAction();
newJARAction.setEnabled(false);
newFolderAction = new Action(PackagesUIMessages.ProjectPackagesView_newFolderAction_label, platformDescriptor(ISharedImages.IMG_OBJ_FOLDER)) { //$NON-NLS-1$
public void run () {
createFolder();
}
};
newFilesetAction = new Action(PackagesUIMessages.ProjectPackagesView_newFilesetAction_label, PackagesSharedImages.getImageDescriptor(PackagesSharedImages.IMG_MULTIPLE_FILES)) { //$NON-NLS-1$
public void run () {
createFileset();
}
};
deleteAction = new Action (PackagesUIMessages.ProjectPackagesView_deletePackageAction_label, platformDescriptor(ISharedImages.IMG_TOOL_DELETE)) { //$NON-NLS-1$
public void run () {
deleteSelectedNode();
}
};
editAction = new Action (PackagesUIMessages.ProjectPackagesView_editPackageAction_label, PackagesSharedImages.getImageDescriptor(PackagesSharedImages.IMG_PACKAGE_EDIT)) { //$NON-NLS-1$
public void run () {
editSelectedNode();
}
};
// buildAllAction = new BuildPackagesAction();
// buildAllAction.init(getViewSite().getWorkbenchWindow());
//
// buildPackageAction = new BuildPackagesAction();
// buildPackageAction.init(getViewSite().getWorkbenchWindow());
}
private void addContextMenuContributions (final IArchiveNode context) {
for( int i = 0; i < nodePopupMenuContributions.length; i++ ) {
try {
final NodeContribution contribution = nodePopupMenuContributions[i];
if ( contribution.getActionDelegate().isEnabledFor(context)) {
Action action = new Action () {
public String getId() {
return contribution.getId();
}
public ImageDescriptor getImageDescriptor() {
return contribution.getIcon();
}
public String getText() {
return contribution.getLabel();
}
public void run() {
contribution.getActionDelegate().run(context);
}
};
contextMenuManager.add(action);
}
} catch( Exception e) { e.getMessage(); }
}
}
/**
* Adds the new package type actions (which come from an extension point)
* to the menu.
* @param manager
*/
private void addNewPackageActions (IMenuManager manager) {
for( int i = 0; i < newPackageActions.length; i++ ) {
final NewPackageAction action = newPackageActions[i];
Action actionWrapper = new Action () {
public String getId() {
return action.getId();
}
public ImageDescriptor getImageDescriptor() {
return action.getIconDescriptor();
}
public String getText() {
return action.getLabel();
}
public void run() {
action.getAction().run(this);
}
};
manager.add(actionWrapper);
}
}
/*
* Methods below are called from the standard actions,
* the implementations of the action, where the action does its work etc
*/
private void createFolder ()
{
IInputValidator validator = new IInputValidator () {
public String isValid(String newText) {
IArchiveNode selected = getSelectedNode();
boolean folderExists = false;
IArchiveNode[] folders = selected.getChildren(IArchiveNode.TYPE_ARCHIVE_FOLDER);
for (int i = 0; i < folders.length; i++) {
IArchiveFolder folder = (IArchiveFolder) folders[i];
if (folder.getName().equals(newText)) {
folderExists = true; break;
}
}
if (folderExists) {
return PackagesUIMessages.bind(
PackagesUIMessages.ProjectPackagesView_createFolderDialog_warnFolderExists, newText);
}
return null;
}
};
InputDialog dialog = new InputDialog(getSite().getShell(),
PackagesUIMessages.ProjectPackagesView_createFolderDialog_title,
PackagesUIMessages.ProjectPackagesView_createFolderDialog_message, "", validator);
int response = dialog.open();
if (response == Dialog.OK) {
String folderName = dialog.getValue();
IArchiveNode selected = getSelectedNode();
IArchiveFolder folder = PackageNodeFactory.createFolder();
folder.setName(folderName);
ArchivesModel.instance().attach(selected, folder, new NullProgressMonitor());
}
}
private void createFileset () {
try {
IArchiveNode selected = getSelectedNode();
WizardDialog dialog = new WizardDialog(getSite().getShell(), new FilesetWizard(null, selected));
dialog.open();
} catch( Exception e ) {
e.printStackTrace();
}
}
private void editSelectedNode () {
IArchiveNode node = getSelectedNode();
if (node != null) {
if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE_FILESET) {
IArchiveFileSet fileset = (IArchiveFileSet) node;
WizardDialog dialog = new WizardDialog(getSite().getShell(), new FilesetWizard(fileset, node.getParent()));
try {
dialog.open();
} catch( Exception e ) { e.printStackTrace(); }
} else if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE) {
IArchive pkg = (IArchive) node;
WizardDialog dialog = new WizardDialog(getSite().getShell(), new NewJARWizard(pkg));
dialog.open();
} else if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE_FOLDER) {
// folder can do the model save here.
IArchiveFolder folder = (IArchiveFolder) node;
InputDialog dialog = new InputDialog(getSite().getShell(),
PackagesUIMessages.ProjectPackagesView_createFolderDialog_title,
PackagesUIMessages.ProjectPackagesView_createFolderDialog_message, folder.getName(), null);
int response = dialog.open();
if (response == Dialog.OK) {
folder.setName(dialog.getValue());
ArchivesModel.instance().saveModel(folder.getProject(), new NullProgressMonitor());
}
}
}
}
private void deleteSelectedNode () {
IArchiveNode node = getSelectedNode();
if (node != null) {
IArchiveNode parent = (IArchiveNode) node.getParent();
parent.removeChild(node);
if( parent.getProject() != null ) {
ArchivesModel.instance().saveModel(parent.getProject(), new NullProgressMonitor());
}
}
}
/*
* Utility methods below
*/
private IWorkbenchPartSite getSite() {
return ProjectArchivesView.getInstance().getSite();
}
private IArchiveNode getSelectedNode () {
IStructuredSelection selection = (IStructuredSelection) ProjectArchivesView.getInstance().getSelection();
if (selection != null && !selection.isEmpty()) {
Object selected = selection.getFirstElement();
if( selected instanceof IArchiveNode ) return ((IArchiveNode)selected);
}
return null;
}
private ImageDescriptor platformDescriptor(String desc) {
return PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(desc);
}
}
1.1 date: 2007/04/18 16:52:16; author: rawb; state: Exp;jbosside/core/plugins/org.jboss.ide.eclipse.packages.ui/src/main/org/jboss/ide/eclipse/archives/ui/views/ProjectArchivesView.java
Index: ProjectArchivesView.java
===================================================================
package org.jboss.ide.eclipse.archives.ui.views;
import java.util.ArrayList;
import java.util.Arrays;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.wizard.ProgressMonitorPart;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.part.ViewPart;
import org.jboss.ide.eclipse.archives.core.model.IArchiveModelListener;
import org.jboss.ide.eclipse.archives.core.model.IArchiveNode;
import org.jboss.ide.eclipse.archives.core.model.IArchiveNodeDelta;
import org.jboss.ide.eclipse.archives.core.model.PackagesCore;
import org.jboss.ide.eclipse.archives.core.model.internal.ArchivesModel;
import org.jboss.ide.eclipse.archives.ui.ExtensionManager;
import org.jboss.ide.eclipse.archives.ui.actions.NewPackageAction;
import org.jboss.ide.eclipse.archives.ui.providers.PackagesContentProvider;
import org.jboss.ide.eclipse.archives.ui.providers.PackagesLabelProvider;
public class ProjectArchivesView extends ViewPart implements IArchiveModelListener {
protected static ProjectArchivesView instance;
public static ProjectArchivesView getInstance() {
return instance;
}
protected ISelectionListener selectionListener;
public ProjectArchivesView() {
instance = this;
selectionListener = createSelectionListener();
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().addSelectionListener(selectionListener);
PackagesCore.getInstance().addModelListener(this);
}
protected ISelectionListener createSelectionListener() {
return new ISelectionListener() {
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if (!(selection instanceof IStructuredSelection))
return;
Object element = ((IStructuredSelection)selection).getFirstElement();
IProject project = getProject(element);
viewSelectionChanged(project);
}
public IProject getProject (Object element) {
if( element instanceof IStructuredSelection)
element = ((IStructuredSelection)element).getFirstElement();
if (element instanceof IAdaptable) {
IAdaptable adaptable = (IAdaptable)element;
IResource resource = (IResource) adaptable.getAdapter(IResource.class);
if( resource != null )
return resource.getProject();
}
return null;
}
};
}
// parts
private PageBook book;
private IProject project;
private PackagesContentProvider contentProvider = new PackagesContentProvider();
private PackagesLabelProvider labelProvider = new PackagesLabelProvider();
private Composite emptyComposite, viewerComposite, loadingPackagesComposite;
private IProgressMonitor loadingProgress;
private TreeViewer packageViewer;
private PackagesMenuHandler menuHandler;
public void createPartControl(Composite parent) {
book = new PageBook(parent, SWT.NONE);
addEmptyComposite(book);
addLoadingComposite(book);
addViewerComposite(book);
menuHandler = new PackagesMenuHandler(packageViewer);
}
protected void addEmptyComposite(PageBook book) {
emptyComposite = new Composite(book, SWT.NONE);
emptyComposite.setLayout(new FormLayout());
Label l = new Label(emptyComposite, SWT.NONE);
l.setText("Project has no packages. Create an Archive");
Composite actionsComposite = new Composite(emptyComposite, SWT.NONE);
FormData lData = new FormData();
lData.left = new FormAttachment(0,5);
lData.top = new FormAttachment(0,5);
l.setLayoutData(lData);
FormData actionsData = new FormData();
actionsData.left = new FormAttachment(0,5);
actionsData.top = new FormAttachment(l,5);
actionsData.bottom = new FormAttachment(100,-5);
actionsComposite.setLayoutData(actionsData);
actionsComposite.setLayout(new GridLayout(1, false));
addNewPackageActions(actionsComposite);
}
private void addNewPackageActions (Composite composite) {
NewPackageAction[] actions = ExtensionManager.findNewArchiveActions();
for (int i = 0; i < actions.length; i++) {
final NewPackageAction action = actions[i];
Composite linkComposite = new Composite(composite, SWT.NONE);
linkComposite.setLayout(createGridLayoutWithNoMargins(2));
linkComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
new Label(linkComposite, SWT.NONE).setImage(action.getIcon());
Link actionLink = new Link(linkComposite, SWT.NONE);
actionLink.setText("<a href=\"create\">" + action.getLabel() + "</a>");
actionLink.addSelectionListener(new SelectionListener () {
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
public void widgetSelected(SelectionEvent e) {
action.getAction().run(null);
}
});
}
}
private GridLayout createGridLayoutWithNoMargins (int columns) {
GridLayout layout = new GridLayout(columns, false);
layout.marginBottom = layout.marginHeight = layout.marginLeft = 0;
layout.marginRight = layout.marginTop = layout.marginWidth = 0;
return layout;
}
protected void addLoadingComposite(PageBook book) {
loadingPackagesComposite = new Composite(book, SWT.NONE);
loadingPackagesComposite.setLayout(new RowLayout(SWT.HORIZONTAL));
loadingProgress = new ProgressMonitorPart(loadingPackagesComposite, null);
}
protected void addViewerComposite(PageBook book) {
viewerComposite = new Composite(book, SWT.NONE);
viewerComposite.setLayout(new FillLayout());
packageViewer = new TreeViewer(viewerComposite, SWT.NONE);
packageViewer.setContentProvider(contentProvider);
packageViewer.setLabelProvider(labelProvider);
}
public void setFocus() {
}
public void viewSelectionChanged(IProject project) {
if( project == null ) {
this.project = null;
packageViewer.setInput(null);
return;
}
if( project.equals(packageViewer.getInput()))
return;
if( PackagesCore.packageFileExists(project) ) {
if( PackagesCore.projectRegistered(project))
book.showPage(viewerComposite);
else {
this.project = project;
book.showPage(loadingPackagesComposite);
registerProject(project);
return;
}
} else {
book.showPage(emptyComposite);
}
this.project = project;
packageViewer.setInput(ArchivesModel.instance().getRoot(project));
}
public IProject getCurrentProject() {
return project;
}
protected void registerProject(final IProject project) {
getSite().getShell().getDisplay().asyncExec(new Runnable () {
public void run () {
ArchivesModel.instance().registerProject(project, loadingProgress);
book.showPage(viewerComposite);
packageViewer.setInput(ArchivesModel.instance().getRoot(project));
}
});
}
public IStructuredSelection getSelection() {
return (IStructuredSelection)packageViewer.getSelection();
}
public void modelChanged(IArchiveNodeDelta delta) {
final IArchiveNode[] topChanges;
if( delta.getKind() == IArchiveNodeDelta.DESCENDENT_CHANGED)
topChanges = getChanges(delta);
else if( delta.getKind() == IArchiveNodeDelta.NO_CHANGE)
topChanges = new IArchiveNode[]{};
else
topChanges = new IArchiveNode[]{delta.getPostNode()};
// now go through and refresh them
getSite().getShell().getDisplay().asyncExec(new Runnable () {
public void run () {
for( int i = 0; i < topChanges.length; i++ ) {
packageViewer.refresh(topChanges[i]);
}
}
});
}
protected IArchiveNode[] getChanges(IArchiveNodeDelta delta) {
IArchiveNodeDelta[] children = delta.getAffectedChildren();
ArrayList list = new ArrayList();
for( int i = 0; i < children.length; i++ ) {
if( children[i].getKind() == IArchiveNodeDelta.DESCENDENT_CHANGED)
list.addAll(Arrays.asList(getChanges(children[i])));
else
list.add(children[i].getPostNode());
}
return (IArchiveNode[]) list.toArray(new IArchiveNode[list.size()]);
}
}
More information about the jboss-cvs-commits
mailing list