/*
* Copyright 2012 b1.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.b1.pack.standard.volume;
import org.b1.pack.api.volume.VolumeFinder;
import org.b1.pack.api.volume.VolumeFinderProvider;
import java.util.LinkedList;
class StandardMultipartVolumeFinder extends VolumeFinder {
private final VolumeFinderProvider provider;
private final String prefix;
private final String suffix;
private final int digitCount;
private final int minVolumeCount;
public StandardMultipartVolumeFinder(VolumeFinderProvider provider, String prefix, String suffix, int digitCount, int minVolumeCount) {
this.provider = provider;
this.prefix = prefix;
this.suffix = suffix;
this.digitCount = digitCount;
this.minVolumeCount = minVolumeCount;
}
@Override
public String getVolumeName(long volumeNumber) {
String n = Long.toString(volumeNumber);
LinkedList<String> list = new LinkedList<String>();
list.add(n);
while (n.length() < digitCount) {
list.add(n = '0' + n);
}
while (!list.isEmpty()) {
String volumeName = prefix + list.removeLast() + suffix;
if (provider.isVolumePresent(volumeName)) {
return volumeName;
}
}
return null;
}
@Override
public int getVolumeCount() {
int count = minVolumeCount;
while (getVolumeName(count + 1) != null) {
count++;
}
return count;
}
}