Commit 1ef59056 authored by Brian Long's avatar Brian Long
Browse files

Merge branch 'develop' into stable

parents e42277aa 807db4df
Loading
Loading
Loading
Loading
+36 −29
Original line number Diff line number Diff line
@@ -58,52 +58,59 @@ This is a maven plugin that provides various regular expression based goals to M
| `copy-file`          | A convenience goal that copies all files/folders specified in a source path to a target path. |
| `move-file`          | A convenience goal that moves all files/folders specified in a source path to a target path. |

### Common Configuration Properties

| Configuration Property | Data Type   | Required | Default | Description |
| ---------------------- |:-----------:|:--------:| ------- | ----------- |
| `allowMultiLineMatch`  | `boolean`   |          | `false` | A value of `true` allows for multi-line matching.  This takes substantially more memory/time to process. |
| `charset`              | `string`    |          | `utf-8` | |
| `skip`                 | `boolean`   |          | `false` | |
| `verbose`              | `boolean`   |          | `false` | |

### Goal: `replace-file`

Manipulates all the contents in the specified files based the specified regular expression replacements.

| Configuration Property | Data Type   | Required | Default | Description |
| ---------------------- |:-----------:|:--------:| ------- | ----------- |
| `chunkSize`            | `int`       |          | `1024`  | The streaming buffer/chunk size in bytes, while evaluating the regular expressions.  Adjust for classic speed/memory trade-off.  Be aware that files are processed line-by-line, unless `allowMultiLineMatch` is set to `true`. |
| `filesets`             | `FileSet[]` | Yes      |         | Executes against these files. |
| `regexes`              | `Regex[]`   | Yes      |         | Applies these regular expressions and replacement text against those files. |
| `allowMultiLineMatch`  | `boolean`   |          | `false` | A value of `true` allows for multi-line matching.  This takes substantially more memory/time to process. |
| `charset`              | `string`    |          | `utf-8` | |
| `skip`                 | `boolean`   |          | `false` | |

### Goal: `replace-properties`

Copies and replaces the values of the specified properties based on the specified regular expression replacements; storing the changed values in new properties.

| Configuration Property | Data Type  | Required | Default  | Description |
| ---------------------- |:----------:|:--------:| -------- | ----------- |
| `properties`           | `String[]` | Yes      |          | Executes against these properties. |
| `newPropertySuffix`    | `String`   |          | `-regex` | All evaluated properties will be copied to new properties with the same property name plus this suffix. |
| `regexes`              | `Regex[]`  | Yes      |          | Applies these regular expressions and replacement text against those files. |
| `allowMultiLineMatch`  | `boolean`  |          | `false`  | A value of `true` allows for multi-line matching.  This takes substantially more memory/time to process. |
| `charset`              | `string`   |          | `utf-8`  | |
| `skip`                 | `boolean`  |          | `false`  | |

### Goal: `replace-property`

Copies and replaces the value of the specified property based on the specified regular expression replacements; storing the changed value in a new property.

| Configuration Property | Data Type  | Required | Default | Description |
| ---------------------- |:----------:|:--------:| ------- | ----------- |
| `property`             | `String`   | Yes      |         | Executes against this property. |
| `newProperty`          | `String`   |          |         | The evaluated property will be copied to this property name.  If not specified, it will be the same name as the `property` with a `-regex` suffix. |
| `regexes`              | `Regex[]`  | Yes      |         | Applies these regular expressions and replacement text against those files. |
| `allowMultiLineMatch`  | `boolean`  |          | `false` | A value of `true` allows for multi-line matching.  This takes substantially more memory/time to process. |
| `charset`              | `string`   |          | `utf-8` | |
| `skip`                 | `boolean`  |          | `false` | |

### Goal: `replace-text`

Replaces the specified text based on the specified regular expression replacements; storing the result in a property.

| Configuration Property | Data Type  | Required | Default | Description |
| ---------------------- |:----------:|:--------:| ------- | ----------- |
| `text`                 | `String`   | Yes      |         | Execute against this text. |
| `newProperty`          | `String`   | Yes      |         | The evaluated text will be copied to this property name. |
| `regexes`              | `Regex[]`  | Yes      |         | Applies these regular expressions and replacement text against those files. |
| `allowMultiLineMatch`  | `boolean`  |          | `false` | A value of `true` allows for multi-line matching.  This takes substantially more memory/time to process. |
| `charset`              | `string`   |          | `utf-8` | |
| `skip`                 | `boolean`  |          | `false` | |

### Goal: `match-file`

Searches the contents of the specified files based using the specified regular expressions; storing the result of the search in a property.

| Configuration Property | Data Type   | Required | Default | Description |
| ---------------------- |:-----------:|:--------:| ------- | ----------- |
| `chunkSize`            | `int`       |          | `1024`  | The streaming buffer/chunk size in bytes, while evaluating the regular expressions.  Adjust for classic speed/memory trade-off.  Be aware that files are processed line-by-line, unless `allowMultiLineMatch` is set to `true`. |
@@ -112,12 +119,11 @@ This is a maven plugin that provides various regular expression based goals to M
| `patterns`             | `String[]`  | Yes      |         | Evaluates these regular expressions against those files. |
| `allowPartialMatch`    | `boolean`   |          | `true`  | A value of `true` allows for partial matching, rather than exact line-by-line matching. |
| `negate`               | `boolean`   |          | `false` | A value of `true` will reverse the `true`/`false` on the resultant property value. |
| `allowMultiLineMatch`  | `boolean`   |          | `false` | A value of `true` allows for multi-line matching.  This takes substantially more memory/time to process. |
| `charset`              | `string`    |          | `utf-8` | |
| `skip`                 | `boolean`   |          | `false` | |

### Goal: `match-filename`

Checks the filenames of the specified files based using the specified regular expressions; storing the result in a property.

| Configuration Property | Data Type   | Required | Default | Description |
| ---------------------- |:-----------:|:--------:| ------- | ----------- |
| `sourceDirectory`      | `File`      | Yes      |         | Executes against this file. |
@@ -125,11 +131,11 @@ This is a maven plugin that provides various regular expression based goals to M
| `patterns`             | `String[]`  | Yes      |         | Evaluates these regular expressions the file. |
| `allowPartialMatch`    | `boolean`   |          | `true`  | A value of `true` allows for partial matching, rather than exact filename matching. |
| `negate`               | `boolean`   |          | `false` | A value of `true` will reverse the `true`/`false` on the resultant property value. |
| `charset`              | `string`    |          | `utf-8` | |
| `skip`                 | `boolean`   |          | `false` | |

### Goal: `match-properties`

Checks the values of the specified properties based on the specified regular expressions; storing the results in new properties.

| Configuration Property | Data Type  | Required | Default  | Description |
| ---------------------- |:----------:|:--------:| -------- | ----------- |
| `properties`           | `String[]` | Yes      |          | Executes against these properties. |
@@ -137,12 +143,11 @@ This is a maven plugin that provides various regular expression based goals to M
| `patterns`             | `String[]` | Yes      |          | Evaluates these regular expressions against those properties' values. |
| `allowPartialMatch`    | `boolean`  |          | `true`   | A value of `true` allows for partial matching, rather than exact matching. |
| `negate`               | `boolean`  |          | `false`  | A value of `true` will reverse the `true`/`false` on the resultant property value. |
| `allowMultiLineMatch`  | `boolean`  |          | `false`  | A value of `true` allows for multi-line matching.  Very rare for property evaluation. |
| `charset`              | `string`   |          | `utf-8`  | |
| `skip`                 | `boolean`  |          | `false`  | |

### Goal: `match-property`

Checks the value of the specified property based on the specified regular expressions; storing the result in a new property.

| Configuration Property | Data Type  | Required | Default | Description |
| ---------------------- |:----------:|:--------:| ------- | ----------- |
| `property`             | `String`   | Yes      |         | Executes against this property. |
@@ -150,12 +155,11 @@ This is a maven plugin that provides various regular expression based goals to M
| `patterns`             | `String[]` | Yes      |         | Evaluates these regular expressions against the property value. |
| `allowPartialMatch`    | `boolean`  |          | `true`  | A value of `true` allows for partial matching, rather than exact matching. |
| `negate`               | `boolean`  |          | `false` | A value of `true` will reverse the `true`/`false` on the resultant property value. |
| `allowMultiLineMatch`  | `boolean`  |          | `false` | A value of `true` allows for multi-line matching.  Very rare for property evaluation. |
| `charset`              | `string`   |          | `utf-8` | |
| `skip`                 | `boolean`  |          | `false` | |

### Goal: `match-text`

Checks the specified text based on the specified regular expressions; storing the result in a property.

| Configuration Property | Data Type  | Required | Default | Description |
| ---------------------- |:----------:|:--------:| ------- | ----------- |
| `text`                 | `String`   | Yes      |         | Execute against this text. |
@@ -163,24 +167,27 @@ This is a maven plugin that provides various regular expression based goals to M
| `patterns`             | `String[]` | Yes      |         | Evaluates these regular expressions against the property value. |
| `allowPartialMatch`    | `boolean`  |          | `true`  | A value of `true` allows for partial matching, rather than exact matching. |
| `negate`               | `boolean`  |          | `false` | A value of `true` will reverse the `true`/`false` on the resultant property value. |
| `allowMultiLineMatch`  | `boolean`  |          | `false` | A value of `true` allows for multi-line matching.  Very rare for property evaluation. |
| `charset`              | `string`   |          | `utf-8` | |
| `skip`                 | `boolean`  |          | `false` | |

### Goal: `copy-file`

Copies all the files in the specified source directory while applying the specified regular expression replacements to their contents; storing the files in the specified target directory.

| Configuration Property | Data Type | Required | Default    | Description |
| ---------------------- |:----------:|:--------:| --------- | ----------- |
| ---------------------- |:---------:|:--------:| ---------- | ----------- |
| `sourceDirectory`      | `File`    |          | ${basedir} | Copy all files from this directory. |
| `targetDirectory`      | `File`    |          | ${basedir} | Copy all files to this directory. |
| `regexes`              | `Regex[]` | Yes      |            | Applies these regular expressions and replacement text against those files. |
| `overwrite`            | `boolean` |          | `true`     | |

### Goal: `move-file`

Moves all the files from the specified source directory while applying the specified regular expression replacements to their contents; storing the files in the specified target directory.

| Configuration Property | Data Type | Required | Default    | Description |
| ---------------------- |:----------:|:--------:| --------- | ----------- |
| ---------------------- |:---------:|:--------:| ---------- | ----------- |
| `sourceDirectory`      | `File`    |          | ${basedir} | Move all files from this directory. |
| `targetDirectory`      | `File`    |          | ${basedir} | Move all files to this directory. |
| `regexes`              | `Regex[]` | Yes      |            | Applies these regular expressions and replacement text against those files. |
| `overwrite`            | `boolean` |          | `true`     | |

## Model
@@ -193,4 +200,4 @@ This is a maven plugin that provides various regular expression based goals to M
| `replacement`     | `String`  |          | ``      | A regular expression replacement string. |
| `previousPattern` | `String`  |          |         | A regular expression pattern to look back against, removing everything down to and including the pattern. |

The `previousPattern` allows for you to match some text and remove everything before the match, up to the `prevoiusPattern.  This is useful when matching a method and removing it and all its annotations.
The `previousPattern` allows for you to match some text and remove everything before the match, up to the `prevoiusPattern`.  This is useful when matching a method and removing it and all its annotations.  If the `previousPattern` has no match, it will not remove any text before the primary match.
+2 −0
Original line number Diff line number Diff line
@@ -3,4 +3,6 @@ this is a multi line test file.

it is supposed to emulate larger files and multiline pattern matching.

sometimes this doesn՚t work with unicode characters.

good luck!
 No newline at end of file
+3 −3
Original line number Diff line number Diff line
@@ -160,17 +160,17 @@
								</requireFileChecksum>
								<requireFileChecksum>
									<file>${project.build.directory}/noreplace-one/folder1/file12.txt</file>
									<checksum>925a6e3bd25cdd61695aa55d008ab4d2</checksum>
									<checksum>725d3a15f631dda5b058357129fd17fd</checksum>
									<type>md5</type>
								</requireFileChecksum>
								<requireFileChecksum>
									<file>${project.build.directory}/replace-linestart/file12.txt</file>
									<checksum>fb1f2b040970526fc99b1339f22465f1</checksum>
									<checksum>791882a340c18da89b524d7735cc085c</checksum>
									<type>md5</type>
								</requireFileChecksum>
								<requireFileChecksum>
									<file>${basedir}/folder1/file12.txt</file>
									<checksum>a7f509275e16ff57cd7756cdca70822a</checksum>
									<checksum>6fb82d67ec64b04df220a11adfba81a3</checksum>
									<type>md5</type>
								</requireFileChecksum>
							</rules>
+28 −23
Original line number Diff line number Diff line
@@ -21,9 +21,10 @@ import org.apache.maven.model.Profile;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.AbstractLogEnabled;

@Component(role = ProjectPropertyResolver.class)
public class StandardProjectPropertyResolver implements ProjectPropertyResolver {
@Component(role = ProjectPropertyResolver.class, instantiationStrategy = "per-lookup")
public class StandardProjectPropertyResolver extends AbstractLogEnabled implements ProjectPropertyResolver {
	
	@Requirement
	private MavenSession session;
@@ -51,34 +52,38 @@ public class StandardProjectPropertyResolver implements ProjectPropertyResolver
    private Properties findPropertiesObject(String key) {
    	// search the user/cli properties first
    	Properties props = this.session.getUserProperties();
    	if (props.containsKey(key))
    	if (props.containsKey(key)) {
    	    this.getLogger().debug("Found in session user properties: " + key);
    		return props;
    	}
    	
    	MavenProject ancestor = this.project;
        while (ancestor != null) {
        	// search the profiles next; in order (FIXME maybe we should go backwards?)
    	for (Profile profile : this.project.getActiveProfiles()) {
        	for (Profile profile : ancestor.getActiveProfiles()) {
        		props = profile.getProperties();
    		if (props.containsKey(key))
        		if (props.containsKey(key)) {
                    this.getLogger().debug("Found in project profile properties: " + ancestor.getArtifact() + ": " + profile.getId() + ": " + key);
        			return props;
        		}
        	}
        	
        	// now look at the project props
    	props = this.project.getProperties();
		if (props.containsKey(key))
			return props;
		
		// now recursively look up the parent project props
		MavenProject ancestor = this.project.getParent();
		while (ancestor != null) {
        	props = ancestor.getProperties();
			if (props.containsKey(key))
    		if (props.containsKey(key)) {
                this.getLogger().debug("Found in project properties: " + ancestor.getArtifact() + ": " + key);
    			return props;
    		}

            ancestor = ancestor.getParent();
        }

    	// search the system properties last (FIXME is this right?)
    	props = this.session.getSystemProperties();
    	if (props.containsKey(key))
    	if (props.containsKey(key)) {
            this.getLogger().debug("Found in system properties: " + key);
    		return props;
    	}
		
		return null;
    }
+12 −4
Original line number Diff line number Diff line
@@ -48,8 +48,10 @@ public abstract class AbstractMatchMojo extends AbstractRegexMojo {
	@Override
	protected void executeOnText(Properties props, String text, String newPropertyName) {
		boolean matches = this.matches(text);
		if (matches)
        	this.getLog().debug("Matches!");
        if (this.verbose)
            this.getLog().info("Setting property: " + newPropertyName + ": " + matches);
        else if (matches)
        	this.getLog().info("Matches!");
		if (props == null)
			props = this.project.getProperties();
		props.setProperty(newPropertyName, String.valueOf(matches));
@@ -97,13 +99,19 @@ public abstract class AbstractMatchMojo extends AbstractRegexMojo {
        	
    		Matcher matcher = pattern.matcher(text);
    		if (this.allowPartialMatch) {
    			if (matcher.find())
    			if (matcher.find()) {
                    if (this.verbose)
                        this.getLog().info("Pattern '" + pattern + "' matches text: " + text);
    				return !this.negate;
    			}
    		} else {
    			if (matcher.matches())
    			if (matcher.matches()) {
                    if (this.verbose)
                        this.getLog().info("Pattern '" + pattern + "' matches text: " + text);
    				return !this.negate;
    			}
    		}
    	}

    	return this.negate;
    }
Loading