@@ -92,26 +92,26 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
9292 jPanel1 .setLayout (new org .netbeans .lib .awtextra .AbsoluteLayout ());
9393
9494 positionsTable .setModel (new javax .swing .table .DefaultTableModel (
95- new Object [][] {
95+ new Object [][]{
9696
97- },
98- new String [] {
99- "ID" , "Postion Name" , "Salary" , "Description" , "Created At"
100- }
97+ },
98+ new String [] {
99+ "ID" , "Postion Name" , "Salary" , "Description" , "Created At"
100+ }
101101 ) {
102- Class [] types = new Class [] {
103- java .lang .Integer .class , java .lang .String .class , java .lang .String .class , java .lang .String .class , java .lang .String .class
102+ Class [] types = new Class [] {
103+ java .lang .Integer .class , java .lang .String .class , java .lang .String .class , java .lang .String .class , java .lang .String .class
104104 };
105- boolean [] canEdit = new boolean [] {
106- false , false , false , false , false
105+ boolean [] canEdit = new boolean [] {
106+ false , false , false , false , false
107107 };
108108
109109 public Class getColumnClass (int columnIndex ) {
110- return types [columnIndex ];
110+ return types [columnIndex ];
111111 }
112112
113113 public boolean isCellEditable (int rowIndex , int columnIndex ) {
114- return canEdit [columnIndex ];
114+ return canEdit [columnIndex ];
115115 }
116116 });
117117 positionsTable .getTableHeader ().setReorderingAllowed (false );
@@ -278,14 +278,29 @@ private void deletePositionButtonActionPerformed(java.awt.event.ActionEvent evt)
278278 }//GEN-LAST:event_deletePositionButtonActionPerformed
279279
280280 private void editPositionButtonActionPerformed (java .awt .event .ActionEvent evt ) {//GEN-FIRST:event_editPositionButtonActionPerformed
281- int selectedRow = positionsTable .getSelectedRow ();
282- if (selectedRow == -1 ) return ;
283- int positionId = (int ) positionsTable .getValueAt (selectedRow , 0 );
284- PositionDetails positionDetails = (PositionDetails ) HumanResourceInformationSystem .FRAMES .get (Windows .POSITION_DETAILS ).get ();
285- positionDetails .openHrEditPosition (positionId );
281+ int [] selectedRows = positionsTable .getSelectedRows ();
282+ if (selectedRows .length == 0 ) return ;
283+
284+ if (selectedRows .length == 1 ) {
285+ // Single selection: hide ViewPosition and use canonical instance
286+ int positionId = (int ) positionsTable .getValueAt (selectedRows [0 ], 0 );
287+ PositionDetails positionDetails = (PositionDetails ) HumanResourceInformationSystem .FRAMES .get (Windows .POSITION_DETAILS ).get ();
288+ setVisible (false );
289+ positionDetails .openForHrFromViewPositions (positionId );
290+ } else {
291+ // Multiple selection: create new instances for each, ViewPosition stays visible
292+ for (int selectedRow : selectedRows ) {
293+ final int positionId = (int ) positionsTable .getValueAt (selectedRow , 0 );
294+ SwingUtilities .invokeLater (() -> {
295+ PositionDetails positionDetails = new PositionDetails ();
296+ positionDetails .openHrEditPositionMultiple (positionId );
297+ });
298+ }
299+ }
286300 }//GEN-LAST:event_editPositionButtonActionPerformed
287301
288302 private void refreshButtonActionPerformed (java .awt .event .ActionEvent evt ) {//GEN-FIRST:event_refreshButtonActionPerformed
303+ final String QUERY = searchField .getText ();
289304 if (Validator .isEmptyOrNullString (searchField .getText ())) {
290305 DefaultTableModel positionsTableModel = Util .UI .clearAndGetTableModel (Util .UI .getTableModel (positionsTable ), () -> {
291306 editPositionButton .setEnabled (false );
@@ -299,41 +314,42 @@ private void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN
299314 );
300315 return ;
301316 }
317+ if (QUERY .contains ("Search position by" )) return ;
302318 searchButtonActionPerformed (evt );
303319 }//GEN-LAST:event_refreshButtonActionPerformed
304320
305321 private void searchButtonActionPerformed (java .awt .event .ActionEvent evt ) {//GEN-FIRST:event_searchButtonActionPerformed
306- String query = searchField .getText ();
322+ final String QUERY = searchField .getText ();
307323 String filter = filters .getItemAt (filters .getSelectedIndex ());
308- if (Validator .isEmptyOrNullString (query )) {
309- JOptionPane .showMessageDialog (this , "Please enter your search query and choose search filter" , "Warning" , JOptionPane .WARNING_MESSAGE );
324+ if (Validator .isEmptyOrNullString (QUERY )) {
325+ JOptionPane .showMessageDialog (this , "Please enter your search QUERY and choose search filter" , "Warning" , JOptionPane .WARNING_MESSAGE );
310326 return ;
311327 }
312328 DefaultTableModel model = Util .UI .clearAndGetTableModel (Util .UI .getTableModel (positionsTable ));
313329 if (Objects .equals (filter , "Name" )) {
314330 HumanResourceInformationSystem .POSITION_SERVICE
315- .getPositionByName (query )
331+ .getPositionByName (QUERY )
316332 .thenAccept (positions -> addPositions (positions , model ))
317333 .exceptionally (throwable -> {
318334 JOptionPane .showMessageDialog (this , throwable .getMessage (), "Error" , JOptionPane .ERROR_MESSAGE );
319335 throw new RuntimeException (throwable );
320336 });
321337 } else if (Objects .equals (filter , "Salary" )) {
322338
323- if (!Validator .isNumber (query )) {
324- JOptionPane .showMessageDialog (this , "Salary query must be a number" , "Warning" , JOptionPane .WARNING_MESSAGE );
339+ if (!Validator .isNumber (QUERY )) {
340+ JOptionPane .showMessageDialog (this , "Salary QUERY must be a number" , "Warning" , JOptionPane .WARNING_MESSAGE );
325341 return ;
326342 }
327343 HumanResourceInformationSystem .POSITION_SERVICE
328- .getPositionBySalary (Double .parseDouble (query ))
344+ .getPositionBySalary (Double .parseDouble (QUERY ))
329345 .thenAccept (positions -> addPositions (positions , model ))
330346 .exceptionally (throwable -> {
331347 JOptionPane .showMessageDialog (this , throwable .getMessage (), "Error" , JOptionPane .ERROR_MESSAGE );
332348 throw new RuntimeException (throwable );
333349 });
334350 } else if (Objects .equals (filter , "Description" )) {
335351 HumanResourceInformationSystem .POSITION_SERVICE
336- .getPositionByDescription (query )
352+ .getPositionByDescription (QUERY )
337353 .thenAccept (positions -> addPositions (positions , model ))
338354 .exceptionally (throwable -> {
339355 JOptionPane .showMessageDialog (this , throwable .getMessage (), "Error" , JOptionPane .ERROR_MESSAGE );
0 commit comments