package org.ovirt.engine.core.common.businessentities; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * C - HardDisk, D - CDROM, N - Network first 3 numbers for backward compatibility */ public enum BootSequence { C(0), D(10), N(2), DC(1, D, C), CDN(3, C, D, N), CND(4, C, N, D), DCN(5, D, C, N), DNC(6, D, N, C), NCD(7, N, C, D), NDC(8, N, D, C), CD(9, C, D), CN(11, C, N), DN(12, D, N), NC(13, N, C), ND(14, N, D); private int intValue; private static Map<Integer, BootSequence> mappings; private final List<BootSequence> components; static { mappings = new HashMap<>(); for (BootSequence error : values()) { mappings.put(error.getValue(), error); } } private BootSequence(int value, BootSequence... composedOf) { intValue = value; if (composedOf == null || composedOf.length == 0) { // leaf contains itself this.components = Arrays.asList(this); } else { this.components = Arrays.asList(composedOf); } } public int getValue() { return intValue; } public static BootSequence forValue(int value) { return mappings.get(value); } /** * Returns true if and only if all the components of the subsequence are in this sequence (ignoring order) * <p> * For example, D is a subsequence of D, DN, CD..., DN is a subsequence of DNC etc * <p> */ public boolean containsSubsequence(BootSequence subsequence) { if (subsequence == null) { return false; } return components.containsAll(subsequence.components); } }