1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.openr66.context.task;
21
22 import org.waarp.common.command.exception.CommandAbstractException;
23 import org.waarp.common.logging.WaarpLogger;
24 import org.waarp.common.logging.WaarpLoggerFactory;
25 import org.waarp.common.utility.ParametersChecker;
26 import org.waarp.compress.MalformedInputException;
27 import org.waarp.compress.WaarpZstdCodec;
28 import org.waarp.openr66.context.R66Session;
29 import org.waarp.openr66.protocol.exception.OpenR66ProtocolSystemException;
30
31 import java.io.File;
32
33
34
35
36 public class CompressTask extends AbstractTask {
37
38
39
40 private static final WaarpLogger logger =
41 WaarpLoggerFactory.getLogger(CompressTask.class);
42
43
44
45
46
47
48
49 public CompressTask(final String argRule, final int delay,
50 final String argTransfer, final R66Session session) {
51 super(TaskType.COMPRESS, delay, argRule, argTransfer, session);
52 }
53
54 @Override
55 public void run() {
56 String finalname = argRule;
57 finalname = getReplacedValue(finalname, BLANK.split(argTransfer)).trim()
58 .replace(
59 '\\',
60 '/');
61 final File from = session.getFile().getTrueFile();
62 if (ParametersChecker.isEmpty(finalname)) {
63 finalname = from.getParent() + "/" + session.getFile().getBasename();
64 if (delay == 0) {
65 finalname += ".zstd";
66 } else {
67 finalname += ".unzstd";
68 }
69 }
70 logger.debug("{} and " + "Rename to {} with {}:{} and {}",
71 (delay == 1? "Decompress" : "Compress"), finalname, argRule,
72 argTransfer, session);
73 final File to = new File(finalname);
74 logger.debug("From {} {} to {} {} using {}", from, from.canRead(), to,
75 to.canRead(), (delay == 1? "Decompress" : "Compress"));
76 try {
77 final WaarpZstdCodec zstdCodec = new WaarpZstdCodec();
78 if (delay == 1) {
79 zstdCodec.decompress(from, to);
80 } else {
81 zstdCodec.compress(from, to);
82 }
83 if (!from.delete()) {
84 logger.warn("File {} not correctly deleted", from);
85 }
86 } catch (final MalformedInputException e) {
87 logger.error((delay == 1? "Decompress" : "Compress") + " and Rename to " +
88 finalname + " with " + argRule + ':' + argTransfer +
89 " and " + session + ": {}", e.getMessage());
90 futureCompletion.setFailure(e);
91 return;
92 }
93 try {
94 session.getFile().replaceFilename(finalname, true);
95 } catch (final CommandAbstractException e) {
96 logger.error(
97 "Replace with Compressed file as " + finalname + " with " + argRule +
98 ':' + argTransfer + " and " + session + ": {}", e.getMessage());
99 futureCompletion.setFailure(new OpenR66ProtocolSystemException(e));
100 return;
101 }
102 session.getRunner().setFileMoved(finalname, true);
103 logger.debug("From {} {} to {} {} using {}", from, from.canRead(), to,
104 to.canRead(), (delay == 1? "Decompress" : "Compress"));
105 futureCompletion.setSuccess();
106 }
107
108 }