package org.rhq.cassandra.schema;
import static java.util.Arrays.asList;
import java.util.Iterator;
import java.util.List;
/**
* Provides support for removing update files from a requested update folder. See
* {@link #removeFiles(String...) removeFiles()} for details.
*
* @author John Sanda
*/
public class TestUpdateFolderFactory extends UpdateFolderFactory {
private String folder;
private List<String> removedFiles;
public TestUpdateFolderFactory(String folder) {
this.folder = folder;
}
/**
* Specifies update files to be removed from update folders created by this factory.
*
* @param files Update files to be removed. Each string should contain <strong>only</strong> the base name of the
* file excluding the path, e.g., 0003.xml and not schema/update/0003.xml or update/0003.xml
*
* @return This factory
*/
public TestUpdateFolderFactory removeFiles(String... files) {
removedFiles = asList(files);
return this;
}
@Override
public UpdateFolder newUpdateFolder(String folder) throws Exception {
UpdateFolder updateFolder = super.newUpdateFolder(folder);
if (this.folder.equals(folder) && !removedFiles.isEmpty()) {
Iterator<UpdateFile> iterator = updateFolder.getUpdateFiles().iterator();
while (iterator.hasNext()) {
UpdateFile updateFile = iterator.next();
if (isRemovedFile(updateFolder, updateFile)) {
iterator.remove();
}
}
}
return updateFolder;
}
private boolean isRemovedFile(UpdateFolder updateFolder, UpdateFile updateFile) {
for (String removedFile : removedFiles) {
if (updateFile.getFile().equals(updateFolder.getFolder() + "/" + removedFile)) {
return true;
}
}
return false;
}
}