/**
   * method to Navigate folder
   *
   * @param drone
   * @param List of Folders
   */
  public static RepositoryPage navigateFoldersInRepositoryPage(
      WebDrone drone, String... folderPath) {
    boolean selected = false;
    if (folderPath == null || folderPath.length < 1) {
      throw new IllegalArgumentException("Invalid Folder path!!");
    }

    RepositoryPage repoPage = ShareUser.getSharePage(drone).render();

    try {

      for (String folder : folderPath) {
        repoPage.selectFolder(folder).render();
        selected = true;
        logger.info("Folder \"" + folder + "\" selected");
      }
      if (!selected) {
        throw new ShareException("Cannot select the folder metioned in the path");
      }
    } catch (Exception e) {
      throw new ShareException("Cannot select the folder metioned in the path");
    }

    return ShareUser.getSharePage(drone).render();
  }
 /**
  * This method provides the user to login into create google docs with given filename through
  * google authorization. And Saves the document return to the document library page. User should
  * be already logged
  *
  * @param drone WebDrone
  * @param fileName String
  * @param contentType ContentType
  * @return DocumentLibraryPage
  * @throws Exception
  */
 public static DocumentLibraryPage createAndSavegoogleDocBySignIn(
     WebDrone drone, String fileName, ContentType contentType) throws Exception {
   DocumentLibraryPage docLibPage;
   String docTitle = "";
   EditInGoogleDocsPage googleDocsPage = createGoogleDocWithoutSave(drone, fileName, contentType);
   if (isGoogleDocsV3) {
     switch (contentType) {
       case GOOGLEDOCS:
         docTitle = "Untitled Document.docx";
         break;
       case GOOGLESPREADSHEET:
         docTitle = "Untitled Document.xlsx";
         break;
       case GOOGLEPRESENTATION:
         docTitle = "Untitled Document.pptx";
         break;
     }
     closeAndSwitchToShare(drone).render();
     Thread.sleep(10000);
     docLibPage = ShareUser.getSharePage(drone).render();
     docLibPage.render();
     try {
       docLibPage.getFileDirectoryInfo(docTitle).selectCheckInGoogleDoc();
     } catch (TimeoutException e) {
       throw new PageOperationException("Check-in didn't finish within the timeout");
     }
   } else {
     docLibPage = googleDocsPage.selectSaveToAlfresco().render();
   }
   return docLibPage.render();
 }
 /**
  * This method provides the user to login into edit google docs page through google authorization.
  *
  * @param drone WebDrone
  * @return EditInGoogleDocsPage
  */
 public static EditInGoogleDocsPage signIntoResumeEditGoogleDocFromDetailsPage(WebDrone drone)
     throws InterruptedException {
   DocumentDetailsPage detailsPage = ShareUser.getSharePage(drone).render();
   detailsPage.render();
   GoogleDocsAuthorisation googleAuthorisationPage = detailsPage.resumeEditInGoogleDocs().render();
   return signInGoogleDocs(drone, googleAuthorisationPage);
 }
 /**
  * Discarding the changes made in google doc.
  *
  * @param drone WebDrone
  * @return SharePage
  */
 public static HtmlPage discardGoogleDocsChanges(WebDrone drone) {
   EditInGoogleDocsPage googleDocsPage = ShareUser.getSharePage(drone).render();
   if (isGoogleDocsV3) {
     String docTitle = googleDocsPage.getDocumentTitle();
     closeAndSwitchToShare(drone);
     HtmlPage currentPage = FactorySharePage.resolvePage(drone);
     if (currentPage instanceof DocumentLibraryPage) {
       ((DocumentLibraryPage) currentPage)
           .getFileDirectoryInfo(docTitle)
           .selectCancelEditingInGoogleDocs()
           .render();
     } else if (currentPage instanceof DocumentDetailsPage) {
       ((DocumentDetailsPage) currentPage).clickCancelEditingInGoogleDocs().render();
     }
     HtmlPage thePage = FactorySharePage.resolvePage(drone).render();
     if (thePage instanceof SharePopup) {
       ((SharePopup) thePage).clickYes();
       drone.waitUntilElementDeletedFromDom(
           By.cssSelector("span[class='message']"), SECONDS.convert(maxWaitTime, MILLISECONDS));
     }
   } else {
     GoogleDocsDiscardChanges googleDocsDiscardChanges = googleDocsPage.selectDiscard().render();
     return googleDocsDiscardChanges.clickOkButton().render();
   }
   return FactorySharePage.resolvePage(drone).render();
 }
  /**
   * Open Repository Page: Default View
   *
   * @param driver WebDrone Instance
   * @return RepositoryPage
   */
  public static RepositoryPage openRepository(WebDrone driver) {
    SharePage page = ShareUser.getSharePage(driver);

    RepositoryPage repositorypage = page.getNav().selectRepository().render();
    logger.info("Opened RepositoryPage");
    return repositorypage;
  }
 /**
  * Saving the google doc with the minor version and if isCreate boolean value is true for saving
  * the new google doc otherwise existing google doc. Methods used for edition by concurrent user's
  *
  * @param drone WebDrone
  * @param isCreateDoc boolean
  * @return SharePage
  */
 public static SharePage saveGoogleDocOtherEditor(WebDrone drone, boolean isCreateDoc) {
   EditInGoogleDocsPage googleDocsPage = ShareUser.getSharePage(drone).render();
   googleDocsPage.setGoogleCreate(isCreateDoc);
   GoogleDocsUpdateFilePage googleUpdatefile = googleDocsPage.selectSaveToAlfresco().render();
   googleUpdatefile.render();
   googleUpdatefile.selectMinorVersionChange();
   return googleUpdatefile.submitWithConcurrentEditors().render();
 }
 /**
  * This method provides edit google docs page.
  *
  * @param drone WebDrone
  * @return EditInGoogleDocsPage
  */
 public static EditInGoogleDocsPage openEditGoogleDocFromDetailsPage(WebDrone drone) {
   DocumentDetailsPage detailsPage = ShareUser.getSharePage(drone).render();
   detailsPage.render();
   EditInGoogleDocsPage googleDocsPage = detailsPage.editInGoogleDocs().render();
   if (isGoogleDocsV3) {
     googleDocsPage = switchToGoogleWindow(drone).render();
   }
   return googleDocsPage.render();
 }
  /**
   * Open Repository Page: Top Level Assumes User is logged in Opens repository in simple View
   *
   * @param driver WebDrone Instance
   * @return RepositoryPage
   */
  public static RepositoryPage openRepositoryGalleryView(WebDrone driver) {

    // Assumes User is logged in
    SharePage page = ShareUser.getSharePage(driver);

    RepositoryPage repositorypage = page.getNav().selectRepository();
    repositorypage = ((RepositoryPage) ShareUserSitePage.selectView(driver, ViewType.GALLERY_VIEW));
    logger.info("Opened RepositoryPage");
    return repositorypage;
  }
 /**
  * Saving the google doc with the minor version and if isCreate boolean value is true for saving
  * the new google doc otherwise existing google doc.
  *
  * @param drone WebDrone
  * @param isCreateDoc boolean
  * @return SharPage
  */
 public static SharePage saveGoogleDoc(WebDrone drone, boolean isCreateDoc) {
   EditInGoogleDocsPage googleDocsPage = ShareUser.getSharePage(drone).render();
   googleDocsPage.setGoogleCreate(isCreateDoc);
   if (isGoogleDocsV3) {
     String title = googleDocsPage.getDocumentTitle();
     closeAndSwitchToShare(drone);
     SharePage currPage = ShareUser.getSharePage(drone).render();
     if (currPage instanceof DocumentDetailsPage) {
       return ((DocumentDetailsPage) currPage).clickCheckInGoogleDoc().submit().render();
     } else if (currPage instanceof DocumentLibraryPage) {
       return ((DocumentLibraryPage) currPage)
           .getFileDirectoryInfo(title)
           .selectCheckInGoogleDoc()
           .submit()
           .render();
     }
   } else {
     GoogleDocsUpdateFilePage googleUpdatefile = googleDocsPage.selectSaveToAlfresco().render();
     googleUpdatefile.render();
     googleUpdatefile.selectMinorVersionChange();
     return googleUpdatefile.submit().render();
   }
   throw new PageOperationException("Unable to save Google Doc");
 }
  public static RepositoryPage openUserFromUserHomesFolderOfRepository(
      WebDrone drone, String usrName) {
    String url = drone.getCurrentUrl();
    // http://127.0.0.1:8081/share  /page/repository#filter=path|%2FUser%2520Homes%2F
    // userEnterprise42-5405%40freetht1.test-1  |&page=1
    String target =
        url.substring(0, url.indexOf("/page/"))
            + "/page/repository#filter=path|%2FUser%2520Homes%2F"
            + StringUtils.replace(usrName, "@", "%40")
            + "|&page=1";

    drone.navigateTo(target);
    drone.waitForPageLoad(maxWaitTime);
    RepositoryPage repoPage = (RepositoryPage) ShareUser.getSharePage(drone);

    return repoPage.render();
  }
  public static EditInGoogleDocsPage createGoogleDocWithoutSave(
      WebDrone drone, String fileName, ContentType contentType) throws Exception {
    DocumentLibraryPage docLibPage = ShareUser.getSharePage(drone).render();

    GoogleDocsAuthorisation googleAuthorisationPage =
        docLibPage.getNavigation().selectCreateContent(contentType).render();
    googleAuthorisationPage.render();

    EditInGoogleDocsPage googleDocsPage = signInGoogleDocs(drone, googleAuthorisationPage);
    googleDocsPage.setGoogleCreate(true);

    if (isGoogleDocsV3) {
      googleDocsPage = switchToGoogleWindow(drone);
    }
    if (!(fileName == null)) {
      return renameGoogleDocName(fileName, googleDocsPage);
    }
    throw new PageOperationException("Filename param must not be null : error creating GoogleDoc");
  }
 /**
  * Discarding the changes made in google doc. Methods used for edition by concurrent user's
  *
  * @param drone WebDrone
  * @return HtmlPage
  */
 public static HtmlPage discardGoogleDocsChangesOtherEditor(WebDrone drone) {
   EditInGoogleDocsPage googleDocsPage = ShareUser.getSharePage(drone).render();
   GoogleDocsDiscardChanges googleDocsDiscardChanges = googleDocsPage.selectDiscard().render();
   return googleDocsDiscardChanges.clickOkConcurrentEditorButton().render();
 }