]> Dogcows Code - chaz/vimcoder/commitdiff
add support for contest name directory structure
authorCharles McGarvey <chazmcgarvey@brokenzipper.com>
Sun, 7 Apr 2013 21:25:49 +0000 (15:25 -0600)
committerCharles McGarvey <chazmcgarvey@brokenzipper.com>
Mon, 8 Apr 2013 23:53:05 +0000 (17:53 -0600)
src/com/dogcows/Editor.java
src/com/dogcows/Util.java
src/com/dogcows/VimCoder.java

index bb14ce65cf517ca9e9b5aec8384ea98322961754..ea4744240fed71e050bf725ca33e11dd0f2b0e2a 100644 (file)
@@ -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);
index eda8fff35167cc8cbc2d2de5ef2687ed108997dc..51dd3f50261880c4ca536493361a1efccc7d798c 100644 (file)
@@ -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.
index 06c5426ffc43a75b6e75f9820093227a1c0bc5c5..04300fc4a4e857327610655ea34ef005e80ec710 100644 (file)
@@ -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);
        }
 
 
This page took 0.034026 seconds and 4 git commands to generate.