/******************************************************************************* * Copyright (c) 2004, 2009 Tasktop Technologies and others. * All rights reserved. This program and the accompanying materials * are 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 * * Contributors: * Tasktop Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.internal.monitor.reports.ui.actions; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.internal.monitor.core.collection.CommandUsageCollector; import org.eclipse.mylyn.internal.monitor.core.collection.DelegatingUsageCollector; import org.eclipse.mylyn.internal.monitor.core.collection.IUsageCollector; import org.eclipse.mylyn.internal.monitor.core.collection.SummaryCollector; import org.eclipse.mylyn.internal.monitor.core.collection.ViewUsageCollector; import org.eclipse.mylyn.internal.monitor.reports.MonitorReportsPlugin; import org.eclipse.mylyn.internal.monitor.usage.ReportGenerator; import org.eclipse.mylyn.internal.monitor.usage.StudyParameters; import org.eclipse.mylyn.internal.monitor.usage.UiUsageMonitorPlugin; import org.eclipse.mylyn.internal.monitor.usage.collectors.PerspectiveUsageCollector; import org.eclipse.mylyn.internal.monitor.usage.editors.UsageStatsEditorInput; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IViewActionDelegate; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.internal.ViewPluginAction; /** * @author Mik Kersten */ public class EclipseUsageSummaryAction implements IViewActionDelegate { ReportGenerator generator = null; public void init(IViewPart view) { // ignore } public void run(IAction action) { if (action instanceof ViewPluginAction) { final StudyParameters studyParameters = UiUsageMonitorPlugin.getDefault().getStudyParameters(); ViewPluginAction objectAction = (ViewPluginAction) action; final List<File> files = getStatsFilesFromSelection(objectAction); PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { public void run() { List<IUsageCollector> delegates = new ArrayList<IUsageCollector>(); delegates.add(new ViewUsageCollector()); delegates.add(new PerspectiveUsageCollector()); delegates.add(new CommandUsageCollector()); // delegates.add(new CsvOutputCollector()); delegates.add(new SummaryCollector()); DelegatingUsageCollector collector = new DelegatingUsageCollector(); collector.setReportTitle("Usage Summary"); collector.setDelegates(delegates); generator = new ReportGenerator(UiUsageMonitorPlugin.getDefault().getInteractionLogger(), collector, new JobChangeAdapter() { @Override public void done(IJobChangeEvent event) { try { IWorkbenchPage page = MonitorReportsPlugin.getDefault() .getWorkbench() .getActiveWorkbenchWindow() .getActivePage(); if (page == null) { return; } IEditorInput input = new UsageStatsEditorInput(files, generator, studyParameters); page.openEditor(input, MonitorReportsPlugin.REPORT_SUMMARY_ID); } catch (PartInitException e) { StatusHandler.log(new Status(IStatus.ERROR, MonitorReportsPlugin.ID_PLUGIN, "Could not open summary editor", e)); } } }); } }); } } /** * TODO: move */ public static List<File> getStatsFilesFromSelection(ViewPluginAction objectAction) { final List<File> files = new ArrayList<File>(); if (objectAction.getSelection() instanceof StructuredSelection) { StructuredSelection structuredSelection = (StructuredSelection) objectAction.getSelection(); for (Object object : structuredSelection.toList()) { if (object instanceof IFile) { IFile file = (IFile) object; if (file.getFileExtension().equals("zip")) { files.add(new File(file.getLocation().toString())); } } } } Collections.sort(files); // ensure that they are sorted by date if (files.isEmpty()) { files.add(UiUsageMonitorPlugin.getDefault().getMonitorLogFile()); } return files; } public void selectionChanged(IAction action, ISelection selection) { // TODO Auto-generated method stub } }