/*
* 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.modules.tracer.dynamic.impl;
import com.sun.tools.visualvm.application.Application;
import com.sun.tools.visualvm.core.datasupport.Positionable;
import com.sun.tools.visualvm.modules.tracer.SessionInitializationException;
import com.sun.tools.visualvm.modules.tracer.TracerPackage;
import com.sun.tools.visualvm.modules.tracer.TracerProbe;
import com.sun.tools.visualvm.modules.tracer.TracerProbeDescriptor;
import com.sun.tools.visualvm.modules.tracer.TracerProgressObject;
import com.sun.tools.visualvm.modules.tracer.dynamic.spi.DeployerImpl;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.logging.Logger;
import javax.swing.Icon;
/**
*
* @author Jaroslav Bachorik
*/
public class DynamicPackage extends TracerPackage.SessionAware<Application> {
private static final Logger LOGGER = Logger.getLogger(DynamicPackage.class.getName());
private TracerProgressObject progress;
final private Map<TracerProbeDescriptor, DynamicProbe> probeMap = new TreeMap<TracerProbeDescriptor, DynamicProbe>(Positionable.STRONG_COMPARATOR);
final private Set<DeployerImpl> deployers = new HashSet<DeployerImpl>();
public DynamicPackage(String name, String desc, Icon icon, int position) {
super(name, desc, icon, position);
}
public void addProbe(DynamicProbe probe) {
probeMap.put(probe.getProbeDescriptor(), probe);
}
@Override
public TracerProbeDescriptor[] getProbeDescriptors() {
return probeMap.keySet().toArray(new TracerProbeDescriptor[probeMap.keySet().size()]);
}
@Override
public TracerProbe<Application> getProbe(TracerProbeDescriptor descriptor) {
return probeMap.get(descriptor);
}
@Override
protected TracerProgressObject sessionInitializing(TracerProbe<Application>[] probes, final Application dataSource, int refresh) {
for(TracerProbe probe : probes) {
DynamicProbe dp = (DynamicProbe)probe;
deployers.addAll(dp.applyDeployerConfigs(dataSource));
// DeployerImpl di = dp.getDeployment() != null ? dp.getDeployment().getDeployer() : null;
// if (di != null) {
// di.applyConfig(dataSource, dp.getDeployment().getConfig());
// deployers.add(di);
// }
}
progress = new TracerProgressObject(deployers.size() * 50 + probes.length + 5, "");
return progress;
}
@Override
protected void sessionStarting(TracerProbe<Application>[] probes, Application application)
throws SessionInitializationException {
try {
for(DeployerImpl di : deployers) {
if (!di.deploy(application, progress, 50)) {
throw new SessionInitializationException("Error deploying dynamic probe (" + di.getClass().getName() + ")"); // NOI18N
}
}
} finally {
if (progress != null) progress.finish();
}
}
@Override
protected void sessionStopping(TracerProbe<Application>[] probes, Application application) {
for(DeployerImpl d : deployers) {
d.undeploy(application);
}
deployers.clear();
}
}