package org.codefaces.core.github.internal.operations; import org.codefaces.core.connectors.SCMConnector; import org.codefaces.core.github.internal.connectors.GitHubConnector; import org.codefaces.core.github.internal.operations.dtos.GitHubFileDTO; import org.codefaces.core.github.internal.operations.dtos.GitHubFileDataDTO; import org.codefaces.core.models.Repo; import org.codefaces.core.models.RepoFile; import org.codefaces.core.models.RepoFileInfo; import org.codefaces.core.models.RepoFolder; import org.codefaces.core.operations.SCMOperationHandler; import org.codefaces.core.operations.SCMOperationParameter; import org.codefaces.core.operations.SCMOperationParameters; import org.codefaces.core.connectors.SCMResponseException; import org.eclipse.core.runtime.Assert; public class GitHubFetchFileInfoHandler implements SCMOperationHandler { private static final String GET_GITHUB_FILE = "http://github.com/api/v2/json/blob/show"; @Override public RepoFileInfo execute(SCMConnector connector, SCMOperationParameters parameter) { Object file = parameter.getParameter(SCMOperationParameter.REPO_FILE); Assert.isTrue(file instanceof RepoFile); try { RepoFile repoFile = (RepoFile) file; String fileName = repoFile.getName(); RepoFolder folder = (RepoFolder) repoFile.getParent(); Repo repo = repoFile.getRoot().getRepo(); String fileUrl = createFetchFileInfoUrl(repo, folder, fileName); GitHubFileDataDTO fileDataDto = fetchFileDataDto( (GitHubConnector) connector, fileUrl); return new RepoFileInfo(fileDataDto.getData(), fileDataDto.getMime_type(), fileDataDto.getMode(), fileDataDto.getSize()); } catch (Exception e) { throw new SCMResponseException(e.getMessage(), e); } } protected String createFetchFileInfoUrl(Repo repo, RepoFolder folder, String fileName) { return GitHubOperationUtil.makeURI(GET_GITHUB_FILE, (String) repo .getProperty(GitHubOperationConstants.GITHUB_OWNER), repo.getName(), folder.getId(), fileName); } private GitHubFileDataDTO fetchFileDataDto(GitHubConnector connector, String getGitHubFileMetadataUrl) { GitHubFileDTO gitHubFileDto = GitHubOperationUtil.fromJson( connector.getResponseBody(getGitHubFileMetadataUrl), GitHubFileDTO.class); return gitHubFileDto.getBlob(); } }