*/
private String name;
+ /**
+ * The name of the contest.
+ */
+ private String contestName;
+
+ /**
+ * The point value.
+ */
+ private String points;
+
/**
* The path of the current source file.
*/
{
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();
}
// 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());
}
// 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);
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.
*/
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.
*/
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.
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);
{
prefs.setProperty(VIMCOMMAND, vimCommandField.getText());
prefs.setProperty(ROOTDIR, rootDirField.getText());
+ prefs.setProperty(CONTESTDIRNAMES, String.valueOf(contestDirNamesButton.isSelected()));
JOptionPane.showMessageDialog(null, "Preferences were saved successfully.");
}
});
String dir = prefs.getProperty(ROOTDIR);
if (dir != null) rootDir = new File(dir);
+
+ String cn = prefs.getProperty(CONTESTDIRNAMES);
+ if (cn != null) contestDirNames = Boolean.parseBoolean(cn);
}