001package jmri.jmrix.pi;
002
003/**
004 * Handle configuring a Raspberry Pi layout connection.
005 * <p>
006 * This uses the {@link RaspberryPiAdapter} class to do the actual connection.
007 *
008 * @author Paul Bender Copyright (C) 2015
009 *
010 * @see RaspberryPiAdapter
011 */
012public class RaspberryPiConnectionConfig extends jmri.jmrix.AbstractConnectionConfig {
013
014    private boolean disabled = false;
015    private RaspberryPiAdapter adapter = null;
016
017    /**
018     * Ctor for an object being created during load process; Swing init is
019     * deferred.
020     *
021     * @param p the pre-existing adapter
022     */
023    public RaspberryPiConnectionConfig(RaspberryPiAdapter p) {
024        super();
025        adapter = p;
026    }
027
028    /**
029     * Ctor for a connection configuration with no preexisting adapter.
030     * {@link #setInstance()} will fill the adapter member.
031     */
032    public RaspberryPiConnectionConfig() {
033        super();
034        adapter = new RaspberryPiAdapter();
035    }
036
037    protected boolean init = false;
038
039    /**
040     * {@inheritDoc}
041     */
042    @Override
043    protected void checkInitDone() {
044        log.debug("init called for {}", name());
045        if (init) {
046            return;
047        }
048        addNameEntryCheckers(adapter);
049        init = true;
050    }
051
052    @Override
053    public void updateAdapter() {
054        if (adapter.getSystemConnectionMemo() != null && !adapter.getSystemConnectionMemo().setSystemPrefix(systemPrefixField.getText())) {
055            systemPrefixField.setText(adapter.getSystemConnectionMemo().getSystemPrefix());
056            connectionNameField.setText(adapter.getSystemConnectionMemo().getUserName());
057        }
058    }
059
060    @Override
061    protected void showAdvancedItems() {
062    }
063
064    /**
065     * {@inheritDoc}
066     */
067    @Override
068    public void loadDetails(final javax.swing.JPanel details) {
069        _details = details;
070        setInstance();
071        if (!init) {
072            if (adapter.getSystemConnectionMemo() != null) {
073                systemPrefixField.setText(adapter.getSystemConnectionMemo().getSystemPrefix());
074                connectionNameField.setText(adapter.getSystemConnectionMemo().getUserName());
075                NUMOPTIONS = NUMOPTIONS + 2;
076            }
077            addStandardDetails(adapter, false, NUMOPTIONS);
078            init = false;
079            checkInitDone();
080        }
081    }
082
083    /**
084     * {@inheritDoc}
085     */
086    @Override
087    protected void setInstance() {
088        if (adapter == null) {
089            adapter = new RaspberryPiAdapter();
090        }
091    }
092
093    @Override
094    public RaspberryPiAdapter getAdapter() {
095        return adapter;
096    }
097
098    @Override
099    public String getInfo() {
100        return "GPIO";
101    }
102
103    String manuf = RaspberryPiConnectionTypeList.PI;
104
105    @Override
106    public String getManufacturer() {
107        return manuf;
108    }
109
110    @Override
111    public void setManufacturer(String manufacturer) {
112        manuf = manufacturer;
113    }
114
115    @Override
116    public String name() {
117        return getConnectionName();
118    }
119
120    @Override
121    public String getConnectionName() {
122        return "Raspberry Pi GPIO"; // NOI18N
123    }
124
125    @Override
126    public boolean getDisabled() {
127        return disabled;
128    }
129
130    @Override
131    public void setDisabled(boolean disable) {
132        this.disabled = disable;
133    }
134
135    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(RaspberryPiConnectionConfig.class);
136
137}