This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-fileupload.git
commit a7005892f2a7b58940ce3829a9aaf3f0a841f9ec Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Wed Jun 14 17:11:18 2023 -0400 Pull up method to interface and initialze file item headers for propagation --- .../commons/fileupload2/AbstractFileUpload.java | 6 +-- .../commons/fileupload2/FileItemFactory.java | 2 +- .../commons/fileupload2/FileItemHeaders.java | 8 ++++ .../fileupload2/FileItemHeadersProvider.java | 4 +- .../fileupload2/disk/DiskFileItemFactoryTest.java | 47 ++++++++++++++++++++++ .../commons/fileupload2/disk/DiskFileItemTest.java | 47 ++++++++++++++++++++++ 6 files changed, 108 insertions(+), 6 deletions(-) diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/AbstractFileUpload.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/AbstractFileUpload.java index b3ece68..d6a2955 100644 --- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/AbstractFileUpload.java +++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/AbstractFileUpload.java @@ -309,7 +309,7 @@ public abstract class AbstractFileUpload<T> { */ public FileItemHeaders getParsedHeaders(final String headerPart) { final int len = headerPart.length(); - final FileItemHeadersImpl headers = newFileItemHeaders(); + final FileItemHeaders headers = newFileItemHeaders(); int start = 0; for (;;) { int end = parseEndOfLine(headerPart, start); @@ -365,7 +365,7 @@ public abstract class AbstractFileUpload<T> { * * @return The new instance. */ - protected FileItemHeadersImpl newFileItemHeaders() { + protected FileItemHeaders newFileItemHeaders() { return FileItemBuilder.newFileItemHeaders(); } @@ -396,7 +396,7 @@ public abstract class AbstractFileUpload<T> { * @param headers String with all headers. * @param header Map where to store the current header. */ - private void parseHeaderLine(final FileItemHeadersImpl headers, final String header) { + private void parseHeaderLine(final FileItemHeaders headers, final String header) { final int colonOffset = header.indexOf(':'); if (colonOffset == -1) { // This header line is malformed, skip it. diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemFactory.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemFactory.java index 3732c27..e44bc1c 100644 --- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemFactory.java +++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemFactory.java @@ -37,7 +37,7 @@ public interface FileItemFactory { */ abstract class FileItemBuilder<T extends FileItem, B extends FileItemBuilder<T, B>> extends AbstractStreamBuilder<T, B> { - static FileItemHeadersImpl newFileItemHeaders() { + public static FileItemHeaders newFileItemHeaders() { return new FileItemHeadersImpl(); } diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemHeaders.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemHeaders.java index 06af484..1bbe514 100644 --- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemHeaders.java +++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemHeaders.java @@ -23,6 +23,14 @@ import java.util.Iterator; */ public interface FileItemHeaders { + /** + * Adds a header. + * + * @param name name + * @param value value. + */ + void addHeader(String name, String value); + /** * Gets the value of the specified part header as a {@code String}. * <p> diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemHeadersProvider.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemHeadersProvider.java index 0e8714a..261fb45 100644 --- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemHeadersProvider.java +++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemHeadersProvider.java @@ -32,8 +32,8 @@ public interface FileItemHeadersProvider { FileItemHeaders getHeaders(); /** - * Sets the headers read from within an item. Implementations of {@link FileItem} or {@link FileItemInput} should implement this interface to be able - * to get the raw headers found within the item header block. + * Sets the headers read from within an item. Implementations of {@link FileItem} or {@link FileItemInput} should implement this interface to be able to get + * the raw headers found within the item header block. * * @param headers the instance that holds onto the headers for this instance. */ diff --git a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/disk/DiskFileItemFactoryTest.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/disk/DiskFileItemFactoryTest.java new file mode 100644 index 0000000..230ed7f --- /dev/null +++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/disk/DiskFileItemFactoryTest.java @@ -0,0 +1,47 @@ +/* + * 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. + */ +package org.apache.commons.fileupload2.disk; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertSame; + +import org.apache.commons.fileupload2.FileItemHeaders; +import org.apache.commons.fileupload2.disk.DiskFileItem.Builder; +import org.apache.commons.fileupload2.FileItemFactory.FileItemBuilder; +import org.junit.jupiter.api.Test; + +/** + * Tests for {@link DiskFileItem}. + */ +public class DiskFileItemFactoryTest { + + @Test + void testHeaders() { + final DiskFileItemFactory factory = DiskFileItemFactory.builder().get(); + final Builder fileItemBuilder = factory.fileItemBuilder(); + assertNotNull(fileItemBuilder.getFileItemHeaders()); + final DiskFileItem fileItem = fileItemBuilder.get(); + assertNotNull(fileItem.getHeaders(), "Missing default headers (empty)"); + assertFalse(fileItem.getHeaders().getHeaderNames().hasNext()); + final FileItemHeaders fileItemHeaders = FileItemBuilder.newFileItemHeaders(); + assertNotNull(fileItemHeaders); + fileItem.setHeaders(fileItemHeaders); + assertSame(fileItemHeaders, fileItem.getHeaders()); + } + +} diff --git a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/disk/DiskFileItemTest.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/disk/DiskFileItemTest.java new file mode 100644 index 0000000..a06309b --- /dev/null +++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/disk/DiskFileItemTest.java @@ -0,0 +1,47 @@ +/* + * 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. + */ +package org.apache.commons.fileupload2.disk; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertSame; + +import org.apache.commons.fileupload2.FileItemFactory.FileItemBuilder; +import org.apache.commons.fileupload2.FileItemHeaders; +import org.apache.commons.fileupload2.disk.DiskFileItem.Builder; +import org.junit.jupiter.api.Test; + +/** + * Tests for {@link DiskFileItem}. + */ +public class DiskFileItemTest { + + @Test + void testBuilderHeaders() { + final Builder builder = DiskFileItem.builder(); + assertNotNull(builder.getFileItemHeaders()); + final DiskFileItem fileItem = builder.get(); + assertNotNull(fileItem.getHeaders(), "Missing default headers (empty)"); + assertFalse(fileItem.getHeaders().getHeaderNames().hasNext()); + assertNotNull(fileItem.getHeaders()); + final FileItemHeaders fileItemHeaders = FileItemBuilder.newFileItemHeaders(); + assertNotNull(fileItemHeaders); + fileItem.setHeaders(fileItemHeaders); + assertSame(fileItemHeaders, fileItem.getHeaders()); + } + +}