001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 * 017 */ 018package org.apache.commons.compress.archivers.zip; 019 020import org.apache.commons.compress.parallel.InputStreamSupplier; 021 022import java.io.InputStream; 023 024/** 025 * A Thread-safe representation of a ZipArchiveEntry that is used to add entries to parallel archives. 026 * 027 * @since 1.10 028 */ 029public class ZipArchiveEntryRequest { 030 /* 031 The zipArchiveEntry is not thread safe, and cannot be safely accessed by the getters of this class. 032 It is safely accessible during the construction part of this class and also after the 033 thread pools have been shut down. 034 */ 035 private final ZipArchiveEntry zipArchiveEntry; 036 private final InputStreamSupplier payloadSupplier; 037 private final int method; 038 039 040 private ZipArchiveEntryRequest(final ZipArchiveEntry zipArchiveEntry, final InputStreamSupplier payloadSupplier) { 041 // this constructor has "safe" access to all member variables on zipArchiveEntry 042 this.zipArchiveEntry = zipArchiveEntry; 043 this.payloadSupplier = payloadSupplier; 044 this.method = zipArchiveEntry.getMethod(); 045 } 046 047 /** 048 * Create a ZipArchiveEntryRequest 049 * @param zipArchiveEntry The entry to use 050 * @param payloadSupplier The payload that will be added to the zip entry. 051 * @return The newly created request 052 */ 053 public static ZipArchiveEntryRequest createZipArchiveEntryRequest(final ZipArchiveEntry zipArchiveEntry, final InputStreamSupplier payloadSupplier) { 054 return new ZipArchiveEntryRequest(zipArchiveEntry, payloadSupplier); 055 } 056 057 /** 058 * The paylaod that will be added to this zip entry 059 * @return The input stream. 060 */ 061 public InputStream getPayloadStream() { 062 return payloadSupplier.get(); 063 } 064 065 /** 066 * The compression method to use 067 * @return The compression method to use 068 */ 069 public int getMethod(){ 070 return method; 071 } 072 073 074 /** 075 * Gets the underlying entry. Do not use this methods from threads that did not create the instance itself ! 076 * @return the zipeArchiveEntry that is basis for this request 077 */ 078 ZipArchiveEntry getZipArchiveEntry() { 079 return zipArchiveEntry; 080 } 081}