mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-11 16:05:44 +01:00
added api for outgoing command
This commit is contained in:
@@ -56,5 +56,5 @@ public enum Command
|
||||
/**
|
||||
* @since 1.31
|
||||
*/
|
||||
INCOMING;
|
||||
INCOMING, OUTGOING;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,163 @@
|
||||
/**
|
||||
* Copyright (c) 2010, Sebastian Sdorra All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer. 2. Redistributions in
|
||||
* binary form must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution. 3. Neither the name of SCM-Manager;
|
||||
* nor the names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* http://bitbucket.org/sdorra/scm-manager
|
||||
*
|
||||
*/
|
||||
package sonia.scm.repository.api;
|
||||
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.apache.shiro.subject.Subject;
|
||||
import sonia.scm.cache.CacheManager;
|
||||
import sonia.scm.repository.ChangesetPagingResult;
|
||||
import sonia.scm.repository.PermissionType;
|
||||
import sonia.scm.repository.PreProcessorUtil;
|
||||
import sonia.scm.repository.Repository;
|
||||
import sonia.scm.repository.spi.OutgoingCommand;
|
||||
import sonia.scm.repository.spi.OutgoingCommandRequest;
|
||||
import sonia.scm.security.RepositoryPermission;
|
||||
|
||||
/**
|
||||
* Show changesets not found in a remote repository.
|
||||
*
|
||||
* @author Sebastian Sdorra
|
||||
* @since 1.31
|
||||
*/
|
||||
public final class OutgoingCommandBuilder
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new {@link OutgoingCommandBuilder}, this constructor should
|
||||
* only be called from the {@link RepositoryService}.
|
||||
*
|
||||
* @param cacheManager cache manager
|
||||
* @param command implementation of the {@link OutgoingCommand}
|
||||
* @param repository repository to query
|
||||
* @param preProcessorUtil pre processor util
|
||||
*/
|
||||
OutgoingCommandBuilder(CacheManager cacheManger, OutgoingCommand command,
|
||||
Repository repository, PreProcessorUtil preProcessorUtil)
|
||||
{
|
||||
this.command = command;
|
||||
this.preProcessorUtil = preProcessorUtil;
|
||||
}
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Returns the outgoing changesets for the remote repository.
|
||||
*
|
||||
*
|
||||
* @param remoteRepository remote repository
|
||||
*
|
||||
* @return outgoing changesets
|
||||
*/
|
||||
public ChangesetPagingResult getOutgoingChangesets(
|
||||
Repository remoteRepository)
|
||||
{
|
||||
Subject subject = SecurityUtils.getSubject();
|
||||
|
||||
subject.checkPermission(new RepositoryPermission(remoteRepository,
|
||||
PermissionType.READ));
|
||||
|
||||
request.setRemoteRepository(remoteRepository);
|
||||
|
||||
// TODO caching
|
||||
ChangesetPagingResult cpr = command.getOutgoingChangesets(request);
|
||||
|
||||
if (!disablePreProcessors)
|
||||
{
|
||||
preProcessorUtil.prepareForReturn(remoteRepository, cpr);
|
||||
}
|
||||
|
||||
return cpr;
|
||||
}
|
||||
|
||||
//~--- set methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Disable the execution of pre processors.
|
||||
*
|
||||
*
|
||||
* @param disablePreProcessors true to disable the pre processors execution
|
||||
*
|
||||
* @return {@code this}
|
||||
*/
|
||||
public OutgoingCommandBuilder setDisablePreProcessors(
|
||||
boolean disablePreProcessors)
|
||||
{
|
||||
this.disablePreProcessors = disablePreProcessors;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the limit for the returned outgoing changesets.
|
||||
* The default value is 20.
|
||||
* Setting the value to -1 means to disable the limit.
|
||||
*
|
||||
*
|
||||
* @param pagingLimit limit for returned changesets
|
||||
*
|
||||
* @return {@code this}
|
||||
*/
|
||||
public OutgoingCommandBuilder setPagingLimit(int pagingLimit)
|
||||
{
|
||||
request.setPagingLimit(pagingLimit);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the start value for paging. The value is 0.
|
||||
*
|
||||
*
|
||||
* @param pagingStart start value for paging
|
||||
*
|
||||
* @return {@code this}
|
||||
*/
|
||||
public OutgoingCommandBuilder setPagingStart(int pagingStart)
|
||||
{
|
||||
request.setPagingStart(pagingStart);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
//~--- fields ---------------------------------------------------------------
|
||||
|
||||
/** outgoing command implementation */
|
||||
private OutgoingCommand command;
|
||||
|
||||
/** disable the execution of pre processors */
|
||||
private boolean disablePreProcessors = false;
|
||||
|
||||
/** disable the execution of pre processors */
|
||||
private PreProcessorUtil preProcessorUtil;
|
||||
|
||||
/** request object */
|
||||
private OutgoingCommandRequest request = new OutgoingCommandRequest();
|
||||
|
||||
}
|
||||
@@ -79,6 +79,7 @@ import java.io.IOException;
|
||||
* @apiviz.uses sonia.scm.repository.api.TagsCommandBuilder
|
||||
* @apiviz.uses sonia.scm.repository.api.BranchesCommandBuilder
|
||||
* @apiviz.uses sonia.scm.repository.api.IncomingCommandBuilder
|
||||
* @apiviz.uses sonia.scm.repository.api.OutgoingCommandBuilder
|
||||
*/
|
||||
public final class RepositoryService implements Closeable
|
||||
{
|
||||
@@ -278,6 +279,27 @@ public final class RepositoryService implements Closeable
|
||||
repository, preProcessorUtil);
|
||||
}
|
||||
|
||||
/**
|
||||
* The outgoing command show changesets not found in a remote repository.
|
||||
*
|
||||
*
|
||||
* @return instance of {@link OutgoingCommandBuilder}
|
||||
* @throws CommandNotSupportedException if the command is not supported
|
||||
* by the implementation of the repository service provider.
|
||||
* @since 1.31
|
||||
*/
|
||||
public OutgoingCommandBuilder getOutgoingCommand()
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("create outgoing command for repository {}",
|
||||
repository.getName());
|
||||
}
|
||||
|
||||
return new OutgoingCommandBuilder(cacheManager,
|
||||
provider.getOutgoingCommand(), repository, preProcessorUtil);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the repository of this service.
|
||||
*
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* Copyright (c) 2010, Sebastian Sdorra All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer. 2. Redistributions in
|
||||
* binary form must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution. 3. Neither the name of SCM-Manager;
|
||||
* nor the names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* http://bitbucket.org/sdorra/scm-manager
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
package sonia.scm.repository.spi;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
import sonia.scm.repository.ChangesetPagingResult;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Sdorra
|
||||
* @since 1.31
|
||||
*/
|
||||
public interface OutgoingCommand
|
||||
{
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param request
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public ChangesetPagingResult getOutgoingChangesets(
|
||||
OutgoingCommandRequest request);
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* Copyright (c) 2010, Sebastian Sdorra All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer. 2. Redistributions in
|
||||
* binary form must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution. 3. Neither the name of SCM-Manager;
|
||||
* nor the names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* http://bitbucket.org/sdorra/scm-manager
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
package sonia.scm.repository.spi;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Sdorra
|
||||
* @since 1.31
|
||||
*/
|
||||
public final class OutgoingCommandRequest extends PagedRemoteCommandRequest {}
|
||||
@@ -142,6 +142,7 @@ public abstract class RepositoryServiceProvider implements Closeable
|
||||
*
|
||||
*
|
||||
* @return
|
||||
* @since 1.31
|
||||
*/
|
||||
public IncomingCommand getIncomingCommand()
|
||||
{
|
||||
@@ -159,6 +160,18 @@ public abstract class RepositoryServiceProvider implements Closeable
|
||||
throw new CommandNotSupportedException(Command.LOG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @return
|
||||
* @since 1.31
|
||||
*/
|
||||
public OutgoingCommand getOutgoingCommand()
|
||||
{
|
||||
throw new CommandNotSupportedException(Command.OUTGOING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user