public UserRepositoryAccount selectRepository(UserRepositoryAccount userRepositoryAccount) { Console.WriteLine("Enter name of repository to work with:"); string repositoryName = Console.ReadLine(); var user = userRepositoryAccount.User; var repository = repositoryClient.findRepository(repositoryName); if (repository == null) { throw new RepositoryNotFound(repositoryName); } var repositoryAccess = user.RepositoryAccesses.Find(it => it.Repository.Name.Equals(repositoryName)); if (repositoryAccess == null) { if (!(repository.GetType() == typeof(PublicRepository))) { throw new AccessDenied(repositoryName, user.Login); } repositoryAccess = new RepositoryAccess(repository, RepositoryAccessType.CONTRIBUTOR, user); } var userRepositorySession = new UserRepositorySession(user, repositoryAccess); userRepositorySessionHandler.handle(userRepositorySession); return(userRepositoryAccount); }
private List <RepositoryOperation> prepareRepositoryOperations(RepositoryAccess repositoryAccess, User user) { List <RepositoryOperation> repositoryOperations = new List <RepositoryOperation>(); repositoryOperations.Add(new RepositoryOperation("Create branch", repositoryOperations.Count, RepositoryOperationType.CREATE_BRANCH)); if (!user.ClonedRepositories.Contains(repositoryAccess.Repository)) { repositoryOperations.Add(new RepositoryOperation("Clone repository", repositoryOperations.Count, RepositoryOperationType.CLONE)); } if (repositoryAccess != null && repositoryAccess.RepositoryAccessType == RepositoryAccessType.OWNER) { repositoryOperations.Add(new RepositoryOperation("Invite user", repositoryOperations.Count, RepositoryOperationType.INVITE_USER)); } if (repositoryAccess.Repository.GetType() == typeof(PublicRepository) && !user.getContributedRepositories().Contains(repositoryAccess.Repository)) { repositoryOperations.Add(new RepositoryOperation("Join as contibutor", repositoryOperations.Count, RepositoryOperationType.JOIN_AS_CONTRIBUTOR)); } if (repositoryAccess.Repository.Branches.Any()) { repositoryOperations.Add(new RepositoryOperation("List all branches", repositoryOperations.Count, RepositoryOperationType.LIST_BRANCHES)); repositoryOperations.Add(new RepositoryOperation("Pick branch", repositoryOperations.Count, RepositoryOperationType.PICK_BRANCH)); repositoryOperations.Add(new RepositoryOperation("Push to branch", repositoryOperations.Count, RepositoryOperationType.PUSH)); } repositoryOperations.Add(new RepositoryOperation("Main menu", repositoryOperations.Count, RepositoryOperationType.MAIN_MENU)); return(repositoryOperations); }
override public void validateRepositoryAccess(RepositoryAccess repositoryAccess) { if (!repositoryAccess.Repository.Equals(this)) { throw new AccessDenied(this, repositoryAccess.Contributor); } }
public virtual void createBranch(RepositoryAccess repositoryAccess, string name) { var files = new List <File>(); files.Add(new File("Readme.md", $"Project:'{repositoryAccess.Repository.Name}'")); this.Branches.Add(Branch.New(name, files)); }
public Repository cloneRepository(RepositoryAccess repositoryAccess) { validateRepositoryAccess(repositoryAccess); addAsContributor(repositoryAccess); List <Branch> branches = GetBranchesForUser(repositoryAccess); List <User> contributors = GetContributorsForUser(repositoryAccess); return(clone(branches, contributors)); }
public override List <File> Pull(RepositoryAccess repositoryAccess, string branchName) { validateRepositoryAccess(repositoryAccess); List <Branch> parentBranches = base.Branches; Branch branchThatWeSearch = null; foreach (var branch in parentBranches) { if (branch.Name.Equals(branchName)) { branchThatWeSearch = branch; } } if (branchThatWeSearch != null) { return(branchThatWeSearch.Files); } else { return(new List <File>()); } }
public abstract void validateRepositoryAccess(RepositoryAccess repositoryAccess);
public abstract List <File> Pull(RepositoryAccess repositoryAccess, string branchName);
public abstract Shareable Push(RepositoryAccess repositoryAccess, string branchName, File file);
private UserRepositorySession handle(UserRepositorySession userRepositorySession, RepositoryOperation repositoryOperation) { User user = userRepositorySession.User; RepositoryAccess repositoryAccess = userRepositorySession.Current; switch (repositoryOperation.RepositoryOperationType) { case RepositoryOperationType.MAIN_MENU: { return(new UserRepositorySession(user, repositoryAccess, new List <RepositoryOperation>())); } case RepositoryOperationType.INVITE_USER: { var result = grantAccess(userRepositorySession); Console.WriteLine($"{result.Item1.Login} got access to {result.Item2}"); return(new UserRepositorySession(user, repositoryAccess, prepareRepositoryOperations(repositoryAccess, user))); } case RepositoryOperationType.CREATE_BRANCH: { var result = createBranch(userRepositorySession); Console.WriteLine($"Branch: {result.Name} was created"); return(new UserRepositorySession(user, repositoryAccess, prepareRepositoryOperations(repositoryAccess, user))); } case RepositoryOperationType.JOIN_AS_CONTRIBUTOR: { var result = getAccess(userRepositorySession); Console.WriteLine($"{result.Item1.Login} got access to {result.Item2}"); return(new UserRepositorySession(user, repositoryAccess, prepareRepositoryOperations(repositoryAccess, user))); } case RepositoryOperationType.LIST_BRANCHES: { var branches = listBranches(userRepositorySession); Console.WriteLine($"Branches:{String.Join("\n", branches.Select(it=> it.Name ))}"); return(new UserRepositorySession(user, repositoryAccess, prepareRepositoryOperations(repositoryAccess, user))); } case RepositoryOperationType.PICK_BRANCH: { var branch = getBranch(userRepositorySession); Console.WriteLine($"Branch:{branch.Name}\nFiles:{String.Join("\n",branch.Files.Select(it=>it.Title))}"); return(new UserRepositorySession(user, repositoryAccess, prepareRepositoryOperations(repositoryAccess, user))); } case RepositoryOperationType.PUSH: { var branch = pushToBranch(userRepositorySession); Console.WriteLine($"Branch:{branch.Name}\nFiles:\n{String.Join("\n",branch.Files.Select(it=>it.Title))}"); return(new UserRepositorySession(user, repositoryAccess, prepareRepositoryOperations(repositoryAccess, user))); } case RepositoryOperationType.CLONE: { var access = userRepositorySession.Current; var repository = userRepositorySession.Current.Repository.cloneRepository(access); userRepositorySession.User.ClonedRepositories.Add(repository); var session = new UserRepositorySession(user, repositoryAccess, prepareRepositoryOperations(repositoryAccess, user)); Console.WriteLine($"Repository {repository.Name} was successfully cloned"); return(session); } } return(userRepositorySession); }
public override List <File> GetFilesForUser(RepositoryAccess repositoryAccess, string branchName) { validateContributor(repositoryAccess.Contributor); return(base.GetFilesForUser(repositoryAccess, branchName)); }
public virtual List <Branch> GetBranchesForUser(RepositoryAccess repositoryAccess) { return(this.branches); }
public override void createBranch(RepositoryAccess repositoryAccess, string name) { validateRepositoryAccess(repositoryAccess); base.createBranch(repositoryAccess, name); }
public override Shareable Push(RepositoryAccess repositoryAccess, string branchName, File file) { validateRepositoryAccess(repositoryAccess); base.push(branchName, file); return(this); }
public override List <Branch> GetBranchesForUser(RepositoryAccess repositoryAccess) { validateRepositoryAccess(repositoryAccess); validateContributor(repositoryAccess.Contributor); return(base.GetBranchesForUser(repositoryAccess)); }
public abstract void addAsContributor(RepositoryAccess repositoryAccess);
public UserRepositorySession(User user, RepositoryAccess current) { this.user = user; this.current = current; this.repositoryOperations = new List <RepositoryOperation>(); }
public virtual List <File> GetFilesForUser(RepositoryAccess repositoryAccess, string branchName) { return(this.GetBranchesForUser(repositoryAccess).Find(it => it.Title == branchName).Files); }
public override void addAsContributor(RepositoryAccess repositoryAccess) { validateRepositoryAccess(repositoryAccess); addContributor(repositoryAccess.Contributor); }
public virtual List <User> GetContributorsForUser(RepositoryAccess repositoryAccess) { return(this.contributors); }
public UserRepositorySession(User user, RepositoryAccess current, List <RepositoryOperation> repositoryOperations) { this.user = user; this.current = current; this.repositoryOperations = repositoryOperations; }