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     */
016    package org.ini4j.test;
017    
018    import org.ini4j.sample.Dwarf;
019    import org.ini4j.sample.Dwarfs;
020    
021    import java.beans.PropertyChangeListener;
022    import java.beans.PropertyVetoException;
023    import java.beans.VetoableChangeListener;
024    
025    import java.net.URI;
026    
027    public final class DwarfsData implements Dwarfs
028    {
029        public static final DwarfData bashful;
030        public static final DwarfData doc;
031        public static final DwarfData dopey;
032        public static final DwarfData grumpy;
033        public static final DwarfData happy;
034        public static final DwarfData sleepy;
035        public static final DwarfData sneezy;
036        public static final Dwarfs dwarfs;
037        public static final String[] dwarfNames;
038        public static final String INI_DOPEY_WEIGHT = "${bashful/weight}";
039        public static final String INI_DOPEY_HEIGHT = "${doc/height}";
040        public static final String INI_GRUMPY_HEIGHT = "${dopey/height}";
041        public static final String INI_SLEEPY_HEIGHT = "${doc/height}8";
042        public static final String INI_SNEEZY_HOME_PAGE = "${happy/homePage}/~sneezy";
043        public static final String OPT_DOPEY_WEIGHT = "${bashful.weight}";
044        public static final String OPT_DOPEY_HEIGHT = "${doc.height}";
045        public static final String OPT_GRUMPY_HEIGHT = "${dopey.height}";
046        public static final String OPT_SLEEPY_HEIGHT = "${doc.height}8";
047        public static final String OPT_SNEEZY_HOME_PAGE = "${happy.homePage}/~sneezy";
048    
049        static
050        {
051    
052            // age, fortuneNumber, height, homeDir, homePage, weight
053            bashful = new DwarfData(PROP_BASHFUL, 67, null, 98.8, "/home/bashful", "http://snowwhite.tale/~bashful", 45.7);
054            doc = new DwarfData(PROP_DOC, 63, null, 87.7, "c:Documents and Settingsdoc", "http://doc.dwarfs", 49.5);
055            dopey = new DwarfData(PROP_DOPEY, 23, new int[] { 11, 33, 55 }, doc.height, "c:\\Documents and Settings\\dopey", "http://dopey.snowwhite.tale/", bashful.weight);
056            grumpy = new DwarfData(PROP_GRUMPY, 76, null, dopey.height, "/home/grumpy", "http://snowwhite.tale/~grumpy/", 65.3);
057            happy = new DwarfData(PROP_HAPPY, 99, null, 77.66, "/home/happy", "http://happy.smurf", 56.4);
058            sleepy = new DwarfData(PROP_SLEEPY, 121, new int[] { 99 }, doc.height + 0.08, "/home/sleepy", "http://snowwhite.tale/~sleepy", 76.11);
059            sneezy = new DwarfData(PROP_SNEEZY, 64, new int[] { 11, 22, 33, 44 }, 76.88, "/home/sneezy", happy.homePage.toString() + "/~sneezy", 69.7);
060            dwarfs = new DwarfsData();
061            dwarfNames = new String[] { bashful.name, doc.name, dopey.name, grumpy.name, happy.name, sleepy.name, sneezy.name };
062        }
063    
064        @SuppressWarnings("empty-statement")
065        private DwarfsData()
066        {
067            ;
068        }
069    
070        public Dwarf getBashful()
071        {
072            return bashful;
073        }
074    
075        public Dwarf getDoc()
076        {
077            return doc;
078        }
079    
080        public Dwarf getDopey()
081        {
082            return dopey;
083        }
084    
085        public Dwarf getGrumpy()
086        {
087            return grumpy;
088        }
089    
090        public Dwarf getHappy()
091        {
092            return happy;
093        }
094    
095        public Dwarf getSleepy()
096        {
097            return sleepy;
098        }
099    
100        public Dwarf getSneezy()
101        {
102            return sneezy;
103        }
104    
105        public static class DwarfData implements Dwarf
106        {
107            private static final String READ_ONLY_INSTANCE = "Read only instance";
108            public final int age;
109            public final int[] fortuneNumber;
110            public final double height;
111            public final String homeDir;
112            public final URI homePage;
113            public final String name;
114            public final double weight;
115    
116            public DwarfData(String name, int age, int[] fortuneNumber, double height, String homeDir, String homePage, double weight)
117            {
118                this.name = name;
119                this.age = age;
120                this.fortuneNumber = fortuneNumber;
121                this.height = height;
122                this.homeDir = homeDir;
123                this.homePage = URI.create(homePage);
124                this.weight = weight;
125            }
126    
127            public int getAge()
128            {
129                return age;
130            }
131    
132            public void setAge(int age)
133            {
134                throw new UnsupportedOperationException(READ_ONLY_INSTANCE);
135            }
136    
137            public int[] getFortuneNumber()
138            {
139                return fortuneNumber;
140            }
141    
142            public void setFortuneNumber(int[] value)
143            {
144                throw new UnsupportedOperationException(READ_ONLY_INSTANCE);
145            }
146    
147            public double getHeight()
148            {
149                return height;
150            }
151    
152            public void setHeight(double height) throws PropertyVetoException
153            {
154                throw new UnsupportedOperationException(READ_ONLY_INSTANCE);
155            }
156    
157            public String getHomeDir()
158            {
159                return homeDir;
160            }
161    
162            public void setHomeDir(String dir)
163            {
164                throw new UnsupportedOperationException(READ_ONLY_INSTANCE);
165            }
166    
167            public URI getHomePage()
168            {
169                return homePage;
170            }
171    
172            public void setHomePage(URI location)
173            {
174                throw new UnsupportedOperationException(READ_ONLY_INSTANCE);
175            }
176    
177            public double getWeight()
178            {
179                return weight;
180            }
181    
182            public void setWeight(double weight)
183            {
184                throw new UnsupportedOperationException(READ_ONLY_INSTANCE);
185            }
186    
187            public void addPropertyChangeListener(String property, PropertyChangeListener listener)
188            {
189                throw new UnsupportedOperationException(READ_ONLY_INSTANCE);
190            }
191    
192            public void addVetoableChangeListener(String property, VetoableChangeListener listener)
193            {
194                throw new UnsupportedOperationException(READ_ONLY_INSTANCE);
195            }
196    
197            public boolean hasAge()
198            {
199                return age != 0;
200            }
201    
202            public boolean hasHeight()
203            {
204                return height != 0.0;
205            }
206    
207            public boolean hasHomePage()
208            {
209                return homePage != null;
210            }
211    
212            public boolean hasWeight()
213            {
214                return weight != 0.0;
215            }
216    
217            public void removePropertyChangeListener(String property, PropertyChangeListener listener)
218            {
219                throw new UnsupportedOperationException(READ_ONLY_INSTANCE);
220            }
221    
222            public void removeVetoableChangeListener(String property, VetoableChangeListener listener)
223            {
224                throw new UnsupportedOperationException(READ_ONLY_INSTANCE);
225            }
226        }
227    }