/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.iwave.ext.linux.command.fdisk;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.google.common.collect.Sets;
import com.iwave.ext.linux.command.CommandConstants;
import com.iwave.ext.linux.command.LinuxResultsCommand;
/**
* Lists disk devices using fdisk. Can optionally include or not include mapper
* devices or non-mapper devices (ones in /dev/mapper/).
*
* @author Chris Dail
*/
public class FdiskListCommand extends LinuxResultsCommand<Set<String>> {
private static final Pattern diskPattern = Pattern.compile("Disk\\s(/dev.+)\\:");
private static final String MAPPER_PREFIX = "/dev/mapper/";
private boolean includeMapper = true;
private boolean includeRegular = true;
public FdiskListCommand() {
setCommand(CommandConstants.FDISK);
addArguments("-l");
setRunAsRoot(true);
}
public void setIncludeMapper(boolean includeMapper) {
this.includeMapper = includeMapper;
}
public void setIncludeRegular(boolean includeRegular) {
this.includeRegular = includeRegular;
}
@Override
public void parseOutput() {
results = Sets.newLinkedHashSet();
Matcher matcher = diskPattern.matcher(getOutput().getStdout());
while (matcher.find()) {
String device = matcher.group(1);
if (includeMapper && includeRegular) {
results.add(device);
}
else if (includeMapper && device.startsWith(MAPPER_PREFIX)) {
results.add(device);
}
else if (includeRegular && !device.startsWith(MAPPER_PREFIX)) {
results.add(device);
}
}
}
}