1 4 package org.terracotta.dso.actions; 5 6 import org.apache.commons.io.IOUtils; 7 import org.eclipse.core.resources.IProject; 8 import org.eclipse.core.runtime.CoreException; 9 import org.eclipse.core.runtime.IPath; 10 import org.eclipse.jdt.core.IJavaProject; 11 import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; 12 import org.eclipse.jface.action.Action; 13 import org.eclipse.jface.action.IAction; 14 import org.eclipse.jface.viewers.ISelection; 15 import org.eclipse.jface.viewers.IStructuredSelection; 16 import org.eclipse.ui.IActionDelegate; 17 import org.eclipse.ui.IWorkbenchWindow; 18 import org.eclipse.ui.IWorkbenchWindowActionDelegate; 19 import org.terracotta.dso.ClasspathProvider; 20 import org.terracotta.dso.ProjectNature; 21 import org.terracotta.dso.TcPlugin; 22 23 import com.tc.admin.common.InputStreamDrainer; 24 import com.tc.util.runtime.Os; 25 26 import java.io.File ; 27 import java.io.IOException ; 28 29 public class ShowAdminConsoleAction extends Action 30 implements IActionDelegate, 31 IWorkbenchWindowActionDelegate, 32 IJavaLaunchConfigurationConstants, 33 IProjectAction 34 { 35 private IJavaProject m_javaProject; 36 private IAction m_action; 37 38 public ShowAdminConsoleAction() { 39 super("Show AdminConsole..."); 40 TcPlugin.getDefault().registerProjectAction(this); 41 } 42 43 public ShowAdminConsoleAction(IJavaProject javaProject) { 44 super("Show AdminConsole..."); 45 m_javaProject = javaProject; 46 } 47 48 public void run(IAction action) { 49 String [] cmdarray = { 50 getJavaCmd().getAbsolutePath(), 51 "-Dtc.install-root=" + TcPlugin.getDefault().getLocation().toOSString(), 52 "-cp", getClasspath(), 53 "com.tc.admin.AdminClient" 54 }; 55 56 Process p = exec(cmdarray, null, new File (System.getProperty("user.dir"))); 57 58 new InputStreamDrainer(p.getErrorStream()).start(); 59 new InputStreamDrainer(p.getInputStream()).start(); 60 IOUtils.closeQuietly(p.getOutputStream()); 61 } 62 63 private String getClasspath() { 64 TcPlugin plugin = TcPlugin.getDefault(); 65 IPath tcJarPath = plugin.getLibDirPath().append("tc.jar"); 66 67 if(tcJarPath.toFile().exists()){ 68 return tcJarPath.toOSString(); 69 } else { 70 return ClasspathProvider.makeDevClasspath(); 71 } 72 } 73 74 private File getJavaCmd() { 75 File javaBin = new File (System.getProperty("java.home"), "bin"); 76 return new File (javaBin, "java" + (Os.isWindows() ? ".exe" : "")); 77 } 78 79 protected Process exec(String [] cmdarray, String [] envp, File dir) { 80 try { 81 return Runtime.getRuntime().exec(cmdarray, envp, dir); 82 } catch(IOException ioe) { 83 TcPlugin.getDefault().openError("Unable to show AdminConsole", ioe); 84 } 85 86 return null; 87 } 88 89 public void selectionChanged(IAction action, ISelection selection) { 90 m_action = action; 91 92 if(m_javaProject == null || selection instanceof IStructuredSelection) { 93 update(ActionUtil.locateSelectedJavaProject(selection)); 94 } 95 else { 96 action.setEnabled(true); 97 } 98 } 99 100 private void update(IJavaProject javaProject) { 101 if(javaProject != null) { 102 try { 103 if(javaProject.getProject().hasNature(ProjectNature.NATURE_ID)) { 104 m_javaProject = javaProject; 105 } 106 else { 107 m_javaProject = null; 108 } 109 } catch(CoreException ce) {} 110 } 111 else { 112 m_javaProject = null; 113 } 114 115 m_action.setEnabled(m_javaProject != null); 116 } 117 118 public void update(IProject project) { 119 update(ActionUtil.findJavaProject(project)); 120 } 121 122 public void dispose() { 123 124 } 125 126 public void init(IWorkbenchWindow window) { 127 128 } 129 } 130 | Popular Tags |