Skip to content

Commit 69c1ae3

Browse files
committed
Load repository.json from HTTP. See
#195
1 parent 8133c39 commit 69c1ae3

File tree

33 files changed

+507
-114
lines changed

33 files changed

+507
-114
lines changed

core/tern.core.tests/src/tern/TernRepositoryTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.junit.Assert;
66
import org.junit.Test;
77

8+
import tern.repository.TernRepository;
89
import tern.server.ITernModule;
910
import tern.server.nodejs.process.PathHelper;
1011

core/tern.core/META-INF/MANIFEST.MF

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Export-Package: tern,
1717
tern.doc,
1818
tern.internal.resources;x-internal:=true,
1919
tern.metadata,
20+
tern.repository,
2021
tern.resources,
2122
tern.scriptpath,
2223
tern.scriptpath.impl,
@@ -30,6 +31,10 @@ Export-Package: tern,
3031
tern.server.protocol.type,
3132
tern.utils
3233
Import-Package: com.eclipsesource.json,
34+
org.apache.http;resolution:=optional,
35+
org.apache.http.client;resolution:=optional,
36+
org.apache.http.client.methods;resolution:=optional,
37+
org.apache.http.impl.client;resolution:=optional,
3338
org.osgi.framework
3439
Bundle-Activator: tern.Activator
3540
Bundle-ActivationPolicy: lazy

core/tern.core/src/tern/ITernProject.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import org.w3c.dom.Node;
1919

20+
import tern.repository.ITernRepository;
2021
import tern.scriptpath.ITernScriptPath;
2122
import tern.server.ITernDef;
2223
import tern.server.ITernPlugin;

core/tern.core/src/tern/ITernRepository.java renamed to core/tern.core/src/tern/repository/ITernRepository.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
* Contributors:
99
* Angelo Zerr <[email protected]> - initial API and implementation
1010
*/
11-
package tern;
11+
package tern.repository;
1212

1313
import java.io.File;
1414

15+
import tern.TernException;
1516
import tern.server.ITernModule;
1617

1718
/**
18-
* Tern repository is a base dir which contains the tern.js JS files :
19+
* Tern repository is a local base dir which contains the tern.js JS files :
1920
*
2021
* <ul>
2122
* <li>bin folder</li>

core/tern.core/src/tern/TernRepository.java renamed to core/tern.core/src/tern/repository/TernRepository.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@
88
* Contributors:
99
* Angelo Zerr <[email protected]> - initial API and implementation
1010
*/
11-
package tern;
11+
package tern.repository;
1212

1313
import java.io.File;
1414
import java.util.ArrayList;
1515
import java.util.List;
1616

17+
import tern.TernException;
1718
import tern.server.ITernModule;
1819
import tern.utils.ExtensionUtils;
1920
import tern.utils.TernModuleHelper;

core/tern.core/src/tern/resources/TernProject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
import tern.ITernFile;
2626
import tern.ITernFileSynchronizer;
2727
import tern.ITernProject;
28-
import tern.ITernRepository;
2928
import tern.TernException;
3029
import tern.internal.resources.InternalTernResourcesManager;
30+
import tern.repository.ITernRepository;
3131
import tern.scriptpath.ITernScriptPath;
3232
import tern.scriptpath.impl.dom.DOMElementsScriptPath;
3333
import tern.server.ITernDef;
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/**
2+
* Copyright (c) 2013-2014 Angelo ZERR.
3+
* All rights reserved. This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v1.0
5+
* which accompanies this distribution, and is available at
6+
* http://www.eclipse.org/legal/epl-v10.html
7+
*
8+
* Contributors:
9+
* Angelo Zerr <[email protected]> - initial API and implementation
10+
*/
11+
package tern.utils;
12+
13+
import java.io.IOException;
14+
import java.io.InputStream;
15+
import java.io.InputStreamReader;
16+
import java.util.ArrayList;
17+
import java.util.List;
18+
19+
import org.apache.http.HttpEntity;
20+
import org.apache.http.HttpResponse;
21+
import org.apache.http.HttpStatus;
22+
import org.apache.http.StatusLine;
23+
import org.apache.http.client.ClientProtocolException;
24+
import org.apache.http.client.HttpClient;
25+
import org.apache.http.client.methods.HttpGet;
26+
import org.apache.http.impl.client.DefaultHttpClient;
27+
28+
import tern.TernException;
29+
import tern.server.BasicTernPlugin;
30+
import tern.server.ITernModule;
31+
32+
import com.eclipsesource.json.JsonObject;
33+
import com.eclipsesource.json.JsonObject.Member;
34+
35+
/**
36+
* Helper for tern repository.
37+
*
38+
*/
39+
public class TernRepositoryHelper {
40+
41+
/**
42+
* Default tern repository.json URL
43+
*/
44+
public static final String DEFAULT_TERN_REPOSITORY_URL = "https://raw.githubusercontent.com/angelozerr/tern.java/master/eclipse/tern.eclipse.ide.tools.ui/TO_DELETE/repository.json";
45+
46+
/**
47+
* Load tern modules coming from the given repository.json URL.
48+
*
49+
* @param repositoryURL
50+
* repository URL.
51+
* @return
52+
* @throws IOException
53+
* @throws ClientProtocolException
54+
* @throws TernException
55+
*/
56+
public static List<ITernModule> loadModules(String repositoryURL)
57+
throws IOException, TernException {
58+
// load repository.json with HTTP client.
59+
HttpClient httpClient = new DefaultHttpClient();
60+
HttpGet httpGet = new HttpGet(repositoryURL);
61+
HttpResponse httpResponse = httpClient.execute(httpGet);
62+
HttpEntity entity = httpResponse.getEntity();
63+
InputStream in = entity.getContent();
64+
// Check the status
65+
StatusLine statusLine = httpResponse.getStatusLine();
66+
int statusCode = statusLine.getStatusCode();
67+
if (statusCode != HttpStatus.SC_OK) {
68+
String message = IOUtils.toString(in);
69+
if (StringUtils.isEmpty(message)) {
70+
throw new TernException(statusLine.toString());
71+
}
72+
throw new TernException(message);
73+
}
74+
75+
// read JSON and create tern modules list
76+
JsonObject repository = JsonObject.readFrom(new InputStreamReader(in));
77+
ITernModule module = null;
78+
List<ITernModule> modules = new ArrayList<ITernModule>();
79+
for (Member member : repository) {
80+
module = new BasicTernPlugin(member.getName());
81+
modules.add(module);
82+
}
83+
return modules;
84+
}
85+
}

core/tern.server.nodejs/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Bundle-SymbolicName: tern.server.nodejs;singleton:=true
77
Bundle-Version: 0.8.0.qualifier
88
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
99
Export-Package: tern.server.nodejs,tern.server.nodejs.process
10-
Require-Bundle: tern.core;bundle-version="0.2.0"
10+
Require-Bundle: tern.core
1111
Bundle-ClassPath: .
1212
Import-Package: com.eclipsesource.json,
1313
org.apache.commons.logging,

core/tern.server.nodejs/src/tern/server/nodejs/NodejsTernHelper.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
*/
1111
package tern.server.nodejs;
1212

13+
import java.io.ByteArrayInputStream;
1314
import java.io.IOException;
1415
import java.io.InputStream;
1516
import java.io.InputStreamReader;
@@ -88,8 +89,11 @@ public static JsonObject makeRequest(String baseURL, TernDoc doc,
8889
}
8990

9091
try {
92+
93+
byte[] bytes = IOUtils.toByteArray(in);
94+
System.err.println(IOUtils.toString(bytes));
9195
JsonObject response = JsonObject
92-
.readFrom(new InputStreamReader(in));
96+
.readFrom(new InputStreamReader(new ByteArrayInputStream(bytes)));
9397
if (interceptors != null) {
9498
for (IInterceptor interceptor : interceptors) {
9599
interceptor.handleResponse(response, server,

eclipse/tern.eclipse.ide.core/src/tern/eclipse/ide/core/ITernRepositoryManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import org.eclipse.core.resources.IProject;
66

7-
import tern.ITernRepository;
7+
import tern.repository.ITernRepository;
88

99
public interface ITernRepositoryManager {
1010

eclipse/tern.eclipse.ide.core/src/tern/eclipse/ide/internal/core/TernRepositoryManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919
import org.eclipse.core.resources.IProject;
2020
import org.eclipse.core.runtime.preferences.InstanceScope;
2121

22-
import tern.ITernRepository;
2322
import tern.TernException;
24-
import tern.TernRepository;
2523
import tern.eclipse.ide.core.ITernRepositoryManager;
2624
import tern.eclipse.ide.core.TernCorePlugin;
2725
import tern.eclipse.ide.core.preferences.TernCorePreferenceConstants;
2826
import tern.eclipse.ide.internal.core.preferences.TernCorePreferencesSupport;
27+
import tern.repository.ITernRepository;
28+
import tern.repository.TernRepository;
2929
import tern.utils.StringUtils;
3030

3131
/**

eclipse/tern.eclipse.ide.core/src/tern/eclipse/ide/internal/core/TernServerTypeManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@
2222
import org.eclipse.core.runtime.IRegistryChangeListener;
2323
import org.eclipse.core.runtime.Platform;
2424

25-
import tern.ITernRepository;
2625
import tern.TernException;
2726
import tern.eclipse.ide.core.IIDETernProject;
2827
import tern.eclipse.ide.core.ITernServerPreferencesListener;
2928
import tern.eclipse.ide.core.ITernServerType;
3029
import tern.eclipse.ide.core.ITernServerTypeManager;
3130
import tern.eclipse.ide.core.TernCorePlugin;
31+
import tern.repository.ITernRepository;
3232
import tern.server.ITernDef;
3333
import tern.server.ITernModule;
3434
import tern.server.ITernPlugin;

eclipse/tern.eclipse.ide.core/src/tern/eclipse/ide/internal/core/builder/TernBuilder.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@
1010
*/
1111
package tern.eclipse.ide.internal.core.builder;
1212

13+
import java.util.Date;
1314
import java.util.Map;
1415

1516
import org.eclipse.core.resources.IProject;
17+
import org.eclipse.core.resources.IResourceDelta;
18+
import org.eclipse.core.resources.IResourceDeltaVisitor;
1619
import org.eclipse.core.resources.IncrementalProjectBuilder;
1720
import org.eclipse.core.runtime.CoreException;
1821
import org.eclipse.core.runtime.IProgressMonitor;
@@ -34,6 +37,9 @@ protected IProject[] build(int kind, Map<String, String> args,
3437
if (currentProject == null || !currentProject.isAccessible())
3538
return EMPTY_PROJECT;
3639

40+
/*if (DEBUG)
41+
System.out.println("\nJavaBuilder: Starting build of " + currentProject.getName() //$NON-NLS-1$
42+
+ " @ " + new Date(System.currentTimeMillis())); //$NON-NLS-1$
3743
/*
3844
* if (IDETernProject.hasTernNature(currentProject)) { try { long start
3945
* = System.currentTimeMillis();
@@ -43,5 +49,40 @@ protected IProject[] build(int kind, Map<String, String> args,
4349
*/
4450
return EMPTY_PROJECT;
4551
}
52+
53+
protected IProject[] buildOLD(int kind, Map args, IProgressMonitor monitor) {
54+
if (kind == IncrementalProjectBuilder.FULL_BUILD) {
55+
fullBuild(monitor);
56+
} else {
57+
IResourceDelta delta = getDelta(getProject());
58+
if (delta == null) {
59+
fullBuild(monitor);
60+
} else {
61+
incrementalBuild(delta, monitor);
62+
}
63+
}
64+
return null;
65+
}
66+
67+
private void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor) {
68+
System.out.println("incremental build on " + delta);
69+
try {
70+
delta.accept(new IResourceDeltaVisitor() {
71+
public boolean visit(IResourceDelta delta) {
72+
System.out.println("changed: "
73+
+ delta.getResource().getRawLocation());
74+
return true; // visit children too
75+
}
76+
});
77+
} catch (CoreException e) {
78+
e.printStackTrace();
79+
}
80+
}
81+
82+
private void fullBuild(IProgressMonitor monitor) {
83+
System.out.println("full build");
84+
}
85+
86+
4687

4788
}

eclipse/tern.eclipse.ide.core/src/tern/eclipse/ide/internal/core/resources/IDETernProject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131

3232
import tern.ITernFile;
3333
import tern.ITernProject;
34-
import tern.ITernRepository;
3534
import tern.TernResourcesManager;
3635
import tern.eclipse.ide.core.IIDETernProject;
3736
import tern.eclipse.ide.core.ITernConsoleConnector;
@@ -46,6 +45,7 @@
4645
import tern.eclipse.ide.internal.core.Trace;
4746
import tern.eclipse.ide.internal.core.preferences.TernCorePreferencesSupport;
4847
import tern.eclipse.ide.internal.core.scriptpath.FolderScriptPath;
48+
import tern.repository.ITernRepository;
4949
import tern.resources.TernProject;
5050
import tern.scriptpath.ITernScriptPath;
5151
import tern.scriptpath.ITernScriptPath.ScriptPathsType;

eclipse/tern.eclipse.ide.tools.core/src/tern/eclipse/ide/tools/core/webbrowser/EditorOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
import org.eclipse.core.resources.IFile;
1818
import org.eclipse.core.resources.IProject;
1919

20-
import tern.ITernRepository;
2120
import tern.eclipse.ide.tools.core.generator.Options;
2221
import tern.eclipse.ide.tools.internal.core.TernToolsCorePlugin;
22+
import tern.repository.ITernRepository;
2323
import tern.server.ITernDef;
2424
import tern.server.ITernModule;
2525
import tern.server.ITernPlugin;

eclipse/tern.eclipse.ide.tools.ui/META-INF/MANIFEST.MF

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ Require-Bundle: org.eclipse.core.runtime,
1212
org.eclipse.core.resources,
1313
org.eclipse.ui.ide,
1414
tern.eclipse.ide.core,
15-
tern.core,
16-
tern.eclipse.ide.ui
15+
tern.eclipse.ide.ui,
16+
tern.core
1717
Bundle-Activator: tern.eclipse.ide.tools.internal.ui.TernToolsUIPlugin
1818
Bundle-ActivationPolicy: lazy
1919
Import-Package: com.eclipsesource.json

eclipse/tern.eclipse.ide.tools.ui/plugin.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ providerName=Angelo ZERR
1515
TernWizard.name=Tern
1616
NewTernDefWizard.name=Tern JSON type definition
1717
NewTernPluginWizard.name=Tern Server Plugin
18+
DownloadTernModulesWizard.name=Download Tern modules
19+
20+
# Web browser wizard
1821
WebBrowserWizard.name= Web Browser
1922
NewCodeMirrorWizard.name=CodeMirror
2023
NewAceWizard.name=Ace

eclipse/tern.eclipse.ide.tools.ui/plugin.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@
3838
class="tern.eclipse.ide.tools.internal.ui.wizards.NewTernPluginWizard"
3939
id="tern.eclipse.ide.tools.internal.ui.wizards.NewTernPluginWizard">
4040
</wizard>
41+
<wizard
42+
name="%DownloadTernModulesWizard.name"
43+
icon="icons/full/etool16/plugin.gif"
44+
category="tern.eclipse.ide.ui.wizard"
45+
class="tern.eclipse.ide.tools.internal.ui.wizards.DownloadTernModulesWizard"
46+
id="tern.eclipse.ide.tools.internal.ui.wizards.DownloadTernModulesWizard">
47+
</wizard>
4148
</extension>
4249

4350
<!-- =================================================================================== -->

eclipse/tern.eclipse.ide.tools.ui/src/tern/eclipse/ide/tools/internal/ui/TernToolsUIMessages.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public final class TernToolsUIMessages extends NLS {
2727

2828
// Buttons
2929
public static String Button_browse;
30+
public static String Button_refresh;
3031

3132
// Wizard
3233
public static String NewFileWizardPage_name_text;
@@ -64,7 +65,14 @@ public final class TernToolsUIMessages extends NLS {
6465

6566
public static String DownloadTernModulesWizard_taskLabel;
6667
public static String DownloadTernModulesSelectionWizardPage_title;
68+
public static String DownloadTernModulesSelectionWizardPage_repositoryURL_text;
69+
public static String DownloadTernModulesSelectionWizardPage_localRespositoryName_text;
6770
public static String DownloadTernModulesSelectionWizardPage_description;
71+
public static String DownloadTernModulesSelectionWizardPage_errorMessage;
72+
public static String DownloadTernModulesSelectionWizardPage_errorTitle;
73+
public static String DownloadTernModulesSelectionWizardPage_modules_selection_validation;
74+
public static String RefreshRepositoryJob_name;
75+
public static String RefreshRepositoryJob_loading;
6876

6977
private TernToolsUIMessages() {
7078
}

0 commit comments

Comments
 (0)