Skip to content

Commit 45f94ac

Browse files
Denis RosaDenis Rosa
Denis Rosa
authored and
Denis Rosa
committed
Now all tools are included
1 parent 314791a commit 45f94ac

File tree

7 files changed

+151
-100
lines changed

7 files changed

+151
-100
lines changed

src/main/java/com/couchbase/intellij/listener/DependenciesDownloader.java

+70-54
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@
1313
import java.nio.channels.ReadableByteChannel;
1414
import java.nio.file.Files;
1515
import java.nio.file.Paths;
16-
import java.util.Arrays;
1716
import java.util.HashMap;
18-
import java.util.List;
1917
import java.util.Map;
2018
import java.util.concurrent.CompletableFuture;
2119

@@ -28,44 +26,57 @@ public class DependenciesDownloader {
2826
public static final String TOOL_SHELL = "shell";
2927
public static final String TOOL_IMPORT_EXPORT = "import_export";
3028

29+
public static final String ALL_TOOLS = "all_tools";
30+
3131

3232
private String getToolInstallPath(String toolKey) {
3333

3434
if (TOOL_SHELL.equals(toolKey)) {
3535
return "cbshell";
3636
} else if (TOOL_IMPORT_EXPORT.equals(toolKey)) {
3737
return "cbimport_export";
38+
} else if (ALL_TOOLS.equals(toolKey)) {
39+
return "cbtools";
3840
} else {
3941
throw new IllegalStateException("Not Implemented yet");
4042
}
4143
}
4244

43-
private List<String> getToolsList(String toolKey, String os) {
45+
private Map<CBTools.Type, String> getToolsMap(String toolKey, String os) {
46+
String suffix = "";
47+
String path = "bin" + File.separator;
48+
4449
boolean unixBased = MACOS_64.equals(os)
4550
|| MACOS_ARM.equals(os)
4651
|| LINUX_64.equals(os)
4752
|| LINUX_ARM.equals(os);
4853

54+
if (!unixBased) {
55+
suffix = ".exe";
56+
}
57+
58+
Map<CBTools.Type, String> map = new HashMap<>();
59+
4960
if (TOOL_SHELL.equals(toolKey)) {
50-
if (unixBased) {
51-
return List.of("cbsh");
52-
} else {
53-
return List.of("cbsh.exe");
54-
}
61+
map.put(CBTools.Type.SHELL, "cbsh" + suffix);
62+
5563
} else if (TOOL_IMPORT_EXPORT.equals(toolKey)) {
56-
String path = "bin" + File.separator;
57-
if (unixBased) {
58-
return Arrays.asList(path + "cbimport", path + "cbexport");
59-
} else {
60-
return Arrays.asList(path + "cbimport.exe", path + "cbexport.exe");
61-
}
64+
map.put(CBTools.Type.CB_IMPORT, path + "cbimport" + suffix);
65+
map.put(CBTools.Type.CB_EXPORT, path + "cbexport" + suffix);
66+
67+
} else if (ALL_TOOLS.equals(toolKey)) {
68+
map.put(CBTools.Type.CBC_PILLOW_FIGHT, path + "cbc-pillowfight" + suffix);
69+
map.put(CBTools.Type.MCTIMINGS, path + "mctimings" + suffix);
70+
6271
} else {
6372
throw new IllegalStateException("Not implemented yet");
6473
}
74+
75+
return map;
6576
}
6677

6778
private ToolSpec getToolSpec(String url, String toolKey, String os) {
68-
return new ToolSpec(url, getToolInstallPath(toolKey), getToolsList(toolKey, os));
79+
return new ToolSpec(url, getToolInstallPath(toolKey), getToolsMap(toolKey, os));
6980
}
7081

7182
public Map<String, ToolSpec> getDownloadList(String os) {
@@ -74,22 +85,27 @@ public Map<String, ToolSpec> getDownloadList(String os) {
7485
if (MACOS_64.equals(os)) {
7586
map.put(TOOL_SHELL, getToolSpec("https://github.com/couchbaselabs/couchbase-shell/releases/download/v0.75.1/cbsh-x86_64-apple-darwin.zip", TOOL_SHELL, MACOS_64));
7687
map.put(TOOL_IMPORT_EXPORT, getToolSpec("https://packages.couchbase.com/releases/7.2.0/couchbase-server-tools_7.2.0-macos_x86_64.zip", TOOL_IMPORT_EXPORT, MACOS_64));
88+
map.put(ALL_TOOLS, getToolSpec("https://intellij-plugin-dependencies.s3.us-east-2.amazonaws.com/7.2.0-macos_64.zip", ALL_TOOLS, MACOS_64));
7789

7890
} else if (MACOS_ARM.equals(os)) {
7991
map.put(TOOL_SHELL, getToolSpec("https://github.com/couchbaselabs/couchbase-shell/releases/download/v0.75.1/cbsh-aarch64-apple-darwin.zip", TOOL_SHELL, MACOS_ARM));
8092
map.put(TOOL_IMPORT_EXPORT, getToolSpec("https://packages.couchbase.com/releases/7.2.0/couchbase-server-tools_7.2.0-macos_arm64.zip", TOOL_IMPORT_EXPORT, MACOS_ARM));
93+
map.put(ALL_TOOLS, getToolSpec("https://intellij-plugin-dependencies.s3.us-east-2.amazonaws.com/7.2.0-macos_arm.zip", ALL_TOOLS, MACOS_64));
8194

8295
} else if (WINDOWS_64.equals(os)) {
8396
map.put(TOOL_SHELL, getToolSpec("https://github.com/couchbaselabs/couchbase-shell/releases/download/v0.75.1/cbsh-x86_64-pc-windows-msvc.zip", TOOL_SHELL, WINDOWS_64));
8497
map.put(TOOL_IMPORT_EXPORT, getToolSpec("https://packages.couchbase.com/releases/7.2.0/couchbase-server-tools_7.2.0-windows_amd64.zip", TOOL_IMPORT_EXPORT, WINDOWS_64));
98+
map.put(ALL_TOOLS, getToolSpec("https://intellij-plugin-dependencies.s3.us-east-2.amazonaws.com/7.2.0-windows_64.zip", ALL_TOOLS, WINDOWS_64));
8599

86100
} else if (WINDOWS_ARM.equals(os)) {
87101
map.put(TOOL_SHELL, getToolSpec("https://github.com/couchbaselabs/couchbase-shell/releases/download/v0.75.1/cbsh-x86_64-pc-windows-msvc.zip", TOOL_SHELL, WINDOWS_ARM));
88102
map.put(TOOL_IMPORT_EXPORT, getToolSpec("https://packages.couchbase.com/releases/7.2.0/couchbase-server-tools_7.2.0-windows_amd64.zip", TOOL_IMPORT_EXPORT, WINDOWS_ARM));
103+
map.put(ALL_TOOLS, getToolSpec("https://intellij-plugin-dependencies.s3.us-east-2.amazonaws.com/7.2.0-windows_64.zip", ALL_TOOLS, WINDOWS_ARM));
89104

90105
} else if (LINUX_64.equals(os)) {
91106
map.put(TOOL_SHELL, getToolSpec("https://github.com/couchbaselabs/couchbase-shell/releases/download/v0.75.1/cbsh-x86_64-unknown-linux-gnu.tar.gz", TOOL_SHELL, LINUX_64));
92107
map.put(TOOL_IMPORT_EXPORT, getToolSpec("https://packages.couchbase.com/releases/7.2.0/couchbase-server-tools_7.2.0-linux_x86_64.tar.gz", TOOL_IMPORT_EXPORT, LINUX_64));
108+
map.put(ALL_TOOLS, getToolSpec("https://intellij-plugin-dependencies.s3.us-east-2.amazonaws.com/7.2.0-linux_64.zip", ALL_TOOLS, LINUX_64));
93109

94110
} else if (LINUX_ARM.equals(os)) {
95111
map.put(TOOL_SHELL, getToolSpec("https://github.com/couchbaselabs/couchbase-shell/releases/download/v0.75.1/cbsh-aarch64-unknown-linux-gnu.tar.gz", TOOL_SHELL, LINUX_ARM));
@@ -111,58 +127,58 @@ public void downloadDependencies() throws Exception {
111127

112128
ToolSpec shell = downloads.get(TOOL_SHELL);
113129
String shellPath = toolsPath + File.separator + shell.getInstallationPath();
114-
if (CBTools.getShell().getStatus() == ToolStatus.NOT_AVAILABLE
115-
&& !isInstalled(toolsPath, downloads.get(TOOL_SHELL))) {
130+
if (CBTools.getTool(CBTools.Type.SHELL).getStatus() == ToolStatus.NOT_AVAILABLE
131+
&& !isInstalled(toolsPath, downloads.get(TOOL_SHELL), CBTools.Type.SHELL)) {
116132
//avoiding 2 threads to install the same thing at the same time
117133
Log.debug("Downloading CB Shell");
118-
CBTools.getShell().setStatus(ToolStatus.DOWNLOADING);
119-
downloadAndUnzip(TOOL_SHELL, shellPath, shell);
134+
CBTools.getTool(CBTools.Type.SHELL).setStatus(ToolStatus.DOWNLOADING);
135+
downloadAndUnzip(shellPath, shell);
120136
} else {
121-
Log.debug("CBShell is already downloaded");
122-
setToolActive(TOOL_SHELL, ToolStatus.AVAILABLE, shellPath, shell);
137+
Log.debug("CBShell is already installed");
138+
setToolActive(ToolStatus.AVAILABLE, shellPath, shell);
123139
}
124140

125141
ToolSpec cbImport = downloads.get(TOOL_IMPORT_EXPORT);
126142
String cbImportDir = toolsPath + File.separator + cbImport.getInstallationPath();
127-
if (CBTools.getCbImport().getStatus() == ToolStatus.NOT_AVAILABLE
128-
&& !isInstalled(toolsPath, downloads.get(TOOL_IMPORT_EXPORT))) {
143+
if (CBTools.getTool(CBTools.Type.CB_IMPORT).getStatus() == ToolStatus.NOT_AVAILABLE
144+
&& !isInstalled(toolsPath, downloads.get(TOOL_IMPORT_EXPORT), CBTools.Type.CB_EXPORT)) {
129145
//avoiding 2 threads to install the same thing at the same time
130146
Log.debug("Downloading CB Import/Export");
131-
CBTools.getCbExport().setStatus(ToolStatus.DOWNLOADING);
132-
CBTools.getCbImport().setStatus(ToolStatus.DOWNLOADING);
133-
downloadAndUnzip(TOOL_IMPORT_EXPORT, cbImportDir, cbImport);
147+
CBTools.getTool(CBTools.Type.CB_EXPORT).setStatus(ToolStatus.DOWNLOADING);
148+
CBTools.getTool(CBTools.Type.CB_IMPORT).setStatus(ToolStatus.DOWNLOADING);
149+
downloadAndUnzip(cbImportDir, cbImport);
134150
} else {
135-
Log.debug("CB Import/Export is already downloaded");
136-
setToolActive(TOOL_IMPORT_EXPORT, ToolStatus.AVAILABLE, cbImportDir, cbImport);
151+
Log.debug("CB Import/Export is already installed");
152+
setToolActive(ToolStatus.AVAILABLE, cbImportDir, cbImport);
137153
}
138-
}
139154

140155

141-
private void setToolActive(String toolKey, ToolStatus status, String path, ToolSpec spec) {
142-
if (TOOL_SHELL.equals(toolKey)) {
143-
CBTools.getShell().setStatus(status);
144-
if (status == ToolStatus.AVAILABLE) {
145-
CBTools.getShell().setPath(path + File.separator + spec.getToolsList().get(0));
146-
}
147-
} else if (TOOL_IMPORT_EXPORT.equals(toolKey)) {
148-
CBTools.getCbImport().setStatus(status);
149-
CBTools.getCbExport().setStatus(status);
150-
151-
if (status == ToolStatus.AVAILABLE) {
152-
for (String tool : spec.getToolsList()) {
153-
if (tool.contains("cbimport")) {
154-
CBTools.getCbImport().setPath(path + File.separator + tool);
155-
} else if (tool.contains("cbexport")) {
156-
CBTools.getCbExport().setPath(path + File.separator + tool);
157-
}
158-
}
159-
}
156+
ToolSpec cbTools = downloads.get(ALL_TOOLS);
157+
String toolsDir = toolsPath + File.separator + cbTools.getInstallationPath();
158+
if (CBTools.getTool(CBTools.Type.CBC_PILLOW_FIGHT).getStatus() == ToolStatus.NOT_AVAILABLE
159+
&& !isInstalled(toolsPath, downloads.get(ALL_TOOLS), CBTools.Type.CBC_PILLOW_FIGHT)) {
160+
161+
Log.debug("Downloading CB tools");
162+
CBTools.getTool(CBTools.Type.CBC_PILLOW_FIGHT).setStatus(ToolStatus.DOWNLOADING);
163+
CBTools.getTool(CBTools.Type.MCTIMINGS).setStatus(ToolStatus.DOWNLOADING);
164+
downloadAndUnzip(toolsDir, cbTools);
160165
} else {
161-
throw new IllegalStateException("Not Implemented Yet");
166+
Log.debug("CB Tools are already installed");
167+
setToolActive(ToolStatus.AVAILABLE, toolsDir, cbTools);
168+
}
169+
170+
}
171+
172+
173+
private void setToolActive(ToolStatus status, String path, ToolSpec spec) {
174+
175+
for (Map.Entry<CBTools.Type, String> entry : spec.getToolsMap().entrySet()) {
176+
CBTools.getTool(entry.getKey()).setPath(path + File.separator + entry.getValue());
177+
CBTools.getTool(entry.getKey()).setStatus(status);
162178
}
163179
}
164180

165-
public void downloadAndUnzip(String toolKey, String targetDir, ToolSpec spec) {
181+
public void downloadAndUnzip(String targetDir, ToolSpec spec) {
166182
CompletableFuture.runAsync(() -> {
167183
try {
168184
createFolder(targetDir);
@@ -176,19 +192,19 @@ public void downloadAndUnzip(String toolKey, String targetDir, ToolSpec spec) {
176192

177193
unzipFile(localFilePath, targetDir);
178194
makeFilesExecutable(new File(targetDir));
179-
setToolActive(toolKey, ToolStatus.AVAILABLE, targetDir, spec);
195+
setToolActive(ToolStatus.AVAILABLE, targetDir, spec);
180196
} catch (Exception e) {
181-
setToolActive(toolKey, ToolStatus.NOT_AVAILABLE, null, null);
197+
setToolActive(ToolStatus.NOT_AVAILABLE, null, null);
182198
Log.error(e);
183199
e.printStackTrace();
184200
}
185201
});
186202
}
187203

188-
public boolean isInstalled(String pluginPath, ToolSpec spec) {
204+
public boolean isInstalled(String pluginPath, ToolSpec spec, CBTools.Type type) {
189205
return Files.exists(Paths.get(pluginPath + File.separator
190206
+ spec.getInstallationPath()
191207
+ File.separator
192-
+ spec.getToolsList().get(0)));
208+
+ spec.getToolsMap().get(type)));
193209
}
194210
}

src/main/java/com/couchbase/intellij/tools/CBExport.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void run(@NotNull ProgressIndicator indicator) {
5050
// The progress indicator shows a moving bar by default. If you want to show progress, use:
5151
indicator.setIndeterminate(true);
5252
try {
53-
ProcessBuilder processBuilder = new ProcessBuilder(CBTools.getCbExport().getPath(),
53+
ProcessBuilder processBuilder = new ProcessBuilder(CBTools.getTool(CBTools.Type.CB_EXPORT).getPath(),
5454
"json", "--no-ssl-verify", "-c", ActiveCluster.getInstance().getClusterURL(),
5555
"-u", ActiveCluster.getInstance().getUsername(), "-p", ActiveCluster.getInstance().getPassword(),
5656
"-b", bucket,
@@ -111,7 +111,7 @@ public void run(@NotNull ProgressIndicator indicator) {
111111
// The progress indicator shows a moving bar by default. If you want to show progress, use:
112112
indicator.setIndeterminate(true);
113113
try {
114-
ProcessBuilder processBuilder = new ProcessBuilder(CBTools.getCbExport().getPath(),
114+
ProcessBuilder processBuilder = new ProcessBuilder(CBTools.getTool(CBTools.Type.CB_EXPORT).getPath(),
115115
"json", "--no-ssl-verify", "-c", ActiveCluster.getInstance().getClusterURL(),
116116
"-u", ActiveCluster.getInstance().getUsername(), "-p", ActiveCluster.getInstance().getPassword(),
117117
"-b", bucket,

src/main/java/com/couchbase/intellij/tools/CBImport.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public static void simpleCollectionImport(String bucket, String scope, String co
6464
public void run(@NotNull ProgressIndicator indicator) {
6565
indicator.setIndeterminate(true);
6666
try {
67-
ProcessBuilder processBuilder = new ProcessBuilder(CBTools.getCbImport().getPath(), "json", "--no-ssl-verify", "-c", ActiveCluster.getInstance().getClusterURL(), "-u", ActiveCluster.getInstance().getUsername(), "-p", ActiveCluster.getInstance().getPassword(), "-b", bucket, "--format", "list", "-d", "file://" + filePath, "--scope-collection-exp", scope + "." + collection, "-g", "%cbmid%", "--ignore-fields", "cbmid,cbms,cbmc", "-t", "4");
67+
ProcessBuilder processBuilder = new ProcessBuilder(CBTools.getTool(CBTools.Type.CB_IMPORT).getPath(), "json", "--no-ssl-verify", "-c", ActiveCluster.getInstance().getClusterURL(), "-u", ActiveCluster.getInstance().getUsername(), "-p", ActiveCluster.getInstance().getPassword(), "-b", bucket, "--format", "list", "-d", "file://" + filePath, "--scope-collection-exp", scope + "." + collection, "-g", "%cbmid%", "--ignore-fields", "cbmid,cbms,cbmc", "-t", "4");
6868

6969
if (createIndexes) {
7070
createIndexes(meta, bucket, scope, originalCol, collection);
@@ -143,7 +143,7 @@ public static void simpleScopeImport(String bucket, String scope, String filePat
143143
public void run(@NotNull ProgressIndicator indicator) {
144144
indicator.setIndeterminate(true);
145145
try {
146-
ProcessBuilder processBuilder = new ProcessBuilder(CBTools.getCbImport().getPath(), "json", "--no-ssl-verify", "-c", ActiveCluster.getInstance().getClusterURL(), "-u", ActiveCluster.getInstance().getUsername(), "-p", ActiveCluster.getInstance().getPassword(), "-b", bucket, "--format", "list", "-d", "file://" + filePath, "--scope-collection-exp", scope + ".%cbmc%", "-g", "%cbmid%", "--ignore-fields", "cbmid,cbms,cbmc", "-t", "4");
146+
ProcessBuilder processBuilder = new ProcessBuilder(CBTools.getTool(CBTools.Type.CB_IMPORT).getPath(), "json", "--no-ssl-verify", "-c", ActiveCluster.getInstance().getClusterURL(), "-u", ActiveCluster.getInstance().getUsername(), "-p", ActiveCluster.getInstance().getPassword(), "-b", bucket, "--format", "list", "-d", "file://" + filePath, "--scope-collection-exp", scope + ".%cbmc%", "-g", "%cbmid%", "--ignore-fields", "cbmid,cbms,cbmc", "-t", "4");
147147

148148
if (createIndexes) {
149149
createIndexes(meta, bucket, scope, skippedCollections);
@@ -204,9 +204,7 @@ private static void createIndexes(ExportedMetadata meta, String bucket, String s
204204
for (String s : idxArray) {
205205
if (s.contains(colPath)) {
206206
s = s.replace(colPath, "`" + bucket + "`.`" + scope + "`.`" + newCol + "`");
207-
}
208-
209-
if (s.contains(bucketPath)) {
207+
} else if (s.contains(bucketPath)) {
210208
s = s.replace(bucketPath, "`" + bucket + "`.`" + scope + "`.`" + newCol + "`");
211209
}
212210

Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
package com.couchbase.intellij.tools;
22

3+
import java.util.HashMap;
4+
import java.util.Map;
5+
36
public class CBTools {
4-
public static CBTool shell = new CBTool();
5-
public static CBTool cbImport = new CBTool();
6-
public static CBTool cbExport = new CBTool();
77

8-
public static CBTool getShell() {
9-
return shell;
10-
}
8+
public static Map<Type, CBTool> tools = new HashMap<>() {{
9+
for (Type type : Type.values()) {
10+
put(type, new CBTool());
11+
}
12+
}};
1113

12-
public static CBTool getCbImport() {
13-
return cbImport;
14+
public static CBTool getTool(Type type) {
15+
return tools.get(type);
1416
}
1517

16-
public static CBTool getCbExport() {
17-
return cbExport;
18+
public enum Type {
19+
SHELL,
20+
CB_IMPORT,
21+
CB_EXPORT,
22+
CBC_PILLOW_FIGHT,
23+
MCTIMINGS
1824
}
19-
2025
}
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package com.couchbase.intellij.tools;
22

3-
import java.util.List;
3+
import java.util.Map;
44

55
public class ToolSpec {
66

77
private final String url;
88
private final String installationPath;
9-
private final List<String> toolsList;
9+
private final Map<CBTools.Type, String> toolsMap;
1010

11-
public ToolSpec(String url, String installationPath, List<String> toolsList) {
11+
public ToolSpec(String url, String installationPath, Map<CBTools.Type, String> toolsMap) {
1212
this.url = url;
1313
this.installationPath = installationPath;
14-
this.toolsList = toolsList;
14+
this.toolsMap = toolsMap;
1515
}
1616

1717
public String getUrl() {
@@ -22,7 +22,7 @@ public String getInstallationPath() {
2222
return installationPath;
2323
}
2424

25-
public List<String> getToolsList() {
26-
return toolsList;
25+
public Map<CBTools.Type, String> getToolsMap() {
26+
return toolsMap;
2727
}
2828
}

0 commit comments

Comments
 (0)