Skip to content

Commit 5d1e4e3

Browse files
cmaglieFederico Fissore
authored and
Federico Fissore
committedMar 27, 2015
Inverted MVC logic on installer to get a cleaner code.
Part of the control logic was moved from listeners to GUI class methods. This goes against a pure MVC but makes the code much more cleaner.
1 parent cf058c3 commit 5d1e4e3

File tree

5 files changed

+88
-157
lines changed

5 files changed

+88
-157
lines changed
 

‎app/src/cc/arduino/packages/contributions/ui/ContributionManagerUI.java

+74-34
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,14 @@
6464
import javax.swing.table.TableColumnModel;
6565

6666
import cc.arduino.packages.contributions.ContributedPlatform;
67-
import cc.arduino.packages.contributions.ContributionsIndex;
67+
import cc.arduino.packages.contributions.ContributionInstaller;
68+
import cc.arduino.packages.contributions.ContributionsIndexer;
6869

6970
@SuppressWarnings("serial")
7071
public class ContributionManagerUI extends JDialog {
7172

7273
private FilterJTextField filterField;
7374

74-
private ContributionManagerUIListener listener = null;
75-
7675
private JLabel categoryLabel;
7776
private JComboBox categoryChooser;
7877
private Component categoryStrut1;
@@ -92,8 +91,9 @@ public class ContributionManagerUI extends JDialog {
9291
private String category;
9392
private String[] filters;
9493

95-
public ContributionManagerUI(Frame parent) {
94+
public ContributionManagerUI(Frame parent, ContributionsIndexer indexer) {
9695
super(parent, "Boards Manager", Dialog.ModalityType.APPLICATION_MODAL);
96+
9797
setResizable(true);
9898

9999
Container pane = getContentPane();
@@ -144,40 +144,25 @@ protected void onFilter(String[] _filters) {
144144

145145
contribTable = new JTable(contribModel);
146146
contribTable.setTableHeader(null);
147-
// contribTable.getTableHeader().setEnabled(false);
148-
// contribTable.setRowSelectionAllowed(false);
149147
contribTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
150148
contribTable.setColumnSelectionAllowed(false);
151149
contribTable.setDragEnabled(false);
152150
contribTable.setIntercellSpacing(new Dimension(0, 1));
153151
contribTable.setShowVerticalLines(false);
154-
// contribTable.addMouseListener(new MouseAdapter() {
155-
// @Override
156-
// public void mousePressed(MouseEvent e) {
157-
// if (listener == null)
158-
// return;
159-
// Point point = e.getPoint();
160-
// int row = contribTable.rowAtPoint(point);
161-
// int col = contribTable.columnAtPoint(point);
162-
// }
163-
// });
152+
164153
{
165154
TableColumnModel tcm = contribTable.getColumnModel();
166155
TableColumn col = tcm.getColumn(DESCRIPTION_COL);
167156
col.setCellRenderer(new ContributedPlatformTableCell());
168157
cellEditor = new ContributedPlatformTableCell() {
169158
@Override
170159
protected void onInstall(ContributedPlatform selectedPlatform) {
171-
if (listener == null)
172-
return;
173-
listener.onInstall(selectedPlatform);
160+
onInstallPressed(selectedPlatform);
174161
}
175162

176163
@Override
177164
protected void onRemove(ContributedPlatform installedPlatform) {
178-
if (listener == null)
179-
return;
180-
listener.onRemove(installedPlatform);
165+
onRemovePressed(installedPlatform);
181166
}
182167
};
183168
col.setCellEditor(cellEditor);
@@ -205,17 +190,15 @@ protected void onRemove(ContributedPlatform installedPlatform) {
205190
cancelButton.addActionListener(new ActionListener() {
206191
@Override
207192
public void actionPerformed(ActionEvent arg0) {
208-
if (listener != null)
209-
listener.onCancelPressed();
193+
onCancelPressed();
210194
}
211195
});
212196

213197
JButton updateButton = new JButton(_("Update list"));
214198
updateButton.addActionListener(new ActionListener() {
215199
@Override
216200
public void actionPerformed(ActionEvent arg0) {
217-
if (listener != null)
218-
listener.onUpdatePressed();
201+
onUpdatePressed();
219202
}
220203
});
221204

@@ -255,10 +238,18 @@ public void run() {
255238
});
256239
}
257240
});
258-
}
259241

260-
public void setListener(ContributionManagerUIListener listener) {
261-
this.listener = listener;
242+
contribModel.setIndex(indexer.getIndex());
243+
setCategories(indexer.getIndex().getCategories());
244+
245+
// Create installer with his dialog
246+
installer = new ContributionInstaller(indexer);
247+
installer.setListener(new ContributionInstaller.Listener() {
248+
@Override
249+
public void onProgress(double progress, String message) {
250+
setProgress((int) progress, message);
251+
}
252+
});
262253
}
263254

264255
public void setCategories(Collection<String> categories) {
@@ -280,11 +271,6 @@ public void setCategories(Collection<String> categories) {
280271
categoryStrut3.setVisible(show);
281272
}
282273

283-
public void setContributions(ContributionsIndex index) {
284-
contribModel.setIndex(index);
285-
setCategories(index.getCategories());
286-
}
287-
288274
public void setProgressVisible(boolean visible) {
289275
progressBox.setVisible(visible);
290276

@@ -318,4 +304,58 @@ public void setProgress(int progress, String text) {
318304
if (text != null)
319305
progressBar.setString(text);
320306
}
307+
308+
public void onUpdatePressed() {
309+
// TODO Auto-generated method stub
310+
System.out.println("Update pressed");
311+
}
312+
313+
/*
314+
* Installer methods follows
315+
*/
316+
317+
private ContributionInstaller installer;
318+
private Thread installerThread = null;
319+
320+
public void onCancelPressed() {
321+
if (installerThread != null)
322+
installerThread.interrupt();
323+
}
324+
325+
public void onInstallPressed(final ContributedPlatform platform) {
326+
installerThread = new Thread(new Runnable() {
327+
@Override
328+
public void run() {
329+
try {
330+
setProgressVisible(true);
331+
installer.install(platform);
332+
} catch (Exception e) {
333+
// TODO Show ERROR
334+
e.printStackTrace();
335+
} finally {
336+
setProgressVisible(false);
337+
}
338+
}
339+
});
340+
installerThread.start();
341+
}
342+
343+
public void onRemovePressed(final ContributedPlatform platform) {
344+
installerThread = new Thread(new Runnable() {
345+
@Override
346+
public void run() {
347+
try {
348+
setProgressVisible(true);
349+
installer.remove(platform);
350+
} catch (Exception e) {
351+
// TODO Show ERROR
352+
e.printStackTrace();
353+
} finally {
354+
setProgressVisible(false);
355+
}
356+
}
357+
});
358+
installerThread.start();
359+
}
360+
321361
}

‎app/src/cc/arduino/packages/contributions/ui/ContributionManagerUIListener.java

-43
This file was deleted.

‎app/src/processing/app/Base.java

+1-71
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,7 @@
2323
package processing.app;
2424

2525
import cc.arduino.packages.DiscoveryManager;
26-
import cc.arduino.packages.contributions.ContributedPlatform;
27-
import cc.arduino.packages.contributions.ContributionInstaller;
28-
import cc.arduino.packages.contributions.ContributionInstaller.Listener;
2926
import cc.arduino.packages.contributions.ui.ContributionManagerUI;
30-
import cc.arduino.packages.contributions.ui.ContributionManagerUIListener;
3127
import cc.arduino.view.SplashScreenHelper;
3228
import processing.app.debug.TargetBoard;
3329
import processing.app.debug.TargetPackage;
@@ -1114,73 +1110,7 @@ public void onBoardOrPortChange() {
11141110

11151111
private void openInstallBoardDialog() {
11161112
// Create dialog for contribution manager
1117-
final ContributionManagerUI managerUI = new ContributionManagerUI(activeEditor);
1118-
final Listener installerListener = new ContributionInstaller.Listener() {
1119-
@Override
1120-
public void onProgress(double progress, String message) {
1121-
managerUI.setProgress((int) progress, message);
1122-
}
1123-
};
1124-
managerUI.setListener(new ContributionManagerUIListener() {
1125-
1126-
@Override
1127-
public void onUpdatePressed() {
1128-
// TODO Auto-generated method stub
1129-
System.out.println("Update pressed");
1130-
}
1131-
1132-
Thread task = null;
1133-
1134-
@Override
1135-
public void onCancelPressed() {
1136-
if (task != null)
1137-
task.interrupt();
1138-
}
1139-
1140-
@Override
1141-
public void onInstall(final ContributedPlatform platform) {
1142-
final ContributionInstaller installer = new ContributionInstaller(BaseNoGui.indexer);
1143-
installer.setListener(installerListener);
1144-
task = new Thread(new Runnable() {
1145-
@Override
1146-
public void run() {
1147-
try {
1148-
managerUI.setProgressVisible(true);
1149-
installer.install(platform);
1150-
} catch (Exception e) {
1151-
// TODO Show ERROR
1152-
e.printStackTrace();
1153-
} finally {
1154-
managerUI.setProgressVisible(false);
1155-
}
1156-
}
1157-
});
1158-
task.start();
1159-
}
1160-
1161-
@Override
1162-
public void onRemove(final ContributedPlatform platform) {
1163-
// Create installer with his dialog
1164-
final ContributionInstaller installer = new ContributionInstaller(BaseNoGui.indexer);
1165-
installer.setListener(installerListener);
1166-
task = new Thread(new Runnable() {
1167-
@Override
1168-
public void run() {
1169-
try {
1170-
managerUI.setProgressVisible(true);
1171-
installer.remove(platform);
1172-
} catch (Exception e) {
1173-
// TODO Show ERROR
1174-
e.printStackTrace();
1175-
} finally {
1176-
managerUI.setProgressVisible(false);
1177-
}
1178-
}
1179-
});
1180-
task.start();
1181-
}
1182-
});
1183-
managerUI.setContributions(BaseNoGui.indexer.getIndex());
1113+
ContributionManagerUI managerUI = new ContributionManagerUI(activeEditor, BaseNoGui.indexer);
11841114
managerUI.setVisible(true);
11851115
}
11861116

‎arduino-core/src/cc/arduino/packages/contributions/ContributionsIndexer.java

+10-9
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,16 @@
4848

4949
public class ContributionsIndexer {
5050

51-
private File preferencesFolder;
5251
private File packagesFolder;
5352
private File stagingFolder;
53+
private File indexFile;
5454
private ContributionsIndex index;
5555

56-
public ContributionsIndexer(File _preferencesFolder) {
57-
preferencesFolder = _preferencesFolder;
56+
public ContributionsIndexer(File preferencesFolder) {
5857
packagesFolder = new File(preferencesFolder, "packages");
59-
stagingFolder = new File(preferencesFolder, "staging");
58+
stagingFolder = new File(preferencesFolder, "staging" + File.separator +
59+
"packages");
60+
indexFile = new File(preferencesFolder, "package_index.json");
6061
}
6162

6263
// public static void main(String args[]) throws Exception {
@@ -75,7 +76,7 @@ public ContributionsIndexer(File _preferencesFolder) {
7576

7677
public void parseIndex() throws JsonParseException, IOException {
7778
// Parse index file
78-
parseIndex(new File(preferencesFolder, "package_index.json"));
79+
parseIndex(indexFile);
7980

8081
List<ContributedPackage> packages = index.getPackages();
8182
for (ContributedPackage pack : packages) {
@@ -224,10 +225,6 @@ public ContributionsIndex getIndex() {
224225
return index;
225226
}
226227

227-
public File getPreferencesFolder() {
228-
return preferencesFolder;
229-
}
230-
231228
public File getPackagesFolder() {
232229
return packagesFolder;
233230
}
@@ -236,4 +233,8 @@ public File getStagingFolder() {
236233
return stagingFolder;
237234
}
238235

236+
public File getIndexFile() {
237+
return indexFile;
238+
}
239+
239240
}

‎arduino-core/src/processing/app/BaseNoGui.java

+3
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,9 @@ static public void initLogger() {
586586

587587
static public void initPackages() throws Exception {
588588
indexer = new ContributionsIndexer(BaseNoGui.getSettingsFolder());
589+
if (!indexer.getIndexFile().isFile())
590+
// TODO: run first setup
591+
;
589592
indexer.parseIndex();
590593
indexer.syncWithFilesystem();
591594
System.out.println(indexer);

0 commit comments

Comments
 (0)