/** * 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 */ /** * Configuration of a Switch * * @author Robert Michalak */ package org.openhab.binding.ucprelayboard.internal; import org.apache.commons.lang.StringUtils; import org.openhab.core.binding.BindingConfig; import org.openhab.core.library.types.OnOffType; import org.openhab.model.item.binding.BindingConfigParseException; /** * @author Robert Michalak * @since 1.8.0 */ public class UCPRelayConfig implements BindingConfig { private String boardName; private int relayNumber; private boolean inverted = false; public UCPRelayConfig(String boardName, int relayNumber) { this(boardName, relayNumber, false); } public UCPRelayConfig(String boardName, int relayNumber, boolean inverted) { this.boardName = boardName; this.relayNumber = relayNumber; this.inverted = inverted; } public String getBoardName() { return boardName; } public int getRelayNumber() { return relayNumber; } public OnOffType translateCommand(OnOffType command) { if (inverted) { return OnOffType.values()[1 - command.ordinal()]; } else { return command; } } public static UCPRelayConfig fromString(final String config) throws BindingConfigParseException { String boardName = null; int relayNumber = -1; boolean inverted = false; final String[] params = StringUtils.split(config, ";"); for (String param : params) { final String[] nameValue = StringUtils.split(param, "="); if (nameValue.length != 2) { continue; } if ("board".equals(nameValue[0])) { boardName = nameValue[1]; } else if ("relay".equals(nameValue[0])) { try { relayNumber = Integer.parseInt(nameValue[1]); } catch (NumberFormatException e) { throw new BindingConfigParseException("Wrong item configuration. " + e.getMessage()); } } else if ("inverted".equals(nameValue[0])) { inverted = Boolean.valueOf(nameValue[1]); } } if (boardName == null && relayNumber < 0) { throw new BindingConfigParseException("Wrong item configuration. missing 'board' or 'relay' values"); } return new UCPRelayConfig(boardName, relayNumber, inverted); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((boardName == null) ? 0 : boardName.hashCode()); result = prime * result + relayNumber; return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } UCPRelayConfig other = (UCPRelayConfig) obj; if (boardName == null) { if (other.boardName != null) { return false; } } else if (!boardName.equals(other.boardName)) { return false; } if (relayNumber != other.relayNumber) { return false; } return true; } }