public static boolean isValidPath(String path) {
   Path test = new Path(path);
   for (int i = 0, max = test.segmentCount(); i < max; i++) {
     if (!isValidSegment(test.segment(i))) {
       return false;
     }
   }
   return true;
 }
 public int matchingFirstSegments(Path anotherPath) {
   assert anotherPath != null;
   int anotherPathLen = anotherPath.segmentCount();
   int max = Math.min(segments.length, anotherPathLen);
   int count = 0;
   for (int i = 0; i < max; i++) {
     if (!segments[i].equals(anotherPath.segment(i))) {
       return count;
     }
     count++;
   }
   return count;
 }
  protected static String getCacheEntryPath(String key) {
    Path path = new Path(ConversionServiceImpl.getCacheBasePath());

    List<String> subPath = getSubPathFromKey(key);

    for (String subPart : subPath) {
      path = path.append(subPart);
      new File(path.toString()).mkdir();
    }

    // path = path.append(key);

    return path.toString();
  }
 public Path makeAbsolute() {
   if (isAbsolute()) {
     return this;
   }
   Path result = new Path(segments, separators | HAS_LEADING);
   // may need canonicalizing if it has leading ".." or "." segments
   if (result.segmentCount() > 0) {
     String first = result.segment(0);
     if (first.equals("..") || first.equals(".")) { // $NON-NLS-1$ //$NON-NLS-2$
       result.canonicalize();
     }
   }
   return result;
 }
  // XXX: confusing, one may think that this modifies the path
  // being appended to (like Python's list.append()).
  public Path append(Path tail) {
    // optimize some easy cases
    if (tail == null || tail.segmentCount() == 0) {
      return this;
    }
    if (isEmpty()) {
      return tail.makeRelative();
    }
    if (isRoot()) {
      return tail.makeAbsolute();
    }

    // concatenate the two segment arrays
    int myLen = segments.length;
    int tailLen = tail.segmentCount();
    String[] newSegments = new String[myLen + tailLen];
    System.arraycopy(segments, 0, newSegments, 0, myLen);
    for (int i = 0; i < tailLen; i++) {
      newSegments[myLen + i] = tail.segment(i);
    }
    // use my leading separators and the tail's trailing separator
    Path result =
        new Path(
            newSegments,
            (separators & HAS_LEADING) | (tail.hasTrailingSeparator() ? HAS_TRAILING : 0));
    String tailFirstSegment = newSegments[myLen];
    if (tailFirstSegment.equals("..")
        || tailFirstSegment.equals(".")) { // $NON-NLS-1$ //$NON-NLS-2$
      result.canonicalize();
    }
    return result;
  }
 public boolean isPrefixOf(Path anotherPath) {
   if (isEmpty() || (isRoot() && anotherPath.isAbsolute())) {
     return true;
   }
   int len = segments.length;
   if (len > anotherPath.segmentCount()) {
     return false;
   }
   for (int i = 0; i < len; i++) {
     if (!segments[i].equals(anotherPath.segment(i))) {
       return false;
     }
   }
   return true;
 }
  @Override
  public void execute(CoreSession session) {
    try {
      DamService damService = Framework.getLocalService(DamService.class);
      AssetLibrary assetLibrary = damService.getAssetLibrary();
      if (assetLibrary != null) {
        DocumentRef docRef = new PathRef(assetLibrary.getPath());
        if (!session.exists(docRef)) {
          Path path = new Path(assetLibrary.getPath());
          String parentPath = path.removeLastSegments(1).toString();
          String name = path.lastSegment();

          DocumentModel doc =
              session.createDocumentModel(parentPath, name, Constants.IMPORT_ROOT_TYPE);
          doc.setPropertyValue(DC_TITLE, assetLibrary.getTitle());
          doc.setPropertyValue(DC_DESCRIPTION, assetLibrary.getDescription());
          session.createDocument(doc);
        }
      }
    } catch (ClientException e) {
      throw new ClientRuntimeException(e);
    }
  }