Skip to content

Commit

Permalink
Issue #104 inlineHeader not working
Browse files Browse the repository at this point in the history
  • Loading branch information
ppalaga committed Aug 15, 2016
1 parent 7b0e053 commit 047ae19
Show file tree
Hide file tree
Showing 8 changed files with 187 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
Expand Down Expand Up @@ -307,7 +308,7 @@ public void checkUnknown() throws MojoExecutionException {
@SuppressWarnings({"unchecked"})
public final void execute(final Callback callback) throws MojoExecutionException, MojoFailureException {
if (!skip) {
if (header == null) {
if (header == null && (this.inlineHeader == null || this.inlineHeader.isEmpty())) {
warn("No header file specified to check for license");
return;
}
Expand All @@ -323,16 +324,18 @@ public final void execute(final Callback callback) throws MojoExecutionException
throw new MojoExecutionException(e.getMessage(), e);
}
finder.setPluginClassPath(getClass().getClassLoader());

final Header h = new Header(finder.findResource(this.header), encoding, headerSections, inlineHeader);
debug("Header %s:\n%s", h.isInline() ? "inline" : h.getLocation(), h);


final HeaderSource headerSource = HeaderSource.of(this.inlineHeader, this.header, this.encoding, this.finder);
final Header h = new Header(headerSource, headerSections);
debug("Header: %s", h.getLocation());

if (this.validHeaders == null) {
this.validHeaders = new String[0];
}
final List<Header> validHeaders = new ArrayList<Header>(this.validHeaders.length);
for (String validHeader : this.validHeaders) {
validHeaders.add(new Header(finder.findResource(validHeader), encoding, headerSections, inlineHeader));
final HeaderSource validHeaderSource = HeaderSource.of(null, validHeader, this.encoding, this.finder);
validHeaders.add(new Header(validHeaderSource, headerSections));
}

final List<PropertiesProvider> propertiesProviders = new LinkedList<PropertiesProvider>();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
/**
* Copyright (C) 2008 Mycila ([email protected])
*
* Licensed 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.
*/
package com.mycila.maven.plugin.license;

import java.io.IOException;
import java.net.URL;

import com.mycila.maven.plugin.license.util.FileUtils;
import com.mycila.maven.plugin.license.util.resource.ResourceFinder;

/**
* Provides an access to the license template text.
*
* @author <a href="https://github.com/ppalaga">Peter Palaga</a>
*/
public abstract class HeaderSource {

/**
* A {@link HeaderSource} built from a lincense header template literal.
*/
public static class InlineHeaderSource extends HeaderSource {
public InlineHeaderSource(String content) {
super(content, true);
}

/**
* @return always {@code false} because this {@link InlineHeaderSource} was not loaded from an {@link URL}
*/
@Override
public boolean isFromLocation(URL location) {
return false;
}

@Override
public String toString() {
return "inline: " + content;
}

}

/**
* A {@link HeaderSource} loaded from a {@link URL}.
*/
public static class PathHeaderSource extends HeaderSource {
private final URL headerUrl;

public PathHeaderSource(URL headerUrl, String encoding) throws IOException {
super(FileUtils.read(headerUrl, encoding), false);
this.headerUrl = headerUrl;
}

@Override
public boolean isFromLocation(URL location) {
return this.headerUrl.equals(location);
}

@Override
public String toString() {
return headerUrl + ": " + content;
}

}

public static HeaderSource of(String headerPath, String encoding, ResourceFinder finder) {
return of(null, encoding, finder);
}

/**
* Checking the params left to right, returns the first available {@link HeaderSource} that can be created. If
* {@code inlineHeader} is not {@code null} returns a new {@link InlineHeaderSource}. Otherwise attempts to create a
* new {@link PathHeaderSource} out of {@code headerPath} and {@code encoding}.
*
* @param inlineHeader the text of a lincense header template
* @param headerPath a path resolvable by the {@code finder}
* @param encoding the encoding to use when readinf {@code headerPath}
* @param finder the {@link ResourceFinder} to use to resolve {@code headerPath}
* @return a new {@link HeaderSource}
*/
public static HeaderSource of(String inlineHeader, String headerPath, String encoding, ResourceFinder finder) {
if (inlineHeader != null && !inlineHeader.isEmpty()) {
return new InlineHeaderSource(inlineHeader);
} else if (headerPath == null) {
throw new IllegalArgumentException("Either inlineHeader or header path need to be specified");
} else {
try {
final URL headerUrl = finder.findResource(headerPath);
return new PathHeaderSource(headerUrl, encoding);
} catch (Exception e) {
throw new IllegalArgumentException(
"Cannot read header document " + headerPath + ". Cause: " + e.getMessage(), e);
}
}
}

protected final String content;
private final boolean inline;

public HeaderSource(String content, boolean inline) {
super();
this.content = content;
this.inline = inline;
}

/**
* @return the text of the license template
*/
public String getContent() {
return content;
}

/**
* @return {@code true} if this {@link HeaderSource} was created from a string rather by loading the bits from an
* URL; {@code false} otherwise
*/
public boolean isInline() {
return inline;
}

/**
* Retuns {@code true} if this {@link HeaderSource} was loaded from the URL given in the {@code location} parameter
* or {@code false} otherwise.
*
* @param location
* the URL to tell if this {@link HeaderSource} was loaded from it
* @return {@code true} if this {@link HeaderSource} was loaded from the URL given in the {@code location} parameter
* or {@code false} otherwise
*/
public abstract boolean isFromLocation(URL location);

}
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ public void removeHeader() {

public boolean is(Header header) {
try {
return !header.isInline() && header.getLocation().sameFile(this.file.toURI().toURL());
return header.getLocation().isFromLocation(this.file.toURI().toURL());
} catch (Exception e) {
throw new IllegalStateException("Error comparing document " + this.file + " with file " + file + ". Cause: " + e.getMessage(), e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,18 @@
*/
package com.mycila.maven.plugin.license.header;

import com.mycila.maven.plugin.license.HeaderSection;
import com.mycila.maven.plugin.license.document.Document;
import com.mycila.maven.plugin.license.util.StringUtils;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

import static com.mycila.maven.plugin.license.util.FileUtils.read;
import com.mycila.maven.plugin.license.HeaderSection;
import com.mycila.maven.plugin.license.HeaderSource;
import com.mycila.maven.plugin.license.document.Document;
import com.mycila.maven.plugin.license.util.StringUtils;

import static com.mycila.maven.plugin.license.util.FileUtils.readFirstLines;
import static com.mycila.maven.plugin.license.util.FileUtils.remove;

Expand All @@ -38,13 +37,12 @@
* @author Mathieu Carbou ([email protected])
*/
public final class Header {
private final URL location;
private final HeaderSource location;
private final String headerContent;
private final String headerContentOneLine;
private String[] lines;
private final HeaderSection[] sections;
private final int maxLength;
private final boolean inline;

/**
* Constructs a <code>Header</code> object pointing to a license template file. In case of the template contains
Expand All @@ -55,15 +53,11 @@ public final class Header {
* @throws IllegalArgumentException If the header file location is null or if an error occurred while reading the
* file content.
*/
public Header(URL location, String encoding, HeaderSection[] sections, String headerText) {
if (location == null && headerText == null) {
throw new IllegalArgumentException("Cannot read license template header file with a null location");
}
public Header(HeaderSource location, HeaderSection[] sections) {
this.location = location;
this.inline = location == null;
this.sections = sections;
try {
this.headerContent = location == null ? headerText : read(location, encoding);
this.headerContent = location.getContent();
lines = headerContent.replace("\r", "").split("\n");
headerContentOneLine = remove(headerContent, " ", "\t", "\r", "\n");
} catch (Exception e) {
Expand Down Expand Up @@ -101,15 +95,11 @@ public int getMaxLineLength() {
*
* @return The URL location.
*/
public URL getLocation() {
public HeaderSource getLocation() {
return location;
}

public boolean isInline() {
return inline;
}

public String eol(boolean unix) {
public String eol(boolean unix) {
return unix ? "\n" : "\r\n";
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,14 @@
*/
package com.mycila.maven.plugin.license.document;

import com.mycila.maven.plugin.license.HeaderSource.PathHeaderSource;
import com.mycila.maven.plugin.license.header.Header;
import com.mycila.maven.plugin.license.util.FileUtils;
import org.junit.BeforeClass;
import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Properties;

Expand All @@ -42,9 +44,9 @@ public Properties load(Document d) {
};

@BeforeClass
public static void setup() throws MalformedURLException {
public static void setup() throws IOException {

header = new Header(new File("src/test/resources/test-header1.txt").toURI().toURL(), "UTF-8", null, null);
header = new Header(new PathHeaderSource(new File("src/test/resources/test-header1.txt").toURI().toURL(), "UTF-8"), null);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
*/
package com.mycila.maven.plugin.license.header;

import com.mycila.maven.plugin.license.HeaderSource;
import com.mycila.maven.plugin.license.HeaderSource.PathHeaderSource;
import com.mycila.maven.plugin.license.util.FileUtils;
import com.mycila.xmltool.XMLDoc;
import com.mycila.xmltool.XMLTag;
Expand Down Expand Up @@ -49,7 +51,7 @@ public void test_load_definitions() throws Exception {
assertEquals(loader.getDefinitions().get("xquery").getType(), "xquery");
assertNull(loader.getDefinitions().get("xquery").getSkipLinePattern());

Header header = new Header(getClass().getResource("/test-header1.txt"), "UTF-8", null, null);
Header header = new Header(new PathHeaderSource(getClass().getResource("/test-header1.txt"), "UTF-8"), null);

//FileUtils.write(new File("src/test/resources/test-header3.txt"), header.buildForDefinition(loader.getDefinitions().get("xquery")));

Expand All @@ -74,7 +76,7 @@ public void test_load_definitions2() throws Exception {

AdditionalHeaderDefinition loader = new AdditionalHeaderDefinition(def);

Header header = new Header(getClass().getResource("/check/header.txt"), "UTF-8", null, null);
Header header = new Header(new PathHeaderSource(getClass().getResource("/check/header.txt"), "UTF-8"), null);

System.out.println(header.buildForDefinition(loader.getDefinitions().get("text"), false));
}
Expand All @@ -93,7 +95,7 @@ public void test_advanced_definitions() throws Exception {

AdditionalHeaderDefinition loader = new AdditionalHeaderDefinition(def);

Header header = new Header(getClass().getResource("/test-header1.txt"), "UTF-8", null, null);
Header header = new Header(new PathHeaderSource(getClass().getResource("/test-header1.txt"), "UTF-8"), null);

//FileUtils.write(new File("src/test/resources/test-header4.txt"), header.buildForDefinition(loader.getDefinitions().get("csregion"), false), System.getProperty("file.encoding"));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package com.mycila.maven.plugin.license.header;

import com.mycila.maven.plugin.license.HeaderSource.PathHeaderSource;
import com.mycila.maven.plugin.license.util.FileUtils;
import org.junit.Test;

Expand All @@ -29,7 +30,7 @@
public final class DefaultHeaderDefinitionTest {
@Test
public void test_styles() throws Exception {
Header header = new Header(getClass().getResource("/test-header1.txt"), "UTF-8", null, null);
Header header = new Header(new PathHeaderSource(getClass().getResource("/test-header1.txt"), "UTF-8"), null);
for (HeaderDefinition definition : HeaderType.defaultDefinitions().values()) {
final String content = FileUtils.read(new File(format("src/test/resources/styles/%s.txt", definition.getType())), System.getProperty("file.encoding"));
assertEquals("Bad header for type: " + definition.getType(), content, header.buildForDefinition(definition, !containsWindowsLineEnding(content)));
Expand Down
Loading

0 comments on commit 047ae19

Please sign in to comment.