From 1a39937d5e2c04f3fa8166c65289afae165b3ea6 Mon Sep 17 00:00:00 2001 From: Charles McGarvey Date: Sun, 7 Apr 2013 15:25:49 -0600 Subject: [PATCH] add support for contest name directory structure --- src/com/dogcows/Editor.java | 33 ++++++++++++++++++++++++--- src/com/dogcows/Util.java | 2 +- src/com/dogcows/VimCoder.java | 42 +++++++++++++++++++++++++++++++++-- 3 files changed, 71 insertions(+), 6 deletions(-) diff --git a/src/com/dogcows/Editor.java b/src/com/dogcows/Editor.java index bb14ce6..ea47442 100644 --- a/src/com/dogcows/Editor.java +++ b/src/com/dogcows/Editor.java @@ -31,6 +31,16 @@ public class Editor */ private String name; + /** + * The name of the contest. + */ + private String contestName; + + /** + * The point value. + */ + private String points; + /** * The path of the current source file. */ @@ -68,6 +78,8 @@ public class Editor { this.id = String.valueOf(component.getProblem().getProblemID()); this.name = component.getClassName(); + this.contestName = component.getProblem().getRound().getContestName().replaceAll(" ", "-"); + this.points = String.valueOf(component.getPoints().intValue()); // Make sure the top-level vimcoder directory exists. File topDir = VimCoder.getStorageDirectory(); @@ -77,9 +89,24 @@ public class Editor } // Make sure the problem directory exists. - this.directory = new File(topDir, id); - if (!directory.isDirectory()) + File newStyleDirectory = new File(new File(topDir, contestName), points); + File oldStyleDirectory = new File(topDir, id); + if (newStyleDirectory.isDirectory()) + { + this.directory = newStyleDirectory; + } + else if (oldStyleDirectory.isDirectory()) + { + this.directory = oldStyleDirectory; + } + else if (VimCoder.isContestDirNames()) + { + this.directory = newStyleDirectory; + if (!directory.mkdirs()) throw new IOException(directory.getPath()); + } + else { + this.directory = oldStyleDirectory; if (!directory.mkdirs()) throw new IOException(directory.getPath()); } @@ -116,7 +143,7 @@ public class Editor // Expand the template for the main class and write it to the current // source file. - sourceFile = new File(directory, name + "." + ext); + this.sourceFile = new File(directory, name + "." + ext); if (!sourceFile.canRead()) { String text = Util.expandTemplate(readTemplate(lang + "Template"), terms); diff --git a/src/com/dogcows/Util.java b/src/com/dogcows/Util.java index eda8fff..51dd3f5 100644 --- a/src/com/dogcows/Util.java +++ b/src/com/dogcows/Util.java @@ -104,7 +104,7 @@ public abstract class Util /** * Read a resource file into a string object. * The resources should be placed in the directory `resources' - * underneath the parent directory of this class. Reading resources + * underneath the parent directory of this class. Reading resources * packaged in a jar is allowable. * @param path Relative path to the resource. * @return The contents of the resource. diff --git a/src/com/dogcows/VimCoder.java b/src/com/dogcows/VimCoder.java index 06c5426..04300fc 100644 --- a/src/com/dogcows/VimCoder.java +++ b/src/com/dogcows/VimCoder.java @@ -54,6 +54,12 @@ public class VimCoder System.getProperty("file.separator") + ".vimcoder"); } + /** + * Whether or not to use the contest name and point value as problem + * directory names. + */ + private static boolean contestDirNames = false; + /** * The panel given to the Arena applet when it is requested. @@ -86,6 +92,11 @@ public class VimCoder */ private final static String ROOTDIR = "com.dogcows.VimCoder.config.rootdir"; + /** + * The key for the problem directory name preference. + */ + private final static String CONTESTDIRNAMES = "com.dogcows.VimCoder.config.contestdirnames"; + /** * The preferences object for storing plugin settings. */ @@ -110,6 +121,16 @@ public class VimCoder return rootDir; } + /** + * Get whether or not to save problems in a human-readable directory + * structure. + * @return The directory name setting. + */ + public static boolean isContestDirNames() + { + return contestDirNames; + } + /** * Instantiate the entry point of the editor plugin. @@ -283,16 +304,29 @@ public class VimCoder c.anchor = GridBagConstraints.BASELINE_LEADING; fieldPanel.add(browseButton, c); + final JCheckBox contestDirNamesButton = new JCheckBox( + "Store problems according to contest name and point value.", + contestDirNames + ); + contestDirNamesButton.setForeground(Common.FG_COLOR); + contestDirNamesButton.setBackground(Common.WPB_COLOR); + contestDirNamesButton.setFont(rootDirLabel.getFont()); + c.gridx = 1; + c.gridy = 1; + c.gridwidth = 2; + fieldPanel.add(contestDirNamesButton, c); + JLabel vimCommandLabel = new JLabel("Vim Command:"); vimCommandLabel.setForeground(Common.FG_COLOR); c.gridx = 0; - c.gridy = 1; + c.gridy = 2; + c.gridwidth = 1; fieldPanel.add(vimCommandLabel, c); final JTextField vimCommandField = new JTextField(vimCommand); vimCommandField.setPreferredSize(new Dimension(0, 24)); c.gridx = 1; - c.gridy = 1; + c.gridy = 2; c.weightx = 1.0; c.gridwidth = 2; fieldPanel.add(vimCommandField, c); @@ -339,6 +373,7 @@ public class VimCoder { prefs.setProperty(VIMCOMMAND, vimCommandField.getText()); prefs.setProperty(ROOTDIR, rootDirField.getText()); + prefs.setProperty(CONTESTDIRNAMES, String.valueOf(contestDirNamesButton.isSelected())); JOptionPane.showMessageDialog(null, "Preferences were saved successfully."); } }); @@ -362,6 +397,9 @@ public class VimCoder String dir = prefs.getProperty(ROOTDIR); if (dir != null) rootDir = new File(dir); + + String cn = prefs.getProperty(CONTESTDIRNAMES); + if (cn != null) contestDirNames = Boolean.parseBoolean(cn); } -- 2.45.2