From f66e89662c091e082bd1d2feb6ac91513ccff273 Mon Sep 17 00:00:00 2001
From: Rafael Cavazin <rafaelcavazin@gmail.com>
Date: Sun, 21 Jul 2013 09:59:00 -0400
Subject: [PATCH] Merge branch 'master' of https://github.com/gitblit/gitblit

---
 src/main/java/com/gitblit/models/RepositoryModel.java |  252 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 252 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/gitblit/models/RepositoryModel.java b/src/main/java/com/gitblit/models/RepositoryModel.java
new file mode 100644
index 0000000..2996265
--- /dev/null
+++ b/src/main/java/com/gitblit/models/RepositoryModel.java
@@ -0,0 +1,252 @@
+/*
+ * Copyright 2011 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gitblit.models;
+
+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 com.gitblit.Constants.AccessRestrictionType;
+import com.gitblit.Constants.AuthorizationControl;
+import com.gitblit.Constants.FederationStrategy;
+import com.gitblit.utils.ArrayUtils;
+import com.gitblit.utils.StringUtils;
+
+/**
+ * RepositoryModel is a serializable model class that represents a Gitblit
+ * repository including its configuration settings and access restriction.
+ * 
+ * @author James Moger
+ * 
+ */
+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;
+	public List<String> owners;
+	public Date lastChange;
+	public String lastChangeAuthor;
+	public boolean hasCommits;
+	public boolean showRemoteBranches;
+	public boolean useTickets;
+	public boolean useDocs;
+	public boolean useIncrementalPushTags;
+	public String incrementalPushTagPrefix;
+	public AccessRestrictionType accessRestriction;
+	public AuthorizationControl authorizationControl;
+	public boolean allowAuthenticated;
+	public boolean isFrozen;
+	public boolean showReadme;
+	public FederationStrategy federationStrategy;
+	public List<String> federationSets;
+	public boolean isFederated;
+	public boolean skipSizeCalculation;
+	public boolean skipSummaryMetrics;
+	public String frequency;
+	public boolean isBare;
+	public String origin;
+	public String HEAD;
+	public List<String> availableRefs;
+	public List<String> indexedBranches;
+	public String size;
+	public List<String> preReceiveScripts;
+	public List<String> postReceiveScripts;
+	public List<String> mailingLists;
+	public Map<String, String> customFields;
+	public String projectPath;
+	private String displayName;
+	public boolean allowForks;
+	public Set<String> forks;
+	public String originRepository;
+	public boolean verifyCommitter;
+	public String gcThreshold;
+	public int gcPeriod;
+	public int maxActivityCommits;	
+	public List<String> metricAuthorExclusions;
+	
+	public transient boolean isCollectingGarbage;
+	public Date lastGC;
+	public String sparkleshareId;
+	
+	public RepositoryModel() {
+		this("", "", "", new Date(0));
+	}
+
+	public RepositoryModel(String name, String description, String owner, Date lastchange) {
+		this.name = name;
+		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.projectPath = StringUtils.getFirstPathElement(name);
+		this.owners = new ArrayList<String>();
+		this.isBare = true;
+		
+		addOwner(owner);
+	}
+	
+	public List<String> getLocalBranches() {
+		if (ArrayUtils.isEmpty(availableRefs)) {
+			return new ArrayList<String>();
+		}
+		List<String> localBranches = new ArrayList<String>();
+		for (String ref : availableRefs) {
+			if (ref.startsWith("refs/heads")) {
+				localBranches.add(ref);
+			}
+		}
+		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) {
+			return name.equals(((RepositoryModel) o).name);
+		}
+		return false;
+	}
+
+	@Override
+	public String toString() {
+		if (displayName == null) {
+			displayName = StringUtils.stripDotGit(name);
+		}
+		return displayName;
+	}
+
+	@Override
+	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) == '~';
+	}
+	
+	public boolean isUsersPersonalRepository(String username) {
+		return !StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase("~" + username);
+	}
+	
+	public boolean allowAnonymousView() {
+		return !accessRestriction.atLeast(AccessRestrictionType.VIEW);
+	}
+	
+	public boolean isShowActivity() {
+		return maxActivityCommits > -1;
+	}
+	
+	public boolean isSparkleshared() {
+		return !StringUtils.isEmpty(sparkleshareId);
+	}
+	
+	public RepositoryModel cloneAs(String cloneName) {
+		RepositoryModel clone = new RepositoryModel();
+		clone.originRepository = name;
+		clone.name = cloneName;
+		clone.projectPath = StringUtils.getFirstPathElement(cloneName);
+		clone.isBare = true;
+		clone.description = description;
+		clone.accessRestriction = AccessRestrictionType.PUSH;
+		clone.authorizationControl = AuthorizationControl.NAMED;
+		clone.federationStrategy = federationStrategy;
+		clone.showReadme = showReadme;
+		clone.showRemoteBranches = false;
+		clone.allowForks = false;
+		clone.useDocs = useDocs;
+		clone.useTickets = useTickets;
+		clone.skipSizeCalculation = skipSizeCalculation;
+		clone.skipSummaryMetrics = skipSummaryMetrics;
+		clone.sparkleshareId = sparkleshareId; 
+		return clone;
+	}
+
+	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 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 removeOwners(Collection<String> usernames) {
+		if (!ArrayUtils.isEmpty(owners)) {
+			for (String username : usernames) {
+				removeOwner(username);
+			}
+		}
+	}
+}

--
Gitblit v1.9.1