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.common.file.filesystembased;
21
22 import org.waarp.common.exception.NoRestartException;
23 import org.waarp.common.file.Restart;
24 import org.waarp.common.file.SessionInterface;
25
26 /**
27 * Restart implementation for Filesystem Based
28 */
29 public abstract class FilesystemBasedRestartImpl extends Restart {
30 /**
31 * Valid Position for the next current file
32 */
33 protected long position = -1;
34 protected int limit = -1;
35
36 /**
37 * @param session
38 */
39 protected FilesystemBasedRestartImpl(final SessionInterface session) {
40 super(session);
41 }
42
43 @Override
44 public final long getPosition() throws NoRestartException {
45 if (isSet()) {
46 setSet(false);
47 return position;
48 }
49 throw new NoRestartException("Restart is not set");
50 }
51
52 @Override
53 public final int getMaxSize(int nextBlock) {
54 if (limit > 0) {
55 if (nextBlock > limit) {
56 nextBlock = limit;
57 }
58 limit -= nextBlock;
59 return nextBlock;
60 } else if (limit == 0) {
61 limit = -1;
62 return 0;
63 }
64 return nextBlock;
65 }
66
67 @Override
68 public final void setSet(final boolean isSet) {
69 super.setSet(isSet);
70 limit = -1;
71 }
72
73 }