From 661db6c2948e4848b29645c66e17cbfcaa780ae0 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Wed, 23 Jan 2013 07:52:20 -0500 Subject: [PATCH] Revised multiple owners contribution --- src/com/gitblit/models/RepositoryModel.java | 116 ++++++++++++++++++++++++++------------------------------- 1 files changed, 53 insertions(+), 63 deletions(-) diff --git a/src/com/gitblit/models/RepositoryModel.java b/src/com/gitblit/models/RepositoryModel.java index a27e9fd..320f16b 100644 --- a/src/com/gitblit/models/RepositoryModel.java +++ b/src/com/gitblit/models/RepositoryModel.java @@ -17,20 +17,17 @@ import java.io.Serializable; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; -import org.apache.wicket.markup.html.basic.MultiLineLabel; - import com.gitblit.Constants.AccessRestrictionType; import com.gitblit.Constants.AuthorizationControl; import com.gitblit.Constants.FederationStrategy; import com.gitblit.utils.ArrayUtils; -import com.gitblit.utils.MultiConfigUtil; -import com.gitblit.utils.StringComparator; import com.gitblit.utils.StringUtils; /** @@ -40,15 +37,14 @@ * @author James Moger * */ -public class RepositoryModel implements Serializable, - Comparable<RepositoryModel> { +public class RepositoryModel implements Serializable, Comparable<RepositoryModel> { private static final long serialVersionUID = 1L; // field names are reflectively mapped in EditRepository page public String name; public String description; - private Set<String> repoAdministrators = new TreeSet<String>(new StringComparator()); + public List<String> owners; public Date lastChange; public boolean hasCommits; public boolean showRemoteBranches; @@ -84,29 +80,28 @@ public String gcThreshold; public int gcPeriod; public int maxActivityCommits; - + public transient boolean isCollectingGarbage; public Date lastGC; - - private MultiConfigUtil multiConfigUtil = new MultiConfigUtil(); - + public RepositoryModel() { this("", "", "", new Date(0)); } - public RepositoryModel(String name, String description, String owner, - Date lastchange) { + public RepositoryModel(String name, String description, String owner, Date lastchange) { this.name = name; - this.description = description; - this.addRepoAdministrator(owner); + this.description = description; this.lastChange = lastchange; this.accessRestriction = AccessRestrictionType.NONE; this.authorizationControl = AuthorizationControl.NAMED; this.federationSets = new ArrayList<String>(); - this.federationStrategy = FederationStrategy.FEDERATE_THIS; + this.federationStrategy = FederationStrategy.FEDERATE_THIS; this.projectPath = StringUtils.getFirstPathElement(name); + this.owners = new ArrayList<String>(); + + addOwner(owner); } - + public List<String> getLocalBranches() { if (ArrayUtils.isEmpty(availableRefs)) { return new ArrayList<String>(); @@ -119,30 +114,30 @@ } return localBranches; } - + public void addFork(String repository) { if (forks == null) { forks = new TreeSet<String>(); } forks.add(repository); } - + public void removeFork(String repository) { if (forks == null) { return; } forks.remove(repository); } - + public void resetDisplayName() { displayName = null; } - + @Override public int hashCode() { return name.hashCode(); } - + @Override public boolean equals(Object o) { if (o instanceof RepositoryModel) { @@ -163,25 +158,30 @@ public int compareTo(RepositoryModel o) { return StringUtils.compareRepositoryNames(name, o.name); } - + public boolean isFork() { return !StringUtils.isEmpty(originRepository); } - + + public boolean isOwner(String username) { + if (StringUtils.isEmpty(username) || ArrayUtils.isEmpty(owners)) { + return false; + } + return owners.contains(username.toLowerCase()); + } + public boolean isPersonalRepository() { - return !StringUtils.isEmpty(projectPath) - && projectPath.charAt(0) == '~'; + return !StringUtils.isEmpty(projectPath) && projectPath.charAt(0) == '~'; } - + public boolean isUsersPersonalRepository(String username) { - return !StringUtils.isEmpty(projectPath) - && projectPath.equalsIgnoreCase("~" + username); + return !StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase("~" + username); } - + public boolean allowAnonymousView() { return !accessRestriction.atLeast(AccessRestrictionType.VIEW); } - + public RepositoryModel cloneAs(String cloneName) { RepositoryModel clone = new RepositoryModel(); clone.originRepository = name; @@ -202,46 +202,36 @@ return clone; } - public void addRepoAdministrator(String repoAdministrator) { - if (repoAdministrator != null && repoAdministrator.trim().length() > 0) { - this.repoAdministrators.add(repoAdministrator.toLowerCase()); - } - } - - public void removeRepoAdministrator(String repoAdministrator) { - if (repoAdministrator != null && repoAdministrator.trim().length() > 0) { - this.repoAdministrators.remove(repoAdministrator.toLowerCase()); - } - } - - public void addRepoAdministrators(Set<String> repoAdministrators) { - if (repoAdministrators != null) { - for (String admin : repoAdministrators) { - this.addRepoAdministrator(admin); + public void addOwner(String username) { + if (!StringUtils.isEmpty(username)) { + String name = username.toLowerCase(); + // a set would be more efficient, but this complicates JSON + // deserialization so we enforce uniqueness with an arraylist + if (!owners.contains(name)) { + owners.add(name); } } } - public void removeRepoAdministrators(Set<String> repoAdministrators) { - if (repoAdministrators != null) { - for (String admin : repoAdministrators) { - this.removeRepoAdministrator(admin); + public void removeOwner(String username) { + if (!StringUtils.isEmpty(username)) { + owners.remove(username.toLowerCase()); + } + } + + public void addOwners(Collection<String> usernames) { + if (!ArrayUtils.isEmpty(usernames)) { + for (String username : usernames) { + addOwner(username); } } } - public void removeAllRepoAdministrators() { - this.repoAdministrators.clear(); - } - - public Set<String> getRepoAdministrators() { - return this.repoAdministrators; - } - - public boolean isRepoAdministrator(String username) { - if (username == null || username.trim().length() == 0) { - return false; + public void removeOwners(Collection<String> usernames) { + if (!ArrayUtils.isEmpty(owners)) { + for (String username : usernames) { + removeOwner(username); + } } - return this.repoAdministrators.contains(username.toLowerCase()); } } \ No newline at end of file -- Gitblit v1.9.1