View Javadoc
1   /*
2    * This file is part of Waarp Project (named also Waarp or GG).
3    *
4    *  Copyright (c) 2019, Waarp SAS, and individual contributors by the @author
5    *  tags. See the COPYRIGHT.txt in the distribution for a full listing of
6    * individual contributors.
7    *
8    *  All Waarp Project is free software: you can redistribute it and/or
9    * modify it under the terms of the GNU General Public License as published by
10   * the Free Software Foundation, either version 3 of the License, or (at your
11   * option) any later version.
12   *
13   * Waarp is distributed in the hope that it will be useful, but WITHOUT ANY
14   * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15   * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16   *
17   *  You should have received a copy of the GNU General Public License along with
18   * Waarp . If not, see <http://www.gnu.org/licenses/>.
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.openr66.context.R66Session;
26  import org.waarp.openr66.protocol.exception.OpenR66ProtocolSystemException;
27  
28  /**
29   * Rename the current file (no move, move or creation should be done elsewhere)
30   */
31  public class RenameTask extends AbstractTask {
32    /**
33     * Internal Logger
34     */
35    private static final WaarpLogger logger =
36        WaarpLoggerFactory.getLogger(RenameTask.class);
37  
38    /**
39     * @param argRule
40     * @param delay
41     * @param argTransfer
42     * @param session
43     */
44    public RenameTask(final String argRule, final int delay,
45                      final String argTransfer, final R66Session session) {
46      super(TaskType.RENAME, delay, argRule, argTransfer, session);
47    }
48  
49    @Override
50    public final void run() {
51      final boolean success;
52      String finalname = argRule;
53      finalname = getReplacedValue(finalname, BLANK.split(argTransfer)).trim()
54                                                                       .replace(
55                                                                           '\\',
56                                                                           '/');
57      logger.debug("Rename to {} with {}:{} and {}", finalname, argRule,
58                   argTransfer, session);
59      try {
60        session.getFile().replaceFilename(finalname, true);
61        success = true;
62      } catch (final CommandAbstractException e) {
63        logger.error(
64            "Rename to " + finalname + " with " + argRule + ':' + argTransfer +
65            " and " + session + ": {}", e.getMessage());
66        futureCompletion.setFailure(new OpenR66ProtocolSystemException(e));
67        return;
68      }
69      if (success) {
70        session.getRunner().setFileMoved(finalname, success);
71        futureCompletion.setSuccess();
72      } else {
73        logger.error(
74            "Cannot Move and Rename to " + finalname + " with " + argRule + ':' +
75            argTransfer + " and " + session);
76        futureCompletion.setFailure(
77            new OpenR66ProtocolSystemException("Cannot move file"));
78      }
79    }
80  
81  }