Search in sources :

Example 16 with ConditionalVariable

use of jmri.ConditionalVariable in project JMRI by JMRI.

the class Maintenance method findEmptyPressed.

/**
     * Find useless Conditionals in the various Manager Objects.
     *
     * @param parent Frame to check
     */
public static void findEmptyPressed(Frame parent) {
    Vector<String> display = new Vector<String>();
    Vector<String> names = new Vector<String>();
    log.debug("findEmptyPressed");
    Iterator<String> iter = InstanceManager.getDefault(jmri.ConditionalManager.class).getSystemNameList().iterator();
    jmri.ConditionalManager cm = InstanceManager.getDefault(jmri.ConditionalManager.class);
    while (iter.hasNext()) {
        String name = iter.next();
        Conditional c = cm.getBySystemName(name);
        if (c != null) {
            ArrayList<ConditionalVariable> variableList = c.getCopyOfStateVariables();
            if (variableList.size() == 0) {
                String userName = c.getUserName();
                display.add(MessageFormat.format(rbm.getString("OrphanName"), new Object[] { "Conditional", userName, name }));
                names.add(name);
            }
        }
    }
    DefaultListModel<String> listModel = new DefaultListModel<String>();
    for (int i = 0; i < display.size(); i++) {
        listModel.addElement(display.get(i));
    }
    JList<String> list = new JList<String>(listModel);
    list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    JButton button = new JButton(Bundle.getMessage("ButtonDelete"));
    button.setToolTipText(rbm.getString("OrphanDeleteHint") + Bundle.getMessage("ButtonDelete"));
    class EmptyListener implements ActionListener {

        JList<String> list;

        Vector<String> name;

        EmptyListener(JList<String> list, Vector<String> name) {
            this.list = list;
            this.name = name;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            int index = list.getMaxSelectionIndex();
            if (index < 0) {
                javax.swing.JOptionPane.showMessageDialog(null, rbm.getString("OrphanDeleteHint"), rbm.getString("DeleteTitle"), javax.swing.JOptionPane.INFORMATION_MESSAGE);
                return;
            }
            int min = list.getMinSelectionIndex();
            DefaultListModel<String> model = (DefaultListModel<String>) list.getModel();
            while (index >= min) {
                String[] names = getTypeAndNames(name.get(index));
                model.remove(index);
                Conditional c = InstanceManager.getDefault(jmri.ConditionalManager.class).getBySystemName(names[2]);
                if (c != null) {
                    Logix x = InstanceManager.getDefault(jmri.ConditionalManager.class).getParentLogix(names[2]);
                    if (x != null) {
                        x.deActivateLogix();
                        x.deleteConditional(names[2]);
                        x.activateLogix();
                    }
                    InstanceManager.getDefault(jmri.ConditionalManager.class).deregister(c);
                    name.remove(index);
                    index--;
                }
            }
            index++;
            if (index >= model.getSize()) {
                index = model.getSize() - 1;
            }
            if (index >= 0) {
                list.setSelectedIndex(index);
            }
        }
    }
    JScrollPane scrollPane = new JScrollPane(list);
    button.addActionListener(new EmptyListener(list, names));
    button.setMaximumSize(button.getPreferredSize());
    makeDialog(scrollPane, button, parent, rbm.getString("EmptyConditionalTitle"));
}
Also used : JScrollPane(javax.swing.JScrollPane) ActionEvent(java.awt.event.ActionEvent) JButton(javax.swing.JButton) DefaultListModel(javax.swing.DefaultListModel) Conditional(jmri.Conditional) ConditionalVariable(jmri.ConditionalVariable) Logix(jmri.Logix) ActionListener(java.awt.event.ActionListener) Vector(java.util.Vector) JList(javax.swing.JList)

Example 17 with ConditionalVariable

use of jmri.ConditionalVariable in project JMRI by JMRI.

the class SensorGroupFrame method viewPressed.

void viewPressed() {
    for (int i = 0; i < _sensorModel.getRowCount(); i++) {
        _sensorModel.setValueAt(Boolean.FALSE, i, BeanTableModel.INCLUDE_COLUMN);
    }
    // look for name in List panel
    String group = _sensorGroupList.getSelectedValue();
    if (group == null) {
        // not there, look in text field
        group = _nameField.getText().toUpperCase().trim();
    }
    _nameField.setText(group);
    // Look for Sensor group in Route table
    RouteManager rm = InstanceManager.getDefault(jmri.RouteManager.class);
    List<String> l = rm.getSystemNameList();
    String prefix = (namePrefix + group + nameDivider).toUpperCase();
    boolean isRoute = false;
    int setRow = 0;
    for (int i = 0; i < l.size(); i++) {
        String name = l.get(i);
        if (name.startsWith(prefix)) {
            isRoute = true;
            String sensor = name.substring(prefix.length());
            // find and check that sensor
            for (int j = _sensorModel.getRowCount() - 1; j >= 0; j--) {
                if (_sensorModel.getValueAt(j, BeanTableModel.SNAME_COLUMN).equals(sensor)) {
                    _sensorModel.setValueAt(Boolean.TRUE, j, BeanTableModel.INCLUDE_COLUMN);
                    setRow = j;
                }
            }
        }
    }
    // look for  Sensor group in SYSTEM Logix
    if (!isRoute) {
        Logix logix = getSystemLogix();
        String cSystemName = (ConditionalSystemPrefix + group).toUpperCase();
        String cUserName = ConditionalUserPrefix + group;
        for (int i = 0; i < logix.getNumConditionals(); i++) {
            String name = logix.getConditionalByNumberOrder(i);
            if (cSystemName.equals(name) || cUserName.equals(name)) {
                Conditional c = InstanceManager.getDefault(jmri.ConditionalManager.class).getBySystemName(name);
                if (c == null) {
                    log.error("Conditional \"" + name + "\" expected but NOT found in Logix " + logix.getSystemName());
                } else {
                    ArrayList<ConditionalVariable> variableList = c.getCopyOfStateVariables();
                    for (int k = 0; k < variableList.size(); k++) {
                        String sensor = variableList.get(k).getName();
                        for (int j = _sensorModel.getRowCount() - 1; j >= 0; j--) {
                            if (_sensorModel.getValueAt(j, BeanTableModel.SNAME_COLUMN).equals(sensor)) {
                                _sensorModel.setValueAt(Boolean.TRUE, j, BeanTableModel.INCLUDE_COLUMN);
                                setRow = j;
                            }
                        }
                    }
                }
            }
        }
    }
    _sensorModel.fireTableDataChanged();
    setRow -= 9;
    if (setRow < 0) {
        setRow = 0;
    }
    _sensorScrollPane.getVerticalScrollBar().setValue(setRow * rowHeight);
}
Also used : Logix(jmri.Logix) Conditional(jmri.Conditional) SensorGroupConditional(jmri.implementation.SensorGroupConditional) ConditionalVariable(jmri.ConditionalVariable) RouteManager(jmri.RouteManager)

Example 18 with ConditionalVariable

use of jmri.ConditionalVariable in project JMRI by JMRI.

the class OsIndicator method instantiate.

/**
     * Create the underlying objects that implement this
     */
public void instantiate() {
    // find/create Logix
    String nameP = namePrefix + output;
    Logix l = InstanceManager.getDefault(jmri.LogixManager.class).getLogix(nameP);
    if (l == null) {
        l = InstanceManager.getDefault(jmri.LogixManager.class).createNewLogix(nameP, "");
    }
    l.deActivateLogix();
    // Find/create conditional and add
    Conditional c = InstanceManager.getDefault(jmri.ConditionalManager.class).getConditional(l, nameP + "C1");
    if (c == null) {
        c = InstanceManager.getDefault(jmri.ConditionalManager.class).createNewConditional(nameP + "C1", "");
        l.addConditional(nameP + "C1", -1);
    }
    // Load variable into the Conditional
    ArrayList<ConditionalVariable> variableList = c.getCopyOfStateVariables();
    variableList.add(new ConditionalVariable(false, Conditional.OPERATOR_NONE, Conditional.TYPE_SENSOR_INACTIVE, osSensor, true));
    if (!lock.equals("")) {
        variableList.add(new ConditionalVariable(false, Conditional.OPERATOR_AND, Conditional.TYPE_SENSOR_INACTIVE, lock, true));
    }
    c.setStateVariables(variableList);
    ArrayList<ConditionalAction> actionList = c.getCopyOfActions();
    actionList.add(new DefaultConditionalAction(Conditional.ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.ACTION_SET_TURNOUT, output, Turnout.CLOSED, " "));
    actionList.add(new DefaultConditionalAction(Conditional.ACTION_OPTION_ON_CHANGE_TO_FALSE, Conditional.ACTION_SET_TURNOUT, output, Turnout.THROWN, " "));
    // string data
    c.setAction(actionList);
    // and put it back in operation
    l.activateLogix();
}
Also used : DefaultConditionalAction(jmri.implementation.DefaultConditionalAction) Logix(jmri.Logix) ConditionalAction(jmri.ConditionalAction) DefaultConditionalAction(jmri.implementation.DefaultConditionalAction) Conditional(jmri.Conditional) ConditionalVariable(jmri.ConditionalVariable)

Example 19 with ConditionalVariable

use of jmri.ConditionalVariable in project JMRI by JMRI.

the class DefaultConditionalManagerXml method loadConditionals.

/**
     * Utility method to load the individual Logix objects. If there's no
     * additional info needed for a specific logix type, invoke this with the
     * parent of the set of Logix elements.
     *
     * @param conditionals Element containing the Logix elements to load.
     */
public void loadConditionals(Element conditionals) {
    List<Element> conditionalList = conditionals.getChildren("conditional");
    if (log.isDebugEnabled()) {
        log.debug("Found " + conditionalList.size() + " conditionals");
    }
    ConditionalManager tm = InstanceManager.getDefault(jmri.ConditionalManager.class);
    for (int i = 0; i < conditionalList.size(); i++) {
        Element condElem = conditionalList.get(i);
        String sysName = getSystemName(condElem);
        if (sysName == null) {
            log.warn("unexpected null in systemName " + condElem);
            break;
        }
        // omitted username is treated as empty, not null
        String userName = getUserName(condElem);
        if (userName == null) {
            userName = "";
        }
        if (log.isDebugEnabled()) {
            log.debug("create conditional: ({})({})", sysName, userName);
        }
        // Try getting the conditional.  This should fail
        Conditional c = tm.getBySystemName(sysName);
        if (c == null) {
            // Check for parent Logix
            Logix x = tm.getParentLogix(sysName);
            if (x == null) {
                log.warn("Conditional '{}' has no parent Logix", sysName);
                continue;
            }
            // Found a potential parent Logix, check the Logix index
            boolean inIndex = false;
            for (int j = 0; j < x.getNumConditionals(); j++) {
                String cName = x.getConditionalByNumberOrder(j);
                if (sysName.equals(cName)) {
                    inIndex = true;
                    break;
                }
            }
            if (!inIndex) {
                log.warn("Conditional '{}' is not in the Logix index", sysName);
                continue;
            }
            // Create the condtional
            c = tm.createNewConditional(sysName, userName);
        }
        if (c == null) {
            // Should never get here
            log.error("Conditional '{}' cannot be created", sysName);
            continue;
        }
        // conditional already exists
        // load common parts
        loadCommon(c, condElem);
        String ant = "";
        int logicType = Conditional.ALL_AND;
        if (condElem.getAttribute("antecedent") != null) {
            ant = condElem.getAttribute("antecedent").getValue();
        }
        if (condElem.getAttribute("logicType") != null) {
            logicType = Integer.parseInt(condElem.getAttribute("logicType").getValue());
        }
        c.setLogicType(logicType, ant);
        // load state variables, if there are any
        List<Element> conditionalVarList = condElem.getChildren("conditionalStateVariable");
        if (conditionalVarList.size() == 0) {
            log.warn("No state variables found for conditional " + sysName);
        }
        ArrayList<ConditionalVariable> variableList = new ArrayList<>();
        for (int n = 0; n < conditionalVarList.size(); n++) {
            ConditionalVariable variable = new ConditionalVariable();
            if (conditionalVarList.get(n).getAttribute("operator") == null) {
                log.warn("unexpected null in operator " + conditionalVarList.get(n) + " " + conditionalVarList.get(n).getAttributes());
            } else {
                int oper = Integer.parseInt(conditionalVarList.get(n).getAttribute("operator").getValue());
                if (oper == Conditional.OPERATOR_AND_NOT) {
                    variable.setNegation(true);
                    oper = Conditional.OPERATOR_AND;
                } else if (oper == Conditional.OPERATOR_NOT) {
                    variable.setNegation(true);
                    oper = Conditional.OPERATOR_NONE;
                }
                variable.setOpern(oper);
            }
            if (conditionalVarList.get(n).getAttribute("negated") != null) {
                if ("yes".equals(conditionalVarList.get(n).getAttribute("negated").getValue())) {
                    variable.setNegation(true);
                } else {
                    variable.setNegation(false);
                }
            }
            variable.setType(Integer.parseInt(conditionalVarList.get(n).getAttribute("type").getValue()));
            variable.setName(conditionalVarList.get(n).getAttribute("systemName").getValue());
            if (conditionalVarList.get(n).getAttribute("dataString") != null) {
                variable.setDataString(conditionalVarList.get(n).getAttribute("dataString").getValue());
            }
            if (conditionalVarList.get(n).getAttribute("num1") != null) {
                variable.setNum1(Integer.parseInt(conditionalVarList.get(n).getAttribute("num1").getValue()));
            }
            if (conditionalVarList.get(n).getAttribute("num2") != null) {
                variable.setNum2(Integer.parseInt(conditionalVarList.get(n).getAttribute("num2").getValue()));
            }
            variable.setTriggerActions(true);
            if (conditionalVarList.get(n).getAttribute("triggersCalc") != null) {
                if ("no".equals(conditionalVarList.get(n).getAttribute("triggersCalc").getValue())) {
                    variable.setTriggerActions(false);
                }
            }
            variableList.add(variable);
        }
        c.setStateVariables(variableList);
        // load actions - there better be some
        List<Element> conditionalActionList = condElem.getChildren("conditionalAction");
        // Really OK, since a user may use such conditionals to define a reusable
        // expression of state variables.  These conditions are then used as a 
        // state variable in other conditionals.  (pwc)
        //if (conditionalActionList.size() == 0) {
        //    log.warn("No actions found for conditional "+sysName);
        //}
        ArrayList<ConditionalAction> actionList = ((DefaultConditional) c).getActionList();
        org.jdom2.Attribute attr = null;
        for (int n = 0; n < conditionalActionList.size(); n++) {
            ConditionalAction action = new DefaultConditionalAction();
            attr = conditionalActionList.get(n).getAttribute("option");
            if (attr != null) {
                action.setOption(Integer.parseInt(attr.getValue()));
            } else {
                log.warn("unexpected null in option " + conditionalActionList.get(n) + " " + conditionalActionList.get(n).getAttributes());
            }
            // actionDelay is removed.  delay data is stored as a String to allow
            // such data be referenced by internal memory.
            // For backward compatibility, set delay "int" as a string
            attr = conditionalActionList.get(n).getAttribute("delay");
            if (attr != null) {
                action.setActionString(attr.getValue());
            }
            attr = conditionalActionList.get(n).getAttribute("type");
            if (attr != null) {
                action.setType(Integer.parseInt(attr.getValue()));
            } else {
                log.warn("unexpected null in type " + conditionalActionList.get(n) + " " + conditionalActionList.get(n).getAttributes());
            }
            attr = conditionalActionList.get(n).getAttribute("systemName");
            if (attr != null) {
                action.setDeviceName(attr.getValue());
            } else {
                log.warn("unexpected null in systemName " + conditionalActionList.get(n) + " " + conditionalActionList.get(n).getAttributes());
            }
            attr = conditionalActionList.get(n).getAttribute("data");
            if (attr != null) {
                action.setActionData(Integer.parseInt(attr.getValue()));
            } else {
                log.warn("unexpected null in action data " + conditionalActionList.get(n) + " " + conditionalActionList.get(n).getAttributes());
            }
            attr = conditionalActionList.get(n).getAttribute("string");
            if (attr != null) {
                action.setActionString(attr.getValue());
            } else {
                log.warn("unexpected null in action string " + conditionalActionList.get(n) + " " + conditionalActionList.get(n).getAttributes());
            }
            if (!actionList.contains(action))
                actionList.add(action);
        }
        c.setAction(actionList);
        // 1/16/2011 - trigger for execution of the action list changed to execute each 
        // time state is computed.  Formerly execution of the action list was done only
        // when state changes.  All conditionals are upgraded to this new policy.
        // However, for conditionals with actions that toggle on change of state
        // the old policy should be used.
        boolean triggerOnChange = false;
        if (condElem.getAttribute("triggerOnChange") != null) {
            if ("yes".equals(condElem.getAttribute("triggerOnChange").getValue())) {
                triggerOnChange = true;
            }
        } else {
            /* Don't upgrade -Let old be as is
                 for (int k=0; k<actionList.size(); k++){
                 ConditionalAction action = actionList.get(k);
                 if (action.getOption()==Conditional.ACTION_OPTION_ON_CHANGE){
                 triggerOnChange = true;
                 break;
                 }
                 }
                 */
            triggerOnChange = true;
        }
        c.setTriggerOnChange(triggerOnChange);
    }
}
Also used : DefaultConditionalAction(jmri.implementation.DefaultConditionalAction) Element(org.jdom2.Element) ArrayList(java.util.ArrayList) DefaultConditional(jmri.implementation.DefaultConditional) Conditional(jmri.Conditional) ConditionalVariable(jmri.ConditionalVariable) DefaultConditional(jmri.implementation.DefaultConditional) Logix(jmri.Logix) ConditionalAction(jmri.ConditionalAction) DefaultConditionalAction(jmri.implementation.DefaultConditionalAction) DefaultConditionalManager(jmri.managers.DefaultConditionalManager) ConditionalManager(jmri.ConditionalManager)

Example 20 with ConditionalVariable

use of jmri.ConditionalVariable in project JMRI by JMRI.

the class DefaultConditionalManagerXml method store.

/**
     * Default implementation for storing the contents of a ConditionalManager
     *
     * @param o Object to store, of type ConditionalManager
     * @return Element containing the complete info
     */
@Override
public Element store(Object o) {
    //    	long numCond = 0;
    //    	long numStateVars = 0;
    Element conditionals = new Element("conditionals");
    setStoreElementClass(conditionals);
    ConditionalManager tm = (ConditionalManager) o;
    if (tm != null) {
        java.util.Iterator<String> iter = tm.getSystemNameList().iterator();
        // don't return an element if there are not conditionals to include
        if (!iter.hasNext()) {
            return null;
        }
        // store the conditionals
        while (iter.hasNext()) {
            //            	numCond++;
            //            	long condTime = System.currentTimeMillis();
            String sname = iter.next();
            if (sname == null) {
                log.error("System name null during store");
            }
            log.debug("conditional system name is " + sname);
            Conditional c = tm.getBySystemName(sname);
            if (c == null) {
                log.error("Unable to save '{}' to the XML file", sname);
                continue;
            }
            Element elem = new Element("conditional").setAttribute("systemName", sname);
            elem.addContent(new Element("systemName").addContent(sname));
            // store common parts
            storeCommon(c, elem);
            elem.setAttribute("antecedent", c.getAntecedentExpression());
            elem.setAttribute("logicType", Integer.toString(c.getLogicType()));
            if (c.getTriggerOnChange()) {
                elem.setAttribute("triggerOnChange", "yes");
            } else {
                elem.setAttribute("triggerOnChange", "no");
            }
            // save child state variables
            // Creating StateVariables gets very slow when more than c10,000 exist.
            // creation time goes from less than 1ms to more than 5000ms.
            // Don't need a clone for read-only use.
            //                List <ConditionalVariable> variableList = c.getCopyOfStateVariables();
            List<ConditionalVariable> variableList = ((jmri.implementation.DefaultConditional) c).getStateVariableList();
            /*                numStateVars += variableList.size();                
                 if (numCond>1190) {
                 partTime = System.currentTimeMillis() - partTime;
                 System.out.println("time to for getCopyOfStateVariables "+partTime+"ms. total stateVariable= "+numStateVars);
                 }*/
            for (int k = 0; k < variableList.size(); k++) {
                ConditionalVariable variable = variableList.get(k);
                Element vElem = new Element("conditionalStateVariable");
                int oper = variable.getOpern();
                if (oper == Conditional.OPERATOR_AND && variable.isNegated()) {
                    // backward compatibility
                    oper = Conditional.OPERATOR_AND_NOT;
                } else if (oper == Conditional.OPERATOR_NONE && variable.isNegated()) {
                    // backward compatibility
                    oper = Conditional.OPERATOR_NOT;
                }
                vElem.setAttribute("operator", Integer.toString(oper));
                if (variable.isNegated()) {
                    vElem.setAttribute("negated", "yes");
                } else {
                    vElem.setAttribute("negated", "no");
                }
                vElem.setAttribute("type", Integer.toString(variable.getType()));
                vElem.setAttribute("systemName", variable.getName());
                vElem.setAttribute("dataString", variable.getDataString());
                vElem.setAttribute("num1", Integer.toString(variable.getNum1()));
                vElem.setAttribute("num2", Integer.toString(variable.getNum2()));
                if (variable.doTriggerActions()) {
                    vElem.setAttribute("triggersCalc", "yes");
                } else {
                    vElem.setAttribute("triggersCalc", "no");
                }
                elem.addContent(vElem);
            }
            // save action information
            ArrayList<ConditionalAction> actionList = c.getCopyOfActions();
            /*               	if (numCond>1190) {
                 partTime = System.currentTimeMillis() - partTime;
                 System.out.println("time to for getCopyOfActions "+partTime+"ms. numActions= "+actionList.size());
                 }*/
            for (int k = 0; k < actionList.size(); k++) {
                ConditionalAction action = actionList.get(k);
                Element aElem = new Element("conditionalAction");
                aElem.setAttribute("option", Integer.toString(action.getOption()));
                aElem.setAttribute("type", Integer.toString(action.getType()));
                aElem.setAttribute("systemName", action.getDeviceName());
                aElem.setAttribute("data", Integer.toString(action.getActionData()));
                // add "delay" attribute 
                try {
                    Integer.parseInt(action.getActionString());
                    aElem.setAttribute("delay", action.getActionString());
                } catch (NumberFormatException nfe) {
                    aElem.setAttribute("delay", "0");
                }
                aElem.setAttribute("string", action.getActionString());
                elem.addContent(aElem);
            }
            conditionals.addContent(elem);
        /*				condTime = System.currentTimeMillis() - condTime;
                 if (condTime>1) {
                 System.out.println(numCond+"th Conditional \""+sname+"\" took "+condTime+"ms to store.");					
                 }*/
        }
    }
    //        System.out.println("Elapsed time to store "+numCond+" Conditional "+(System.currentTimeMillis()-time)+"ms.");
    return (conditionals);
}
Also used : Element(org.jdom2.Element) DefaultConditional(jmri.implementation.DefaultConditional) Conditional(jmri.Conditional) ConditionalVariable(jmri.ConditionalVariable) DefaultConditional(jmri.implementation.DefaultConditional) ConditionalAction(jmri.ConditionalAction) DefaultConditionalAction(jmri.implementation.DefaultConditionalAction) DefaultConditionalManager(jmri.managers.DefaultConditionalManager) ConditionalManager(jmri.ConditionalManager)

Aggregations

ConditionalVariable (jmri.ConditionalVariable)23 Conditional (jmri.Conditional)16 ConditionalAction (jmri.ConditionalAction)10 DefaultConditionalAction (jmri.implementation.DefaultConditionalAction)9 ArrayList (java.util.ArrayList)8 Logix (jmri.Logix)8 ConditionalManager (jmri.ConditionalManager)3 DefaultListModel (javax.swing.DefaultListModel)2 DefaultConditional (jmri.implementation.DefaultConditional)2 SensorGroupConditional (jmri.implementation.SensorGroupConditional)2 DefaultConditionalManager (jmri.managers.DefaultConditionalManager)2 Element (org.jdom2.Element)2 ActionEvent (java.awt.event.ActionEvent)1 ActionListener (java.awt.event.ActionListener)1 Vector (java.util.Vector)1 JButton (javax.swing.JButton)1 JList (javax.swing.JList)1 JScrollPane (javax.swing.JScrollPane)1 Block (jmri.Block)1 Memory (jmri.Memory)1