use of pcgen.gui2.converter.ObjectInjector in project pcgen by PCGen.
the class RunConvertPanel method performAnalysis.
/**
* @see pcgen.gui2.converter.panel.ConvertSubPanel#performAnalysis(pcgen.cdom.base.CDOMObject)
*/
@Override
public boolean performAnalysis(final CDOMObject pc) {
logSummary(pc);
final File rootDir = pc.get(ObjectKey.DIRECTORY);
final File outDir = pc.get(ObjectKey.WRITE_DIRECTORY);
totalCampaigns = new ArrayList<>(pc.getSafeListFor(ListKey.CAMPAIGN));
for (Campaign campaign : pc.getSafeListFor(ListKey.CAMPAIGN)) {
// Add all sub-files to the main campaign, regardless of exclusions
for (CampaignSourceEntry fName : campaign.getSafeListFor(ListKey.FILE_PCC)) {
URI uri = fName.getURI();
if (PCGFile.isPCGenCampaignFile(uri)) {
Campaign c = Globals.getCampaignByURI(uri, false);
if (c != null) {
totalCampaigns.add(c);
}
}
}
}
sortCampaignsByRank(totalCampaigns);
new Thread(new Runnable() {
@Override
public void run() {
Logging.registerHandler(getHandler());
SettingsHandler.setGame(pc.get(ObjectKey.GAME_MODE).getName());
GameMode mode = SettingsHandler.getGame();
//Necessary for "good" behavior
mode.resolveInto(context.getReferenceContext());
//Necessary for those still using Globals.getContext
mode.resolveInto(mode.getContext().getReferenceContext());
LSTConverter converter;
Writer changeLogWriter;
try {
changeLogWriter = new FileWriter(changeLogFile);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String startTime = simpleDateFormat.format(new Date());
changeLogWriter.append("PCGen Data Converter v" + PCGenPropBundle.getVersionNumber() + " - conversion started at " + startTime + "\n");
changeLogWriter.append("Outputting files to " + outDir.getAbsolutePath() + "\n");
} catch (IOException e1) {
Logging.errorPrint("Failed to initialise LSTConverter", e1);
return;
}
converter = new LSTConverter(context, rootDir, outDir.getAbsolutePath(), RunConvertPanel.this, changeLogWriter);
converter.addObserver(RunConvertPanel.this);
int numFiles = 0;
for (Campaign campaign : totalCampaigns) {
numFiles += converter.getNumFilesInCampaign(campaign);
}
setTotalFileCount(numFiles);
converter.initCampaigns(totalCampaigns);
for (Campaign campaign : totalCampaigns) {
converter.processCampaign(campaign);
}
ObjectInjector oi = new ObjectInjector(context, outDir, rootDir, converter);
try {
oi.writeInjectedObjects(totalCampaigns);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
changeLogWriter.close();
} catch (IOException e) {
Logging.errorPrint("LSTConverter.wrapUp failed", e);
}
converter.deleteObserver(RunConvertPanel.this);
Logging.removeHandler(getHandler());
try {
// Wait for any left over messages to catch up
Thread.sleep(1000);
} catch (InterruptedException e) {
// Ignore exception
}
setCurrentFilename("");
addMessage("\nConversion complete.");
if (getHandler().getNumErrors() > 0) {
JOptionPane.showMessageDialog(null, LanguageBundle.getFormattedString(//$NON-NLS-1$
"in_lstConvErrorsFound", getHandler().getNumErrors()), LanguageBundle.getString(//$NON-NLS-1$
"in_lstConvErrorsTitle"), JOptionPane.ERROR_MESSAGE);
}
progressBar.setValue(progressBar.getMaximum());
fireProgressEvent(ProgressEvent.AUTO_ADVANCE);
}
}).start();
return true;
}
Aggregations