1 package fr.ifremer.quadrige3.core.service.http;
2
3 /*-
4 * #%L
5 * Quadrige3 Core :: Client API
6 * %%
7 * Copyright (C) 2017 - 2019 Ifremer
8 * %%
9 * This program is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU Affero General Public License as published by
11 * the Free Software Foundation, either version 3 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU Affero General Public License
20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 * #L%
22 */
23
24 import fr.ifremer.quadrige3.core.ProgressionCoreModel;
25 import fr.ifremer.quadrige3.core.dao.technical.Files;
26 import org.apache.http.entity.mime.content.FileBody;
27 import org.apache.http.util.Args;
28
29 import java.io.*;
30
31 /**
32 * @author peck7 on 03/04/2019.
33 */
34 public class ProgressFileBody extends FileBody {
35
36 private final ProgressionCoreModel progressionModel;
37
38 public ProgressFileBody(File file, ProgressionCoreModel progressionModel) {
39 super(file);
40 this.progressionModel = progressionModel;
41 }
42
43 @Override
44 public long getContentLength() {
45 long size = super.getContentLength();
46 progressionModel.setTotal(size);
47 return size;
48 }
49
50 @Override
51 public void writeTo(OutputStream out) throws IOException {
52 Args.notNull(out, "Output stream");
53 try (InputStream in = new BufferedInputStream(new FileInputStream(getFile()))) {
54 Files.copyStream(in, out, progressionModel);
55 out.flush();
56 }
57 }
58 }