private boolean handlePost(HttpServletRequest request, HttpServletResponse response, String path)
      throws IOException, JSONException, ServletException, URISyntaxException, CoreException {
    Path p = new Path(path);
    if (p.segment(0).equals("file")) { // $NON-NLS-1$
      // handle adding new remote
      // expected path: /git/remote/file/{path}
      return addRemote(request, response, path);
    } else {
      JSONObject requestObject = OrionServlet.readJSONRequest(request);
      boolean fetch = Boolean.parseBoolean(requestObject.optString(GitConstants.KEY_FETCH, null));
      String srcRef = requestObject.optString(GitConstants.KEY_PUSH_SRC_REF, null);
      boolean tags = requestObject.optBoolean(GitConstants.KEY_PUSH_TAGS, false);
      boolean force = requestObject.optBoolean(GitConstants.KEY_FORCE, false);

      // prepare creds
      GitCredentialsProvider cp = GitUtils.createGitCredentialsProvider(requestObject);

      // if all went well, continue with fetch or push
      if (fetch) {
        return fetch(request, response, cp, path, force);
      } else if (srcRef != null) {
        return push(request, response, path, cp, srcRef, tags, force);
      } else {
        return statusHandler.handleRequest(
            request,
            response,
            new ServerStatus(
                IStatus.ERROR,
                HttpServletResponse.SC_BAD_REQUEST,
                "Only Fetch:true is currently supported.",
                null));
      }
    }
  }
  // remove remote
  private boolean handleDelete(
      HttpServletRequest request, HttpServletResponse response, String path)
      throws CoreException, IOException, URISyntaxException, JSONException, ServletException {
    Path p = new Path(path);
    if (p.segment(1).equals("file")) { // $NON-NLS-1$
      // expected path: /gitapi/remote/{remote}/file/{path}
      String remoteName = p.segment(0);

      File gitDir = GitUtils.getGitDir(p.removeFirstSegments(1));
      Repository db = new FileRepository(gitDir);
      StoredConfig config = db.getConfig();
      config.unsetSection(ConfigConstants.CONFIG_REMOTE_SECTION, remoteName);
      config.save();
      // TODO: handle result
      return true;
    }
    return false;
  }
 private boolean push(
     HttpServletRequest request,
     HttpServletResponse response,
     String path,
     GitCredentialsProvider cp,
     String srcRef,
     boolean tags,
     boolean force)
     throws ServletException, CoreException, IOException, JSONException, URISyntaxException {
   Path p = new Path(path);
   // FIXME: what if a remote or branch is named "file"?
   if (p.segment(2).equals("file")) { // $NON-NLS-1$
     // /git/remote/{remote}/{branch}/file/{path}
     PushJob job = new PushJob(TaskJobHandler.getUserId(request), cp, p, srcRef, tags, force);
     return TaskJobHandler.handleTaskJob(request, response, job, statusHandler);
   }
   return false;
 }
示例#4
0
  protected void createSystemSQLPatterns() throws PersistenceException {
    ERepositoryObjectType sqlpatternsType = ERepositoryObjectType.SQLPATTERNS;
    if (sqlpatternsType == null) {
      return; // don't load, nothing to do
    }
    ILibrariesService service = null;
    if (!GlobalServiceRegister.getDefault().isServiceRegistered(ILibrariesService.class)) {
      return;
    }
    service =
        (ILibrariesService) GlobalServiceRegister.getDefault().getService(ILibrariesService.class);
    Project project = getRepositoryContext().getProject();
    FolderHelper folderHelper = getFolderHelper(project.getEmfProject());
    // will automatically set the children folders
    // FolderItem folderItem = folderHelper.getFolder("sqlPatterns/system");
    // if (folderItem == null) {
    //            folderItem = folderHelper.createFolder("sqlPatterns/system"); //$NON-NLS-1$
    // }

    List<URL> routines = service.getSystemSQLPatterns();

    List<IRepositoryViewObject> repositoryObjects = getAll(project, sqlpatternsType, false, false);

    for (URL url : routines) {
      String[] fragments = url.toString().split("/"); // $NON-NLS-1$
      String label = fragments[fragments.length - 1];
      String[] tmp = label.split("\\."); // $NON-NLS-1$

      Path relativePath = new Path(url.getFile());

      // for instance: categoryName is Teradata; fileName is
      // Loadfile.sqlpattern
      String fileName = relativePath.segment(relativePath.segmentCount() - 1);
      String categoryName = relativePath.segment(relativePath.segmentCount() - 2);

      tmp = fileName.split("\\."); // $NON-NLS-1$

      String sqlPatternLabel = tmp[0];

      SQLPatternItem existingItem = null;
      for (IRepositoryViewObject object : repositoryObjects) {
        if (object.getLabel().equals(sqlPatternLabel)
            && object.getProperty().getItem() instanceof SQLPatternItem
            && ((SQLPatternItem) object.getProperty().getItem())
                .getEltName()
                .equals(categoryName)) {
          existingItem = (SQLPatternItem) object.getProperty().getItem();
          break;
        }
      }
      // check the folder for categoryName,system,UserDefined
      // set the item's relative path in the repository view
      IPath categoryPath = new Path(categoryName);
      IPath systemPath = categoryPath.append(RepositoryConstants.SYSTEM_DIRECTORY);
      IPath userPath = categoryPath.append(RepositoryConstants.USER_DEFINED);

      IPath parentPath = new Path(ERepositoryObjectType.getFolderName(sqlpatternsType));
      if (folderHelper.getFolder(parentPath.append(categoryPath)) == null) {
        createFolder(
            getRepositoryContext().getProject(),
            sqlpatternsType,
            new Path(""),
            categoryPath //$NON-NLS-1$
                .lastSegment());
      }
      FolderItem systemFolder = folderHelper.getFolder(parentPath.append(systemPath));
      if (systemFolder == null) {
        Folder folder =
            createFolder(
                getRepositoryContext().getProject(),
                sqlpatternsType,
                categoryPath,
                systemPath.lastSegment());
        ((FolderItem) folder.getProperty().getItem()).setType(FolderType.FOLDER_LITERAL);
      }
      if (folderHelper.getFolder(parentPath.append(userPath)) == null) {
        Folder folder =
            createFolder(
                getRepositoryContext().getProject(),
                sqlpatternsType,
                categoryPath,
                userPath.lastSegment());
        ((FolderItem) folder.getProperty().getItem()).setType(FolderType.FOLDER_LITERAL);
      }
      //
      if (existingItem == null) {
        createSQLPattern(url, sqlPatternLabel, categoryName);
      } else {
        updateSQLPattern(url, existingItem);
        existingItem.setParent(systemFolder);
      }
    }
  }
  private boolean handleGet(HttpServletRequest request, HttpServletResponse response, String path)
      throws IOException, JSONException, ServletException, URISyntaxException, CoreException {
    Path p = new Path(path);
    // FIXME: what if a remote or branch is named "file"?
    if (p.segment(0).equals("file")) { // $NON-NLS-1$
      // /git/remote/file/{path}
      File gitDir = GitUtils.getGitDir(p);
      Repository db = new FileRepository(gitDir);
      Set<String> configNames =
          db.getConfig().getSubsections(ConfigConstants.CONFIG_REMOTE_SECTION);
      JSONObject result = new JSONObject();
      JSONArray children = new JSONArray();
      URI cloneLocation =
          BaseToCloneConverter.getCloneLocation(getURI(request), BaseToCloneConverter.REMOTE_LIST);
      for (String configName : configNames) {
        Remote remote = new Remote(cloneLocation, db, configName);
        children.put(remote.toJSON(false, null));
      }
      result.put(ProtocolConstants.KEY_CHILDREN, children);
      result.put(ProtocolConstants.KEY_TYPE, Remote.TYPE);
      OrionServlet.writeJSONResponse(request, response, result);
      return true;
    } else if (p.segment(1).equals("file")) { // $NON-NLS-1$
      // /git/remote/{remote}/file/{path}
      RemoteDetailsJob job;
      String commits = request.getParameter(GitConstants.KEY_TAG_COMMITS);
      int commitsNumber = commits == null ? 0 : Integer.parseInt(commits);
      String page = request.getParameter("page");
      if (page != null) {
        int pageNo = Integer.parseInt(page);
        int pageSize =
            request.getParameter("pageSize") == null
                ? PAGE_SIZE
                : Integer.parseInt(request.getParameter("pageSize"));
        job =
            new RemoteDetailsJob(
                TaskJobHandler.getUserId(request),
                p.segment(0),
                p.removeFirstSegments(1),
                BaseToCloneConverter.getCloneLocation(getURI(request), BaseToCloneConverter.REMOTE),
                commitsNumber,
                pageNo,
                pageSize,
                request.getRequestURI());
      } else {
        job =
            new RemoteDetailsJob(
                TaskJobHandler.getUserId(request),
                p.segment(0),
                p.removeFirstSegments(1),
                BaseToCloneConverter.getCloneLocation(getURI(request), BaseToCloneConverter.REMOTE),
                commitsNumber);
      }
      return TaskJobHandler.handleTaskJob(request, response, job, statusHandler);
    } else if (p.segment(2).equals("file")) { // $NON-NLS-1$
      // /git/remote/{remote}/{branch}/file/{path}
      File gitDir = GitUtils.getGitDir(p.removeFirstSegments(2));
      Repository db = new FileRepository(gitDir);
      URI cloneLocation =
          BaseToCloneConverter.getCloneLocation(
              getURI(request), BaseToCloneConverter.REMOTE_BRANCH);
      Remote remote = new Remote(cloneLocation, db, p.segment(0));
      RemoteBranch remoteBranch = new RemoteBranch(cloneLocation, db, remote, p.segment(1));
      JSONObject result = remoteBranch.toJSON();
      if (result != null) {
        OrionServlet.writeJSONResponse(request, response, result);
        return true;
      }
      JSONObject errorData = new JSONObject();
      errorData.put(GitConstants.KEY_CLONE, cloneLocation);

      return statusHandler.handleRequest(
          request,
          response,
          new ServerStatus(
              new Status(
                  IStatus.ERROR,
                  GitActivator.PI_GIT,
                  "No remote branch found: " + p.uptoSegment(2).removeTrailingSeparator()),
              HttpServletResponse.SC_NOT_FOUND,
              errorData));
    }
    return statusHandler.handleRequest(
        request,
        response,
        new ServerStatus(
            IStatus.ERROR,
            HttpServletResponse.SC_BAD_REQUEST,
            "Bad request, \"/git/remote/{remote}/{branch}/file/{path}\" expected",
            null));
  }