Project: ant4eclipse
/**********************************************************************
 * Copyright (c) 2005-2008 ant4eclipse project team. 
 * 
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0 
 * which accompanies this distribution, and is available at 
 * http://www.eclipse.org/legal/epl-v10.html 
 * 
 * Contributors: 
 *     Nils Hartmann, Daniel Kasmeroglu, Gerd Wuetherich 
 **********************************************************************/
package org.ant4eclipse.lib.platform.model.team.cvssupport.projectset; 
 
import static org.ant4eclipse.lib.core.Assure.notNull; 
 
import org.ant4eclipse.lib.core.Assure; 
import org.ant4eclipse.lib.core.logging.A4ELogging; 
import org.ant4eclipse.lib.core.util.StringMap; 
import org.ant4eclipse.lib.platform.model.team.cvssupport.CvsRoot; 
import org.ant4eclipse.lib.platform.model.team.projectset.internal.AbstractTeamProjectDescription; 
 
public class CvsTeamProjectDescription extends AbstractTeamProjectDescription { 
 
  /** the cvsRoot for the project * */ 
  private CvsRoot _cvsRoot; 
 
  /** the name of the project in the repository */ 
  private String  _nameInRepository; 
 
  /** the name of the branch or version */ 
  private String  _branchOrVersionTag; 
 
  /** the cvs user */ 
  private String  _cvsUser = null
 
  /** the cvs password */ 
 
  /**
   * Creates a new instance of type TeamProjectDescription 
   *  
   * @param projectname 
   *          the name of the project 
   * @param cvsroot 
   *          the cvsroot of the project 
   * @param nameInRepository 
   *          the name of the project in the repository 
   * @param tag 
   *          the tag 
   */
 
  public CvsTeamProjectDescription(String projectname, CvsRoot cvsroot, String nameInRepository, String tag) { 
    super(projectname); 
    Assure.notNull("cvsroot", cvsroot); 
    Assure.notNull("nameInRepository", nameInRepository); 
 
    this._cvsRoot = cvsroot; 
    this._nameInRepository = nameInRepository; 
    this._branchOrVersionTag = tag; 
 
    if ("".equals(this._branchOrVersionTag)) { 
      this._branchOrVersionTag = null
    } 
  } 
 
  /**
   * Creates a new instance of type TeamProjectDescription 
   *  
   * @param projectname 
   *          the name of the project 
   * @param cvsroot 
   *          the cvsroot of the project 
   * @param nameInRepository 
   *          the name of the project in the repository 
   * @param tag 
   *          the tag 
   */
 
  public CvsTeamProjectDescription(String projectname, String cvsroot, String nameInRepository, String tag) { 
    this(projectname, new CvsRoot(cvsroot), nameInRepository, tag); 
  } 
 
  /**
   * Returns the tag of the branch or version. 
   *  
   * @return Returns the tag of the branch or version. 
   */
 
  public String getBranchOrVersionTag() { 
    return this._branchOrVersionTag; 
  } 
 
  /**
   * Returns the cvsRoot. 
   *  
   * @return Returns the cvsRoot. 
   */
 
  public CvsRoot getCvsRoot() { 
    return this._cvsRoot; 
  } 
 
  /**
   * Returns the resolved CvsRoot (e.g. :pserver:user:[email protected]:C:/cvsRepository). Requires that 
   * isCvsUserAndPasswordSet() returns <code>true</code>. If isCvsUserAndPasswordSet() returns <code>false</code>, a 
   * PreconditionViolatedException will be thrown. 
   *  
   * @return Returns the resolved CvsRoot. 
   */
 
  public CvsRoot getResolvedCvsRoot() { 
    Assure.assertTrue(isCvsUserSet(), "CvsUser and CvsPwd have to be set!"); 
 
    return this._cvsRoot.getResolvedRoot(this._cvsUser, this._cvsPwd); 
  } 
 
  private String _cvsPwd = null
 
  /**
   * Returns the name of the project in the repository. 
   *  
   * @return Returns the name of the project in the repository. 
   */
 
  public String getNameInRepository() { 
    return this._nameInRepository; 
  } 
 
  /**
   * Returns whether the project is from the cvs head. 
   *  
   * @return Returns whether the project is from the cvs head. 
   */
 
  public boolean isHead() { 
    return !hasBranchOrVersionTag(); 
  } 
 
  /**
   * Returns whether the project has a branch or version tag. 
   *  
   * @return Returns whether the project has a branch or version tag. 
   */
 
  public boolean hasBranchOrVersionTag() { 
    return this._branchOrVersionTag != null
  } 
 
  /**
   * Returns whether the cvs user and the cvs password is set. 
   *  
   * @return Returns whether the cvs user and the cvs password is set. 
   */
 
  public boolean isCvsUserSet() { 
    return this._cvsUser != null
  } 
 
  /**
   * Sets the cvs user und password. 
   *  
   * @param cvsUser 
   *          the cvs user. 
   * @param cvsPwd 
   *          the cvs password might be null 
   */
 
  public void setCvsUserAndPassword(String cvsUser, String cvsPwd) { 
    Assure.notNull("cvsUser", cvsUser); 
    A4ELogging.debug("setCvsUserAndPassword(%s, %s)", cvsUser, cvsPwd); 
    this._cvsUser = cvsUser; 
    this._cvsPwd = cvsPwd; 
  } 
 
  @Override 
  protected void addSpecificProperties(StringMap properties) { 
    notNull("properties", properties); 
 
    // add basic properties 
    properties.put("cvs.nameInRepository"this._nameInRepository); 
    properties.put("cvs.isHead", Boolean.toString(isHead())); 
    properties.put("cvs.hasBranchOrVersionTag", Boolean.toString(hasBranchOrVersionTag())); 
    if (hasBranchOrVersionTag()) { 
      properties.put("cvs.branchOrTag", getBranchOrVersionTag()); 
    } 
 
    // add cvsRoot as properties 
    CvsRoot cvsRoot = getCvsRoot(); 
    properties.put("cvs.cvsRoot", cvsRoot.toString()); 
    properties.put("cvs.cvsRoot.connectionType", cvsRoot.getConnectionType()); 
    properties.put("cvs.cvsRoot.host", cvsRoot.getHost()); 
    properties.put("cvs.cvsRoot.repository", cvsRoot.getRepository()); 
    final boolean hasUser = cvsRoot.hasUser(); 
    properties.put("cvs.cvsRoot.hasUser", Boolean.toString(hasUser)); 
    if (hasUser) { 
      properties.put("cvs.cvsRoot.user", cvsRoot.getUser()); 
    } 
  } 
 
  /**
   * {@inheritDoc} 
   */
 
  @Override 
  public String toString() { 
    StringBuffer buffer = new StringBuffer(); 
    buffer.append("[CvsTeamProjectDescription:"); 
    buffer.append(" projectname: "); 
    buffer.append(getProjectName()); 
    buffer.append(" cvsRoot: "); 
    buffer.append(this._cvsRoot); 
    buffer.append(" nameInRepository: "); 
    buffer.append(this._nameInRepository); 
    buffer.append(" branchOrVersionTag: "); 
    buffer.append(this._branchOrVersionTag); 
    buffer.append(" cvsUser: "); 
    buffer.append(this._cvsUser); 
    buffer.append(" cvsPwd: "); 
    buffer.append(this._cvsPwd); 
    buffer.append("]"); 
    return buffer.toString(); 
  } 
 
  /**
   * {@inheritDoc} 
   */
 
  @Override 
  public boolean equals(Object o) { 
    if (this == o) { 
      return true
    } 
    if (!super.equals(o)) { 
      return false
    } 
    if (o == null) { 
      return false
    } 
    if (o.getClass() != getClass()) { 
      return false
    } 
    CvsTeamProjectDescription castedObj = (CvsTeamProjectDescription) o; 
    return ((this._cvsRoot == null ? castedObj._cvsRoot == null : this._cvsRoot.equals(castedObj._cvsRoot)) 
        && (this._nameInRepository == null ? castedObj._nameInRepository == null : this._nameInRepository 
            .equals(castedObj._nameInRepository)) 
        && (this._branchOrVersionTag == null ? castedObj._branchOrVersionTag == null : this._branchOrVersionTag 
            .equals(castedObj._branchOrVersionTag)) 
        && (this._cvsUser == null ? castedObj._cvsUser == null : this._cvsUser.equals(castedObj._cvsUser)) && (this._cvsPwd == null ? castedObj._cvsPwd == null 
        : this._cvsPwd.equals(castedObj._cvsPwd))); 
  } 
 
  /**
   * {@inheritDoc} 
   */
 
  @Override 
  public int hashCode() { 
    int hashCode = super.hashCode(); 
    hashCode = 31 * hashCode + (this._cvsRoot == null ? 0 : this._cvsRoot.hashCode()); 
    hashCode = 31 * hashCode + (this._nameInRepository == null ? 0 : this._nameInRepository.hashCode()); 
    hashCode = 31 * hashCode + (this._branchOrVersionTag == null ? 0 : this._branchOrVersionTag.hashCode()); 
    hashCode = 31 * hashCode + (this._cvsUser == null ? 0 : this._cvsUser.hashCode()); 
    hashCode = 31 * hashCode + (this._cvsPwd == null ? 0 : this._cvsPwd.hashCode()); 
    return hashCode; 
  } 
 
}