content: // Licensed to the Apache Software Foundation (ASF) under one
  // or more contributor license agreements.  See the NOTICE file
  // distributed with this work for additional information
  // regarding copyright ownership.  The ASF licenses this file
  // to you under the Apache License, Version 2.0 (the
  // "License"); you may not use this file except in compliance
  // with the License.  You may obtain a copy of the License at
  //
  //   http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing,
  // software distributed under the License is distributed on an
  // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  // KIND, either express or implied.  See the License for the
  // specific language governing permissions and limitations
  // under the License.
  package com.cloud.hypervisor.vmware.mo;
  
  public class DatastoreFile {
      private String _path;
  
      public DatastoreFile(String path) {
          assert (path != null);
          _path = path;
      }
  
      public DatastoreFile(String datastoreName, String pathWithoutDatastoreName) {
          _path = String.format("[%s] %s", datastoreName, pathWithoutDatastoreName);
      }
  
      public DatastoreFile(String datastoreName, String dir, String fileName) {
          if (dir == null || dir.isEmpty())
              _path = String.format("[%s] %s", datastoreName, fileName);
          else
              _path = String.format("[%s] %s/%s", datastoreName, dir, fileName);
      }
  
      public String getDatastoreName() {
          return getDatastoreNameFromPath(_path);
      }
  
      public String getPath() {
          return _path;
      }
  
      public String getRelativePath() {
          int pos = _path.indexOf(']');
          if (pos < 0)
              pos = 0;
          else
              pos++;
  
          return _path.substring(pos).trim();
      }
  
      public String getDir() {
          int startPos = _path.indexOf("]");
          if (startPos < 0)
              startPos = 0;
  
          int endPos = _path.lastIndexOf('/');
          if (endPos < 0)
              endPos = 0;
  
          if (endPos > startPos) {
              return _path.substring(startPos + 1, endPos).trim();
          }
  
          return "";
      }
  
      public String getFileName() {
          int startPos = _path.indexOf("]");
          if (startPos < 0)
              startPos = 0;
          else
              startPos++;
  
          int endPos = _path.lastIndexOf('/');
          if (endPos < 0) {
              return _path.substring(startPos).trim();
          } else {
              return _path.substring(endPos + 1);
          }
      }
  
      public String getFileBaseName() {
          String name = getFileName();
          int endPos = name.lastIndexOf('.');
          if (endPos < 0)
              return name;
          return name.substring(0, endPos);
      }
  
      public String getFileExtName() {
          String name = getFileName();
          int endPos = name.lastIndexOf('.');
          if (endPos < 0)
              return "";
  
          return name.substring(endPos);
      }
  
      public String getCompanionPath(String companionFileName) {
          return getCompanionDatastorePath(_path, companionFileName);
      }
  
      public static boolean isFullDatastorePath(String path) {
          return path.matches("^\\[.*\\].*");
      }
  
      public static String getDatastoreNameFromPath(String path) {
          if (isFullDatastorePath(path)) {
              int endPos = path.indexOf("]");
              return path.substring(1, endPos).trim();
          }
          return null;
      }
  
      public static String getCompanionDatastorePath(String path, String companionFileName) {
          if (isFullDatastorePath(path)) {
              int endPos = path.indexOf("]");
              String dsName = path.substring(1, endPos);
              String dsRelativePath = path.substring(endPos + 1).trim();
  
              int fileNamePos = dsRelativePath.lastIndexOf('/');
              if (fileNamePos < 0) {
                  return String.format("[%s] %s", dsName, companionFileName);
              } else {
                  return String.format("[%s] %s/%s", dsName, dsRelativePath.substring(0, fileNamePos), companionFileName);
              }
          }
          return companionFileName;
      }
  }
  