package org.ovirt.engine.ui.uicommonweb.models; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel; import org.ovirt.engine.ui.uicommonweb.models.vms.RdpConsoleModel; import org.ovirt.engine.ui.uicommonweb.models.vms.SpiceConsoleModel; import org.ovirt.engine.ui.uicommonweb.models.vms.VncConsoleModel; /** * Enum representing console protocol. * Console protocol is determined by it's backing class and priority (if a VM supports more than one protocol at the * same time, priority determines precedence of protocols). * Protocols with higher number have higher priority. */ public enum ConsoleProtocol { SPICE(SpiceConsoleModel.class, 3), VNC(VncConsoleModel.class, 2), RDP(RdpConsoleModel.class, 1); private final Class<? extends ConsoleModel> model; private final int priority; private ConsoleProtocol(Class<? extends ConsoleModel> model, int priority) { this.model = model; this.priority = priority; } public boolean isBackedBy(Class<? extends ConsoleModel> model) { return this.model.equals(model); } public static ConsoleProtocol getProtocolByModel(Class<? extends ConsoleModel> model) { for (ConsoleProtocol value : values()) { if (value.isBackedBy(model)) { return value; } } return null; } static class PriorityComparator implements Comparator<ConsoleProtocol>, Serializable { private static final long serialVersionUID = -4511422219352593185L; @Override public int compare(ConsoleProtocol fst, ConsoleProtocol snd) { if (fst == null && snd == null) { return 0; } if (fst == null) { return -1; } if (snd == null) { return 1; } return fst.priority - snd.priority; } } public static List<ConsoleProtocol> getProtocolsByPriority() { List<ConsoleProtocol> consoleProtocols = new ArrayList(Arrays.asList(ConsoleProtocol.values())); Collections.sort(consoleProtocols, new PriorityComparator()); return consoleProtocols; } public Class getBackingClass() { return model; } }