/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.tools.visualvm.profiling.snapshot;
import com.sun.tools.visualvm.core.datasource.DataSource;
import java.awt.Dimension;
import java.awt.Image;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import org.netbeans.lib.profiler.global.CommonConstants;
import org.netbeans.modules.profiler.LoadedSnapshot;
import org.netbeans.modules.profiler.ResultsManager;
import org.netbeans.modules.profiler.SnapshotResultsWindow;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.util.Exceptions;
import org.openide.util.ImageUtilities;
import org.openide.windows.TopComponent;
/**
*
* @author Jiri Sedlacek
* @author Tomas Hurka
*/
final class ProfilerSnapshotNPS extends ProfilerSnapshot {
private static final Logger LOGGER = Logger.getLogger(ProfilerSnapshotNPS.class.getName());
private LoadedSnapshot loadedSnapshot;
private TopComponent srw;
ProfilerSnapshotNPS() {
super();
}
ProfilerSnapshotNPS(File snapshot, DataSource master) {
super(snapshot, master);
FileObject fobj = FileUtil.toFileObject(FileUtil.normalizeFile(snapshot));
loadedSnapshot = ResultsManager.getDefault().loadSnapshot(fobj);
}
@Override
public LoadedSnapshot getLoadedSnapshot() {
return loadedSnapshot;
}
@Override
protected void remove() {
super.remove();
ResultsManager.getDefault().closeSnapshot(loadedSnapshot);
}
@Override
protected Image resolveIcon() {
try {
int snapshotType = getLoadedSnapshot().getType();
if (snapshotType == LoadedSnapshot.SNAPSHOT_TYPE_CPU) {
return ImageUtilities.mergeImages(CPU_ICON, NODE_BADGE, 0, 0);
} else if (snapshotType == LoadedSnapshot.SNAPSHOT_TYPE_MEMORY_LIVENESS
|| snapshotType == LoadedSnapshot.SNAPSHOT_TYPE_MEMORY_ALLOCATIONS
|| snapshotType == LoadedSnapshot.SNAPSHOT_TYPE_MEMORY_SAMPLED) {
return ImageUtilities.mergeImages(MEMORY_ICON, NODE_BADGE, 0, 0);
} else {
return null;
}
} catch (Exception e) {
LOGGER.log(Level.FINE, "Failed to determine profiler snapshot type", e); // NOI18N
return null;
}
}
@Override
JComponent getUIComponent() {
if (srw == null) {
srw = SnapshotResultsWindow.get(loadedSnapshot, CommonConstants.SORTING_COLUMN_DEFAULT, false);
try {
JComponent cpuResPanel = (JComponent) srw.getComponent(0);
cpuResPanel.setOpaque(false);
JTabbedPane tabbedPane = (JTabbedPane) cpuResPanel.getComponent(0);
JComponent infoPanel = (JComponent) tabbedPane.getComponentAt(tabbedPane.getTabCount() - 1);
infoPanel.setBorder(BorderFactory.createEmptyBorder());
} catch (Exception e) {
Exceptions.printStackTrace(e);
}
srw.setPreferredSize(new Dimension(1, 1));
}
return srw;
}
@Override
void closeComponent() {
if (srw != null) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
Method method = srw.getClass().getDeclaredMethod("componentClosed"); // NOI18N
if (method != null) {
method.setAccessible(true);
method.invoke(srw);
}
} catch (NoSuchMethodException noSuchMethodException) {
LOGGER.throwing(ProfilerSnapshotView.class.getName(),
"removed", noSuchMethodException); // NOI18N
} catch (SecurityException securityException) {
LOGGER.throwing(ProfilerSnapshotView.class.getName(),
"removed", securityException); // NOI18N
} catch (IllegalAccessException illegalAccessException) {
LOGGER.throwing(ProfilerSnapshotView.class.getName(),
"removed", illegalAccessException); // NOI18N
} catch (IllegalArgumentException illegalArgumentException) {
LOGGER.throwing(ProfilerSnapshotView.class.getName(),
"removed", illegalArgumentException); // NOI18N
} catch (InvocationTargetException invocationTargetException) {
LOGGER.throwing(ProfilerSnapshotView.class.getName(),
"removed", invocationTargetException); // NOI18N
}
srw = null;
}
});
}
}
}