
package uk.co.wingpath.modbusgui;

import java.util.*;
import java.io.*;
import uk.co.wingpath.util.*;
import uk.co.wingpath.xml.*;

public class BooleanSettings
    implements Xml.Savable
{
    private Map<String,Variable<Boolean>> map;

    public BooleanSettings ()
    {
        map = new HashMap<String,Variable<Boolean>> ();
    }

    public Variable<Boolean> addVariable (String tag, boolean value)
    {
        Variable<Boolean> v = new SimpleVariable<Boolean> (value);
        map.put (tag, v);
        return v;
    }

    public Variable<Boolean> getVariable (String tag)
    {
        return map.get (tag);
    }

    public boolean getValue (String tag)
    {
        return map.get (tag).getValue ();
    }

    public void setValue (String tag, boolean value)
    {
        map.get (tag).setValue (value);
    }

    public void save (Xml.Saver saver)
        throws IOException
    {
        for (Map.Entry<String,Variable<Boolean>> entry : map.entrySet ())
            saver.saveValue (entry.getKey (), entry.getValue ().getValue ());
    }

    public Xml.Loader getXmlLoader ()
    {
        return new XmlLoader ();
    }

    private class XmlLoader
        extends Xml.AbstractLoader
    {
        @Override
        public Xml.Loader startChild (final String tag)
        {
            return new Xml.BooleanLoader (new Xml.Receiver<Boolean> ()
            {
                public void receive (Boolean value)
                    throws ValueException
                {
                    Variable<Boolean> v = map.get (tag);
                    if (v != null)
                        v.setValue (value);
                }
            });
        }

        @Override
        public void end (String value)
        {
        }
    }
}

