001package jmri.jmrit.logixng.actions; 002 003import java.util.Locale; 004import java.util.Map; 005 006import jmri.*; 007import jmri.jmrit.logixng.*; 008import jmri.jmrit.logixng.util.LogixNG_SelectEnum; 009import jmri.jmrit.logixng.util.parser.ParserException; 010 011/** 012 * This action sets the state of a turnout. 013 * 014 * @author Daniel Bergqvist Copyright 2018 015 */ 016public class ShutdownComputer extends AbstractDigitalAction { 017 018 private final LogixNG_SelectEnum<Operation> _selectEnum = 019 new LogixNG_SelectEnum<>(this, Operation.values(), Operation.ShutdownJMRI); 020 021 022 public ShutdownComputer(String sys, String user) 023 throws BadUserNameException, BadSystemNameException { 024 super(sys, user); 025 } 026 027 @Override 028 public Base getDeepCopy(Map<String, String> systemNames, Map<String, String> userNames) throws ParserException { 029 DigitalActionManager manager = InstanceManager.getDefault(DigitalActionManager.class); 030 String sysName = systemNames.get(getSystemName()); 031 String userName = userNames.get(getSystemName()); 032 if (sysName == null) sysName = manager.getAutoSystemName(); 033 ShutdownComputer copy = new ShutdownComputer(sysName, userName); 034 copy.setComment(getComment()); 035 _selectEnum.copy(copy._selectEnum); 036 return manager.registerAction(copy); 037 } 038 039 public LogixNG_SelectEnum<Operation> getSelectEnum() { 040 return _selectEnum; 041 } 042 043 /** {@inheritDoc} */ 044 @Override 045 public LogixNG_Category getCategory() { 046 return LogixNG_Category.OTHER; 047 } 048 049 /** {@inheritDoc} */ 050 @Override 051 public void execute() throws JmriException { 052 Operation operation = _selectEnum.evaluateEnum(getConditionalNG()); 053 054 jmri.util.ThreadingUtil.runOnGUI(() -> { 055 switch (operation) { 056 case ShutdownComputer: 057 InstanceManager.getDefault(ShutDownManager.class).shutdownOS(); 058 break; 059 060 case RebootComputer: 061 InstanceManager.getDefault(ShutDownManager.class).restartOS(); 062 break; 063 064 case ShutdownJMRI: 065 InstanceManager.getDefault(ShutDownManager.class).shutdown(); 066 break; 067 068 case RebootJMRI: 069 InstanceManager.getDefault(ShutDownManager.class).restart(); 070 break; 071 072 default: 073 throw new RuntimeException("_operation has invalid value: " + operation.name()); 074 } 075 }); 076 } 077 078 @Override 079 public FemaleSocket getChild(int index) throws IllegalArgumentException, UnsupportedOperationException { 080 throw new UnsupportedOperationException("Not supported."); 081 } 082 083 @Override 084 public int getChildCount() { 085 return 0; 086 } 087 088 @Override 089 public String getShortDescription(Locale locale) { 090 return Bundle.getMessage(locale, "ShutdownComputer_Short"); 091 } 092 093 @Override 094 public String getLongDescription(Locale locale) { 095 return Bundle.getMessage(locale, "ShutdownComputer_Long", _selectEnum.getDescription(locale)); 096 } 097 098 /** {@inheritDoc} */ 099 @Override 100 public void setup() { 101 // Do nothing 102 } 103 104 /** {@inheritDoc} */ 105 @Override 106 public void disposeMe() { 107 } 108 109 110 111 public enum Operation { 112 ShutdownComputer(Bundle.getMessage("ShutdownComputer_ShutdownComputer")), 113 RebootComputer(Bundle.getMessage("ShutdownComputer_RebootComputer")), 114 ShutdownJMRI(Bundle.getMessage("ShutdownComputer_ShutdownJMRI")), 115 RebootJMRI(Bundle.getMessage("ShutdownComputer_RebootJMRI")); 116 117 private final String _text; 118 119 private Operation(String text) { 120 this._text = text; 121 } 122 123 @Override 124 public String toString() { 125 return _text; 126 } 127 128 } 129 130// private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ShutdownComputer.class); 131}