blob: 3ff0f8ca6fe74a61d5f41c8099a46c07df6b7759 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM - Initial implementation
******************************************************************************/
package org.eclipse.team.internal.ui.target;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.swing.text.html.parser.TagElement;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.ColumnLayoutData;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.team.core.TeamException;
import org.eclipse.team.core.target.IRemoteTargetResource;
import org.eclipse.team.core.target.ISiteListener;
import org.eclipse.team.core.target.Site;
import org.eclipse.team.core.target.TargetManager;
import org.eclipse.team.internal.ui.Policy;
import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.team.ui.ISharedImages;
import org.eclipse.team.ui.TeamImages;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.ui.part.ViewPart;
public class SiteExplorerView extends ViewPart implements ISiteListener {
public static final String VIEW_ID = "org.eclipse.team.ui.target.SiteExplorerView"; //$NON-NLS-1$
// The tree viewer
private TableViewer tableViewer;
private TreeViewer treeViewer;
// The root
private SiteRootsElement root;
// The view's actions
private Action addSiteAction;
/**
* @see IWorkbenchPart#createPartControl(Composite)
*/
public void createPartControl(Composite p) {
SashForm sash = new SashForm(p, SWT.HORIZONTAL);
sash.setLayoutData(new GridData(GridData.FILL_BOTH));
root = new SiteRootsElement(TargetManager.getSites(), RemoteResourceElement.SHOW_FOLDERS);
treeViewer = new TreeViewer(sash, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
treeViewer.setContentProvider(new SiteLazyContentProvider());
treeViewer.setLabelProvider(new WorkbenchLabelProvider());
treeViewer.setSorter(new SiteViewSorter());
treeViewer.getControl().addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent event) {
if (event.keyCode == SWT.F5) {
refresh();
}
}
});
treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
updateFileTable();
}
});
treeViewer.setInput(root);
Table table = new Table(sash, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
TableLayout tlayout = new TableLayout();
TableColumn tableColumn = new TableColumn(table, SWT.NULL);
tableColumn.setText(Policy.bind("SiteExplorerView.Name_1")); //$NON-NLS-1$
tableColumn = new TableColumn(table, SWT.NULL);
tableColumn.setText(Policy.bind("SiteExplorerView.Size_2")); //$NON-NLS-1$
tableColumn.setAlignment(SWT.RIGHT);
tableColumn = new TableColumn(table, SWT.NULL);
tableColumn.setText(Policy.bind("SiteExplorerView.Modified_3")); //$NON-NLS-1$
tableColumn = new TableColumn(table, SWT.NULL);
tableColumn.setText(Policy.bind("SiteExplorerView.URL_4")); //$NON-NLS-1$
ColumnLayoutData cLayout = new ColumnPixelData(21);
tlayout.addColumnData(cLayout);
cLayout = new ColumnPixelData(20);
tlayout.addColumnData(cLayout);
cLayout = new ColumnWeightData(100, true);
tlayout.addColumnData(cLayout);
cLayout = new ColumnPixelData(100);
tlayout.addColumnData(cLayout);
table.setLayout(tlayout);
table.setHeaderVisible(true);
tableViewer = new TableViewer(table);
tableViewer.setContentProvider(new SiteLazyContentProvider());
tableViewer.setLabelProvider(new SiteExplorerViewLabelProvider());
TargetManager.addSiteListener(this);
initalizeToolbarActions();
}
private IRemoteTargetResource getSelectedRemoteFolder() {
IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection();
if (!selection.isEmpty()) {
final List filesSelection = new ArrayList();
Iterator it = selection.iterator();
while(it.hasNext()) {
Object o = it.next();
if(o instanceof RemoteResourceElement) {
return ((RemoteResourceElement)o).getRemoteResource();
} else if(o instanceof SiteElement) {
try {
return ((SiteElement)o).getSite().getRemoteResource();
} catch (TeamException e) {
return null;
}
}
}
}
return null;
}
/**
* Method updateFileTable.
*/
private void updateFileTable() {
final IRemoteTargetResource remoteFolder = getSelectedRemoteFolder();
final Set tags = new HashSet();
if(remoteFolder != null) {
tableViewer.setInput(new RemoteResourceElement(remoteFolder, RemoteResourceElement.SHOW_FILES));
}
}
private void initalizeToolbarActions() {
final Shell shell = tableViewer.getTable().getShell();
// Create actions
// Refresh (toolbar)
addSiteAction = new Action(Policy.bind("SiteExplorerViewaddSiteAction"), TeamImages.getImageDescriptor(ISharedImages.IMG_SITE_ELEMENT)) { //$NON-NLS-1$
public void run() {
ConfigureTargetWizard wizard = new ConfigureTargetWizard();
wizard.init(null, null);
WizardDialog dialog = new WizardDialog(shell, wizard);
dialog.open();
}
};
addSiteAction.setToolTipText(Policy.bind("SiteExplorerViewaddSiteActionTooltip")); //$NON-NLS-1$
IActionBars bars = getViewSite().getActionBars();
IToolBarManager tbm = bars.getToolBarManager();
tbm.add(addSiteAction);
tbm.update(false);
}
/**
* @see IWorkbenchPart#setFocus()
*/
public void setFocus() {
}
/**
* @see ISiteListener#siteAdded(Site)
*/
public void siteAdded(Site site) {
refresh();
}
/**
* @see ISiteListener#siteRemoved(Site)
*/
public void siteRemoved(Site site) {
refresh();
}
protected void refresh() {
root = new SiteRootsElement(TargetManager.getSites(), RemoteResourceElement.SHOW_FOLDERS);
treeViewer.setInput(root);
treeViewer.refresh();
tableViewer.refresh();
}
}