001package org.apache.maven.scm.command.list;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import org.apache.maven.scm.CommandParameter;
023import org.apache.maven.scm.CommandParameters;
024import org.apache.maven.scm.ScmException;
025import org.apache.maven.scm.ScmFileSet;
026import org.apache.maven.scm.ScmResult;
027import org.apache.maven.scm.ScmVersion;
028import org.apache.maven.scm.command.AbstractCommand;
029import org.apache.maven.scm.provider.ScmProviderRepository;
030
031/**
032 * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
033 *
034 */
035public abstract class AbstractListCommand
036    extends AbstractCommand
037{
038    /**
039     * List contents of the remote repository
040     *
041     * @param repository what to list
042     * @param fileSet    the files to list
043     * @param recursive  whether list should return subfolder listing
044     * @return the list of files
045     * @throws ScmException
046     */
047    protected abstract ListScmResult executeListCommand( ScmProviderRepository repository, ScmFileSet fileSet,
048                                                         boolean recursive, ScmVersion scmVersion )
049        throws ScmException;
050
051    /** {@inheritDoc} */
052    public ScmResult executeCommand( ScmProviderRepository repository, ScmFileSet fileSet,
053                                     CommandParameters parameters )
054        throws ScmException
055    {
056        if ( fileSet.getFileList().isEmpty() )
057        {
058            throw new IllegalArgumentException( "fileSet can not be empty" );
059        }
060
061        boolean recursive = parameters.getBoolean( CommandParameter.RECURSIVE );
062
063        ScmVersion scmVersion = parameters.getScmVersion( CommandParameter.SCM_VERSION, null );
064
065        return executeListCommand( repository, fileSet, recursive, scmVersion );
066    }
067}