/******************************************************************************* * Copyright (c) 2013 Red Hat, Inc. * 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: * Camilo Bernal <cabernal@redhat.com> - Initial Implementation. *******************************************************************************/ package org.eclipse.linuxtools.internal.perf.handlers; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.IFileInfo; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.linuxtools.internal.perf.IPerfData; import org.eclipse.linuxtools.internal.perf.PerfPlugin; import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; /** * Handler for saving a perf statistics session. */ public class PerfSaveStatsHandler extends AbstractSaveDataHandler { public static String DATA_EXT = "stat"; //$NON-NLS-1$ @Override public IPath saveData(String filename) { IPath newDataLoc = getNewDataLocation(filename, DATA_EXT); IPerfData statData = PerfPlugin.getDefault().getStatData(); BufferedWriter writer = null; OutputStreamWriter osw = null; try { IRemoteFileProxy proxy = null; proxy = RemoteProxyManager.getInstance().getFileProxy(getWorkingDirURI()); if(proxy == null) { openErroDialog(Messages.PerfSaveStat_error_title, Messages.PerfSaveStat_error_msg, newDataLoc.lastSegment()); return null; } IFileStore newDataFileStore = proxy.getResource(newDataLoc.toOSString()); osw = new OutputStreamWriter(newDataFileStore.openOutputStream(EFS.NONE, null)); writer = new BufferedWriter(osw); writer.write(statData.getPerfData()); closeResource(writer); IFileInfo info = newDataFileStore.fetchInfo(); info.setAttribute(EFS.ATTRIBUTE_READ_ONLY, true); newDataFileStore.putInfo(info, EFS.SET_ATTRIBUTES, null); return newDataLoc; } catch (IOException|CoreException e) { openErroDialog(Messages.PerfSaveStat_error_title, Messages.PerfSaveStat_error_msg, newDataLoc.lastSegment()); } finally { closeResource(writer); } return null; } @Override public boolean verifyData() { IPerfData statData = PerfPlugin.getDefault().getStatData(); return statData != null && statData.getPerfData() != null; } }