001package jmri.jmrit.beantable.routetable; 002 003import java.util.List; 004 005import jmri.InstanceManager; 006 007/** 008 * Set up table for selecting Sensors and Sensor State. 009 * 010 * Split from {@link jmri.jmrit.beantable.RouteTableAction} 011 * 012 * @author Dave Duchamp Copyright (C) 2004 013 * @author Bob Jacobsen Copyright (C) 2007 014 * @author Simon Reader Copyright (C) 2008 015 * @author Pete Cressman Copyright (C) 2009 016 * @author Egbert Broerse Copyright (C) 2016 017 * @author Paul Bender Copyright (C) 2020 018 */ 019class RouteSensorModel extends RouteOutputModel { 020 021 private final AbstractRouteAddEditFrame routeAddFrame; 022 023 RouteSensorModel(AbstractRouteAddEditFrame routeAddFrame) { 024 this.routeAddFrame = routeAddFrame; 025 InstanceManager.sensorManagerInstance().addPropertyChangeListener(RouteSensorModel.this); 026 } 027 028 @Override 029 public int getRowCount() { 030 if (routeAddFrame.isShowAll()) { 031 return routeAddFrame.get_sensorList().size(); 032 } else { 033 return routeAddFrame.get_includedSensorList().size(); 034 } 035 } 036 037 @Override 038 public Object getValueAt(int r, int c) { 039 List<RouteSensor> sensorList; 040 if (routeAddFrame.isShowAll()) { 041 sensorList = routeAddFrame.get_sensorList(); 042 } else { 043 sensorList = routeAddFrame.get_includedSensorList(); 044 } 045 // some error checking 046 if (r >= sensorList.size()) { 047 log.debug("row is greater than turnout list size"); 048 return null; 049 } 050 switch (c) { 051 case INCLUDE_COLUMN: 052 return sensorList.get(r).isIncluded(); 053 case SNAME_COLUMN: // slot number 054 return sensorList.get(r).getSysName(); 055 case UNAME_COLUMN: // 056 return sensorList.get(r).getUserName(); 057 case STATE_COLUMN: // 058 return sensorList.get(r).getSetToState(); 059 default: 060 return null; 061 } 062 } 063 064 @Override 065 public void setValueAt(Object type, int r, int c) { 066 List<RouteSensor> sensorList; 067 if (routeAddFrame.isShowAll()) { 068 sensorList = routeAddFrame.get_sensorList(); 069 } else { 070 sensorList = routeAddFrame.get_includedSensorList(); 071 } 072 switch (c) { 073 case INCLUDE_COLUMN: 074 sensorList.get(r).setIncluded(((Boolean) type)); 075 break; 076 case STATE_COLUMN: 077 sensorList.get(r).setSetToState((String) type); 078 break; 079 default: 080 log.error("RouteSensorModel.setValueAt should not be called on column {}", c); 081 } 082 } 083 084 @Override 085 protected void dispose() { 086 InstanceManager.sensorManagerInstance().removePropertyChangeListener(this); 087 } 088 089 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(RouteSensorModel.class); 090 091}