001/*
002 * Copyright 2005,2009 Ivan SZKIBA
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.ini4j.tutorial;
017
018import org.ini4j.Ini;
019import org.ini4j.IniPreferences;
020
021import org.ini4j.test.DwarfsData;
022
023import static org.junit.Assert.*;
024
025import java.io.File;
026import java.io.IOException;
027
028import java.util.prefs.Preferences;
029
030//<editor-fold defaultstate="collapsed" desc="apt documentation">
031//|
032//|                -------------
033//|                Preferences Tutorial
034//|
035//|Preferences Tutorial
036//|
037//| The purpose of this document is to familiarize the reader with the usage of
038//| the [ini4j] library's Preferences interface. Each chapter contains all the
039//| necessary code portions and explanation for a given function.
040//|
041//| Code sniplets in this tutorial tested with the following .ini file:
042//| {{{../sample/dwarfs.ini.html}dwarfs.ini}}
043//|
044//| As soon as the Preferences object is created it functions as a standard Preferences node, and should be
045//| used as such. Implicitly only new nodes can be created in the root node (these will be the sections).
046//| In the first level nodes (sections) only values can be created (these will be the options).
047//|
048//| In the case of an invalid operation an <<<UnsupportedOperationException>>> type runtime exception is generated.
049//| This happens if we try to set a value at the root node or to create a node on the second level,
050//| since these operations cannot be interpreted on the whole .ini file under Preferences.
051//|
052//</editor-fold>
053public class PrefsTutorial extends AbstractTutorial
054{
055    public static void main(String[] args) throws Exception
056    {
057        new PrefsTutorial().run(filearg(args));
058    }
059
060    protected void run(File arg) throws Exception
061    {
062        Ini ini = new Ini(arg.toURI().toURL());
063
064        sample01(ini);
065    }
066
067//|
068//|* Reading and writing values
069//|
070//| Values can read and write like any other Preferences node, there is no
071//| differences.
072//{
073    void sample01(Ini ini) throws IOException
074    {
075        Preferences prefs = new IniPreferences(ini);
076        Preferences bashful = prefs.node("bashful");
077        String home = bashful.get("homeDir", "/home");
078        int age = bashful.getInt("age", -1);
079
080        bashful.putDouble("weight", 55.6);
081
082//}
083        assertEquals(DwarfsData.bashful.homeDir, bashful.get("homeDir", null));
084        assertEquals(DwarfsData.bashful.age, bashful.getInt("age", -1));
085        assertEquals(55.6, bashful.getDouble("weight", -1), 0.001);
086    }
087}