Skip to content

Commit 8f56ae5

Browse files
committed
Execute npm install typescript. See
angelozerr#147
1 parent 96ce197 commit 8f56ae5

File tree

5 files changed

+88
-11
lines changed

5 files changed

+88
-11
lines changed

eclipse/ts.eclipse.ide.ui/META-INF/MANIFEST.MF

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ Require-Bundle: org.eclipse.ui,
2929
org.eclipse.tm4e.markdown,
3030
org.eclipse.tm4e.core,
3131
org.eclipse.tm4e.ui,
32-
com.google.gson
32+
com.google.gson,
33+
ts.eclipse.ide.terminal.interpreter,
34+
org.eclipse.tm.terminal.view.core,
35+
org.eclipse.tm.terminal.view.ui
3336
Bundle-ActivationPolicy: lazy
3437
Bundle-Activator: ts.eclipse.ide.ui.TypeScriptUIPlugin
3538
Import-Package: com.eclipsesource.json;version="[0.9.4,0.9.5)"

eclipse/ts.eclipse.ide.ui/src/ts/eclipse/ide/internal/ui/wizards/NewTypeScriptProjectWizard.java

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,24 @@
1313
package ts.eclipse.ide.internal.ui.wizards;
1414

1515
import java.lang.reflect.InvocationTargetException;
16+
import java.nio.charset.StandardCharsets;
17+
import java.util.HashMap;
18+
import java.util.Map;
1619

1720
import org.eclipse.core.commands.ExecutionException;
1821
import org.eclipse.core.resources.IFile;
1922
import org.eclipse.core.resources.IProject;
2023
import org.eclipse.core.resources.IProjectDescription;
24+
import org.eclipse.core.resources.ProjectScope;
2125
import org.eclipse.core.runtime.CoreException;
2226
import org.eclipse.core.runtime.IPath;
2327
import org.eclipse.core.runtime.IProgressMonitor;
2428
import org.eclipse.core.runtime.NullProgressMonitor;
29+
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
2530
import org.eclipse.jface.operation.IRunnableWithProgress;
2631
import org.eclipse.jface.resource.ImageDescriptor;
2732
import org.eclipse.jface.viewers.IStructuredSelection;
33+
import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
2834
import org.eclipse.ui.IWorkbench;
2935
import org.eclipse.ui.IWorkbenchPage;
3036
import org.eclipse.ui.IWorkbenchWindow;
@@ -34,16 +40,21 @@
3440
import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
3541
import org.eclipse.ui.internal.ide.DialogUtil;
3642
import org.eclipse.ui.internal.wizards.newresource.ResourceMessages;
43+
import org.osgi.service.prefs.BackingStoreException;
3744

3845
import com.google.gson.Gson;
3946
import com.google.gson.GsonBuilder;
4047

48+
import ts.eclipse.ide.core.TypeScriptCorePlugin;
49+
import ts.eclipse.ide.core.preferences.TypeScriptCorePreferenceConstants;
4150
import ts.eclipse.ide.core.utils.TypeScriptResourceUtil;
4251
import ts.eclipse.ide.internal.ui.TypeScriptUIMessages;
52+
import ts.eclipse.ide.terminal.interpreter.CommandTerminalService;
4353
import ts.eclipse.ide.ui.TypeScriptUIImageResource;
4454
import ts.eclipse.ide.ui.wizards.AbstractNewProjectWizard;
4555
import ts.resources.jsonconfig.TsconfigJson;
4656
import ts.utils.IOUtils;
57+
import ts.utils.StringUtils;
4758

4859
/**
4960
* Standard workbench wizard that creates a new TypeScript project resource in
@@ -106,7 +117,7 @@ public void addPages() {
106117

107118
@Override
108119
protected IRunnableWithProgress getRunnable(IProject newProjectHandle, IProjectDescription description,
109-
IPath projectLocation) {
120+
IPath projectLocationPath) {
110121
TsconfigJson json = new TsconfigJson();
111122
json.setCompileOnSave(true);
112123
tsconfigPage.addContents(json);
@@ -148,6 +159,35 @@ public void run(final IProgressMonitor monitor) throws InvocationTargetException
148159
throw new InvocationTargetException(e);
149160
}
150161

162+
// Install TypeScript if needed
163+
String cmd = tsRuntimeAndNodeJsPage.getNpmInstallCommand();
164+
if (!StringUtils.isEmpty(cmd)) {
165+
166+
// Prepare terminal properties
167+
String terminalId = "TypeScript Projects";
168+
Map<String, Object> properties = new HashMap<String, Object>();
169+
properties.put(ITerminalsConnectorConstants.PROP_TITLE, terminalId);
170+
properties.put(ITerminalsConnectorConstants.PROP_ENCODING, StandardCharsets.UTF_8.name());
171+
properties.put(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR,
172+
projectLocationPath.toString());
173+
properties.put(ITerminalsConnectorConstants.PROP_DELEGATE_ID,
174+
"ts.eclipse.ide.terminal.interpreter.LocalInterpreterLauncherDelegate");
175+
properties.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID,
176+
"org.eclipse.tm.terminal.connector.local.LocalConnector");
177+
178+
CommandTerminalService.getInstance().executeCommand(cmd, terminalId, properties, null);
179+
180+
IEclipsePreferences node = new ProjectScope(newProjectHandle).getNode(TypeScriptCorePlugin.PLUGIN_ID);
181+
node.putBoolean(TypeScriptCorePreferenceConstants.USE_EMBEDDED_TYPESCRIPT, false);
182+
node.put(TypeScriptCorePreferenceConstants.INSTALLED_TYPESCRIPT_PATH, "${project_loc:node_modules/typescript}");
183+
try {
184+
node.flush();
185+
} catch (BackingStoreException e) {
186+
// TODO Auto-generated catch block
187+
e.printStackTrace();
188+
}
189+
}
190+
151191
getShell().getDisplay().syncExec(new Runnable() {
152192

153193
@Override

eclipse/ts.eclipse.ide.ui/src/ts/eclipse/ide/internal/ui/wizards/TypeScriptRuntimeAndNodejsWizardPage.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ public class TypeScriptRuntimeAndNodejsWizardPage extends AbstractWizardPage {
3434

3535
private static final String PAGE_NAME = "TypeScriptRuntimeAndNodejsWizardPage";
3636

37-
private Button useEmbeddedTsRuntime;
37+
private Button useEmbeddedTsRuntimeButton;
38+
private boolean useEmbeddedTsRuntime;
3839
private NPMInstallWidget installTsRuntime;
3940

4041
private Combo embeddedTsRuntime;
@@ -133,15 +134,15 @@ private void createTypeScriptRuntimeBody(Composite parent) {
133134
// Install TypeScript
134135
createInstallScriptField(group);
135136

136-
useEmbeddedTsRuntime.setSelection(true);
137+
useEmbeddedTsRuntimeButton.setSelection(true);
137138
updateTsRuntimeMode();
138139
}
139140

140141
private void createEmbeddedTypeScriptField(Composite parent) {
141-
useEmbeddedTsRuntime = new Button(parent, SWT.RADIO);
142-
useEmbeddedTsRuntime
142+
useEmbeddedTsRuntimeButton = new Button(parent, SWT.RADIO);
143+
useEmbeddedTsRuntimeButton
143144
.setText(TypeScriptUIMessages.TypeScriptRuntimeAndNodejsWizardPage_useEmbeddedTsRuntime_label);
144-
useEmbeddedTsRuntime.addSelectionListener(new SelectionAdapter() {
145+
useEmbeddedTsRuntimeButton.addSelectionListener(new SelectionAdapter() {
145146
@Override
146147
public void widgetSelected(SelectionEvent e) {
147148
updateTsRuntimeMode();
@@ -176,9 +177,9 @@ public void widgetSelected(SelectionEvent e) {
176177
}
177178

178179
private void updateTsRuntimeMode() {
179-
boolean embedded = useEmbeddedTsRuntime.getSelection();
180-
embeddedTsRuntime.setEnabled(embedded);
181-
installTsRuntime.setEnabled(!embedded);
180+
useEmbeddedTsRuntime = useEmbeddedTsRuntimeButton.getSelection();
181+
embeddedTsRuntime.setEnabled(useEmbeddedTsRuntime);
182+
installTsRuntime.setEnabled(!useEmbeddedTsRuntime);
182183
}
183184

184185
@Override
@@ -193,4 +194,11 @@ protected boolean validatePage() {
193194
return false;
194195
}
195196

197+
public String getNpmInstallCommand() {
198+
if (useEmbeddedTsRuntime) {
199+
return null;
200+
}
201+
return installTsRuntime.getNpmInstallCommand();
202+
}
203+
196204
}

eclipse/ts.eclipse.ide.ui/src/ts/eclipse/ide/ui/utils/NPMInstallWidget.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
import org.eclipse.jface.window.Window;
1515
import org.eclipse.swt.SWT;
16+
import org.eclipse.swt.events.ModifyEvent;
17+
import org.eclipse.swt.events.ModifyListener;
1618
import org.eclipse.swt.events.SelectionAdapter;
1719
import org.eclipse.swt.events.SelectionEvent;
1820
import org.eclipse.swt.layout.GridData;
@@ -24,6 +26,7 @@
2426

2527
import ts.eclipse.ide.internal.ui.TypeScriptUIMessages;
2628
import ts.eclipse.ide.internal.ui.dialogs.NPMModuleVersionsSelectionDialog;
29+
import ts.npm.NPMHelper;
2730

2831
/**
2932
* NPM install widget provides :
@@ -41,6 +44,8 @@ public class NPMInstallWidget extends Composite {
4144
private Text versionText;
4245
private Button searchButton;
4346

47+
private String version;
48+
4449
public NPMInstallWidget(String moduleName, Composite parent, int style) {
4550
super(parent, style);
4651
this.moduleName = moduleName;
@@ -58,7 +63,13 @@ private void createUI(Composite parent) {
5863

5964
versionText = new Text(body, SWT.SINGLE | SWT.BORDER);
6065
versionText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
66+
versionText.addModifyListener(new ModifyListener() {
6167

68+
@Override
69+
public void modifyText(ModifyEvent event) {
70+
NPMInstallWidget.this.version = versionText.getText();
71+
}
72+
});
6273
searchButton = new Button(body, SWT.PUSH);
6374
searchButton.setText(TypeScriptUIMessages.Browse);
6475
searchButton.addSelectionListener(new SelectionAdapter() {
@@ -74,10 +85,23 @@ public void widgetSelected(SelectionEvent e) {
7485
});
7586
}
7687

88+
public void setVersion(String version) {
89+
versionText.setText(version);
90+
}
91+
7792
@Override
7893
public void setEnabled(boolean enabled) {
7994
super.setEnabled(enabled);
8095
versionText.setEnabled(enabled);
8196
searchButton.setEnabled(enabled);
8297
}
98+
99+
/**
100+
* Returns the npm install command.
101+
*
102+
* @return the npm install command.
103+
*/
104+
public String getNpmInstallCommand() {
105+
return NPMHelper.getNpmInstallCommand(moduleName, version);
106+
}
83107
}

eclipse/ts.eclipse.ide.ui/src/ts/eclipse/ide/ui/wizards/AbstractNewProjectWizard.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.StringTokenizer;
2323

2424
import org.eclipse.core.commands.ExecutionException;
25+
import org.eclipse.core.filesystem.URIUtil;
2526
import org.eclipse.core.resources.IProject;
2627
import org.eclipse.core.resources.IProjectDescription;
2728
import org.eclipse.core.resources.IResourceStatus;
@@ -225,7 +226,8 @@ private IProject createNewProject() {
225226
}
226227

227228
// create the new project operation
228-
IRunnableWithProgress op = getRunnable(newProjectHandle, description, mainPage.getLocationPath());
229+
IPath projectLocationPath = URIUtil.toPath(mainPage.getLocationURI());
230+
IRunnableWithProgress op = getRunnable(newProjectHandle, description, projectLocationPath);
229231

230232
// run the new project creation operation
231233
try {

0 commit comments

Comments
 (0)