This is an automated email from the ASF dual-hosted git repository. sgoeschl pushed a commit to branch FREEMARKER-172 in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
commit fc7ec0475788ce023fce9b7a65668708f7e7dea2 Author: Siegfried Goeschl <[email protected]> AuthorDate: Wed Feb 3 23:54:23 2021 +0100 FREEMARKER-172 [freemarker-generator] Start with refactoring --- .../generator/base/datasource/DataSource.java | 47 +++++++++++++++++----- .../generator/datasource/DataSourceLoaderTest.java | 10 ++++- .../generator/datasource/DataSourceTest.java | 4 +- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSource.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSource.java index 9634ecb..d01df00 100644 --- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSource.java +++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSource.java @@ -43,7 +43,7 @@ import static org.apache.freemarker.generator.base.mime.Mimetypes.MIME_APPLICATI /** * Data source which encapsulates data to be used for rendering - * a template. When accessing content it is loaded on demand on not + * a template. When accessing content it is loaded on demand and not * kept in memory to allow processing of large volumes of data. * <br> * There is also special support of <code>UrlDataSource</code> since @@ -62,7 +62,7 @@ public class DataSource implements Closeable, javax.activation.DataSource { public static final String METADATA_GROUP = "group"; public static final String METADATA_NAME = "name"; public static final String METADATA_URI = "uri"; - public static final String METADATA_URI_PATH = "uriPath"; + public static final String METADATA_MIME_TYPE = "mimeType"; /** Human-readable name of the data source */ private final String name; @@ -140,14 +140,32 @@ public class DataSource implements Closeable, javax.activation.DataSource { return group; } + /** + * Get the file name from the underlying "FileDataSource". All + * other data sources will return an empty string. + * + * @return file name or empty string + */ public String getFileName() { return isFileDataSource() ? FilenameUtils.getName(dataSource.getName()) : ""; } + /** + * Get the base name from the underlying "FileDataSource". All + * other data sources will return an empty string. + * + * @return base name or empty string + */ public String getBaseName() { return FilenameUtils.getBaseName(getFileName()); } + /** + * Get the extension from the underlying "FileDataSource". All + * other data sources will return an empty string. + * + * @return base name or empty string + */ public String getExtension() { return FilenameUtils.getExtension(getFileName()); } @@ -180,11 +198,11 @@ public class DataSource implements Closeable, javax.activation.DataSource { * @return Length of data source or UNKNOWN_LENGTH */ public long getLength() { - if (dataSource instanceof FileDataSource) { + if (isFileDataSource()) { return ((FileDataSource) dataSource).getFile().length(); - } else if (dataSource instanceof StringDataSource) { + } else if (isStringDataSource()) { return ((StringDataSource) dataSource).length(); - } else if (dataSource instanceof ByteArrayDataSource) { + } else if (isByteArrayDataSource()) { return ((ByteArrayDataSource) dataSource).length(); } else { return DATASOURCE_UNKNOWN_LENGTH; @@ -246,7 +264,7 @@ public class DataSource implements Closeable, javax.activation.DataSource { } /** - * Returns an Iterator for the lines in an <code>InputStream</code>, using + * Returns an iterator for the lines in an <code>InputStream</code>, using * the default character encoding specified. The exposed iterator is closed * by the <code>DataSource</code>. * @@ -282,7 +300,7 @@ public class DataSource implements Closeable, javax.activation.DataSource { } /** - * Expose various parts of the metadata as simple strings to cater for filtering in a script. + * Expose various parts of the metadata as simple strings to cater for filtering in a script. * * @param key key part key * @return value @@ -302,10 +320,10 @@ public class DataSource implements Closeable, javax.activation.DataSource { return getGroup(); case METADATA_NAME: return getName(); - case METADATA_URI_PATH: - return uri.getPath(); case METADATA_URI: return uri.toString(); + case METADATA_MIME_TYPE: + return getMimeType(); default: throw new IllegalArgumentException("Unknown key: " + key); } @@ -356,7 +374,8 @@ public class DataSource implements Closeable, javax.activation.DataSource { if (StringUtils.isNotEmpty(contentType)) { return contentType; } else { - return StringUtils.firstNonEmpty(dataSource.getContentType(), MIME_APPLICATION_OCTET_STREAM); + final String contentType = dataSource.getContentType(); + return StringUtils.firstNonEmpty(contentType, MIME_APPLICATION_OCTET_STREAM); } } @@ -364,4 +383,12 @@ public class DataSource implements Closeable, javax.activation.DataSource { return dataSource instanceof FileDataSource; } + private boolean isStringDataSource() { + return dataSource instanceof StringDataSource; + } + + private boolean isByteArrayDataSource() { + return dataSource instanceof ByteArrayDataSource; + } + } diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java index cbe9aa1..729004c 100644 --- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java +++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceLoaderTest.java @@ -49,6 +49,7 @@ public class DataSourceLoaderTest { assertEquals(ANY_FILE_NAME, dataSource.getFileName()); assertEquals(UTF_8, dataSource.getCharset()); assertEquals(MIME_APPLICATION_XML, dataSource.getContentType()); + assertEquals(MIME_APPLICATION_XML, dataSource.getMimeType()); assertEquals(ANY_FILE.toURI(), dataSource.getUri()); assertFalse(dataSource.getLines().isEmpty()); } @@ -62,6 +63,7 @@ public class DataSourceLoaderTest { assertEquals(ANY_FILE_NAME, dataSource.getFileName()); assertEquals(UTF_8, dataSource.getCharset()); assertEquals(MIME_APPLICATION_XML, dataSource.getContentType()); + assertEquals(MIME_APPLICATION_XML, dataSource.getMimeType()); assertEquals(ANY_FILE.toURI(), dataSource.getUri()); assertFalse(dataSource.getLines().isEmpty()); } @@ -75,6 +77,7 @@ public class DataSourceLoaderTest { assertEquals(ANY_FILE_NAME, dataSource.getFileName()); assertEquals(UTF_8, dataSource.getCharset()); assertEquals(MIME_APPLICATION_XML, dataSource.getContentType()); + assertEquals(MIME_APPLICATION_XML, dataSource.getMimeType()); assertEquals(ANY_FILE.toURI(), dataSource.getUri()); assertFalse(dataSource.getLines().isEmpty()); } @@ -87,6 +90,7 @@ public class DataSourceLoaderTest { assertEquals("source", dataSource.getName()); assertEquals(UTF_8, dataSource.getCharset()); assertEquals(MIME_APPLICATION_XML, dataSource.getContentType()); + assertEquals(MIME_APPLICATION_XML, dataSource.getMimeType()); assertEquals(ANY_FILE.toURI(), dataSource.getUri()); assertFalse(dataSource.getLines().isEmpty()); } @@ -105,7 +109,7 @@ public class DataSourceLoaderTest { } @Test - @Ignore + @Ignore("Requires internet access") public void shouldCreateDataSourceFromUrl() { try (DataSource dataSource = dataSourceLoader().load("https://jsonplaceholder.typicode.com/posts/2")) { assertEquals("https://jsonplaceholder.typicode.com/posts/2", dataSource.getName()); @@ -113,13 +117,14 @@ public class DataSourceLoaderTest { assertEquals("", dataSource.getBaseName()); assertEquals("", dataSource.getExtension()); assertEquals("application/json; charset=utf-8", dataSource.getContentType()); + assertEquals("application/json", dataSource.getMimeType()); assertEquals(UTF_8, dataSource.getCharset()); assertEquals("https://jsonplaceholder.typicode.com/posts/2", dataSource.getUri().toString()); } } @Test - @Ignore + @Ignore("Requires internet access") public void shouldCreateDataSourceFromNamedURL() { try (DataSource dataSource = dataSourceLoader().load("content:www=https://www.google.com?foo=bar#contenttype=application/json")) { assertEquals("content", dataSource.getName()); @@ -128,6 +133,7 @@ public class DataSourceLoaderTest { assertEquals("", dataSource.getExtension()); assertEquals("www", dataSource.getGroup()); assertEquals("text/html; charset=ISO-8859-1", dataSource.getContentType()); + assertEquals("text/html", dataSource.getMimeType()); assertEquals("ISO-8859-1", dataSource.getCharset().toString()); assertEquals("https://www.google.com?foo=bar#contenttype=application/json", dataSource.getUri().toString()); } diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceTest.java index 05c2382..09f860b 100644 --- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceTest.java +++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceTest.java @@ -20,6 +20,7 @@ import org.apache.commons.io.LineIterator; import org.apache.freemarker.generator.base.datasource.DataSource; import org.apache.freemarker.generator.base.datasource.DataSourceFactory; import org.apache.freemarker.generator.base.mime.Mimetypes; +import org.junit.Ignore; import org.junit.Test; import java.io.Closeable; @@ -80,8 +81,8 @@ public class DataSourceTest { } } - // @Ignore("Requires internet connection") @Test + @Ignore("Requires internet access") public void shouldSupportUrlDataSource() { try (DataSource dataSource = DataSourceFactory.fromUrl("www.google.com", DEFAULT_GROUP, toUrl("https://www.google.com/?foo=bar"), null, null)) { assertEquals("www.google.com", dataSource.getName()); @@ -89,6 +90,7 @@ public class DataSourceTest { assertEquals("", dataSource.getBaseName()); assertEquals("", dataSource.getExtension()); assertEquals("https://www.google.com/?foo=bar", dataSource.getUri().toString()); + assertEquals("text/html; charset=ISO-8859-1", dataSource.getContentType()); assertEquals(MIME_TEXT_HTML, dataSource.getMimeType()); assertEquals("ISO-8859-1", dataSource.getCharset().name()); assertEquals(-1, dataSource.getLength());
