source: 3thparty/jupload/src/main/java/wjhk/jupload2/upload/UploadFilePacket.java @ 3951

Revision 3951, 5.7 KB checked in by alexandrecorreia, 13 years ago (diff)

Ticket #1709 - Adicao de codigo fonte java do componente jupload

Line 
1//
2// $Id$
3//
4// jupload - A file upload applet.
5//
6// Copyright 2010 The JUpload Team
7//
8// Created: 27 janv. 2010
9// Creator: etienne_sf
10// Last modified: $Date$
11//
12// This program is free software; you can redistribute it and/or modify
13// it under the terms of the GNU General Public License as published by
14// the Free Software Foundation; either version 2 of the License, or
15// (at your option) any later version.
16//
17// This program is distributed in the hope that it will be useful,
18// but WITHOUT ANY WARRANTY; without even the implied warranty of
19// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20// GNU General Public License for more details.
21//
22// You should have received a copy of the GNU General Public License
23// along with this program; if not, write to the Free Software
24// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25
26package wjhk.jupload2.upload;
27
28import java.util.ArrayList;
29
30import wjhk.jupload2.policies.UploadPolicy;
31
32/**
33 * This file contains a packet of files, which will be sent in one request to
34 * the server.
35 *
36 * @author etienne_sf
37 */
38@SuppressWarnings("serial")
39public class UploadFilePacket extends ArrayList<UploadFileData> {
40
41    /**
42     * The uploadPolicy, useful to get the max number of files and max packet
43     * size ... and perhaps other parameters in the future.
44     */
45    UploadPolicy uploadPolicy = null;
46
47    /**
48     * The sum of the size of all files in the packet.
49     */
50    long nbBytes = 0;
51
52    /** The maximum number of bytes in one packet to the server */
53    long maxNbBytes = -1;
54
55    /** The maximum number of files in one packet to the server */
56    long maxNbFiles = -1;
57
58    /**
59     * The standard constructor.
60     *
61     * @param uploadPolicy
62     */
63    UploadFilePacket(UploadPolicy uploadPolicy) {
64        // nbFilesPerRequest may be very very big. Let's have a more realistic
65        // value, in this case (to avoid outOfMemoryError)
66        super(Math.min(uploadPolicy.getNbFilesPerRequest(), uploadPolicy
67                .getContext().getUploadPanel().getFilePanel().getFilesLength()));
68        this.uploadPolicy = uploadPolicy;
69        this.maxNbBytes = this.uploadPolicy.getMaxChunkSize();
70        this.maxNbFiles = Math.min(uploadPolicy.getNbFilesPerRequest(),
71                uploadPolicy.getContext().getUploadPanel().getFilePanel()
72                        .getFilesLength());
73    }
74
75    /**
76     * Checks if this packet can accept this file, according to the current
77     * {@link UploadPolicy}.
78     *
79     * @param uploadFileData
80     * @return True if the file can be added, false otherwise.
81     */
82    public synchronized boolean canAdd(UploadFileData uploadFileData) {
83        // Here is the list of conditions. This code could be smalled. But I
84        // want it to be clear.
85        if (size() == 0) {
86            return true;
87        } else if (size() == this.maxNbFiles) {
88            // The packet is already full of files
89            return false;
90        } else if (this.nbBytes + uploadFileData.getUploadLength() > maxNbBytes) {
91            // The packet would be too big
92            return false;
93        } else {
94            // No reason to refuse this packet ...
95            return true;
96        }
97    }
98
99    /**
100     * Indicates whether it is possible to add a file or not, to this packet,
101     * according to the current upload policy.
102     *
103     * @return true if the packet is full, that is: no file can be added to this
104     *         packet.
105     */
106    public synchronized boolean isFull() {
107        return (size() == this.maxNbFiles) || (this.nbBytes >= maxNbBytes);
108    }
109
110    /**
111     * @param uploadFileData The file to add to the packet
112     * @return true if the collection changed, that is: if the file was actually
113     *         added. false if the Collection didn't change, that is: the packet
114     *         is full, or th file is already there.
115     */
116    public synchronized boolean add(UploadFileData uploadFileData) {
117        if (!canAdd(uploadFileData)) {
118            return false;
119        } else if (!super.add(uploadFileData)) {
120            return false;
121        } else {
122            // The file was correctly added.
123            nbBytes += uploadFileData.getUploadLength();
124            ;
125            return true;
126        }
127    }
128
129    /**
130     * @return the poisonned status. Returns always false, as this instance is a
131     *         true one. false indicates the 'End Of Queue' marker in the
132     *         preparedFileQueue, which is not the case here
133     * @see UploadFileDataPoisonned
134     */
135    public boolean isPoisonned() {
136        return false;
137    }
138
139    // ////////////////////////////////////////////////////////////////////////////
140    // Some ArrayList methods are prohibited here
141    // ////////////////////////////////////////////////////////////////////////////
142    /**
143     * Prohibited !
144     *
145     * @see ArrayList#remove(int)
146     */
147    public UploadFileData remove(int index) {
148        throw new java.lang.UnsupportedOperationException(
149                "Removing a file from an UploadFilePacket is prohibited");
150    }
151
152    /**
153     * Prohibited !
154     *
155     * @see ArrayList#remove(Object)
156     */
157    public boolean remove(Object o) {
158        throw new java.lang.UnsupportedOperationException(
159                "Removing a file from an UploadFilePacket is prohibited");
160    }
161
162    /**
163     * Prohibited !
164     *
165     * @see ArrayList#removeRange(int, int)
166     */
167    protected void removeRange(int fromIndex, int toIndex) {
168        throw new java.lang.UnsupportedOperationException(
169                "Removing a file from an UploadFilePacket is prohibited");
170    }
171}
Note: See TracBrowser for help on using the repository browser.