/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.plugin.github.factory.resolver; import com.google.common.base.Strings; import java.util.StringJoiner; /** * Representation of a github URL, allowing to get details from it. * <p> like * https://github.com/<username>/<repository> * https://github.com/<username>/<repository>/tree/<branch> * * @author Florent Benoit */ public class GithubUrl { /** * Master branch is the default. */ private static final String DEFAULT_BRANCH_NAME = "master"; /** * Username part of github URL */ private String username; /** * Repository part of the URL. */ private String repository; /** * Branch name (by default if it is omitted it is "master" branch) */ private String branch = DEFAULT_BRANCH_NAME; /** * Subfolder if any */ private String subfolder; /** * Dockerfile filename */ private String dockerfileFilename; /** * Factory json filename */ private String factoryFilename; /** * Creation of this instance is made by the parser so user may not need to create a new instance directly */ protected GithubUrl() { } /** * Gets username of this github url * * @return the username part */ public String getUsername() { return this.username; } public GithubUrl withUsername(String userName) { this.username = userName; return this; } /** * Gets repository of this github url * * @return the repository part */ public String getRepository() { return this.repository; } protected GithubUrl withRepository(String repository) { this.repository = repository; return this; } /** * Gets dockerfile file name of this github url * * @return the dockerfile file name */ public String getDockerfileFilename() { return this.dockerfileFilename; } protected GithubUrl withDockerfileFilename(String dockerfileFilename) { this.dockerfileFilename = dockerfileFilename; return this; } /** * Gets factory file name of this github url * * @return the factory file name */ public String getFactoryFilename() { return this.factoryFilename; } protected GithubUrl withFactoryFilename(String factoryFilename) { this.factoryFilename = factoryFilename; return this; } /** * Gets branch of this github url * * @return the branch part */ public String getBranch() { return this.branch; } protected GithubUrl withBranch(String branch) { if (!Strings.isNullOrEmpty(branch)) { this.branch = branch; } return this; } /** * Gets subfolder of this github url * * @return the subfolder part */ public String getSubfolder() { return this.subfolder; } /** * Sets the subfolder represented by the URL. * * @param subfolder * path inside the repository * @return current github instance */ protected GithubUrl withSubfolder(String subfolder) { this.subfolder = subfolder; return this; } /** * Provides the location to dockerfile * * @return location of dockerfile in a repository */ protected String dockerFileLocation() { return new StringJoiner("/").add("https://raw.githubusercontent.com") .add(username) .add(repository) .add(branch) .add(dockerfileFilename) .toString(); } /** * Provides the location to factory json file * * @return location of factory json file in a repository */ protected String factoryJsonFileLocation() { return new StringJoiner("/").add("https://raw.githubusercontent.com") .add(username) .add(repository) .add(branch) .add(factoryFilename) .toString(); } /** * Provides location to the repository part of the full github URL. * * @return location of the repository. */ protected String repositoryLocation() { return "https://github.com/" + this.username + "/" + this.repository; } }