/** * Copyright 2009 Red Hat, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.safehaus.penrose.studio.validation; import java.util.Collection; import java.util.ArrayList; import org.apache.log4j.Logger; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.*; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.part.*; import org.safehaus.penrose.studio.PenroseStudio; import org.safehaus.penrose.studio.directory.editor.EntryEditorInput; import org.safehaus.penrose.studio.directory.editor.EntryEditor; import org.safehaus.penrose.studio.connection.editor.*; import org.safehaus.penrose.studio.source.editor.*; import org.safehaus.penrose.studio.PenroseImage; import org.safehaus.penrose.studio.dialog.ErrorDialog; import org.safehaus.penrose.studio.plugin.PluginManager; import org.safehaus.penrose.studio.plugin.Plugin; import org.safehaus.penrose.studio.util.Helper; import org.safehaus.penrose.validation.ValidationResult; public class ValidationView extends ViewPart { private Logger log = Logger.getLogger(getClass()); Composite parent; Table table; Collection<ValidationResult> results = new ArrayList<ValidationResult>(); public void createPartControl(Composite parent) { this.parent = parent; parent.setLayout(new FillLayout()); table = new Table(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); Helper.hookContextMenu(table, new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { Action refreshAction = new Action("Refresh") { public void run() { try { } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); } } }; refreshAction.setImageDescriptor(PenroseStudio.getImageDescriptor(PenroseImage.REFRESH)); manager.add(refreshAction); manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } }); table.addMouseListener(new MouseAdapter() { public void mouseDoubleClick(MouseEvent e) { try { handleDoubleClick(); } catch (Exception ex) { log.debug(ex.getMessage(), ex); } } }); TableColumn tc = new TableColumn(table, SWT.NONE); tc.setText("Type"); tc.setWidth(100); tc = new TableColumn(table, SWT.NONE); tc.setText("Message"); tc.setWidth(400); tc = new TableColumn(table, SWT.NONE); tc.setText("Object"); tc.setWidth(200); table.setHeaderVisible(true); table.setLinesVisible(true); refresh(); } public void setFocus() { parent.setFocus(); } public void refresh() { table.removeAll(); for (ValidationResult result : results) { TableItem item = new TableItem(table, SWT.NONE); item.setText(0, result.getType()); item.setText(1, result.getMessage()); item.setText(2, result.getPartitionName()+"."+result.getObjectName()); if (ValidationResult.ERROR.equals(result.getType())) { item.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_RED)); } else { item.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_BLACK)); } item.setData(result); } } void handleDoubleClick() throws Exception { if (table.getSelectionCount() == 0) return; TableItem item = table.getSelection()[0]; ValidationResult result = (ValidationResult)item.getData(); String partitionName = result.getPartitionName(); PenroseStudio penroseStudio = PenroseStudio.getInstance(); PluginManager pluginManager = penroseStudio.getPluginManager(); if (result.getObjectType() == ValidationResult.CONNECTION) { String connectionName = result.getObjectName(); String adapterName = null; IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); IWorkbenchPage page = window.getActivePage(); Plugin plugin = pluginManager.getPlugin(adapterName); ConnectionEditorInput ei = plugin.createConnectionEditorInput(); ei.setPartitionName(partitionName); ei.setConnectionName(connectionName); String connectionEditorClass = plugin.getConnectionEditorClass(); page.openEditor(ei, connectionEditorClass); } else if (result.getObjectType() == ValidationResult.SOURCE) { String sourceName = result.getObjectName(); String adapterName = null; IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); IWorkbenchPage page = window.getActivePage(); Plugin plugin = pluginManager.getPlugin(adapterName); SourceEditorInput ei = plugin.createSourceEditorInput(); ei.setPartitionName(partitionName); ei.setSourceName(sourceName); String sourceEditorClass = plugin.getSourceEditorClass(); page.openEditor(ei, sourceEditorClass); } else if (result.getObjectType() == ValidationResult.ENTRY) { String entryName = result.getObjectName(); EntryEditorInput ei = new EntryEditorInput(); ei.setPartitionName(partitionName); ei.setEntryName(entryName); IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); IWorkbenchPage page = window.getActivePage(); page.openEditor(ei, EntryEditor.class.getName()); } } public Collection getResults() { return results; } public void setResults(Collection<ValidationResult> results) { this.results.clear(); this.results.addAll(results); } }