/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.iwave.ext.windows.parser;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.google.common.collect.Lists;
import com.iwave.ext.windows.model.DiskSummary;
import com.iwave.ext.text.TextParser;
public class ListDiskParser {
private static Pattern DISK_START_PATTERN =
Pattern.compile("Disk ###\\s+Status\\s+Size\\s+Free\\s+Dyn\\s+Gpt");
private static Pattern DISK_PATTERN =
Pattern.compile("\\s{2}(Disk\\s\\d+)\\s+(\\w*)\\s+(\\w*\\s\\w*)\\s+(\\w*\\s\\w*)\\s{3}([*]|\\s)\\s{4}([*]|\\s)");
private TextParser diskParser = new TextParser();
public ListDiskParser() {
diskParser.setStartPattern(DISK_START_PATTERN);
diskParser.setRepeatPattern(DISK_PATTERN);
}
public List<DiskSummary> parseDevices(String output) {
List<DiskSummary> disks = Lists.newArrayList();
for (String diskInfo : diskParser.parseTextBlocks(output)) {
disks.add(parseDisk(diskInfo));
}
return disks;
}
private DiskSummary parseDisk(String diskInfo) {
Matcher diskMatcher = DISK_PATTERN.matcher(diskInfo);
if (diskMatcher.find()) {
DiskSummary disk = new DiskSummary();
disk.setDiskNumber(diskMatcher.group(1));
disk.setStatus(diskMatcher.group(2));
disk.setSize(diskMatcher.group(3));
disk.setFree(diskMatcher.group(4));
disk.setDyn(diskMatcher.group(5));
disk.setGpt(diskMatcher.group(6));
return disk;
}
return null;
}
}
// Active code page: 437
//
// Microsoft DiskPart version 6.2.9200
//
// Copyright (C) 1999-2012 Microsoft Corporation.
// On computer: LGLW7150
//
// DISKPART>
// Disk ### Status Size Free Dyn Gpt
// -------- ------------- ------- ------- --- ---
// Disk 0 Online 135 GB 0 B
// Disk 3 Offline 2048 MB 2048 MB
// Disk 5 Online 16 GB 0 B *
// Disk 7 Offline 2048 MB 2048 MB
// Disk 9 Offline 3072 MB 3072 MB
// Disk 10 Offline 1024 MB 1024 MB
// Disk 11 Offline 4096 MB 4096 MB
// Disk 12 Offline 2048 MB 2048 MB
// Disk 13 Offline 2048 MB 2048 MB
// Disk 14 Offline 7168 MB 7168 MB
// Disk 15 Offline 5120 MB 5120 MB
// Disk 16 Offline 2048 MB 2048 MB
// Disk 17 Online 20 GB 4097 MB *
// Disk 18 Offline 1024 MB 1024 MB
// Disk 19 Offline 2048 MB 2048 MB
// Disk 20 Offline 240 MB 0 B
// Disk 21 Offline 3072 MB 3072 MB
// Disk 22 Online 2048 MB 0 B
// Disk 23 Online 2048 MB 0 B
// Disk 24 Offline 2048 MB 2048 MB
// Disk 26 Offline 0 B 0 B
// Disk 27 Online 2048 MB 0 B
// Disk 28 Offline 0 B 0 B
// Disk 29 Offline 0 B 0 B
// Disk 30 Offline 0 B 0 B
// Disk 38 Reserved 1024 MB 0 B
// Disk 39 Reserved 4096 MB 0 B
// Disk 40 Reserved 3072 MB 0 B
// Disk 41 Reserved 2048 MB 0 B
// Disk 42 Offline 2048 MB 2048 MB
// Disk 43 Reserved 2048 MB 960 KB
// Disk 44 Offline 2048 MB 2048 MB
// Disk 45 Offline 2048 MB 2048 MB
// Disk 46 Reserved 2048 MB 960 KB
// Disk 47 Reserved 2048 MB 960 KB
// Disk 48 Reserved 3072 MB 960 KB
// Disk 49 Reserved 2048 MB 0 B
// Disk 54 Offline 1024 MB 1024 MB
//
// DISKPART>
// Leaving DiskPart...