/******************************************************************************* * 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.net.URI; import java.net.URISyntaxException; 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.PerfPlugin; import org.eclipse.linuxtools.internal.perf.ui.PerfProfileView; import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; /** * Handler for saving a perf profile session. */ public class PerfSaveSessionHandler extends AbstractSaveDataHandler { public static final String DATA_EXT = "data"; //$NON-NLS-1$ @Override public IPath saveData(String filename) { // get paths IPath newDataLoc = getNewDataLocation(filename, DATA_EXT); IPath defaultDataLoc = PerfPlugin.getDefault().getPerfProfileData(); URI newDataLocURI = null; URI defaultDataLocURI = null; // get files IRemoteFileProxy proxy = null; try { newDataLocURI = new URI(newDataLoc.toPortableString()); defaultDataLocURI = new URI(defaultDataLoc.toPortableString()); proxy = RemoteProxyManager.getInstance().getFileProxy(newDataLocURI); } catch (URISyntaxException e) { openErroDialog(Messages.MsgProxyError, Messages.MsgProxyError, newDataLoc.lastSegment()); } catch (CoreException e) { openErroDialog(Messages.MsgProxyError, Messages.MsgProxyError, newDataLoc.lastSegment()); } IFileStore newDataFileStore = proxy.getResource(newDataLocURI.getPath()); IFileStore defaultDataFileStore = proxy.getResource(defaultDataLocURI.getPath()); if (canSave(newDataLoc)) { // copy default data into new location try { defaultDataFileStore.copy(newDataFileStore, EFS.OVERWRITE, null); PerfPlugin.getDefault().setPerfProfileData(newDataLoc); try { PerfProfileView view = (PerfProfileView) PlatformUI .getWorkbench().getActiveWorkbenchWindow() .getActivePage().showView(PerfPlugin.VIEW_ID); view.setContentDescription(newDataLoc.toOSString()); } catch (PartInitException e) { // fail silently } IFileInfo info = newDataFileStore.fetchInfo(); info.setAttribute(EFS.ATTRIBUTE_READ_ONLY, true); newDataFileStore.putInfo(info, EFS.SET_ATTRIBUTES, null); return newDataLoc; } catch (CoreException e) { openErroDialog(Messages.PerfSaveSession_failure_title, Messages.PerfSaveSession_failure_msg, newDataLoc.lastSegment()); } } return null; } @Override public boolean verifyData() { IPath defaultDataLoc = PerfPlugin.getDefault().getPerfProfileData(); return defaultDataLoc != null && !defaultDataLoc.isEmpty(); } }