package org.ovirt.engine.ui.uicommonweb.models.hosts.network; import org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.HostSetupNetworksModel; /** * Base class for Network Item Models * * @param <T> * The Item status enum type */ public abstract class NetworkItemModel<T extends Enum<T>> extends ListModel<LogicalNetworkModel> implements Comparable<NetworkItemModel<T>> { private final HostSetupNetworksModel setupModel; private String error = null; /** * Create a Network item for the specified Setup Model */ public NetworkItemModel(HostSetupNetworksModel setupModel) { this.setupModel = setupModel; } @Override public int compareTo(NetworkItemModel<T> o) { return LexoNumericComparator.comp(getName(), o.getName()); } public String getError() { return error; } public abstract String getName(); /** * Get the Network Setup Model */ public HostSetupNetworksModel getSetupModel() { return setupModel; } public abstract T getStatus(); public boolean hasError() { return error != null && error.length() > 0; } public void setError(String error) { this.error = error; } @Override public String toString() { String name = getClass().getName(); T status = getStatus(); return name.substring(name.lastIndexOf(".") + 1) + " [name=" + getName() + ", status=" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + (status == null ? "?" : status.name()) //$NON-NLS-1$ + ", error=" + hasError() //$NON-NLS-1$ + "]"; //$NON-NLS-1$ } /** * Edit the Network Item */ public void edit() { setupModel.onEdit(this); } public abstract String getType(); /** * Queries whether this item could contain several networks (e.g. interface, label). * * @return true iff it might contain a subcollection of networks. */ public boolean aggregatesNetworks() { return false; } private String culpritNetwork; /** * If this item was the part of a null operation including a batch of networks, the culprit network is one of those * that caused the operation to fail, the first encountered of the following: unmanaged, out of sync, one of several * non-VLAN networks, VM network when VLAN networks exist. * * @return the name of the network at fault, or null if there isn't one. */ public String getCulpritNetwork() { return culpritNetwork; } public void setCulpritNetwork(String culpritNetwork) { this.culpritNetwork = culpritNetwork; } }