James Moger
2012-09-29 1e1b85270f93b3bca624c99b478f3a9a23be2395
src/com/gitblit/models/RepositoryModel.java
@@ -16,9 +16,18 @@
package com.gitblit.models;
import java.io.Serializable;
import java.util.ArrayList;
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
@@ -27,7 +36,7 @@
 * @author James Moger
 * 
 */
public class RepositoryModel implements Serializable {
public class RepositoryModel implements Serializable, Comparable<RepositoryModel> {
   private static final long serialVersionUID = 1L;
@@ -41,9 +50,32 @@
   public boolean useTickets;
   public boolean useDocs;
   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 RepositoryModel() {
      this("", "", "", new Date(0));
   }
@@ -54,10 +86,77 @@
      this.owner = owner;
      this.lastChange = lastchange;
      this.accessRestriction = AccessRestrictionType.NONE;
      this.authorizationControl = AuthorizationControl.NAMED;
      this.federationSets = new ArrayList<String>();
      this.federationStrategy = FederationStrategy.FEDERATE_THIS;
   }
   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 String toString() {
      return name;
      if (displayName == null) {
         displayName = StringUtils.stripDotGit(name);
      }
      return displayName;
   }
   @Override
   public int compareTo(RepositoryModel o) {
      return StringUtils.compareRepositoryNames(name, o.name);
   }
   public boolean isPersonalRepository() {
      return !StringUtils.isEmpty(projectPath) && projectPath.charAt(0) == '~';
   }
   public boolean isUsersPersonalRepository(String username) {
      return !StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase("~" + username);
   }
   public RepositoryModel cloneAs(String cloneName) {
      RepositoryModel clone = new RepositoryModel();
      clone.name = cloneName;
      clone.description = description;
      clone.accessRestriction = accessRestriction;
      clone.authorizationControl = authorizationControl;
      clone.federationStrategy = federationStrategy;
      clone.showReadme = showReadme;
      clone.showRemoteBranches = false;
      clone.allowForks = false;
      clone.useDocs = useDocs;
      clone.useTickets = useTickets;
      clone.skipSizeCalculation = skipSizeCalculation;
      clone.skipSummaryMetrics = skipSummaryMetrics;
      return clone;
   }
}