/** * Copyright (c) 2010-2016 by the respective copyright holders. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.openhab.binding.systeminfo.internal; import java.io.InvalidClassException; import org.openhab.core.items.Item; import org.openhab.core.library.items.NumberItem; import org.openhab.core.library.items.StringItem; /** * Represents all valid command types which could be processed by this binding. * * @author Pauli Anttila * @since 1.3.0 */ public enum SysteminfoCommandType { LOAD_AVERAGE_1MIN("LoadAverage1Min", NumberItem.class), LOAD_AVERAGE_5MIN("LoadAverage5Min", NumberItem.class), LOAD_AVERAGE_15MIN("LoadAverage15Min", NumberItem.class), CPU_COMBINED("CpuCombined", NumberItem.class), CPU_USER("CpuUser", NumberItem.class), CPU_SYSTEM("CpuSystem", NumberItem.class), CPU_NICE("CpuNice", NumberItem.class), CPU_WAIT("CpuWait", NumberItem.class), UPTIME("Uptime", NumberItem.class), UPTIME_FORMATTED("UptimeFormatted", StringItem.class), MEM_FREE_PERCENT("MemFreePercent", NumberItem.class), MEM_USED_PERCENT("MemUsedPercent", NumberItem.class), MEM_FREE("MemFree", NumberItem.class), MEM_USED("MemUsed", NumberItem.class), MEM_ACTUAL_FREE("MemActualFree", NumberItem.class), MEM_ACTUAL_USED("MemActualUsed", NumberItem.class), MEM_TOTAL("MemTotal", NumberItem.class), SWAP_FREE("SwapFree", NumberItem.class), SWAP_TOTAL("SwapTotal", NumberItem.class), SWAP_USED("SwapUsed", NumberItem.class), SWAP_PAGE_IN("SwapPageIn", NumberItem.class), SWAP_PAGE_OUT("SwapPageOut", NumberItem.class), NET_TX_BYTES("NetTxBytes", NumberItem.class), NET_RX_BYTES("NetRxBytes", NumberItem.class), DISK_READS("DiskReads", NumberItem.class), DISK_WRITES("DiskWrites", NumberItem.class), DISK_READ_BYTES("DiskReadBytes", NumberItem.class), DISK_WRITE_BYTES("DiskWriteBytes", NumberItem.class), FS_USED("FileSystemUsed", NumberItem.class), FS_FREE("FileSystemFree", NumberItem.class), FS_TOTAL("FileSystemTotal", NumberItem.class), FS_USE_PERCENT("FileSystemUsagePercent", NumberItem.class), FS_FILES("FileSystemFiles", NumberItem.class), FS_FREE_FILES("FileSystemFreeFiles", NumberItem.class), DIR_USAGE("DirUsage", NumberItem.class), DIR_FILES("DirFiles", NumberItem.class), PROCESS_REAL_MEM("ProcessRealMem", NumberItem.class), PROCESS_VIRTUAL_MEM("ProcessVirtualMem", NumberItem.class), PROCESS_CPU_PERCENT("ProcessCpuPercent", NumberItem.class), PROCESS_CPU_SYSTEM("ProcessCpuSystem", NumberItem.class), PROCESS_CPU_USER("ProcessCpuUser", NumberItem.class), PROCESS_CPU_TOTAL("ProcessCpuTotal", NumberItem.class), PROCESS_UPTIME("ProcessUptime", NumberItem.class), PROCESS_UPTIME_FORMATTED("ProcessUptimeFormatted", StringItem.class),; private final String text; private Class<? extends Item> itemClass; private SysteminfoCommandType(final String text, Class<? extends Item> itemClass) { this.text = text; this.itemClass = itemClass; } @Override public String toString() { return text; } public Class<? extends Item> getItemClass() { return itemClass; } /** * Procedure to validate command type string. * * @param commandTypeText * command string e.g. T1 * @return true if item is valid. * @throws IllegalArgumentException * Not valid command type. * @throws InvalidClassException * Not valid class for command type. */ public static boolean validateBinding(String commandTypeText, Class<? extends Item> itemClass) throws IllegalArgumentException, InvalidClassException { for (SysteminfoCommandType c : SysteminfoCommandType.values()) { if (c.text.equals(commandTypeText)) { if (c.getItemClass().equals(itemClass)) { return true; } else { throw new InvalidClassException("Not valid class for command type"); } } } throw new IllegalArgumentException("Not valid command type"); } /** * Procedure to convert command type string to command type class. * * @param commandTypeText * command string e.g. LoadAverage1Min * @return corresponding command type. * @throws InvalidClassException * Not valid class for command type. */ public static SysteminfoCommandType getCommandType(String commandTypeText) throws IllegalArgumentException { for (SysteminfoCommandType c : SysteminfoCommandType.values()) { if (c.text.equals(commandTypeText)) { return c; } } throw new IllegalArgumentException("Not valid command type"); } }