Пример #1
0
 /**
  * Returns the name of a specific backup, or all backups found for a specific database, in a
  * descending order.
  *
  * @param db database
  * @return names of specified backups
  */
 public StringList backups(final String db) {
   final StringList backups = new StringList();
   final IOFile file = soptions.dbpath(db + IO.ZIPSUFFIX);
   if (file.exists()) {
     backups.add(db);
   } else {
     final String regex =
         db.replaceAll("([" + REGEXCHARS + "])", "\\\\$1") + DateTime.PATTERN + IO.ZIPSUFFIX;
     for (final IOFile f : soptions.dbpath().children()) {
       final String n = f.name();
       if (n.matches(regex)) backups.add(n.substring(0, n.lastIndexOf('.')));
     }
   }
   return backups.sort(Prop.CASE, false);
 }
Пример #2
0
  /**
   * Returns the sorted names of all available databases and, optionally, backups. Filters for
   * {@code name} if not {@code null} with glob support.
   *
   * @param db return databases?
   * @param backup return backups?
   * @param name name filter (may be {@code null})
   * @return database and backups list
   */
  private StringList list(final boolean db, final boolean backup, final String name) {
    final Pattern pt;
    if (name != null) {
      final String nm =
          REGEX.matcher(name).matches()
              ? IOFile.regex(name)
              : name.replaceAll("([" + REGEXCHARS + "])", "\\\\$1");
      pt = Pattern.compile(nm, Prop.CASE ? 0 : Pattern.CASE_INSENSITIVE);
    } else {
      pt = null;
    }

    final IOFile[] children = soptions.dbpath().children();
    final StringList list = new StringList(children.length);
    final HashSet<String> map = new HashSet<>(children.length);
    for (final IOFile f : children) {
      final String fn = f.name();
      String add = null;
      if (backup && fn.endsWith(IO.ZIPSUFFIX)) {
        final String nn = ZIPPATTERN.split(fn)[0];
        if (!nn.equals(fn)) add = nn;
      } else if (db && f.isDir() && fn.indexOf('.') == -1) {
        add = fn;
      }
      // add entry if it matches the pattern, and has not already been added
      if (add != null && (pt == null || pt.matcher(add).matches()) && map.add(add)) {
        list.add(add);
      }
    }
    return list.sort(false);
  }
Пример #3
0
 /**
  * Returns the names of all backups.
  *
  * @return backups
  */
 public StringList backups() {
   final StringList backups = new StringList();
   for (final IOFile f : soptions.dbpath().children()) {
     final String n = f.name();
     if (n.endsWith(IO.ZIPSUFFIX)) backups.add(n.substring(0, n.lastIndexOf('.')));
   }
   return backups;
 }