From: <jde...@us...> - 2013-02-13 20:19:43
|
Revision: 19452 http://sourceforge.net/p/pcgen/code/19452 Author: jdempsey Date: 2013-02-13 20:19:39 +0000 (Wed, 13 Feb 2013) Log Message: ----------- Data Converter - Record changes to a log file Issue#: CODE-2069 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/gui2/converter/LSTConverter.java Trunk/pcgen/code/src/java/pcgen/gui2/converter/loader/BasicLoader.java Trunk/pcgen/code/src/java/pcgen/gui2/converter/loader/ClassLoader.java Trunk/pcgen/code/src/java/pcgen/gui2/converter/loader/EquipmentLoader.java Trunk/pcgen/code/src/java/pcgen/gui2/converter/panel/RunConvertPanel.java Modified: Trunk/pcgen/code/src/java/pcgen/gui2/converter/LSTConverter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui2/converter/LSTConverter.java 2013-02-13 20:16:17 UTC (rev 19451) +++ Trunk/pcgen/code/src/java/pcgen/gui2/converter/LSTConverter.java 2013-02-13 20:19:39 UTC (rev 19452) @@ -71,15 +71,18 @@ private final File rootDir; private final DoubleKeyMapToList<Loader, URI, CDOMObject> injected = new DoubleKeyMapToList<Loader, URI, CDOMObject>(); private final ConversionDecider decider; + private Writer changeLogWriter; public LSTConverter(EditorLoadContext lc, File root, String outputDir, - ConversionDecider cd) + ConversionDecider cd, Writer changeLogWriter) { context = lc; rootDir = root; outDir = outputDir; - loaders = setupLoaders(context); decider = cd; + + this.changeLogWriter = changeLogWriter; + loaders = setupLoaders(context, changeLogWriter); } /** @@ -188,6 +191,7 @@ ensureParents(outFile.getParentFile()); try { + changeLogWriter.append("\nProcessing " + in + "\n"); String result = load(uri, loader); if (result != null) { @@ -217,39 +221,40 @@ } } - private List<Loader> setupLoaders(EditorLoadContext context) + private List<Loader> setupLoaders(EditorLoadContext context, Writer changeLogWriter) { List<Loader> loaderList = new ArrayList<Loader>(); loaderList.add(new BasicLoader<WeaponProf>(context, WeaponProf.class, - ListKey.FILE_WEAPON_PROF)); + ListKey.FILE_WEAPON_PROF, changeLogWriter)); loaderList.add(new BasicLoader<ArmorProf>(context, ArmorProf.class, - ListKey.FILE_ARMOR_PROF)); + ListKey.FILE_ARMOR_PROF, changeLogWriter)); loaderList.add(new BasicLoader<ShieldProf>(context, ShieldProf.class, - ListKey.FILE_SHIELD_PROF)); + ListKey.FILE_SHIELD_PROF, changeLogWriter)); loaderList.add(new BasicLoader<Skill>(context, Skill.class, - ListKey.FILE_SKILL)); + ListKey.FILE_SKILL, changeLogWriter)); loaderList.add(new BasicLoader<Language>(context, Language.class, - ListKey.FILE_LANGUAGE)); + ListKey.FILE_LANGUAGE, changeLogWriter)); loaderList.add(new BasicLoader<Ability>(context, Ability.class, - ListKey.FILE_FEAT)); + ListKey.FILE_FEAT, changeLogWriter)); loaderList.add(new BasicLoader<Ability>(context, Ability.class, - ListKey.FILE_ABILITY)); + ListKey.FILE_ABILITY, changeLogWriter)); loaderList.add(new BasicLoader<Race>(context, Race.class, - ListKey.FILE_RACE)); + ListKey.FILE_RACE, changeLogWriter)); loaderList.add(new BasicLoader<Domain>(context, Domain.class, - ListKey.FILE_DOMAIN)); + ListKey.FILE_DOMAIN, changeLogWriter)); loaderList.add(new BasicLoader<Spell>(context, Spell.class, - ListKey.FILE_SPELL)); + ListKey.FILE_SPELL, changeLogWriter)); loaderList.add(new BasicLoader<Deity>(context, Deity.class, - ListKey.FILE_DEITY)); + ListKey.FILE_DEITY, changeLogWriter)); loaderList.add(new BasicLoader<PCTemplate>(context, PCTemplate.class, - ListKey.FILE_TEMPLATE)); - loaderList.add(new EquipmentLoader(context, ListKey.FILE_EQUIP)); + ListKey.FILE_TEMPLATE, changeLogWriter)); + loaderList.add(new EquipmentLoader(context, ListKey.FILE_EQUIP, + changeLogWriter)); loaderList.add(new BasicLoader<EquipmentModifier>(context, - EquipmentModifier.class, ListKey.FILE_EQUIP_MOD)); + EquipmentModifier.class, ListKey.FILE_EQUIP_MOD, changeLogWriter)); loaderList.add(new BasicLoader<CompanionMod>(context, CompanionMod.class, - ListKey.FILE_COMPANION_MOD)); - loaderList.add(new ClassLoader(context)); + ListKey.FILE_COMPANION_MOD, changeLogWriter)); + loaderList.add(new ClassLoader(context, changeLogWriter)); loaderList.add(new CopyLoader(ListKey.FILE_ABILITY_CATEGORY)); loaderList.add(new CopyLoader(ListKey.LICENSE_FILE)); loaderList.add(new CopyLoader(ListKey.FILE_KIT)); Modified: Trunk/pcgen/code/src/java/pcgen/gui2/converter/loader/BasicLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui2/converter/loader/BasicLoader.java 2013-02-13 20:16:17 UTC (rev 19451) +++ Trunk/pcgen/code/src/java/pcgen/gui2/converter/loader/BasicLoader.java 2013-02-13 20:19:39 UTC (rev 19452) @@ -17,6 +17,8 @@ */ package pcgen.gui2.converter.loader; +import java.io.IOException; +import java.io.Writer; import java.util.ArrayList; import java.util.List; @@ -40,13 +42,15 @@ private final Class<T> cdomClass; private final ListKey<CampaignSourceEntry> listkey; private final EditorLoadContext context; + private final Writer changeLogWriter; public BasicLoader(EditorLoadContext lc, Class<T> cl, - ListKey<CampaignSourceEntry> lk) + ListKey<CampaignSourceEntry> lk, Writer changeLogWriter) { context = lc; cdomClass = cl; listkey = lk; + this.changeLogWriter = changeLogWriter; } @Override @@ -75,7 +79,7 @@ + tok + " " + token); obj.put(StringKey.CONVERT_NAME, tokens[0]); List<CDOMObject> injected = processToken(sb, objectName, obj, - token, decider); + token, decider, line); if (injected != null) { list.addAll(injected); @@ -87,7 +91,7 @@ } private List<CDOMObject> processToken(StringBuilder sb, String objectName, - CDOMObject obj, String token, ConversionDecider decider) + CDOMObject obj, String token, ConversionDecider decider, int line) throws PersistenceLayerException, InterruptedException { final int colonLoc = token.indexOf(':'); @@ -111,6 +115,17 @@ String error = TokenConverter.process(tpe); if (tpe.isConsumed()) { + if (!token.equals(tpe.getResult())) + { + try + { + changeLogWriter.append("Line " + line + " converted '"+token+"' to '" + tpe.getResult() +"'.\n"); + } + catch (IOException e) + { + Logging.errorPrint("Unable to log change", e); + } + } sb.append(tpe.getResult()); } else Modified: Trunk/pcgen/code/src/java/pcgen/gui2/converter/loader/ClassLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui2/converter/loader/ClassLoader.java 2013-02-13 20:16:17 UTC (rev 19451) +++ Trunk/pcgen/code/src/java/pcgen/gui2/converter/loader/ClassLoader.java 2013-02-13 20:19:39 UTC (rev 19452) @@ -17,6 +17,8 @@ */ package pcgen.gui2.converter.loader; +import java.io.IOException; +import java.io.Writer; import java.util.ArrayList; import java.util.List; @@ -42,10 +44,12 @@ { public static final String FIELD_SEPARATOR = "\t"; //$NON-NLS-1$ private final EditorLoadContext context; + private final Writer changeLogWriter; - public ClassLoader(EditorLoadContext lc) + public ClassLoader(EditorLoadContext lc, Writer changeLogWriter) { context = lc; + this.changeLogWriter = changeLogWriter; } @Override @@ -111,7 +115,7 @@ obj.put(ObjectKey.TOKEN_PARENT, parent); } List<CDOMObject> injected = processToken(sb, firstToken, obj, parent, token, - decider); + decider, line); if (injected != null) { list.addAll(injected); @@ -127,7 +131,7 @@ } private List<CDOMObject> processToken(StringBuilder sb, String firstToken, CDOMObject obj, - CDOMObject alt, String token, ConversionDecider decider) + CDOMObject alt, String token, ConversionDecider decider, int line) throws PersistenceLayerException, InterruptedException { final int colonLoc = token.indexOf(':'); @@ -156,6 +160,17 @@ } if (tpe.isConsumed()) { + if (!token.equals(tpe.getResult())) + { + try + { + changeLogWriter.append("Line " + line + " converted '"+token+"' to '" + tpe.getResult() +"'.\n"); + } + catch (IOException e) + { + Logging.errorPrint("Unable to log change", e); + } + } sb.append(tpe.getResult()); } else Modified: Trunk/pcgen/code/src/java/pcgen/gui2/converter/loader/EquipmentLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui2/converter/loader/EquipmentLoader.java 2013-02-13 20:16:17 UTC (rev 19451) +++ Trunk/pcgen/code/src/java/pcgen/gui2/converter/loader/EquipmentLoader.java 2013-02-13 20:19:39 UTC (rev 19452) @@ -17,6 +17,8 @@ */ package pcgen.gui2.converter.loader; +import java.io.IOException; +import java.io.Writer; import java.util.ArrayList; import java.util.List; @@ -42,11 +44,14 @@ private static final Class<Equipment> EQUIPMENT_CLASS = Equipment.class; private final ListKey<CampaignSourceEntry> listkey; private final EditorLoadContext context; + private final Writer changeLogWriter; - public EquipmentLoader(EditorLoadContext lc, ListKey<CampaignSourceEntry> lk) + public EquipmentLoader(EditorLoadContext lc, + ListKey<CampaignSourceEntry> lk, Writer changeLogWriter) { context = lc; listkey = lk; + this.changeLogWriter = changeLogWriter; } @Override @@ -75,7 +80,7 @@ line + "Test" + tok + " " + token); obj.put(StringKey.CONVERT_NAME, tokens[0]); List<CDOMObject> injected = processToken(sb, objectName, obj, - token, decider); + token, decider, line); if (injected != null) { list.addAll(injected); @@ -97,7 +102,7 @@ } private List<CDOMObject> processToken(StringBuilder sb, String objectName, - CDOMObject obj, String token, ConversionDecider decider) + CDOMObject obj, String token, ConversionDecider decider, int line) throws PersistenceLayerException, InterruptedException { final int colonLoc = token.indexOf(':'); @@ -121,6 +126,17 @@ String error = TokenConverter.process(tpe); if (tpe.isConsumed()) { + if (!token.equals(tpe.getResult())) + { + try + { + changeLogWriter.append("Line " + line + " converted '"+token+"' to '" + tpe.getResult() +"'.\n"); + } + catch (IOException e) + { + Logging.errorPrint("Unable to log change", e); + } + } sb.append(tpe.getResult()); } else Modified: Trunk/pcgen/code/src/java/pcgen/gui2/converter/panel/RunConvertPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui2/converter/panel/RunConvertPanel.java 2013-02-13 20:16:17 UTC (rev 19451) +++ Trunk/pcgen/code/src/java/pcgen/gui2/converter/panel/RunConvertPanel.java 2013-02-13 20:19:39 UTC (rev 19452) @@ -31,12 +31,16 @@ import java.awt.GridBagLayout; import java.awt.Insets; import java.io.File; +import java.io.FileWriter; import java.io.IOException; +import java.io.Writer; import java.lang.reflect.InvocationTargetException; import java.net.URI; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.Date; import java.util.List; import java.util.Observable; import java.util.Observer; @@ -69,6 +73,7 @@ import pcgen.persistence.lst.CampaignSourceEntry; import pcgen.rules.context.EditorLoadContext; import pcgen.system.LanguageBundle; +import pcgen.system.PCGenPropBundle; import pcgen.util.Logging; /** @@ -117,6 +122,8 @@ @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<Campaign>(pc.getSafeListFor(ListKey.CAMPAIGN)); @@ -151,8 +158,27 @@ mode.resolveInto(context.ref); //Necessary for those still using Globals.getContext mode.resolveInto(mode.getContext().ref); - LSTConverter converter = new LSTConverter(context, rootDir, - outDir.getAbsolutePath(), RunConvertPanel.this); + LSTConverter converter; + Writer changeLogWriter; + try + { + File changeLogFile = new File("dataChanges.log"); + 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) @@ -177,6 +203,15 @@ e.printStackTrace(); } + try + { + changeLogWriter.close(); + } + catch (IOException e) + { + Logging.errorPrint("LSTConverter.wrapUp failed", e); + + } converter.deleteObserver( RunConvertPanel.this ); Logging.removeHandler( getHandler() ); try @@ -189,7 +224,7 @@ // Ignore exception } setCurrentFilename(""); - addMessage("\nConversion complete, press next button to finish..."); + addMessage("\nConversion complete."); if (getHandler().getNumErrors() > 0) { JOptionPane.showMessageDialog(null, LanguageBundle @@ -535,4 +570,21 @@ } + + private void logSummary(final CDOMObject pc) + { + Logging.log(Logging.INFO, "Running data conversion using the following settings:"); + Logging.log(Logging.INFO, "Source Folder: " + pc.get(ObjectKey.DIRECTORY).getAbsolutePath()); + Logging.log(Logging.INFO, "Destination Folder: " + pc.get(ObjectKey.WRITE_DIRECTORY).getAbsolutePath()); + Logging.log(Logging.INFO, "Game mode: " + pc.get(ObjectKey.GAME_MODE).getDisplayName()); + List<Campaign> campaigns = pc.getSafeListFor(ListKey.CAMPAIGN); + StringBuilder campDisplay = new StringBuilder(""); + for (int i = 0; i < campaigns.size(); i++) + { + campDisplay.append(campaigns.get(i).getDisplayName()); + campDisplay.append("\n"); + } + Logging.log(Logging.INFO, "Sources: " + campDisplay.toString()); + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |