8
8
import java .awt .event .MouseEvent ;
9
9
import java .io .IOException ;
10
10
import java .sql .SQLException ;
11
+ import java .util .List ;
11
12
import java .util .Locale ;
13
+ import java .util .stream .Collectors ;
12
14
13
15
import javax .swing .JCheckBoxMenuItem ;
14
16
import javax .swing .JLabel ;
37
39
import home .gui .component .dialog .DialogCar ;
38
40
import home .gui .component .dialog .DialogMotorcycle ;
39
41
import home .gui .component .dialog .DialogTruck ;
42
+ import home .models .AbstractVehicle ;
40
43
import home .utils .Utils ;
41
44
42
45
public class Gui {
@@ -118,8 +121,9 @@ private void createTable() {
118
121
public void mousePressed (MouseEvent mouseEvent ) {
119
122
JTable table = (JTable ) mouseEvent .getSource ();
120
123
if (CLICK_COUNT == mouseEvent .getClickCount ()) {
124
+ int selectedTableRow = table .getSelectedRow ();
121
125
DialogCaller .showObjDialog (frame ,
122
- Storage .getInstance ().get (table . getSelectedRow ()) );
126
+ Storage .getInstance ().get (selectedTableRow ), selectedTableRow );
123
127
}
124
128
}
125
129
});
@@ -145,19 +149,13 @@ private void createButtons() {
145
149
btnDelete = new CustomJButton (GuiConsts .DELETE );
146
150
btnDelete .addActionListener (actionEvent -> {
147
151
Utils .runInThread (() -> {
148
- try {
149
- Long [] idsMarkedForDelete = Storage .getInstance ().getAll ().stream ()
150
- .filter (dataObj -> dataObj .isMarkedForDelete ())
151
- .map (dataObj -> Long .valueOf (dataObj .getId ()))
152
- .toArray (Long []::new );
153
- if (idsMarkedForDelete .length > 0 ) {
154
- DaoSQLite .getInstance ().delete (idsMarkedForDelete );
155
- Storage .getInstance ().refresh (DaoSQLite .getInstance ().readAll ());
156
- }
157
- } catch (SQLException e ) {
158
- Utils .logAndShowError (LOG , frame ,
159
- "Error while delete:\n " + e .getLocalizedMessage (),
160
- "Deletion error" , e );
152
+ List <AbstractVehicle > obsMarkedForDelete = Storage .getInstance ()
153
+ .getAll ().stream ()
154
+ .filter (dataObj -> dataObj .isMarkedForDelete ())
155
+ .collect (Collectors .toList ());
156
+ if (!obsMarkedForDelete .isEmpty ()) {
157
+ Storage .getInstance ().deleteObjects (obsMarkedForDelete );
158
+ Gui .getInstance ().refreshTable ();
161
159
}
162
160
});
163
161
});
@@ -178,8 +176,11 @@ private void createPanels() {
178
176
private void createMenu () {
179
177
var createOfOpenItem = new JMenuItem (GuiConsts .CREATE_OR_OPEN );
180
178
createOfOpenItem .addActionListener (new CreateOrOpenActionListener (frame , dbLabel ));
179
+ var saveItem = new JMenuItem (GuiConsts .SAVE );
180
+ saveItem .addActionListener (new SaveActionListener (frame ));
181
181
var fileMenu = new JMenu (GuiConsts .FILE );
182
182
fileMenu .add (createOfOpenItem );
183
+ fileMenu .add (saveItem );
183
184
184
185
var defaultItem = new JCheckBoxMenuItem (GuiConsts .DEFAULT );
185
186
defaultItem .setSelected (Settings .STYLE .equalsIgnoreCase (GuiConsts .DEFAULT ));
@@ -252,7 +253,7 @@ public CreateOrOpenActionListener(Component parent, JLabel dbLabel) {
252
253
public void actionPerformed (ActionEvent event ) {
253
254
Utils .runInThread (() -> {
254
255
try {
255
- new CustomJFileChooser (parent ). showCreateOrOpen ();
256
+ new CustomJFileChooser (parent , CustomJFileChooser . CREATE_OR_OPEN ). showChooser ();
256
257
DbInitializer .createTableIfNotExists ();
257
258
Storage .getInstance ().refresh (DaoSQLite .getInstance ().readAll ());
258
259
dbLabel .setText (Settings .DB_FILE_PATH );
@@ -269,4 +270,34 @@ public void actionPerformed(ActionEvent event) {
269
270
});
270
271
}
271
272
}
273
+
274
+ private static class SaveActionListener implements ActionListener {
275
+
276
+ private final Component parent ;
277
+
278
+ public SaveActionListener (Component parent ) {
279
+ this .parent = parent ;
280
+ }
281
+
282
+ @ Override
283
+ public void actionPerformed (ActionEvent event ) {
284
+ Utils .runInThread (() -> {
285
+ try {
286
+ new CustomJFileChooser (parent , CustomJFileChooser .SAVE ).showChooser ();
287
+ DbInitializer .createTableIfNotExists ();
288
+ DaoSQLite .getInstance ().saveAllChanges ();
289
+ Storage .getInstance ().refresh (DaoSQLite .getInstance ().readAll ());
290
+ } catch (IOException e ) {
291
+ Utils .logAndShowError (LOG , parent , "Error while create/open DB file." ,
292
+ "Create/Open file error." , e );
293
+ System .exit (1 );
294
+ } catch (SQLException e ) {
295
+ Utils .logAndShowError (LOG , parent ,
296
+ "Error while read selected DB file.\n " + e .getLocalizedMessage (),
297
+ "Read selected DB error" , e );
298
+ System .exit (1 );
299
+ }
300
+ });
301
+ }
302
+ }
272
303
}
0 commit comments