Package org.tmatesoft.hg.core

Source Code of org.tmatesoft.hg.core.HgRepoFacade

/*
* Copyright (c) 2011-2013 TMate Software Ltd
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* For information on how to redistribute this software under
* the terms of a license other than GNU General Public License
* contact TMate Software at support@hg4j.com
*/
package org.tmatesoft.hg.core;

import java.io.File;

import org.tmatesoft.hg.internal.BasicSessionContext;
import org.tmatesoft.hg.repo.HgRepository;
import org.tmatesoft.hg.repo.HgLookup;

/**
* Starting point for the library.
* <p>Sample use:
* <pre>
*  HgRepoFacade f = new HgRepoFacade();
*  f.initFrom(System.getenv("whatever.repo.location"));
*  HgStatusCommand statusCmd = f.createStatusCommand();
*  HgStatusCommand.Handler handler = ...;
*  statusCmd.execute(handler);
* </pre>
*
* @author Artem Tikhomirov
* @author TMate Software Ltd.
*/
public class HgRepoFacade implements SessionContext.Source {
  private HgRepository repo;
  private final SessionContext context;

  public HgRepoFacade() {
    this(new BasicSessionContext(null));
  }
 
  public HgRepoFacade(SessionContext ctx) {
    if (ctx == null) {
      throw new IllegalArgumentException();
    }
    context = ctx;
  }
 
  /**
   * @param hgRepo
   * @return true on successful initialization
   * @throws IllegalArgumentException when argument is null
   */
  public boolean init(HgRepository hgRepo) {
    if (hgRepo == null) {
      throw new IllegalArgumentException();
    }
    repo = hgRepo;
    return !repo.isInvalid();
  }

  /**
   * Tries to find repository starting from the current working directory.
   *
   * @return <code>true</code> if found valid repository
   * @throws HgRepositoryNotFoundException if no repository found in working directory
   */
  public boolean init() throws HgRepositoryNotFoundException {
    repo = new HgLookup(context).detectFromWorkingDir();
    return repo != null && !repo.isInvalid();
  }
 
  /**
   * Looks up Mercurial repository starting from specified location and up to filesystem root.
   *
   * @param repoLocation path to any folder within structure of a Mercurial repository.
   * @return <code>true</code> if found valid repository
   * @throws HgRepositoryNotFoundException if there's no repository at specified location
   * @throws IllegalArgumentException if argument is <code>null</code>
   */
  public boolean initFrom(File repoLocation) throws HgRepositoryNotFoundException {
    if (repoLocation == null) {
      throw new IllegalArgumentException();
    }
    repo = new HgLookup(context).detect(repoLocation);
    return repo != null && !repo.isInvalid();
  }
 
  public HgRepository getRepository() {
    if (repo == null) {
      throw new IllegalStateException("Call any of #init*() methods first first");
    }
    return repo;
  }
 
  public SessionContext getSessionContext() {
    return context;
  }
 
  /**
   * This factory method doesn't need this facade to be initialized with a repository.
   * @return command instance, never <code>null</code>
   */
  public HgInitCommand createInitCommand() {
    return new HgInitCommand(new HgLookup(context));
  }

  public HgLogCommand createLogCommand() {
    return new HgLogCommand(repo/*, getCommandContext()*/);
  }

  public HgStatusCommand createStatusCommand() {
    return new HgStatusCommand(repo/*, getCommandContext()*/);
  }

  public HgCatCommand createCatCommand() {
    return new HgCatCommand(repo);
  }

  public HgManifestCommand createManifestCommand() {
    return new HgManifestCommand(repo);
  }

  public HgOutgoingCommand createOutgoingCommand() {
    return new HgOutgoingCommand(repo);
  }

  public HgIncomingCommand createIncomingCommand() {
    return new HgIncomingCommand(repo);
  }
 
  public HgCloneCommand createCloneCommand() {
    return new HgCloneCommand();
  }
 
  public HgUpdateConfigCommand createUpdateRepositoryConfigCommand() {
    return HgUpdateConfigCommand.forRepository(repo);
  }
 
  public HgAddRemoveCommand createAddRemoveCommand() {
    return new HgAddRemoveCommand(repo);
  }
 
  public HgCheckoutCommand createCheckoutCommand() {
    return new HgCheckoutCommand(repo);
  }
 
  public HgRevertCommand createRevertCommand() {
    return new HgRevertCommand(repo);
  }
 
  public HgAnnotateCommand createAnnotateCommand() {
    return new HgAnnotateCommand(repo);
  }
 
  public HgCommitCommand createCommitCommand() {
    return new HgCommitCommand(repo);
  }
 
  public HgDiffCommand createDiffCommand() {
    return new HgDiffCommand(repo);
  }

  public HgPushCommand createPushCommand() {
    return new HgPushCommand(repo);
  }
 
  public HgPullCommand createPullCommand() {
    return new HgPullCommand(repo);
  }

  public HgMergeCommand createMergeCommand() {
    return new HgMergeCommand(repo);
  }
}
TOP

Related Classes of org.tmatesoft.hg.core.HgRepoFacade

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.