Package org.svnadmin.service

Source Code of org.svnadmin.service.PjService

package org.svnadmin.service;

import java.io.File;
import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.svnadmin.Constants;
import org.svnadmin.dao.PjAuthDao;
import org.svnadmin.dao.PjDao;
import org.svnadmin.dao.PjGrDao;
import org.svnadmin.dao.PjGrUsrDao;
import org.svnadmin.dao.PjUsrDao;
import org.svnadmin.entity.Pj;
import org.svnadmin.entity.PjAuth;
import org.svnadmin.entity.PjGr;
import org.svnadmin.util.I18N;

/**
* 项目服务层
*
* @author <a href="mailto:yuanhuiwu@gmail.com">Huiwu Yuan</a>
* @since 1.0
*
*/
@Service(PjService.BEAN_NAME)
public class PjService {
  /**
   * Bean名称
   */
  public static final String BEAN_NAME = "pjService";

  /**
   * 项目DAO
   */
  @Resource(name = PjDao.BEAN_NAME)
  protected PjDao pjDao;

  /**
   * 项目用户DAO
   */
  @Resource(name = PjUsrDao.BEAN_NAME)
  protected PjUsrDao pjUsrDao;

  /**
   * 项目组DAO
   */
  @Resource(name = PjGrDao.BEAN_NAME)
  protected PjGrDao pjGrDao;

  /**
   * 项目组用户DAO
   */
  @Resource(name = PjGrUsrDao.BEAN_NAME)
  protected PjGrUsrDao pjGrUsrDao;

  /**
   * 项目权限DAO
   */
  @Resource(name = PjAuthDao.BEAN_NAME)
  protected PjAuthDao pjAuthDao;

  /**
   * SVN服务层
   */
  @Resource(name = SvnService.BEAN_NAME)
  protected SvnService svnService;
  /**
   * 权限服务层
   */
  @Resource(name = PjAuthService.BEAN_NAME)
  protected PjAuthService pjAuthService;

  /**
   * @param pj
   *            项目
   * @return 项目
   */
  public Pj get(String pj) {
    return pjDao.get(pj);
  }

  /**
   * @return 项目列表
   */
  public List<Pj> list() {
    return pjDao.getList();
  }

  /**
   * @param usr
   *            用户
   * @return 用户有权限的项目列表(用户是否是这个项目的管理员)
   */
  public List<Pj> list(String usr) {
    return pjDao.getList(usr);
  }

  /**
   * 删除(同时删除项目权限,项目组用户,项目组,项目用户)
   *
   * @param pj
   *            项目
   */
  @Transactional
  public void delete(String pj) {
    pjAuthDao.deletePj(pj);
    pjGrUsrDao.deletePj(pj);
    pjGrDao.deletePj(pj);
    pjUsrDao.deletePj(pj);

    svnService.exportConfig(pj);

    pjDao.delete(pj);
  }

  /**
   * 保存。<br>
   * 数据库里已经存在相同的路径或url的项目,不可以保存。<br>
   * 如果仓库不存在,自动创建。<br>
   * 如果是增加项目,自动创建默认3个组。
   *
   * @param pj
   *            项目
   */
  @Transactional
  public void save(Pj pj) {
    // 路径 把\替换为/
    if (StringUtils.isNotBlank(pj.getPath())) {
      pj.setPath(StringUtils.replace(pj.getPath(), "\\", "/"));
    }
    // url 把\替换为/
    if (StringUtils.isNotBlank(pj.getUrl())) {
      pj.setUrl(StringUtils.replace(pj.getUrl(), "\\", "/"));
    }

    // 是否可以增加项目
    boolean insert = pjDao.get(pj.getPj()) == null;
    if (insert) {
      // 数据库里已经存在相同的路径或url的项目
      if (this.pjDao.getCount(pj.getPath(), pj.getUrl()) > 0) {
        throw new RuntimeException(I18N.getLbl("pj.save.error.existPathOrUrl", "数据库里已经存在相同的路径或url的仓库项目,请检查路径或url"));
      }
    } else {
      // 数据库里已经存在相同的路径或url的项目
      if (this.pjDao.getCount(pj.getPath(), pj.getUrl()) > 1) {
        throw new RuntimeException(I18N.getLbl("pj.save.error.existMutilPathOrUrl","数据库里已经存在多个相同的路径或url的仓库项目,请检查路径或url"));
      }
    }
    // 创建仓库
    File respository = new File(pj.getPath());
    if (!respository.exists() || !respository.isDirectory()) {// 不存在仓库
      RepositoryService.createLocalRepository(respository);
    }
    if (insert) {
      // 增加默认的组
      this.pjDao.insert(pj);
      for (String gr : Constants.GROUPS) {
        PjGr pjGr = new PjGr();
        pjGr.setPj(pj.getPj());
        pjGr.setGr(gr);
        pjGr.setDes(gr);
        pjGrDao.save(pjGr);
      }
      // 增加默认的权限 @see Issue 29
      PjAuth pjAuth = new PjAuth();
      pjAuth.setPj(pj.getPj());
      pjAuth.setRes(this.pjAuthService.formatRes(pj, "/"));
      pjAuth.setRw("rw");
      pjAuth.setGr(Constants.GROUP_MANAGER);
      pjAuthDao.saveByGr(pjAuth);

    } else {
      this.pjDao.update(pj);
    }
    svnService.exportConfig(pj.getPj());
  }
 
  /**
   * 获取项目的相对根路径.例如项目的path=e:/svn/projar,则返回projar。如果path为空,则返回项目ID
   * @param pj 项目id
   * @return 项目的相对根路径
   * @since 3.0.3
   */
  public String getRelateRootPath(String pj){
    Pj p = this.get(pj);
    if(p == null || StringUtils.isBlank(p.getPath())){
      return pj;
    }
    return getRelateRootPath(pj);
  }
  /**
   * 获取项目的相对根路径.例如项目的path=e:/svn/projar,则返回projar。如果path为空,则返回项目ID
   * @param pj 项目
   * @return 项目的相对根路径
   * @since 3.0.3
   */
  public static String getRelateRootPath(Pj pj){
    String path = pj.getPath();
    if(StringUtils.isBlank(path)){
      return pj.getPj();
    }
    path = StringUtils.replace(path, "\\", "/");
   
    while(path.endsWith("/")){
      path = path.substring(0, path.length()-1);
    }
   
    return StringUtils.substringAfterLast(path, "/");
  }
}
TOP

Related Classes of org.svnadmin.service.PjService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.