/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.iwave.ext.windows.parser;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import com.google.common.collect.Lists;
import com.iwave.ext.text.TextParser;
import com.iwave.ext.windows.model.Disk;
public class DiskParser extends TextParser {
private static final Pattern DISK_PATTERN = Pattern.compile("Disk (\\d+) is now the selected disk");
private static final String DISK_ID = "Disk ID";
private static final String TYPE = "Type";
private static final String STATUS = "Status";
private static final String PATH = "Path";
private static final String TARGET = "Target";
private static final String LUN_ID = "LUN ID";
private static final String LOCATION_PATH = "Location Path";
private static final String CURRENT_READ_ONLY_STATE = "Current Read-only State";
private static final String READ_ONLY = "Read-only";
private static final String BOOT_DISK = "Boot Disk";
private static final String PAGE_FILE_DISK = "Pagefile Disk";
private static final String HIBERNATION_FILE_DISK = "Hibernation File Disk";
private static final String CRASHDUMP_DISK = "Crashdump Disk";
private static final String CLUSTERED_DISK = "Clustered Disk";
public DiskParser() {
setRepeatPattern(DISK_PATTERN);
}
public List<Disk> parseDisks(String text) {
List<Disk> disks = Lists.newArrayList();
List<String> textBlocks = parseTextBlocks(text);
for (String textBlock : textBlocks) {
Disk disk = parseDisk(textBlock);
if (disk != null) {
disks.add(disk);
}
}
return disks;
}
protected Disk parseDisk(String text) {
int number = getInt(findMatch(DISK_PATTERN, text));
if (number < 0) {
return null;
}
Disk disk = new Disk();
disk.setNumber(number);
Map<String, String> properties = parseProperties(text, ':');
disk.setDiskId(properties.get(DISK_ID));
disk.setType(properties.get(TYPE));
disk.setStatus(properties.get(STATUS));
disk.setPath(getInt(properties.get(PATH)));
disk.setTarget(getInt(properties.get(TARGET)));
disk.setLunId(getInt(properties.get(LUN_ID)));
disk.setLocationPath(properties.get(LOCATION_PATH));
disk.setCurrentReadOnlyState(getYesNo(properties.get(CURRENT_READ_ONLY_STATE)));
disk.setReadOnly(getYesNo(properties.get(READ_ONLY)));
disk.setBootDisk(getYesNo(properties.get(BOOT_DISK)));
disk.setPageFileDisk(getYesNo(properties.get(PAGE_FILE_DISK)));
disk.setHibernationFileDisk(getYesNo(properties.get(HIBERNATION_FILE_DISK)));
disk.setCrashdumpDisk(getYesNo(properties.get(CRASHDUMP_DISK)));
disk.setClusteredDisk(getYesNo(properties.get(CLUSTERED_DISK)));
disk.setVolumes(new VolumeParser().parseVolumes(text));
return disk;
}
protected int getInt(String value) {
Integer integer = getInteger(value);
return (integer != null) ? integer : -1;
}
}