Half of features implemented #2

Merged
andrewlalis merged 19 commits from repo_creation into master 2018-08-28 18:26:28 +00:00
5 changed files with 215 additions and 5 deletions
Showing only changes of commit ac4018f6ba - Show all commits

View File

@ -44,9 +44,9 @@
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client</artifactId>
<version>1.23.0</version>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>RELEASE</version>
</dependency>
</dependencies>

View File

@ -1,5 +1,6 @@
package nl.andrewlalis;
import nl.andrewlalis.git_api.Initializer;
import nl.andrewlalis.model.Team;
import nl.andrewlalis.util.Logging;
import nl.andrewlalis.util.TeamGenerator;
@ -33,7 +34,7 @@ public class Main {
logger.info("Initializer for Github Repositories in Educational Organizations.");
// Get teams from CSV file.
List<Team> teams;
List<Team> teams = null;
try {
teams = TeamGenerator.generateFromCSV(
userOptions.get("input"),
@ -45,7 +46,12 @@ public class Main {
System.exit(1);
}
Initializer initializer = new Initializer(
userOptions.get("organization"),
userOptions.get("token"),
"assignments"
);
initializer.initializeGithubRepos(teams);
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -111,6 +111,11 @@ public class Team {
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
public String toString() {
StringBuilder sb = new StringBuilder("Team: ");