@Override
  @Port(name = "files", method = "delete")
  public boolean delete(String relativePath) {
    File f1 = new File(baseFolder.getAbsolutePath() + relativePath);

    if (f1.exists() && f1.delete()) {
      removeFileToRepository(f1);
      return true;
    }
    return false;
  }
  @Override
  @Port(name = "files", method = "mkdirs")
  public boolean mkdirs(String relativePath) {
    File f1 = new File(baseFolder.getAbsolutePath() + relativePath);

    addFileToRepository(f1);
    commitRepository(
        " folders " + f1.getPath() + " created ", " name ", " email "); // TODO fix name and email

    return !f1.exists() && f1.mkdirs();
  }
  @Override
  @Port(name = "files", method = "move")
  public boolean move(String oldRelativePath, String newRelativePath) {

    File oldFile = new File(baseFolder.getAbsolutePath() + File.separator + oldRelativePath);
    File newFile = new File(baseFolder.getAbsolutePath() + File.separator + newRelativePath);

    if (oldFile.renameTo(newFile)) {
      addFileToRepository(newFile);
      removeFileToRepository(oldFile);
      return true;
    } else {
      logger.debug("Unable to move file {} on {}", oldRelativePath, newRelativePath);
      return false;
    }
  }
 public boolean addFileToRepository(File fileToAdd) {
   Boolean result = false;
   try {
     String finalFilePath =
         fileToAdd
             .getPath()
             .substring(
                 fileToAdd.getPath().indexOf(baseFolder.getPath())
                     + baseFolder.getPath().length()
                     + 1);
     git.add().addFilepattern(finalFilePath).call();
     result = true;
   } catch (NoFilepatternException e) {
     logger.debug("Unable to add file on repository ", e);
   } catch (GitAPIException e) {
     logger.debug("Unable to add file on repository ", e);
   }
   return result;
 }
 public boolean removeFileToRepository(File fileToRemove) {
   Boolean result = false;
   try {
     String finalFilePath =
         fileToRemove
             .getPath()
             .substring(
                 fileToRemove.getPath().indexOf(baseFolder.getPath())
                     + baseFolder.getPath().length()
                     + 1);
     logger.debug(" file f " + fileToRemove.getPath() + " string " + finalFilePath);
     git.rm().addFilepattern(finalFilePath).call();
     commitRepository(
         " File " + finalFilePath + " removed ", " name ", " email "); // TODO fix name and email
     result = true;
   } catch (NoFilepatternException e) {
     logger.debug("Cannot remove file to repository " + e);
   } catch (GitAPIException e) {
     logger.debug("Unable to remove file on repository ", e);
   }
   return result;
 }
 public void process(File file, FolderItem item) {
   if (!file.getName().contains(".git") && !file.getName().endsWith("~")) {
     if (file.isFile()) {
       FileItem itemToAdd = new FileItem();
       itemToAdd.setName(file.getName());
       itemToAdd.setParent(item);
       itemToAdd.setPath(getRelativePath(file.getPath()));
       item.add(itemToAdd);
     } else if (file.isDirectory()) {
       FolderItem folder = new FolderItem();
       folder.setName(file.getName());
       folder.setParent(item);
       folder.setPath(getRelativePath(file.getPath() + "/"));
       item.add(folder);
       File[] listOfFiles = file.listFiles();
       if (listOfFiles != null) {
         for (File listOfFile : listOfFiles) process(listOfFile, folder);
       }
     }
   }
 }
  @Override
  @Port(name = "files", method = "saveFile")
  public boolean saveFile(String relativePath, byte[] data) {
    boolean result = true; // super.saveFile(relativePath, data);
    File f = new File(baseFolder.getAbsolutePath() + relativePath);
    if (f.exists()) {
      result = save(relativePath, data);

      /*String relativePathClean = relativePath;
      if (relativePath.startsWith("/")) {
      	relativePathClean = relativePath.substring(relativePath.indexOf("/") + 1);
      }*/
      commitRepository(
          " File " + relativePath + " saved ",
          " from site ",
          " [email protected] "); // TODO fix name and email

      try {

        // addFileToRepository(f);
        git.pull().call();

        /*} catch (Exception e) {
        	logger.error("error while unlock and commit git ", e);
        }*/
      } catch (DetachedHeadException e) {
        try {

          git.revert().call();
          save(relativePath + ".bak_" + new Date(), data);
          commitRepository(
              " File " + relativePath + " saved with conflict ",
              " name ",
              " email "); // TODO fix name and email
          UsernamePasswordCredentialsProvider user =
              new UsernamePasswordCredentialsProvider(
                  (String) this.getDictionary().get("login"),
                  (String) this.getDictionary().get("pass"));
          git.push().setCredentialsProvider(user).call();
          return false;

        } catch (GitAPIException e1) {
          e1.printStackTrace(); // To change body of catch statement use File | Settings | File
          // Templates.
        }

        e.printStackTrace(); // To change body of catch statement use File | Settings | File
        // Templates.
      } catch (NoHeadException e) {
        e.printStackTrace(); // To change body of catch statement use File | Settings | File
        // Templates.
      } catch (TransportException e) {
        e.printStackTrace(); // To change body of catch statement use File | Settings | File
        // Templates.
      } catch (InvalidConfigurationException e) {
        e.printStackTrace(); // To change body of catch statement use File | Settings | File
        // Templates.
      } catch (InvalidRemoteException e) {
        e.printStackTrace(); // To change body of catch statement use File | Settings | File
        // Templates.
      } catch (CanceledException e) {
        e.printStackTrace(); // To change body of catch statement use File | Settings | File
        // Templates.
      } catch (WrongRepositoryStateException e) {
        e.printStackTrace(); // To change body of catch statement use File | Settings | File
        // Templates.
      } catch (RefNotFoundException e) {
        e.printStackTrace(); // To change body of catch statement use File | Settings | File
        // Templates.
      } catch (GitAPIException e) {
        e.printStackTrace(); // To change body of catch statement use File | Settings | File
        // Templates.
      }
      try {
        UsernamePasswordCredentialsProvider user =
            new UsernamePasswordCredentialsProvider(
                (String) this.getDictionary().get("login"),
                (String) this.getDictionary().get("pass"));
        git.push().setCredentialsProvider(user).call();
        return true;
      } catch (GitAPIException e) {
        e.printStackTrace(); // To change body of catch statement use File | Settings | File
        // Templates.
      }
    }

    return true;
  }