package com.jsonde.gui.action; import com.jsonde.api.configuration.AgentConfigurationMessage; import com.jsonde.client.Client; import com.jsonde.client.sun.VirtualMachineService; import com.jsonde.client.sun.VirtualMachineServiceException; import com.jsonde.gui.Main; import com.jsonde.gui.configuration.SessionConfiguration; import com.jsonde.gui.configuration.SessionConfigurationException; import com.jsonde.gui.dialog.project.sun.AttachSunJVMDialog; import com.jsonde.gui.dialog.project.sun.SunJVMFieldsPanel; import com.jsonde.gui.sdedit.SdEditUIAdapter; import net.sf.sdedit.icons.Icons; import javax.swing.*; import java.awt.event.ActionEvent; import java.io.File; public class NewLocalSunJVMProjectAction extends AbstractAction { private SdEditUIAdapter sdEditUIAdapter; public NewLocalSunJVMProjectAction(SdEditUIAdapter sdEditUIAdapter) { this.sdEditUIAdapter = sdEditUIAdapter; } { putValue(Action.SMALL_ICON, new ImageIcon( Icons.class.getResource("new.png") )); putValue(Action.NAME, "Attach to Sun JVM"); putValue(Action.SHORT_DESCRIPTION, "Create a new jSonde Project by attaching to Sun JVM process"); } public void actionPerformed(ActionEvent e) { VirtualMachineService vmService; try { vmService = VirtualMachineService.getInstance(); } catch (VirtualMachineServiceException e1) { Main.getInstance().processException(e1); showSunVMErrorMessage(); return; } try { if (!vmService.isSun16JVM()) { showSunVMErrorMessage(); } } catch (VirtualMachineServiceException e1) { Main.getInstance().processException(e1); showSunVMErrorMessage(); return; } AttachSunJVMDialog newProjectDialog = new AttachSunJVMDialog(); if (newProjectDialog.showDialog()) { SunJVMFieldsPanel fieldsPanel = newProjectDialog.getFieldsPanel(); String vmId = fieldsPanel.getVirtualMachineId(); try { File agentJarFile = new File("./lib/jsonde.agent-1.1.0.jar"); vmService.attachAgent(vmId, agentJarFile.getAbsolutePath(), "60001"); } catch (VirtualMachineServiceException ex) { Main.getInstance().processException(ex); } String databaseFileName = fieldsPanel.getProjectFilesLocation() + System.getProperty("file.separator") + fieldsPanel.getProjectName(); String host = "127.0.0.1"; int port = 60001; Client client = new Client(databaseFileName, host, port); try { Thread.sleep(500); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); Main.getInstance().processException(ex); } client.start(); SessionConfiguration sessionConfiguration = new SessionConfiguration(); sessionConfiguration.setDatabaseFileName(databaseFileName); try { sessionConfiguration.save(databaseFileName + ".jss"); } catch (SessionConfigurationException e1) { Main.getInstance().processException(e1); } AgentConfigurationMessage agentConfigurationMessage = new AgentConfigurationMessage(); agentConfigurationMessage.setClassFilters( newProjectDialog.getFiltersPanel().getClassFilters()); client.sendMessage(agentConfigurationMessage); sdEditUIAdapter.setClient(client); } } private void showSunVMErrorMessage() { JOptionPane.showMessageDialog(sdEditUIAdapter.getFrame(), "Failed to get list of virtual machines. " + "This feature is available only on Sun JDK 1.6+. " + "If you're using such version of JDK, please check if your environments variable JAVA_HOME or JDK_HOME " + "contains correct path to your Sun JDK 1.6+"); } }