Skip to content

Commit 1f5c1d8

Browse files
authored
Merge pull request #92 from CSC207-2022F-UofT/patch-install
Patch install
2 parents a1e029e + feaa505 commit 1f5c1d8

23 files changed

+593
-308
lines changed

src/main/java/org/hydev/mcpm/client/DatabaseManager.java

Lines changed: 0 additions & 88 deletions
This file was deleted.

src/main/java/org/hydev/mcpm/client/Downloader.java

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,11 @@ public class Downloader
3333
* @param url Remote file URL
3434
* @param to Local file path
3535
*/
36-
public void downloadFile(String url, File to)
36+
public void downloadFile(String url, String to)
3737
{
3838
try (var client = HttpClients.createDefault())
3939
{
40+
File fos = new File(to);
4041
var get = new HttpGet(url);
4142
var bytes = client.execute(get, (req) ->
4243
{
@@ -45,7 +46,7 @@ public void downloadFile(String url, File to)
4546
var builder = new ByteArrayOutputStream((int) total);
4647

4748
// Create progress row
48-
var row = new ProgressRow(total).desc(to.getName()).descLen(30);
49+
var row = new ProgressRow(total).desc(fos.getName()).descLen(30);
4950
bar.appendBar(row);
5051

5152
try (var stream = entity.getContent())
@@ -63,8 +64,12 @@ public void downloadFile(String url, File to)
6364

6465
return builder.toByteArray();
6566
});
66-
67-
Files.write(to.toPath(), bytes);
67+
try {
68+
Files.write(fos.toPath(), bytes);
69+
}
70+
catch (RuntimeException e) {
71+
throw new RuntimeException(e);
72+
}
6873
}
6974
catch (IOException e)
7075
{
@@ -79,7 +84,7 @@ public void downloadFile(String url, File to)
7984
*
8085
* @param urls Mapping of remote urls to local file paths
8186
*/
82-
public void downloadFiles(Map<String, File> urls)
87+
public void downloadFiles(Map<String, String> urls)
8388
{
8489
try (ExecutorService executor = Executors.newFixedThreadPool(threads))
8590
{
@@ -91,7 +96,7 @@ public void downloadFiles(Map<String, File> urls)
9196
{
9297
executor.submit(() ->
9398
{
94-
File to = urls.get(url);
99+
String to = urls.get(url);
95100
downloadFile(url, to);
96101
});
97102
}
@@ -128,26 +133,34 @@ public static void main(String[] args)
128133
{
129134
// Remember to chang link to test
130135
String link = "https://sd.blackball.lv/library/Introduction_to_Algorithms_Third_Edition_(2009).pdf";
131-
File out = new File("./Introduction_to_Algorithms_Third_Edition.pdf");
136+
String out = "./Introduction_to_Algorithms_Third_Edition.pdf";
132137
String link1 = "https://www.iusb.edu/students/academic-success-programs/academic-centers-for-excellence/docs/Basic%20Math%20Review%20Card.pdf";
133-
File out1 = new File("./Math.pdf");
138+
String out1 = "./Math.pdf";
134139
String link2 = "https://ouopentextbooks.org/mathematics/files/2015/07/1503.pdf";
135-
File out2 = new File("./1503");
140+
String out2 = "./1503";
136141
String link3 = "https://faculty.math.illinois.edu/~aydin/math220/lecturenotes/m220_Sec1_4.pdf";
137-
File out3 = new File("./m220_Sec1_4");
142+
String out3 = "./m220_Sec1_4";
138143
String link4 = "https://ocw.mit.edu/ans7870/9/9.00SC/MIT9_00SCF11_text.pdf";
139-
File out4 = new File("./MIT9_00SCF11_text");
144+
String out4 = "./MIT9_00SCF11_text";
140145

141146
final var downloader = new Downloader();
142147

143-
Map<String, File> urls = new HashMap<>();
148+
Map<String, String> urls = new HashMap<>();
144149
urls.put(link, out);
145150
urls.put(link1, out1);
146151
urls.put(link2, out2);
147152
urls.put(link3, out3);
148153
urls.put(link4, out4);
149154
downloader.downloadFiles(urls);
150-
out.delete();
151-
out1.delete();
155+
File outFile = new File(out);
156+
outFile.delete();
157+
File outFile1 = new File(out1);
158+
outFile1.delete();
159+
File outFile2 = new File(out2);
160+
outFile2.delete();
161+
File outFile3 = new File(out3);
162+
outFile3.delete();
163+
File outFile4 = new File(out4);
164+
outFile4.delete();
152165
}
153166
}

src/main/java/org/hydev/mcpm/client/arguments/CommandsFactory.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.hydev.mcpm.client.arguments;
22

3-
import org.hydev.mcpm.client.DatabaseManager;
43
import org.hydev.mcpm.client.Downloader;
54
import org.hydev.mcpm.client.arguments.parsers.CommandParser;
65
import org.hydev.mcpm.client.arguments.parsers.ExportPluginsParser;
@@ -31,6 +30,7 @@
3130
import org.hydev.mcpm.client.commands.controllers.UpdateController;
3231
import org.hydev.mcpm.client.display.presenters.SearchPresenter;
3332
import org.hydev.mcpm.client.local.LocalPluginTracker;
33+
import org.hydev.mcpm.client.display.presenters.InstallPresenter;
3434
import org.hydev.mcpm.client.updater.CheckForUpdatesInteractor;
3535
import org.hydev.mcpm.client.list.ListAllInteractor;
3636
import org.hydev.mcpm.client.matcher.MatchPluginsInteractor;
@@ -77,8 +77,9 @@ public static List<CommandParser> baseParsers(boolean isMinecraft) {
7777
var searcher = new SearchInteractor(fetcher, listener);
7878
var installer = new InstallInteractor(
7979
new SpigotPluginDownloader(new Downloader(), mirror.selectedMirrorSupplier()),
80-
new DatabaseManager(superTracker, searcher),
81-
loader
80+
loader,
81+
searcher,
82+
superTracker
8283
);
8384
var matcher = new MatchPluginsInteractor(fetcher, listener);
8485
var updateChecker = new CheckForUpdatesInteractor(matcher);
@@ -96,6 +97,8 @@ public static List<CommandParser> baseParsers(boolean isMinecraft) {
9697
var updateController = new UpdateController(updater);
9798
var refreshController = new RefreshController(fetcher, listener, mirror);
9899

100+
// Presenters
101+
var installPresenter = new InstallPresenter();
99102
var searchPresenter = new SearchPresenter(pager);
100103

101104
/*
@@ -109,7 +112,7 @@ public static List<CommandParser> baseParsers(boolean isMinecraft) {
109112
new SearchParser(searchController, searchPresenter),
110113
new MirrorParser(mirrorController),
111114
new InfoParser(infoController),
112-
new InstallParser(installController),
115+
new InstallParser(installController, installPresenter),
113116
new RefreshParser(refreshController),
114117
new PageParser(pager),
115118
new UninstallParser(uninstallController),

src/main/java/org/hydev/mcpm/client/arguments/parsers/InstallParser.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,21 @@
44
import net.sourceforge.argparse4j.inf.Namespace;
55
import net.sourceforge.argparse4j.inf.Subparser;
66
import org.hydev.mcpm.client.commands.controllers.InstallController;
7-
import org.hydev.mcpm.client.display.presenters.InstallPresenter;
87
import org.hydev.mcpm.client.commands.presenters.InstallResultPresenter;
8+
import org.hydev.mcpm.client.display.presenters.InstallPresenter;
9+
import org.hydev.mcpm.client.installer.InstallInteractor;
10+
import org.hydev.mcpm.client.installer.input.InstallInput;
11+
import org.hydev.mcpm.client.installer.output.InstallResult;
912
import org.hydev.mcpm.client.search.SearchPackagesType;
1013

14+
import java.util.List;
1115
import java.util.function.Consumer;
1216

1317
/**
1418
* Handles parsing install arguments (to be dispatched to Controller).
1519
*/
1620

17-
public record InstallParser(InstallController controller) implements CommandParser
21+
public record InstallParser(InstallController controller, InstallResultPresenter presenter) implements CommandParser
1822
{
1923
@Override
2024
public String name() {
@@ -37,12 +41,10 @@ public void configure(Subparser parser) {
3741
@Override
3842
public void run(Namespace details, Consumer<String> log) {
3943
var name = details.getString("name");
40-
InstallResultPresenter installResultPresent = new InstallPresenter(log);
41-
42-
controller.install(name,
43-
SearchPackagesType.BY_NAME,
44-
!details.getBoolean("noLoad"),
45-
installResultPresent
46-
);
44+
List<InstallResult> result = controller.install(name,
45+
SearchPackagesType.BY_NAME,
46+
!details.getBoolean("noLoad"));
47+
presenter.displayResult(result, log);
4748
}
4849
}
50+

src/main/java/org/hydev/mcpm/client/arguments/parsers/UpdateParser.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import net.sourceforge.argparse4j.impl.Arguments;
44
import net.sourceforge.argparse4j.inf.Namespace;
55
import net.sourceforge.argparse4j.inf.Subparser;
6-
76
import org.hydev.mcpm.client.commands.controllers.UpdateController;
87
import org.hydev.mcpm.client.display.presenters.LogUpdatePresenter;
98
import org.hydev.mcpm.client.display.presenters.InstallPresenter;
@@ -54,14 +53,11 @@ public void run(Namespace details, Consumer<String> log) {
5453
// and I don't want UpdatePresenter to depend on Consumer<String>,
5554
// I'll instantiate this every call.
5655
var presenter = new LogUpdatePresenter(log);
57-
InstallResultPresenter installPresenter = new InstallPresenter(log);
58-
5956
controller.update(
6057
details.getList("names"),
6158
details.getBoolean("load"),
6259
details.getBoolean("no-cache"),
63-
presenter,
64-
installPresenter
60+
presenter
6561
);
6662
}
6763
}

src/main/java/org/hydev/mcpm/client/commands/controllers/InstallController.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package org.hydev.mcpm.client.commands.controllers;
22

3+
import org.hydev.mcpm.client.installer.output.InstallResult;
34
import org.hydev.mcpm.client.search.SearchPackagesType;
45
import org.hydev.mcpm.client.installer.InstallBoundary;
56
import org.hydev.mcpm.client.installer.input.InstallInput;
6-
import org.hydev.mcpm.client.commands.presenters.InstallResultPresenter;
7+
8+
import java.util.List;
79

810
/**
911
* Controller class for the installation use case.
@@ -16,10 +18,10 @@ public record InstallController(InstallBoundary boundary)
1618
* @param name Plugin name from repository
1719
* @param type The type of searching package
1820
* @param load Whether to load after installing
19-
* @param resultPresenter display the state of the plugin
21+
* @return Results
2022
*/
21-
public void install(String name, SearchPackagesType type, boolean load, InstallResultPresenter resultPresenter) {
23+
public List<InstallResult> install(String name, SearchPackagesType type, boolean load) {
2224
var input = new InstallInput(name, type, load, true);
23-
var output = boundary.installPlugin(input, resultPresenter);
25+
return boundary.installPlugin(input);
2426
}
2527
}

src/main/java/org/hydev/mcpm/client/commands/controllers/UpdateController.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.hydev.mcpm.client.commands.controllers;
22

33
import org.hydev.mcpm.client.commands.presenters.UpdatePresenter;
4-
import org.hydev.mcpm.client.commands.presenters.InstallResultPresenter;
54
import org.hydev.mcpm.client.updater.UpdateBoundary;
65
import org.hydev.mcpm.client.updater.UpdateInput;
76

@@ -19,11 +18,9 @@ public record UpdateController(UpdateBoundary boundary) {
1918
* @param names A list of names to update.
2019
* @param load Whether to reload installed plugins (ignored on CLI environment).
2120
* @param noCache Whether to force fetch the database before updating.
22-
* @param presenter A presenter object to format the update boundary result.
2321
*/
24-
public void update(List<String> names, boolean load, boolean noCache, UpdatePresenter presenter,
25-
InstallResultPresenter installResultPresenter) {
26-
var input = new UpdateInput(names, load, noCache, installResultPresenter);
22+
public void update(List<String> names, boolean load, boolean noCache, UpdatePresenter presenter) {
23+
var input = new UpdateInput(names, load, noCache);
2724
var result = boundary.update(input);
2825

2926
// This is being done in the Controller for this time being.
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package org.hydev.mcpm.client.commands.presenters;
22

3-
import org.hydev.mcpm.client.installer.InstallResult;
3+
import org.hydev.mcpm.client.installer.output.InstallResult;
4+
5+
import java.util.List;
6+
import java.util.function.Consumer;
47

58
/**
69
* Interface for presenting the state of plugins
@@ -10,8 +13,7 @@ public interface InstallResultPresenter {
1013
/**
1114
* Display the string to the console
1215
*
13-
* @param installResult state of the installation
14-
* @param name Description of plugin state
16+
* @param results Resulting state of the installation
1517
*/
16-
void displayResult(InstallResult installResult, String name);
18+
void displayResult(List<InstallResult> results, Consumer<String> log);
1719
}

0 commit comments

Comments
 (0)