001package jmri.jmrit.beantable.routetable; 002 003import java.util.List; 004 005import jmri.InstanceManager; 006 007/** 008 * Table model for selecting Turnouts and Turnout 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 RouteTurnoutModel extends RouteOutputModel { 020 021 private final AbstractRouteAddEditFrame routeAddFrame; 022 023 RouteTurnoutModel(AbstractRouteAddEditFrame routeAddFrame) { 024 this.routeAddFrame = routeAddFrame; 025 InstanceManager.turnoutManagerInstance().addPropertyChangeListener(RouteTurnoutModel.this); 026 } 027 028 @Override 029 public int getRowCount() { 030 if (routeAddFrame.isShowAll()) { 031 return routeAddFrame.get_turnoutList().size(); 032 } else { 033 return routeAddFrame.get_includedTurnoutList().size(); 034 } 035 } 036 037 @Override 038 public Object getValueAt(int r, int c) { 039 List<RouteTurnout> turnoutList; 040 if (routeAddFrame.isShowAll()) { 041 turnoutList = routeAddFrame.get_turnoutList(); 042 } else { 043 turnoutList = routeAddFrame.get_includedTurnoutList(); 044 } 045 // some error checking 046 if (r >= turnoutList.size()) { 047 log.debug("row is greater than turnout list size"); 048 return null; 049 } 050 switch (c) { 051 case INCLUDE_COLUMN: 052 return turnoutList.get(r).isIncluded(); 053 case SNAME_COLUMN: // slot number 054 return turnoutList.get(r).getSysName(); 055 case UNAME_COLUMN: // 056 return turnoutList.get(r).getUserName(); 057 case STATE_COLUMN: // 058 return turnoutList.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<RouteTurnout> turnoutList; 067 if (routeAddFrame.isShowAll()) { 068 turnoutList = routeAddFrame.get_turnoutList(); 069 } else { 070 turnoutList = routeAddFrame.get_includedTurnoutList(); 071 } 072 switch (c) { 073 case INCLUDE_COLUMN: 074 turnoutList.get(r).setIncluded(((Boolean) type)); 075 break; 076 case STATE_COLUMN: 077 turnoutList.get(r).setSetToState((String) type); 078 break; 079 default: 080 log.error("RouteTurnoutModel.setValueAt should not be called on column {}", c); 081 } 082 } 083 084 @Override 085 protected void dispose() { 086 InstanceManager.turnoutManagerInstance().removePropertyChangeListener(this); 087 } 088 089 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(RouteTurnoutModel.class); 090 091}