Author: jdumay
Date: Thu May 8 22:16:47 2008
New Revision: 654686
URL: http://svn.apache.org/viewvc?rev=654686&view=rev
Log:
Initial version of the maven-wagon-plugin
Added:
maven/sandbox/trunk/plugins/maven-wagon-plugin/
maven/sandbox/trunk/plugins/maven-wagon-plugin/pom.xml
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/AbstractWagonMojo.java
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/DownloadMojo.java
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/InvalidResourceException.java
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/ListMojo.java
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/PathParserUtil.java
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/ResourceDescriptor.java
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/UploadMojo.java
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/apt/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/apt/index.apt
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/apt/usage.apt
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/site.xml
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/test/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/test/java/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/test/java/org/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/test/java/org/apache/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/test/java/org/apache/maven/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/test/java/org/apache/maven/plugin/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/test/java/org/apache/maven/plugin/wagon/
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/test/java/org/apache/maven/plugin/wagon/PathParserUtilTest.java
Added: maven/sandbox/trunk/plugins/maven-wagon-plugin/pom.xml
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-wagon-plugin/pom.xml?rev=654686&view=auto
==============================================================================
--- maven/sandbox/trunk/plugins/maven-wagon-plugin/pom.xml (added)
+++ maven/sandbox/trunk/plugins/maven-wagon-plugin/pom.xml Thu May 8 22:16:47
2008
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugins</artifactId>
+ <version>10</version>
+ </parent>
+
+ <artifactId>maven-wagon-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <name>Maven Wagon plugin</name>
+ <description>
+ Maven 2 plugin that can be used to access various operations on a
given URL using a supported maven wagon.
+ Supports files and directories and allows glob expressions for
specifying them.
+ Provides upload, download and list directory content functionality.
+ </description>
+ <version>1.0-SNAPSHOT</version>
+
+ <scm>
+
<connection>scm:svn:https://svn.apache.org/repos/asf/maven/sandbox/trunk/plugins/maven-wagon-plugin</connection>
+
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/sandbox/trunk/plugins/maven-wagon-plugin</developerConnection>
+
<url>https://svn.apache.org/repos/asf/maven/sandbox/trunk/plugins/maven-wagon-plugin</url>
+ </scm>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0.8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>2.0.8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-settings</artifactId>
+ <version>2.0.8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>1.0-beta-2</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.4</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
Added:
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/AbstractWagonMojo.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/AbstractWagonMojo.java?rev=654686&view=auto
==============================================================================
---
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/AbstractWagonMojo.java
(added)
+++
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/AbstractWagonMojo.java
Thu May 8 22:16:47 2008
@@ -0,0 +1,206 @@
+package org.apache.maven.plugin.wagon;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.manager.WagonConfigurationException;
+import org.apache.maven.artifact.manager.WagonManager;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.wagon.ConnectionException;
+import org.apache.maven.wagon.UnsupportedProtocolException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.WagonException;
+import org.apache.maven.wagon.observers.Debug;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.repository.Repository;
+
+
+/**
+ * Provides base functionality for dealing with I/O using wagon.
+ *
+ * @author Sherali Karimov
+ */
+public abstract class AbstractWagonMojo extends AbstractMojo
+{
+ /**
+ * Resource(s) to be uploaded or downloaded or listed. Can be a file or
directory. Also supports
+ * wildcards.
+ *
+ * @see PathParserUtil#toFiles(String)
+ * @parameter expression="${io.resourceSrc}"
+ * @required
+ */
+ protected String resourceSrc;
+
+ /**
+ * Path on the server to upload/download the resource to. If not specified
- assumed
+ * to be "target/wagon-plugin/".
+ *
+ * For instance:
+ * <ul>
+ * <li>src=dir1/dir2 dest=xyz will create xyz/dir2 </li>
+ * <li>src=dir1/dir2/* dest=xyz will create xyz/ and put all the content
of dir2 there </li>
+ * <li>src=dir1/dir2 will create dir2 on the server with all the dir2
content</li>
+ *
+ * @parameter expression="${wagon.resourceDest}"
default-value="target/wagon-plugin/"
+ */
+ protected String resourceDest;
+
+ /**
+ * URL to upload to or download from or list.
+ *
+ * @parameter expression="${wagon.url}"
+ * @required
+ */
+ protected String url;
+
+ /**
+ * ID of the server under the above URL. This is used when wagon needs
extra
+ * authentication information for instance.
+ *
+ * @parameter expression="${wagon.serverId}"
+ * @required
+ */
+ protected String serverId;
+
+ /**
+ * If true, ignores invalid source resources during execution. Otherwise -
fail the execution.
+ *
+ * @parameter expression="${wagon.ignoreInvalidResource}"
default-value="false"
+ */
+ protected boolean ignoreInvalidResource;
+
+ /**
+ * @component
+ */
+ protected WagonManager wagonManager;
+
+ /**
+ * The current user system settings for use in Maven.
+ *
+ * @parameter expression="${settings}"
+ * @required
+ * @readonly
+ */
+ protected Settings settings;
+
+ /**
+ * If true, performs a case sensitive wildcard matching. Case insensitive
otherwise.
+ *
+ * @parameter expression="${wagon.caseSensitive}" default-value="false"
+ */
+ private boolean isCaseSensitive;
+
+ public void execute() throws MojoExecutionException
+ {
+ final ResourceDescriptor descr = new ResourceDescriptor(resourceSrc,
isCaseSensitive);
+ if (url == null)
+ {
+ throw new MojoExecutionException("The URL is missing.");
+ }
+
+ final Repository repository = new Repository(serverId, url);
+ Debug debug = new Debug();
+
+ try
+ {
+ final Wagon wagon = wagonManager.getWagon(repository);
+
+ try
+ {
+ wagon.addSessionListener(debug);
+ wagon.addTransferListener(debug);
+
+ ProxyInfo proxyInfo = getProxyInfo(settings);
+ if (proxyInfo != null)
+ {
+ wagon.connect(repository,
wagonManager.getAuthenticationInfo(repository.getId()), proxyInfo);
+ }
+ else
+ {
+ wagon.connect(repository,
wagonManager.getAuthenticationInfo(repository.getId()));
+ }
+
+ execute(wagon, descr);
+ }
+ catch (WagonException e)
+ {
+ throw new MojoExecutionException("Error handling resource", e);
+ }
+ finally
+ {
+ try
+ {
+ wagon.disconnect();
+ }
+ catch (ConnectionException e)
+ {
+ getLog().debug("Error disconnecting wagon - ignored", e);
+ }
+ }
+ }
+ catch (UnsupportedProtocolException e)
+ {
+ throw new MojoExecutionException("Unsupported protocol: '" +
repository.getProtocol() + "'", e);
+ }
+ catch (WagonConfigurationException e)
+ {
+ throw new MojoExecutionException("Unable to configure Wagon: '" +
repository.getProtocol() + "'", e);
+ }
+ }
+
+ /**
+ * Perform the necessary action. To be implemented in the child mojo.
+ *
+ * @param wagon
+ * @param descr
+ * @throws MojoExecutionException
+ * @throws WagonException
+ */
+ protected abstract void execute(Wagon wagon, ResourceDescriptor descr)
throws MojoExecutionException, WagonException;
+
+ /**
+ * Convenience method to map a <code>Proxy</code> object from the user
+ * system settings to a <code>ProxyInfo</code> object.
+ *
+ * @return a proxyInfo object or null if no active proxy is define in the
+ * settings.xml
+ */
+ protected static ProxyInfo getProxyInfo(Settings settings)
+ {
+ ProxyInfo proxyInfo = null;
+ if (settings != null && settings.getActiveProxy() != null)
+ {
+ Proxy settingsProxy = settings.getActiveProxy();
+
+ proxyInfo = new ProxyInfo();
+ proxyInfo.setHost(settingsProxy.getHost());
+ proxyInfo.setType(settingsProxy.getProtocol());
+ proxyInfo.setPort(settingsProxy.getPort());
+ proxyInfo.setNonProxyHosts(settingsProxy.getNonProxyHosts());
+ proxyInfo.setUserName(settingsProxy.getUsername());
+ proxyInfo.setPassword(settingsProxy.getPassword());
+ }
+
+ return proxyInfo;
+ }
+}
\ No newline at end of file
Added:
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/DownloadMojo.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/DownloadMojo.java?rev=654686&view=auto
==============================================================================
---
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/DownloadMojo.java
(added)
+++
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/DownloadMojo.java
Thu May 8 22:16:47 2008
@@ -0,0 +1,62 @@
+package org.apache.maven.plugin.wagon;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.WagonException;
+
+
+/**
+ * Downloads files that match specified pattern (resourceSrc) to the given
destination.
+ * If destination is not specified, assumes "target/io-plugin/". Assumes that
the destination is always a directory.
+ *
+ * @author Sherali Karimov
+ * @goal download
+ */
+public class DownloadMojo extends AbstractWagonMojo
+{
+ protected void execute(Wagon wagon, ResourceDescriptor descr) throws
MojoExecutionException, WagonException
+ {
+ List fileList = wagon.getFileList(descr.path);
+
+ for (Iterator iterator = fileList.iterator(); iterator.hasNext();)
+ {
+ String fullPath = (String) iterator.next();
+ String fileName = FilenameUtils.getName(fullPath);
+
+ File destination = new File(resourceDest+"/"+fileName);
+
+ if(!iterator.hasNext() && descr.path.endsWith(fileName))
+ {
+ wagon.get(descr.path, destination); // the source path points
at a single file
+ }
+ else if(descr.wildcard == null || descr.isMatch(fileName))
+ {
+ wagon.get(descr.path+"/"+fileName, destination);
+ }
+ }
+ }
+}
Added:
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/InvalidResourceException.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/InvalidResourceException.java?rev=654686&view=auto
==============================================================================
---
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/InvalidResourceException.java
(added)
+++
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/InvalidResourceException.java
Thu May 8 22:16:47 2008
@@ -0,0 +1,33 @@
+package org.apache.maven.plugin.wagon;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.MojoExecutionException;
+
+/**
+ * @author <a href="mailto:[EMAIL PROTECTED]">James William Dumay</a>
+ */
+public class InvalidResourceException extends MojoExecutionException
+{
+ public InvalidResourceException(String message)
+ {
+ super(message);
+ }
+}
Added:
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/ListMojo.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/ListMojo.java?rev=654686&view=auto
==============================================================================
---
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/ListMojo.java
(added)
+++
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/ListMojo.java
Thu May 8 22:16:47 2008
@@ -0,0 +1,59 @@
+package org.apache.maven.plugin.wagon;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.WagonException;
+
+
+/**
+ * Lists the content of the specified directory (resourceSrc) under a
specified repository (url) according to the given wildcard (part of
resourceSrc).
+ * Wildcard can be turned on and off as required.
+ *
+ * @author Sherali Karimov
+ * @goal list
+ */
+public class ListMojo extends AbstractWagonMojo
+{
+ /**
+ * If true, applies the provided wildcard to the list of files before
printing simulating the download mojo's behavior. Otherwise prints the full
list.
+ *
+ * @parameter expression="${wagon.applyWildcard}" default-value="false"
+ */
+ protected boolean applyWildcard;
+
+ protected void execute(Wagon wagon, ResourceDescriptor descr) throws
MojoExecutionException, WagonException
+ {
+ List fileList = wagon.getFileList(descr.path);
+ getLog().info("Listing: "+descr.path);
+ for (Iterator iterator = fileList.iterator(); iterator.hasNext();)
+ {
+ String file = (String) iterator.next();
+ if(!applyWildcard || descr.wildcard == null || descr.isMatch(file))
+ {
+ getLog().info("\t"+file);
+ }
+ }
+ }
+}
Added:
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/PathParserUtil.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/PathParserUtil.java?rev=654686&view=auto
==============================================================================
---
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/PathParserUtil.java
(added)
+++
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/PathParserUtil.java
Thu May 8 22:16:47 2008
@@ -0,0 +1,160 @@
+package org.apache.maven.plugin.wagon;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileFilter;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.commons.io.IOCase;
+import org.apache.commons.io.filefilter.WildcardFileFilter;
+import org.apache.maven.plugin.MojoExecutionException;
+
+public class PathParserUtil
+{
+ /**
+ * Takes a list of paths and converts them to a set of File objects. Path
+ * can be either a relative or absolute path to a file or directory or a
+ * reference to children of a directory using '*' or '?'. For instance:
+ * <ul>
+ * <li> dir1/dir2/file.txt </li>
+ * <li> dir1/dir2/ </li>
+ * <li> dir1/dir2 </li>
+ * <li> dir1/dir2/*.txt </li>
+ * <li> dir1/dir2/Us*Nam?.* </li>
+ * </ul>
+ *
+ * The wildcard '*' must not occur within the path but only at the end of
+ * the path. I.e. the following paths are unsupported:
+ * <ul>
+ * <li> dir1/*\/dir2 </li>
+ * <li> *\/dir2 </li>
+ * </ul>
+ *
+ * @param paths
+ * @return
+ * @throws MojoExecutionException
+ */
+ static Set toFiles(String[] paths, boolean isCaseSensitive) throws
MojoExecutionException
+ {
+ Set resources = new HashSet();
+ for (int i = 0; i < paths.length; i++)
+ {
+ Set nextSet = toFiles(paths[i], isCaseSensitive);
+ if (nextSet != null)
+ resources.addAll(nextSet);
+
+ }
+ return resources;
+ }
+
+ /**
+ * Parses the given file path into one or more File objects. Path can be
+ * either a relative or absolute path to a file or directory or a reference
+ * to children of a directory using '*' or '?'. For instance:
+ * <ul>
+ * <li> dir1/dir2/file.txt </li>
+ * <li> dir1/dir2/ </li>
+ * <li> dir1/dir2 </li>
+ * <li> dir1/dir2/*.txt </li>
+ * <li> dir1/dir2/Us*Nam?.* </li>
+ * </ul>
+ *
+ * The wildcard '*' must not occur within the path but only at the end of
+ * the path. I.e. the following paths are unsupported:
+ * <ul>
+ * <li> dir1/*\/dir2 </li>
+ * <li> dir1/*\/dir2 </li>
+ * <li> dir1/Us*Name?/* </li>
+ * <li> *\/dir?/file.txt </li>
+ * </ul>
+ *
+ * @param pathStr
+ * @return
+ * @throws MojoExecutionException
+ */
+ static Set toFiles(final String pathStr, boolean isCaseSensitive) throws
MojoExecutionException
+ {
+ if (pathStr.length() == 0)
+ return null;
+
+ ResourceDescriptor descr = new ResourceDescriptor(pathStr,
isCaseSensitive);
+ return toFiles(descr);
+ }
+
+
+ /**
+ * Converts the given descriptor to a set of File objects that match the
descriptor.
+ *
+ * @param descr
+ * @return
+ */
+ public static Set toFiles(ResourceDescriptor descr)
+ {
+ Set matchedFiles = new HashSet();
+
+ File parent = new File(descr.path);
+ if (parent.exists())
+ {
+ if (descr.wildcard != null)
+ {
+ if (parent.isDirectory())
+ {
+ getMatchingChildren(parent, descr.wildcard,
descr.isCaseSensitive, matchedFiles);
+ }
+ }
+ else
+ {
+ matchedFiles.add(parent);
+ }
+ }
+
+ return matchedFiles;
+ }
+
+ static void getMatchingChildren(File directory, String wildcard, boolean
isCaseSensitive, Set matchingFileContainer)
+ {
+ FileFilter filter = new WildcardFileFilter(wildcard, isCaseSensitive ?
IOCase.SENSITIVE : IOCase.INSENSITIVE);
+ File children[] = directory.listFiles(filter);
+
+ for (int i = 0; i < children.length; i++)
+ matchingFileContainer.add(children[i]);
+ }
+
+ /**
+ * Looks for the first occurrence of either '?' or '*' character and
returns
+ * its position. Otherwise returns -1;
+ *
+ * @param path
+ * @return position of the first occurrence of either '?' or '*' character
+ * or -1;
+ */
+ static int findFirstGlobCharPosition(final String path)
+ {
+ char[] array = path.toCharArray();
+ for (int i = 0; i < array.length; i++)
+ {
+ if (array[i] == '?' || array[i] == '*')
+ return i;
+ }
+ return -1;
+ }
+}
\ No newline at end of file
Added:
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/ResourceDescriptor.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/ResourceDescriptor.java?rev=654686&view=auto
==============================================================================
---
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/ResourceDescriptor.java
(added)
+++
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/ResourceDescriptor.java
Thu May 8 22:16:47 2008
@@ -0,0 +1,104 @@
+package org.apache.maven.plugin.wagon;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Set;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOCase;
+import org.apache.maven.plugin.MojoExecutionException;
+
+/**
+ * Represents a path to one or more resources. More than once resource can be
described by a wildcard in which case the path MUST be a directory.
+ * Wildcard can be treated in a case sensitive/insensitive way as desired.
+ */
+public class ResourceDescriptor
+{
+ final String path;
+ final String wildcard;
+ final boolean isCaseSensitive;
+
+ /**
+ * Parses the given file path into one or more File objects. Path can be
+ * either a relative or absolute path to a file or directory or a
+ * reference to children of a directory using '*' or '?'. For instance:
+ * <ul>
+ * <li> dir1/dir2/file.txt </li>
+ * <li> dir1/dir2/ </li>
+ * <li> dir1/dir2 </li>
+ * <li> dir1/dir2/*.txt </li>
+ * <li> dir1/dir2/Us*Nam?.* </li>
+ * </ul>
+ *
+ * The wildcard '*' must not occur within the path but only at the end
+ * of the path. I.e. the following paths are unsupported:
+ * <ul>
+ * <li> dir1/*\/dir2 </li>
+ * <li> dir1/*\/dir2 </li>
+ * <li> dir1/Us*Name?/* </li>
+ * <li> *\/dir?/file.txt </li>
+ * </ul>
+ *
+ * @throws MojoExecutionException
+ */
+ public ResourceDescriptor(String path, boolean isCaseSensitive) throws
MojoExecutionException
+ {
+ this.isCaseSensitive = isCaseSensitive;
+ int pos = PathParserUtil.findFirstGlobCharPosition(path);
+
+ if (pos != -1)
+ {
+ int dirEndPos = path.replace('\\', '/').lastIndexOf('/');
+ if (dirEndPos >= pos)
+ throw new MojoExecutionException("Invalid path - '" + path
+ + "'. Wildcards must not contain a path separator '/'
or '\\'.");
+ else if (dirEndPos == -1)
+ {
+ // children of the current dir are being matched
+ this.path = "";
+ this.wildcard = path;
+ }
+ else
+ {
+ this.path = path.substring(0, dirEndPos + 1);
+ this.wildcard = path.substring(dirEndPos + 1);
+ }
+ }
+ else
+ {
+ this.path = path;
+ this.wildcard = null;
+ }
+ }
+
+ /**
+ * Convenience method. Delegates to [EMAIL PROTECTED]
PathParserUtil#toFiles(org.apache.maven.plugins.PathParserUtil.ResourceDescriptor)}
+ * @return
+ */
+ public Set toLocalFiles()
+ {
+ return PathParserUtil.toFiles(this);
+ }
+
+ public boolean isMatch(String fileName)
+ {
+ return FilenameUtils.wildcardMatch(fileName, wildcard, isCaseSensitive
? IOCase.SENSITIVE : IOCase.INSENSITIVE);
+ }
+}
\ No newline at end of file
Added:
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/UploadMojo.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/UploadMojo.java?rev=654686&view=auto
==============================================================================
---
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/UploadMojo.java
(added)
+++
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/main/java/org/apache/maven/plugin/wagon/UploadMojo.java
Thu May 8 22:16:47 2008
@@ -0,0 +1,83 @@
+package org.apache.maven.plugin.wagon;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.WagonException;
+
+
+
+/**
+ * Uploads the given resources (files and/or directories) using a suitable
wagon provider.
+ *
+ * @author Sherali Karimov
+ * @goal upload
+ */
+public class UploadMojo extends AbstractWagonMojo
+{
+ protected void execute(Wagon wagon, ResourceDescriptor descr) throws
MojoExecutionException, WagonException
+ {
+ final Set resources = descr.toLocalFiles();
+ if (resources.isEmpty())
+ {
+ final String message = "Resource " + resourceSrc + " does not
match an existing file or directory.";
+ if (ignoreInvalidResource)
+ {
+ getLog().info(message);
+ return;
+ }
+ else
+ {
+ throw new InvalidResourceException(message);
+ }
+ }
+
+ if (resources == null || resources.isEmpty())
+ {
+ throw new MojoExecutionException("The resources to upload are not
specified.");
+ }
+
+ for (Iterator iterator = resources.iterator(); iterator.hasNext();)
+ {
+ File resource = (File) iterator.next();
+ if (resource.isDirectory() && !wagon.supportsDirectoryCopy())
+ {
+ if(this.ignoreInvalidResource)
+ iterator.remove();
+ else
+ throw new MojoExecutionException("Wagon protocol '" +
wagon.getRepository().getProtocol() + "' doesn't support directory copying. " +
resource + " will fail the operation.");
+ }
+ }
+
+ for (Iterator iterator = resources.iterator(); iterator.hasNext();)
+ {
+ File resource = (File) iterator.next();
+ if (resource.isDirectory())
+ wagon.putDirectory(resource, resourceDest + '/' +
resource.getName());
+ else
+ wagon.put(resource, resourceDest + '/' + resource.getName());
+ }
+ }
+}
\ No newline at end of file
Added: maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/apt/index.apt
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/apt/index.apt?rev=654686&view=auto
==============================================================================
--- maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/apt/index.apt
(added)
+++ maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/apt/index.apt Thu
May 8 22:16:47 2008
@@ -0,0 +1,53 @@
+ ------
+ Maven Wagon Plugin
+ ------
+ Sherali Karimov, James Dumay
+ ------
+ April 2008
+ ------
+
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+~~ NOTE: For help with the syntax of this file, see:
+~~ http://maven.apache.org/guides/mini/guide-apt-format.html
+
+Overview
+
+ The Wagon Plugin is used when you want to:
+
+ * upload generated resources at build-time to a remote location.
+
+ * download resources from a repository.
+
+ * list the content of a directory in a repository
+
+* Goals Overview
+
+ The Wagon Plugin has the following goals.
+
+ * {{{upload-mojo.html}wagon:upload}} attempts to upload the specified data
to a remote location.
+
+ * {{{download-mojo.html}wagon:download}} attempts to download the specified
data from a remote location.
+
+ * {{{list-mojo.html}wagon:list}} attempts to list the content of a specified
location in a remote repository.
+
+* Usage
+
+ Instructions on the basic usage of the Wagon Plugin can be found
+ {{{usage.html}here}}.
+
Added: maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/apt/usage.apt
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/apt/usage.apt?rev=654686&view=auto
==============================================================================
--- maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/apt/usage.apt
(added)
+++ maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/apt/usage.apt Thu
May 8 22:16:47 2008
@@ -0,0 +1,95 @@
+ ------
+ Usage
+ ------
+ Sherali Karimov, James Dumay
+ ------
+ April 4th, 2008
+
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+~~ NOTE: For help with the syntax of this file, see:
+~~ http://maven.apache.org/guides/mini/guide-apt-format.html
+
+Introduction
+
+ The Maven Wagon Plugin, as the name implies, allows you to use various
functions of a maven wagon.
+ It allows you to upload resources from your build to a remote location using
wagon.
+ It allows you to download resources from a repository using wagon.
+ It allows to list a content of a repository using wagon.
+
+* Configuration Example for upload.
+
++-----
+<project>
+ [...]
+ <build>
+ <plugin>
+ <groupId>com.atlassian.maven.plugins</groupId>
+ <artifactId>maven-wagon-plugin</artifactId>
+ <version>1.0</version>
+ <executions>
+ <execution>
+ <id>upload-javadoc</id>
+ <phase>deploy</phase>
+ <goals>
+ <goal>upload</goal>
+ </goals>
+ <configuration>
+ <resourceSrc>target/site/apidocs/*</resourceSrc>
+
<resourceDest>${pom.artifactId}/${pom.version}</resourceDest>
+ <serverId>atlassian-documentation</serverId>
+ <url>dav:https://docs.atlassian.com/</url>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </build>
+ [...]
+</project>
++-----
+
+* Configuration Example for download.
+
++-----
+<project>
+ [...]
+ <build>
+ <plugin>
+ <groupId>com.atlassian.maven.plugins</groupId>
+ <artifactId>maven-wagon-plugin</artifactId>
+ <version>1.0</version>
+ <executions>
+ <execution>
+ <id>download-test-data</id>
+ <phase>pre-integration-test</phase>
+ <goals>
+ <goal>download</goal>
+ </goals>
+ <configuration>
+
<resourceSrc>com/atlassian/jira/plugins/jira-plugin-test-resources/${pom.version}/*</resourceSrc>
+ <resourceDest>target/test-data/</resourceDest>
+ <serverId>atlassian-public</serverId>
+ <url>dav:https://maven.atlassian.com/public/</url>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </build>
+ [...]
+</project>
++-----
Added: maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/site.xml
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/site.xml?rev=654686&view=auto
==============================================================================
--- maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/site.xml (added)
+++ maven/sandbox/trunk/plugins/maven-wagon-plugin/src/site/site.xml Thu May 8
22:16:47 2008
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="Usage" href="usage.html"/>
+ </menu>
+ </body>
+</project>
Added:
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/test/java/org/apache/maven/plugin/wagon/PathParserUtilTest.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-wagon-plugin/src/test/java/org/apache/maven/plugin/wagon/PathParserUtilTest.java?rev=654686&view=auto
==============================================================================
---
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/test/java/org/apache/maven/plugin/wagon/PathParserUtilTest.java
(added)
+++
maven/sandbox/trunk/plugins/maven-wagon-plugin/src/test/java/org/apache/maven/plugin/wagon/PathParserUtilTest.java
Thu May 8 22:16:47 2008
@@ -0,0 +1,239 @@
+package org.apache.maven.plugin.wagon;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.plugin.MojoExecutionException;
+
+public class PathParserUtilTest extends TestCase
+{
+ private boolean isCaseSensitive = false;
+
+ public void testNoWildCards() throws Exception
+ {
+ assureValid("a/b/c/", "a/b/c/", null);
+ assureValid("a/b/c", "a/b/c", null);
+ assureValid("/", "/", null);
+ assureValid("", "", null);
+ }
+
+ public void testOneWildCard() throws Exception
+ {
+ assureValid("a/b/c/*", "a/b/c/", "*");
+ assureValid("/*", "/", "*");
+ assureValid("*", "", "*");
+ assureValid("a/b/c/?", "a/b/c/", "?");
+ assureValid("/?", "/", "?");
+ assureValid("?", "", "?");
+ }
+
+ public void testMixedWildCards() throws Exception
+ {
+ assureValid("a/b/c/*.?.*", "a/b/c/", "*.?.*");
+ assureValid("/*.?.*", "/", "*.?.*");
+ assureValid("*.?.*", "", "*.?.*");
+ assureValid("a/b/c/SomeText*.MoreText?.*", "a/b/c/",
"SomeText*.MoreText?.*");
+ assureValid("/SomeText*.MoreText?.*", "/", "SomeText*.MoreText?.*");
+ assureValid("SomeText*.MoreText?.*", "", "SomeText*.MoreText?.*");
+ }
+
+ public void testInvalidWildCards() throws Exception
+ {
+ assureInvalid("a/b/*/c/");
+ assureInvalid("*/c/");
+ assureInvalid("*/");
+ assureInvalid("*/");
+ }
+
+ public void testValidFiles() throws Exception
+ {
+ String path = getExistingResourcePath();
+ assureValidFiles(path, Collections.singleton(new File(path)));
+
+ ExistingResources res = getExistingResourcesAndWildcard();
+ assureValidFiles(res.path, res.matchedFiles);
+ }
+
+ public void testCase() throws Exception
+ {
+ String path = getExistingResourcePath();
+ assureValidFiles(path, Collections.singleton(new File(path)));
+
+ ExistingResources res = getExistingResourcesAndWildcard();
+ assureValidFiles(res.path, res.matchedFiles);
+
+ isCaseSensitive = true;
+ String oldPath = res.path;
+ res.invertPathCase();
+ assertFalse(oldPath+" to "+res.path, oldPath.equals(res.path)); //
case invertion worked
+
+ assureInvalidFiles(res.path, res.matchedFiles);
+ }
+
+ /**
+ * returns a pointer to an existing file or directory as a relative path
+ */
+ private String getExistingResourcePath()
+ {
+ File curDir = new File(".");
+ String list[] = curDir.list();
+ if (list == null || list.length == 0)
+ {
+ if (curDir.exists())
+ {
+ // return the path looking like: ../parentDir/c* for curDir
+ return "../" + curDir.getParentFile().getName() + '/' +
curDir.getName();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ // return a path looking like: curDir/c* for childResource
+ return curDir.getName() + '/' + list[0];
+
+ }
+
+ /**
+ * returns a pointer to an existing file or directory as a wildcard
+ * expression and a set of Files that will match that wildcard expression
+ */
+ private ExistingResources getExistingResourcesAndWildcard() throws
IOException
+ {
+ File curDir = new File(".");
+ String list[] = curDir.list();
+ if (list == null || list.length == 0)
+ {
+ if (curDir.exists())
+ {
+ // return the path looking like: ../parentDir/c* for curDir
+ return new ExistingResources("../" +
curDir.getParentFile().getName(), toWildCard(curDir.getName()),
isCaseSensitive);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ // return a path looking like: curDir/c* for childResource
+ return new ExistingResources(curDir.getName(), toWildCard(list[0]),
isCaseSensitive);
+ }
+
+ private String toWildCard(String fileName)
+ {
+ char array[] = fileName.toCharArray();
+ String wildCard = "";
+ for (int i = 0; i < array.length; i++)
+ {
+ wildCard += array[i];
+ if(Character.isLetter(array[0]))
+ {
+ break;
+ }
+ }
+ wildCard += "*";
+ return wildCard;
+ }
+
+ /**
+ * makes sure that the given path will match the intended File
+ */
+ private void assureValidFiles(String path, Set expectedFiles) throws
MojoExecutionException
+ {
+ Set set = PathParserUtil.toFiles(path, isCaseSensitive);
+ assertEquals(expectedFiles, set);
+ }
+
+ private void assureInvalidFiles(String path, Set expectedFiles) throws
MojoExecutionException
+ {
+ Set set = PathParserUtil.toFiles(path, isCaseSensitive);
+ assertFalse(expectedFiles+" to "+set, expectedFiles.equals(set));
+ }
+
+
+ /**
+ * makes sure that the given string is parsed properly into the given path
+ * and given wildcard.
+ */
+ private void assureValid(String string, String path, String wildcard)
throws MojoExecutionException
+ {
+ ResourceDescriptor descr = new ResourceDescriptor(string,
isCaseSensitive);
+ assertEquals(path, descr.path);
+ assertEquals(wildcard, descr.wildcard);
+
+ string = string.replace('/', '\\');
+
+ descr = new ResourceDescriptor(string, isCaseSensitive);
+ assertEquals(path.replace('/', '\\'), descr.path);
+ assertEquals(wildcard, descr.wildcard);
+ }
+
+ /**
+ * makes sure that the given path can not be parsed or is invalid
+ */
+ private void assureInvalid(String path)
+ {
+ try
+ {
+ new ResourceDescriptor(path, isCaseSensitive);
+ fail("Path is invalid: " + path);
+ }
+ catch (MojoExecutionException e)
+ {
+ // expected
+ }
+ }
+
+ private static class ExistingResources
+ {
+ private String path;
+ private final Set matchedFiles = new HashSet();
+
+ ExistingResources(String parentPath, String wildcard, boolean
isCaseSensitive)
+ {
+ this.path = parentPath + '/' + wildcard;
+ PathParserUtil.getMatchingChildren(new File(parentPath), wildcard,
isCaseSensitive, matchedFiles);
+ }
+
+ public void invertPathCase()
+ {
+ char[] array = path.toCharArray();
+ for (int i = 0; i < array.length; i++)
+ {
+ if(Character.isLetter(array[i]))
+ {
+ if(Character.isLowerCase(array[i]))
+ array[i] = Character.toUpperCase(array[i]);
+ else
+ array[i] = Character.toLowerCase(array[i]);
+ }
+ }
+ path = new String(array);
+ }
+ }
+}