Java tutorial
/******************************************************************************* * Copyright (c) 2014 SAP AG or an SAP affiliate company. All rights reserved. * Licensed 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 com.sap.dirigible.ide.generic.ui; import java.io.IOException; import java.net.URI; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.ui.IActionBars; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; import com.sap.dirigible.ide.common.CommonUtils; import com.sap.dirigible.ide.common.UriValidator; import com.sap.dirigible.ide.repository.RepositoryFacade; import com.sap.dirigible.repository.logging.Logger; public class GenericListView extends ViewPart { private static final String REMOVE_LOCATION_FROM_THE_GENERIC_VIEWS_LIST = "Remove Location from the Generic Views list"; private static final String OPEN_LOCATION_FROM_THE_GENERIC_VIEWS_LIST = "Open Location from the Generic Views list"; private static final String ARE_YOU_SURE_YOU_WANT_TO_REMOVE_THIS_LOCATION = "Are you sure you want to remove this location?"; private static final String REMOVE_LOCATION = "Remove Location"; private static final String OPEN_LOCATION = "Open Location"; private static final String ADD_LOCATION_TO_THE_GENERIC_VIEWS_LIST = "Add Location to the Generic Views list"; public static final String GENERIC_VIEW_ERROR = "Generic View Error"; private static final String URL = "URL"; private static final String ADD_LOCATION = "Add Location"; private static final String LOCATION = "Location"; private static final String NAME = "Name"; private static final Logger logger = Logger.getLogger(GenericListView.class); /** * The ID of the view as specified by the extension. */ public static final String ID = "com.sap.dirigible.ide.generic.ui.GenericListView"; //$NON-NLS-1$ private TreeViewer viewer; private Action actionAddLocation; private Action actionRemoveLocation; private Action actionOpenLocation; private GenericListManager genericListManager = GenericListManager .getInstance(RepositoryFacade.getInstance().getRepository()); public TreeViewer getViewer() { return viewer; } public GenericListManager getGenericListManager() { return genericListManager; } class NameSorter extends ViewerSorter { private static final long serialVersionUID = -8832089975378999206L; @Override public int compare(Viewer viewer, Object e1, Object e2) { if (e1 != null && e2 != null && e1 instanceof GenericLocationMetadata && e2 instanceof GenericLocationMetadata) { return super.compare(viewer, ((GenericLocationMetadata) e1).getLocation(), ((GenericLocationMetadata) e2).getLocation()); } return super.compare(viewer, e1, e2); } } /** * The constructor. */ public GenericListView() { } /** * This is a callback that will allow us to create the viewer and initialize * it. */ public void createPartControl(Composite parent) { // PatternFilter filter = new PatternFilter(); // FilteredTree tree = new FilteredTree(parent, SWT.MULTI | SWT.H_SCROLL // | SWT.V_SCROLL, filter, true); viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); viewer.getTree().setHeaderVisible(true); TreeColumn column = new TreeColumn(viewer.getTree(), SWT.LEFT); column.setText(NAME); column.setWidth(150); column = new TreeColumn(viewer.getTree(), SWT.LEFT); column.setText(LOCATION); column.setWidth(500); viewer.setContentProvider(new GenericListViewContentProvider(this)); viewer.setLabelProvider(new GenericListViewLabelProvider()); viewer.setSorter(new NameSorter()); viewer.setInput(getViewSite()); makeActions(); hookContextMenu(); contributeToActionBars(); } private void hookContextMenu() { MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$ menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { private static final long serialVersionUID = -8683354310299838422L; public void menuAboutToShow(IMenuManager manager) { GenericListView.this.fillContextMenu(manager); } }); Menu menu = menuMgr.createContextMenu(viewer.getControl()); viewer.getControl().setMenu(menu); getSite().registerContextMenu(menuMgr, viewer); } private void contributeToActionBars() { IActionBars bars = getViewSite().getActionBars(); fillLocalPullDown(bars.getMenuManager()); fillLocalToolBar(bars.getToolBarManager()); hookDoubleClickAction(); } private void hookDoubleClickAction() { viewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { actionOpenLocation.run(); } }); } private void fillLocalPullDown(IMenuManager manager) { manager.add(actionAddLocation); manager.add(actionRemoveLocation); manager.add(actionOpenLocation); } private void fillContextMenu(IMenuManager manager) { manager.add(actionAddLocation); manager.add(actionRemoveLocation); manager.add(actionOpenLocation); // Other plug-ins can contribute there actions here manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } private void fillLocalToolBar(IToolBarManager manager) { manager.add(actionAddLocation); manager.add(actionRemoveLocation); manager.add(actionOpenLocation); } private void makeActions() { actionAddLocation = new Action() { private static final long serialVersionUID = -6534944336694980431L; public void run() { InputDialog dlg = new InputDialog(viewer.getControl().getShell(), ADD_LOCATION, URL, "http://", //$NON-NLS-1$ new UriValidator()); if (dlg.open() == Window.OK) { try { // TODO - parse for name URI uri = new URI(dlg.getValue()); genericListManager.addLocation(getNameForLocation(uri), dlg.getValue()); viewer.refresh(); } catch (Exception e) { logger.error(GENERIC_VIEW_ERROR, e); MessageDialog.openError(viewer.getControl().getShell(), GENERIC_VIEW_ERROR, e.getMessage()); } } } private String getNameForLocation(URI uri) throws IOException { String name = CommonUtils.replaceNonAlphaNumericCharacters(uri.getHost()); String originalName = name; int i = 1; while (genericListManager.existsLocation(name)) { name = originalName + i++; } return name; } }; actionAddLocation.setText(ADD_LOCATION); actionAddLocation.setToolTipText(ADD_LOCATION_TO_THE_GENERIC_VIEWS_LIST); actionAddLocation.setImageDescriptor( PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJ_ADD)); actionRemoveLocation = new Action() { private static final long serialVersionUID = 1336014167502247774L; public void run() { if (!viewer.getSelection().isEmpty()) { StructuredSelection selection = (StructuredSelection) viewer.getSelection(); GenericLocationMetadata location = (GenericLocationMetadata) selection.getFirstElement(); if (MessageDialog.openConfirm(viewer.getControl().getShell(), REMOVE_LOCATION, ARE_YOU_SURE_YOU_WANT_TO_REMOVE_THIS_LOCATION + location.getLocation())) { try { genericListManager.removeLocation(location.getName()); viewer.refresh(); } catch (Exception e) { logger.error(GENERIC_VIEW_ERROR, e); MessageDialog.openError(viewer.getControl().getShell(), GENERIC_VIEW_ERROR, e.getMessage()); } } } } }; actionRemoveLocation.setText(REMOVE_LOCATION); actionRemoveLocation.setToolTipText(REMOVE_LOCATION_FROM_THE_GENERIC_VIEWS_LIST); actionRemoveLocation.setImageDescriptor( PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ELCL_REMOVE)); actionOpenLocation = new Action() { private static final long serialVersionUID = 1336014167502247774L; public void run() { if (!viewer.getSelection().isEmpty()) { StructuredSelection selection = (StructuredSelection) viewer.getSelection(); GenericLocationMetadata location = (GenericLocationMetadata) selection.getFirstElement(); IWorkbench wb = PlatformUI.getWorkbench(); IWorkbenchWindow win = wb.getActiveWorkbenchWindow(); IWorkbenchPage page = win.getActivePage(); String id = GenericPerspective.GENERIC_VIEW_ID; try { IViewPart view = page.showView(id, location.getName(), IWorkbenchPage.VIEW_VISIBLE); ((GenericView) view).setSiteUrl(location.getLocation()); ((GenericView) view).setViewTitle(location.getName()); } catch (PartInitException e) { logger.error(GENERIC_VIEW_ERROR, e); } } } }; actionOpenLocation.setText(OPEN_LOCATION); actionOpenLocation.setToolTipText(OPEN_LOCATION_FROM_THE_GENERIC_VIEWS_LIST); actionOpenLocation.setImageDescriptor( PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_DEF_VIEW)); } /** * Passing the focus request to the viewer's control. */ public void setFocus() { viewer.getControl().setFocus(); } }