Half of features implemented #2
			
				
			
		
		
		
	
							
								
								
									
										6
									
								
								pom.xml
								
								
								
								
							
							
						
						
									
										6
									
								
								pom.xml
								
								
								
								
							| 
						 | 
					@ -44,9 +44,9 @@
 | 
				
			||||||
            <scope>compile</scope>
 | 
					            <scope>compile</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>com.google.http-client</groupId>
 | 
					            <groupId>org.apache.httpcomponents</groupId>
 | 
				
			||||||
            <artifactId>google-http-client</artifactId>
 | 
					            <artifactId>httpclient</artifactId>
 | 
				
			||||||
            <version>1.23.0</version>
 | 
					            <version>RELEASE</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
    </dependencies>
 | 
					    </dependencies>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
package nl.andrewlalis;
 | 
					package nl.andrewlalis;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import nl.andrewlalis.git_api.Initializer;
 | 
				
			||||||
import nl.andrewlalis.model.Team;
 | 
					import nl.andrewlalis.model.Team;
 | 
				
			||||||
import nl.andrewlalis.util.Logging;
 | 
					import nl.andrewlalis.util.Logging;
 | 
				
			||||||
import nl.andrewlalis.util.TeamGenerator;
 | 
					import nl.andrewlalis.util.TeamGenerator;
 | 
				
			||||||
| 
						 | 
					@ -33,7 +34,7 @@ public class Main {
 | 
				
			||||||
        logger.info("Initializer for Github Repositories in Educational Organizations.");
 | 
					        logger.info("Initializer for Github Repositories in Educational Organizations.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Get teams from CSV file.
 | 
					        // Get teams from CSV file.
 | 
				
			||||||
        List<Team> teams;
 | 
					        List<Team> teams = null;
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            teams = TeamGenerator.generateFromCSV(
 | 
					            teams = TeamGenerator.generateFromCSV(
 | 
				
			||||||
                    userOptions.get("input"),
 | 
					                    userOptions.get("input"),
 | 
				
			||||||
| 
						 | 
					@ -45,7 +46,12 @@ public class Main {
 | 
				
			||||||
            System.exit(1);
 | 
					            System.exit(1);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Initializer initializer = new Initializer(
 | 
				
			||||||
 | 
					                userOptions.get("organization"),
 | 
				
			||||||
 | 
					                userOptions.get("token"),
 | 
				
			||||||
 | 
					                "assignments"
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        initializer.initializeGithubRepos(teams);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,59 @@
 | 
				
			||||||
 | 
					package nl.andrewlalis.git_api;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import nl.andrewlalis.model.Team;
 | 
				
			||||||
 | 
					import org.apache.http.client.methods.CloseableHttpResponse;
 | 
				
			||||||
 | 
					import org.apache.http.client.methods.HttpGet;
 | 
				
			||||||
 | 
					import org.apache.http.impl.client.CloseableHttpClient;
 | 
				
			||||||
 | 
					import org.apache.http.impl.client.HttpClients;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * This class is responsible for initializing the Github repositories and setting permissions, adding teams, etc.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class Initializer {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String organizationName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String accessToken;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private URLBuilder urlBuilder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String assignmentsRepo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Initializer(String organizationName, String accessToken, String assignmentsRepo) {
 | 
				
			||||||
 | 
					        this.organizationName = organizationName;
 | 
				
			||||||
 | 
					        this.accessToken = accessToken;
 | 
				
			||||||
 | 
					        this.assignmentsRepo = assignmentsRepo;
 | 
				
			||||||
 | 
					        this.urlBuilder = new URLBuilder(organizationName, accessToken);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Initializes the github repository for all teams given.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Creates for each team:
 | 
				
			||||||
 | 
					     * - a repository
 | 
				
			||||||
 | 
					     * - protected master branch
 | 
				
			||||||
 | 
					     * - development branch
 | 
				
			||||||
 | 
					     * - adds students to repository
 | 
				
			||||||
 | 
					     * - creates assignments repository
 | 
				
			||||||
 | 
					     * - adds all students to assignments repository.
 | 
				
			||||||
 | 
					     * @param teams The list of student teams.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void initializeGithubRepos(List<Team> teams) {
 | 
				
			||||||
 | 
					        listMemberTeams();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private Map<String, String> listMemberTeams() {
 | 
				
			||||||
 | 
					        CloseableHttpClient client = HttpClients.createDefault();
 | 
				
			||||||
 | 
					        HttpGet get = new HttpGet(this.urlBuilder.buildTeamURL());
 | 
				
			||||||
 | 
					        try (CloseableHttpResponse response = client.execute(get)) {
 | 
				
			||||||
 | 
					            System.out.println(response.getStatusLine());
 | 
				
			||||||
 | 
					        } catch (IOException e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,140 @@
 | 
				
			||||||
 | 
					package nl.andrewlalis.git_api;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class URLBuilder {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The main URL from which all requests must be formed.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static final String baseURL = "https://api.github.com";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The name of the github organization in which to create repositories.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private String organizationName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The token needed to use the API.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private String accessToken;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public URLBuilder(String organizationName, String accessToken) {
 | 
				
			||||||
 | 
					        this.organizationName = organizationName;
 | 
				
			||||||
 | 
					        this.accessToken = accessToken;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @return The URL for adding a repository.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public String buildRepoURL() {
 | 
				
			||||||
 | 
					        return baseURL
 | 
				
			||||||
 | 
					                + "/orgs/"
 | 
				
			||||||
 | 
					                + this.organizationName
 | 
				
			||||||
 | 
					                + "/repos?access_token="
 | 
				
			||||||
 | 
					                + this.accessToken;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @param repoName The name of the repository.
 | 
				
			||||||
 | 
					     * @param branch The name of the branch in the repository above.
 | 
				
			||||||
 | 
					     * @return The URL for setting branch protection.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public String buildBranchProtectionURL(String repoName, String branch) {
 | 
				
			||||||
 | 
					        return baseURL
 | 
				
			||||||
 | 
					                + "/repos/"
 | 
				
			||||||
 | 
					                + this.organizationName
 | 
				
			||||||
 | 
					                + '/'
 | 
				
			||||||
 | 
					                + repoName
 | 
				
			||||||
 | 
					                + "/branches/"
 | 
				
			||||||
 | 
					                + branch
 | 
				
			||||||
 | 
					                + "/protection?access_token="
 | 
				
			||||||
 | 
					                + this.accessToken;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @param repoName The name of the repository the branch is in.
 | 
				
			||||||
 | 
					     * @return The URL for getting a branch reference.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public String buildReferenceGetURL(String repoName) {
 | 
				
			||||||
 | 
					        return baseURL
 | 
				
			||||||
 | 
					                + "/repos/"
 | 
				
			||||||
 | 
					                + this.organizationName
 | 
				
			||||||
 | 
					                + '/'
 | 
				
			||||||
 | 
					                + repoName
 | 
				
			||||||
 | 
					                + "/git/refs/heads/master?acces_token="
 | 
				
			||||||
 | 
					                + this.accessToken;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @param repoName The repository name.
 | 
				
			||||||
 | 
					     * @return The URL for creating a new branch, once a reference has been obtained.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public String buildReferencePostURL(String repoName) {
 | 
				
			||||||
 | 
					        return baseURL
 | 
				
			||||||
 | 
					                + "/repos/"
 | 
				
			||||||
 | 
					                + this.organizationName
 | 
				
			||||||
 | 
					                + '/'
 | 
				
			||||||
 | 
					                + repoName
 | 
				
			||||||
 | 
					                + "/git/refs?access_token="
 | 
				
			||||||
 | 
					                + this.accessToken;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @param repoName The name of the repository.
 | 
				
			||||||
 | 
					     * @param collaborator The collaborator's name.
 | 
				
			||||||
 | 
					     * @return The URL for adding a collaborator to a repository.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public String buildCollaboratorURL(String repoName, String collaborator) {
 | 
				
			||||||
 | 
					        return baseURL
 | 
				
			||||||
 | 
					                + "/repos/"
 | 
				
			||||||
 | 
					                + this.organizationName
 | 
				
			||||||
 | 
					                + '/'
 | 
				
			||||||
 | 
					                + repoName
 | 
				
			||||||
 | 
					                + "/collaborators/"
 | 
				
			||||||
 | 
					                + collaborator
 | 
				
			||||||
 | 
					                + "?access_token="
 | 
				
			||||||
 | 
					                + this.accessToken;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @return The URL for obtaining the teams.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public String buildTeamURL() {
 | 
				
			||||||
 | 
					        return baseURL
 | 
				
			||||||
 | 
					                + "/orgs/"
 | 
				
			||||||
 | 
					                + this.organizationName
 | 
				
			||||||
 | 
					                + "/teams?access_token="
 | 
				
			||||||
 | 
					                + this.accessToken;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @param repoName The name of the repository.
 | 
				
			||||||
 | 
					     * @param teamName The name of the team to set permissions for.
 | 
				
			||||||
 | 
					     * @return The URL for setting team permissions of a repository.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public String buildTeamPermissionsURL(String repoName, String teamName) {
 | 
				
			||||||
 | 
					        return baseURL
 | 
				
			||||||
 | 
					                + "/teams/"
 | 
				
			||||||
 | 
					                + teamName
 | 
				
			||||||
 | 
					                + "/repos/"
 | 
				
			||||||
 | 
					                + this.organizationName
 | 
				
			||||||
 | 
					                + '/'
 | 
				
			||||||
 | 
					                + repoName
 | 
				
			||||||
 | 
					                + "?access_token="
 | 
				
			||||||
 | 
					                + this.accessToken;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @param repoName The name of the repository.
 | 
				
			||||||
 | 
					     * @return The URL for archiving a repository.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public String buildArchiveRepoURL(String repoName) {
 | 
				
			||||||
 | 
					        return baseURL
 | 
				
			||||||
 | 
					                + "/repos/"
 | 
				
			||||||
 | 
					                + this.organizationName
 | 
				
			||||||
 | 
					                + '/'
 | 
				
			||||||
 | 
					                + repoName
 | 
				
			||||||
 | 
					                + "?access_token="
 | 
				
			||||||
 | 
					                + this.accessToken;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -111,6 +111,11 @@ public class Team {
 | 
				
			||||||
        return sb.toString();
 | 
					        return sb.toString();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Returns a pretty formatting of this team so that it can be viewed in the command line. This is mainly for
 | 
				
			||||||
 | 
					     * debugging purposes.
 | 
				
			||||||
 | 
					     * @return A string representing the team.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public String toString() {
 | 
					    public String toString() {
 | 
				
			||||||
        StringBuilder sb = new StringBuilder("Team: ");
 | 
					        StringBuilder sb = new StringBuilder("Team: ");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue