27
27
import java .util .ArrayList ;
28
28
import java .util .Hashtable ;
29
29
import java .util .List ;
30
- import java .util .StringJoiner ;
31
30
import java .util .Vector ;
32
31
33
- import javax .swing .JOptionPane ;
34
32
import javax .xml .parsers .DocumentBuilder ;
35
33
36
34
import megamek .common .annotations .Nullable ;
@@ -163,7 +161,7 @@ public static void initializeRankSystems() {
163
161
// Okay, so what element is it?
164
162
if (wn .getNodeName ().equalsIgnoreCase ("rankSystem" )) {
165
163
// Starting to generate rankSystem
166
- value = generateInstanceFromXML (wn , null );
164
+ value = generateInstanceFromXML (wn , null , true );
167
165
rankSystems .put (value .getRankSystem (), value );
168
166
}
169
167
}
@@ -188,6 +186,10 @@ public void setRankSystemName(String rankSystemName) {
188
186
this .rankSystemName = rankSystemName ;
189
187
}
190
188
189
+ public boolean isCustom () {
190
+ return getRankSystem () == Ranks .RS_CUSTOM ;
191
+ }
192
+
191
193
public int getRankNumericFromNameAndProfession (int profession , String name ) {
192
194
while ((profession != RPROF_MW ) && isEmptyProfession (profession )) {
193
195
profession = getAlternateProfession (profession );
@@ -311,35 +313,6 @@ public int getRankOrder(String rank, int profession) {
311
313
return 0 ;
312
314
}
313
315
314
- public void setRankSystem (int system ) {
315
- if (system < RS_NUM ) {
316
- rankSystem = system ;
317
- useRankSystem (rankSystem );
318
- }
319
- }
320
-
321
- public String getRankNameList (int profession ) {
322
- StringJoiner joiner = new StringJoiner ("," );
323
- for (Rank rank : getAllRanks ()) {
324
- joiner .add (rank .getName (profession ));
325
- }
326
- return joiner .toString ();
327
- }
328
-
329
- //Keep this for reverse compatibility in loading campaigns
330
- public void setRanksFromList (String names , int officerCut ) {
331
- ArrayList <ArrayList <String >> rankNames = new ArrayList <>();
332
- String [] rnames = names .split ("," );
333
- for (String rname : rnames ) {
334
- ArrayList <String > temp = new ArrayList <>(RPROF_NUM );
335
- for (int i = 0 ; i < RPROF_NUM ; i ++) {
336
- temp .add (rname );
337
- }
338
- rankNames .add (temp );
339
- }
340
- setCustomRanks (rankNames , officerCut );
341
- }
342
-
343
316
private String getRankPostTag (int rankNum ) {
344
317
if (rankNum == 0 ) {
345
318
return " <!-- E0 \" None\" -->" ;
@@ -359,16 +332,12 @@ private String getRankPostTag(int rankNum) {
359
332
}
360
333
361
334
public void writeToXml (PrintWriter pw1 , int indent ) {
362
- writeToXml (pw1 , indent , false );
363
- }
364
-
365
- public void writeToXml (PrintWriter pw1 , int indent , boolean saveAll ) {
366
335
MekHqXmlUtil .writeSimpleXMLOpenIndentedLine (pw1 , indent ++, "rankSystem" );
367
336
MekHqXmlUtil .writeSimpleXmlTag (pw1 , indent , "systemId" , getRankSystem ());
368
337
MekHqXmlUtil .writeSimpleXmlTag (pw1 , indent , "systemName" , getRankSystemName ());
369
338
370
339
// Only write out the ranks if we're using a custom system
371
- if (( rankSystem == RS_CUSTOM ) || saveAll ) {
340
+ if (rankSystem == RS_CUSTOM ) {
372
341
for (int i = 0 ; i < ranks .size (); i ++) {
373
342
Rank r = ranks .get (i );
374
343
r .writeToXml (pw1 , indent );
@@ -379,67 +348,38 @@ public void writeToXml(PrintWriter pw1, int indent, boolean saveAll) {
379
348
MekHqXmlUtil .writeSimpleXMLCloseIndentedLine (pw1 , --indent , "rankSystem" );
380
349
}
381
350
382
- public static Ranks generateInstanceFromXML (Node wn , Version version ) {
383
- Ranks retVal = new Ranks ();
384
- boolean showMessage = false ;
385
-
351
+ public static Ranks generateInstanceFromXML (final Node wn , final @ Nullable Version version ,
352
+ final boolean initialLoad ) {
353
+ final Ranks retVal = new Ranks ();
386
354
// Dump the ranks ArrayList so we can re-use it.
387
355
retVal .ranks = new ArrayList <>();
388
356
389
357
try {
390
358
NodeList nl = wn .getChildNodes ();
391
-
392
359
for (int x = 0 ; x < nl .getLength (); x ++) {
393
360
Node wn2 = nl .item (x );
394
361
395
- if (wn2 .getNodeName ().equalsIgnoreCase ("system" )
396
- || wn2 .getNodeName ().equalsIgnoreCase ("rankSystem" )) {
397
- retVal .rankSystem = Integer .parseInt (wn2 .getTextContent ().trim ());
398
-
399
- if ((version != null ) && (retVal .rankSystem != RS_CUSTOM )) {
400
- retVal = Ranks .getRanksFromSystem (retVal .rankSystem );
401
- }
402
-
403
- retVal .setRankSystemName (PersonMigrator .migrateRankSystemName (retVal .getRankSystem ()));
404
- } else if (wn2 .getNodeName ().equalsIgnoreCase ("systemId" )) {
405
- retVal .rankSystem = Integer .parseInt (wn2 .getTextContent ().trim ());
406
- if ((version != null ) && (retVal .rankSystem != RS_CUSTOM )) {
407
- retVal = Ranks .getRanksFromSystem (retVal .rankSystem );
362
+ if (wn2 .getNodeName ().equalsIgnoreCase ("system" ) // Legacy, 0.47.15 removal
363
+ || wn2 .getNodeName ().equalsIgnoreCase ("rankSystem" ) // Legacy, 0.47.15 removal
364
+ || wn2 .getNodeName ().equalsIgnoreCase ("systemId" )) {
365
+ final int rankSystem = Integer .parseInt (wn2 .getTextContent ().trim ());
366
+ if (!initialLoad && (retVal .rankSystem != RS_CUSTOM )) {
367
+ return Ranks .getRanksFromSystem (retVal .rankSystem );
408
368
}
369
+ retVal .rankSystem = rankSystem ;
409
370
} else if (wn2 .getNodeName ().equalsIgnoreCase ("systemName" )) {
410
371
retVal .setRankSystemName (wn2 .getTextContent ().trim ());
411
372
} else if (wn2 .getNodeName ().equalsIgnoreCase ("rank" )) {
412
- // If we're parsing from the XML or using custom ranks, then parse the rank sub-nodes
413
- if (retVal .oldRankSystem == 7 ) {
414
- showMessage = true ;
415
- }
416
- if ((version == null ) || (retVal .rankSystem == RS_CUSTOM )) {
417
- retVal .ranks .add (Rank .generateInstanceFromXML (wn2 ));
418
- } else {
419
- // Otherwise... use the default ranks for this system
420
- int temp = retVal .oldRankSystem ;
421
- retVal = Ranks .getRanksFromSystem (retVal .rankSystem );
422
- retVal .oldRankSystem = temp ;
423
- return retVal ;
424
- }
373
+ retVal .ranks .add (Rank .generateInstanceFromXML (wn2 ));
425
374
}
426
375
}
427
376
428
- if (showMessage ) {
429
- JOptionPane .showConfirmDialog (
430
- null ,
431
- "You have used a custom rank set in your campaign."
432
- + "\n You must recreate that system for this version." ,
433
- "Custom Ranks" ,
434
- JOptionPane .OK_CANCEL_OPTION );
377
+ if ((version != null ) && version .isLowerThan ("0.48.0" )) {
378
+ retVal .setRankSystemName (PersonMigrator .migrateRankSystemName (retVal .getRankSystem ()));
435
379
}
436
- } catch (Exception ex ) {
437
- // Errrr, apparently either the class name was invalid...
438
- // Or the listed name doesn't exist.
439
- // Doh!
440
- MekHQ .getLogger ().error (ex );
380
+ } catch (Exception e ) {
381
+ MekHQ .getLogger ().error (e );
441
382
}
442
-
443
383
return retVal ;
444
384
}
445
385
@@ -483,6 +423,6 @@ public void setRanksFromModel(RankTableModel model) {
483
423
484
424
@ Override
485
425
public String toString () {
486
- return rankSystemName ;
426
+ return getRankSystemName () ;
487
427
}
488
428
}
0 commit comments