Esempio n. 1
0
        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);
Esempio n. 17
0
 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);
 }
Esempio n. 21
0
 public UserRepositorySession(User user, RepositoryAccess current, List <RepositoryOperation> repositoryOperations)
 {
     this.user    = user;
     this.current = current;
     this.repositoryOperations = repositoryOperations;
 }