48
48
import javax .swing .BorderFactory ;
49
49
import javax .swing .ButtonGroup ;
50
50
import javax .swing .GroupLayout ;
51
+ import javax .swing .Icon ;
51
52
import javax .swing .JButton ;
52
53
import javax .swing .JComboBox ;
53
54
import javax .swing .JFileChooser ;
84
85
import net .nikr .eve .jeveasset .gui .shared .components .JMainTabSecondary ;
85
86
import net .nikr .eve .jeveasset .gui .shared .components .JMultiSelectionDialog ;
86
87
import net .nikr .eve .jeveasset .gui .shared .components .JTextDialog ;
88
+ import net .nikr .eve .jeveasset .gui .shared .components .JTextDialog .TextImport ;
89
+ import net .nikr .eve .jeveasset .gui .shared .components .JTextDialog .TextReturn ;
87
90
import net .nikr .eve .jeveasset .gui .shared .components .ListComboBoxModel ;
88
91
import net .nikr .eve .jeveasset .gui .shared .menu .JMenuUI ;
89
92
import net .nikr .eve .jeveasset .gui .shared .table .EventListManager ;
92
95
import net .nikr .eve .jeveasset .gui .tabs .overview .OverviewGroup ;
93
96
import net .nikr .eve .jeveasset .gui .tabs .overview .OverviewLocation ;
94
97
import net .nikr .eve .jeveasset .gui .tabs .overview .OverviewLocation .LocationType ;
98
+ import net .nikr .eve .jeveasset .gui .tabs .routing .JRouteEditDialog .Route ;
95
99
import net .nikr .eve .jeveasset .i18n .General ;
96
100
import net .nikr .eve .jeveasset .i18n .GuiShared ;
97
101
import net .nikr .eve .jeveasset .i18n .TabsRouting ;
@@ -121,6 +125,47 @@ public class RoutingTab extends JMainTabSecondary {
121
125
122
126
private static final Logger LOG = LoggerFactory .getLogger (RoutingTab .class );
123
127
128
+ enum ImportSystemType implements TextImport {
129
+ SYSTEM_NAMES (TabsRouting .get ().resultImportNames (), SYSTEM_NAMES_EXAMPLE , Images .STOCKPILE_SHOPPING_LIST .getIcon ()),
130
+ SYSTEM_IDS (TabsRouting .get ().resultImportIDs (), SYSTEM_IDS_EXAMPLE , Images .LOC_SYSTEM .getIcon ());
131
+ private final String type ;
132
+ private final String example ;
133
+ private final Icon icon ;
134
+
135
+ private ImportSystemType (String type , String example , Icon icon ) {
136
+ this .type = type ;
137
+ this .example = example ;
138
+ this .icon = icon ;
139
+ }
140
+
141
+ @ Override
142
+ public String getType () {
143
+ return type ;
144
+ }
145
+
146
+ @ Override
147
+ public String getExample () {
148
+ return example ;
149
+ }
150
+
151
+ @ Override
152
+ public Icon getIcon () {
153
+ return icon ;
154
+ }
155
+
156
+ }
157
+
158
+ private static final String SYSTEM_NAMES_EXAMPLE =
159
+ "Jita\n " +
160
+ "Sobaseki\n " +
161
+ "Malkalen\n " +
162
+ "New Caldari\n " +
163
+ "Niyabainen\n " +
164
+ "Perimeter\n " +
165
+ "Maurasi" ;
166
+
167
+ private static final String SYSTEM_IDS_EXAMPLE = "30000142 30001363 30001393 30000145 30000143 30000144 30000140" ;
168
+
124
169
private enum RoutingAction {
125
170
ADD ,
126
171
REMOVE ,
@@ -135,7 +180,8 @@ private enum RoutingAction {
135
180
ROUTE_SAVE ,
136
181
ROUTE_EDIT ,
137
182
ROUTE_MANAGE ,
138
- ROUTE_IMPORT ,
183
+ IMPORT_ROUTE_XML ,
184
+ IMPORT_ROUTE ,
139
185
ROUTE_EXPORT ,
140
186
AVOID_ADD ,
141
187
AVOID_REMOVE ,
@@ -959,8 +1005,8 @@ private void processRouteInner() {
959
1005
try {
960
1006
//Update Graph if needed (AKA filter has changed)
961
1007
if (lastSecMin != (Double ) jSecurityMinimum .getSelectedItem ()
962
- || lastSecMax != (Double ) jSecurityMaximum .getSelectedItem ()
963
- || !lastAvoid .equals (new ArrayList <>(Settings .get ().getRoutingSettings ().getAvoid ().keySet ()))) {
1008
+ || lastSecMax != (Double ) jSecurityMaximum .getSelectedItem ()
1009
+ || !lastAvoid .equals (new ArrayList <>(Settings .get ().getRoutingSettings ().getAvoid ().keySet ()))) {
964
1010
buildGraph (false );
965
1011
lastSecMin = (Double ) jSecurityMinimum .getSelectedItem ();
966
1012
lastSecMax = (Double ) jSecurityMaximum .getSelectedItem ();
@@ -1414,6 +1460,83 @@ private ImportReturn importOptions(final RouteResult routeResult, final String r
1414
1460
return importReturn ;
1415
1461
}
1416
1462
1463
+ private boolean makeRoute (List <Route > list ) {
1464
+ if (list .isEmpty ()) {
1465
+ JOptionPane .showMessageDialog (program .getMainWindow ().getFrame (), TabsRouting .get ().resultImportRouteEmpty (), TabsRouting .get ().resultImportRoute (), JOptionPane .PLAIN_MESSAGE );
1466
+ return false ;
1467
+ }
1468
+ if (list .size () < 2 ) {
1469
+ JOptionPane .showMessageDialog (program .getMainWindow ().getFrame (), TabsRouting .get ().resultImportRouteInvalid (), TabsRouting .get ().resultImportRoute (), JOptionPane .PLAIN_MESSAGE );
1470
+ return false ;
1471
+ }
1472
+ RouteResult result ;
1473
+ try {
1474
+ result = JRouteEditDialog .makeRouteResult (program , systemCache , filteredGraph , list , TabsRouting .get ().resultImported ());
1475
+ } catch (DisconnectedGraphException ex ) {
1476
+ JOptionPane .showMessageDialog (program .getMainWindow ().getFrame (),
1477
+ ex .getMessage (),
1478
+ TabsRouting .get ().error (),
1479
+ JOptionPane .ERROR_MESSAGE );
1480
+ return false ;
1481
+ }
1482
+ if (jResult .isEnabled ()) {
1483
+ int value = JOptionPane .showConfirmDialog (program .getMainWindow ().getFrame (), TabsRouting .get ().resultOverwrite (), TabsRouting .get ().resultImportRoute (), JOptionPane .OK_CANCEL_OPTION , JOptionPane .QUESTION_MESSAGE );
1484
+ if (value != JOptionPane .OK_OPTION ) {
1485
+ return false ;
1486
+ }
1487
+ }
1488
+ setRouteResult (result );
1489
+ return true ;
1490
+ }
1491
+
1492
+ private void importTextRoute (String text , ImportSystemType selected ) {
1493
+ TextReturn <ImportSystemType > textReturn = jImportSystemsDialog .importText (text , ImportSystemType .values (), selected );
1494
+ String importText = textReturn .getText ();
1495
+ ImportSystemType importSystemType = textReturn .getType ();
1496
+ if (importText == null || importSystemType == null ) {
1497
+ return ; //Cancel
1498
+ }
1499
+ if (importText .isEmpty ()) {
1500
+ JOptionPane .showMessageDialog (program .getMainWindow ().getFrame (), TabsRouting .get ().resultImportRouteEmpty (), TabsRouting .get ().resultImportRoute (), JOptionPane .PLAIN_MESSAGE );
1501
+ importTextRoute (importText , importSystemType );
1502
+ return ;
1503
+ }
1504
+ List <Route > list = new ArrayList <>();
1505
+ if (importSystemType == ImportSystemType .SYSTEM_NAMES ) {
1506
+ //Build lookup map
1507
+ Map <String , SolarSystem > systems = new HashMap <>();
1508
+ for (SolarSystem node : systemCache .values ()) {
1509
+ systems .put (node .getSystem ().toLowerCase (), node );
1510
+ }
1511
+ //For each line, check if the line matches a system name
1512
+
1513
+ for (String line : importText .split ("[\r \n ]+" )) {
1514
+ SolarSystem system = systems .get (line .toLowerCase ().trim ());
1515
+ if (system != null ) {
1516
+ list .add (new Route (system .getSystemID (), system .getName ()));
1517
+ }
1518
+ }
1519
+ } else if (importSystemType == ImportSystemType .SYSTEM_IDS ) {
1520
+ //For each line, check if the line matches a system name
1521
+ for (String line : importText .split ("\\ s+" )) {
1522
+ try {
1523
+ long systemID = Long .parseLong (line .toLowerCase ().trim ());
1524
+ SolarSystem system = systemCache .get (systemID );
1525
+ if (system != null ) {
1526
+ list .add (new Route (system .getSystemID (), system .getName ()));
1527
+ }
1528
+ } catch (NumberFormatException ex ) {
1529
+ //Try next line...
1530
+ }
1531
+ }
1532
+ }
1533
+
1534
+ boolean update = makeRoute (list );
1535
+ if (!update ) {
1536
+ importTextRoute (importText , importSystemType );
1537
+ }
1538
+ }
1539
+
1417
1540
private class ListenerClass extends MouseAdapter implements ActionListener , ListSelectionListener {
1418
1541
1419
1542
@ Override
@@ -1500,7 +1623,7 @@ public void actionPerformed(final ActionEvent e) {
1500
1623
program .saveSettings ("Routing (Security)" );
1501
1624
updateFilterLabels ();
1502
1625
} else if (RoutingAction .IMPORT_SYSTEMS .name ().equals (e .getActionCommand ())) {
1503
- String importText = jImportSystemsDialog .importText ();
1626
+ String importText = jImportSystemsDialog .importText ("" , SYSTEM_NAMES_EXAMPLE );
1504
1627
if (importText == null || importText .isEmpty ()) {
1505
1628
return ;
1506
1629
}
@@ -1595,7 +1718,7 @@ protected void fail() {
1595
1718
} else if (RoutingAction .ROUTE_MANAGE .name ().equals (e .getActionCommand ())) {
1596
1719
jManageRoutesDialog .updateData ();
1597
1720
jManageRoutesDialog .setVisible (true );
1598
- } else if (RoutingAction .ROUTE_IMPORT .name ().equals (e .getActionCommand ())) {
1721
+ } else if (RoutingAction .IMPORT_ROUTE_XML .name ().equals (e .getActionCommand ())) {
1599
1722
jFileChooser .setSelectedFile (null );
1600
1723
jFileChooser .setCurrentDirectory (null );
1601
1724
int returnValue = jFileChooser .showOpenDialog (program .getMainWindow ().getFrame ());
@@ -1640,6 +1763,8 @@ protected void fail() {
1640
1763
}
1641
1764
Settings .unlock ("Routing (Import Route)" );
1642
1765
program .saveSettings ("Routing (Import Route)" );
1766
+ } else if (RoutingAction .IMPORT_ROUTE .name ().equals (e .getActionCommand ())) {
1767
+ importTextRoute ("" , null );
1643
1768
} else if (RoutingAction .ROUTE_EXPORT .name ().equals (e .getActionCommand ())) {
1644
1769
List <String > selected = jRouteSelectionDialog .show (Settings .get ().getRoutingSettings ().getRoutes ().keySet (), false );
1645
1770
if (selected == null ) {
@@ -1700,7 +1825,6 @@ private class ResultToolbar {
1700
1825
private final JButton jEveUiSetRoute ;
1701
1826
private final JButton jEditRoute ;
1702
1827
private final JButton jExportRoute ;
1703
- private final JButton jImportRoute ;
1704
1828
private final JButton jSaveRoute ;
1705
1829
private final JDropDownButton jLoadRoute ;
1706
1830
private final JMenuItem jManageRoutes ;
@@ -1738,10 +1862,21 @@ public ResultToolbar() {
1738
1862
jExportRoute .addActionListener (listener );
1739
1863
jExportRoute .setEnabled (false );
1740
1864
1741
- jImportRoute = new JButton (TabsRouting .get ().resultImport (), Images .EDIT_IMPORT .getIcon ());
1742
- jImportRoute .setHorizontalAlignment (JButton .LEFT );
1743
- jImportRoute .setActionCommand (RoutingAction .ROUTE_IMPORT .name ());
1744
- jImportRoute .addActionListener (listener );
1865
+ JDropDownButton jImport = new JDropDownButton (TabsRouting .get ().resultImport (), Images .EDIT_IMPORT .getIcon ());
1866
+
1867
+ JMenuItem jImportXml = new JMenuItem (TabsRouting .get ().resultImportXml (), Images .TOOL_ROUTING .getIcon ());
1868
+ jImportXml .setHorizontalAlignment (JButton .LEFT );
1869
+ jImportXml .setActionCommand (RoutingAction .IMPORT_ROUTE_XML .name ());
1870
+ jImportXml .addActionListener (listener );
1871
+ jImport .add (jImportXml );
1872
+
1873
+ jImport .addSeparator ();
1874
+
1875
+ JMenuItem jImportText = new JMenuItem (TabsRouting .get ().resultImportText (), Images .STOCKPILE_SHOPPING_LIST .getIcon ());
1876
+ jImportText .setHorizontalAlignment (JButton .LEFT );
1877
+ jImportText .setActionCommand (RoutingAction .IMPORT_ROUTE .name ());
1878
+ jImportText .addActionListener (listener );
1879
+ jImport .add (jImportText );
1745
1880
1746
1881
jSaveRoute = new JButton (TabsRouting .get ().resultSave (), Images .FILTER_SAVE .getIcon ());
1747
1882
jSaveRoute .setHorizontalAlignment (JButton .LEFT );
@@ -1760,7 +1895,7 @@ public ResultToolbar() {
1760
1895
.addComponent (jEveUiSetRoute )
1761
1896
.addComponent (jEditRoute , GroupLayout .PREFERRED_SIZE , GroupLayout .PREFERRED_SIZE , 100 )
1762
1897
.addComponent (jExportRoute , GroupLayout .PREFERRED_SIZE , GroupLayout .PREFERRED_SIZE , 100 )
1763
- .addComponent (jImportRoute , GroupLayout .PREFERRED_SIZE , GroupLayout .PREFERRED_SIZE , 100 )
1898
+ .addComponent (jImport , GroupLayout .PREFERRED_SIZE , GroupLayout .PREFERRED_SIZE , 100 )
1764
1899
.addComponent (jSaveRoute , GroupLayout .PREFERRED_SIZE , GroupLayout .PREFERRED_SIZE , 100 )
1765
1900
.addComponent (jLoadRoute , GroupLayout .PREFERRED_SIZE , GroupLayout .PREFERRED_SIZE , 100 )
1766
1901
.addContainerGap ()
@@ -1771,7 +1906,7 @@ public ResultToolbar() {
1771
1906
.addComponent (jEveUiSetRoute )
1772
1907
.addComponent (jEditRoute )
1773
1908
.addComponent (jExportRoute )
1774
- .addComponent (jImportRoute )
1909
+ .addComponent (jImport )
1775
1910
.addComponent (jSaveRoute )
1776
1911
.addComponent (jLoadRoute )
1777
1912
);
0 commit comments