1 /* 
2  * Copyright 2005 Paul Hinds
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.tp23.antinstaller.input;
17
18
19import java.util.MissingResourceException;
20import java.util.ResourceBundle;
21
22import org.tp23.antinstaller.InstallerContext;
23import org.tp23.antinstaller.ValidationException;
24
25
26
27/**
28 *
29 * <p>Input type to choose a single value from a (numbered) list of options </p>
30 * <p>This input is designed to handle larger lists of options </p>
31 * <p>Copyright: Copyright (c) 2004</p>
32 * <p>Company: tp23</p>
33 * @author Paul Hinds
34 * @version $Id: LargeSelectInput.java,v 1.3 2006/12/07 02:50:27 teknopaul Exp $
35 */
36public class LargeSelectInput
37    extends InputField{
38
39    // i18n support
40    private static ResourceBundle langPack = null;
41    private int optionIdx = 0;
42    static{
43        try {
44            langPack = ResourceBundle.getBundle("resources.LanguagePack");
45        } catch (MissingResourceException e) {
46            // ignore, signifies no lang packs installed  
47        }
48    }
49
50    private LargeSelectInput.Option[] options;
51
52    public LargeSelectInput() {
53    }
54
55
56    public LargeSelectInput.Option[] getOptions() {
57        return options;
58    }
59
60    public void setOptions(LargeSelectInput.Option[] options) {
61        this.options = options;
62    }
63    public Option getNewOption(){
64        return new Option();
65    }
66    
67    public class Option {
68
69        private int idx = ++optionIdx;
70        private String text;
71        public String value;
72        public void setText(String text) {
73            this.text = text;
74        }
75        public String getText() {
76            if(langPack != null){
77                return langPack.getString(getProperty() + "." + idx +".displayText");
78            }
79            return text;
80        }
81    }
82    
83    public void setValue(String dir){
84        setInputResult(dir);
85    }
86    /**
87     * Called to validate the user input
88     */
89    public boolean validate(InstallerContext cxt) throws ValidationException{
90        if(getInputResult()==null)return false;
91        String value = getInputResult();
92        boolean ok = false;
93        for (int i = 0; i < options.length; i++) {
94            ok |= options[i].value.equals(value);
95        }
96        return ok;
97    }
98
99
00
01    /**
02     * Used by checkConfig to validate the configuration file.
03     * Not used at runtime.
04     * @return boolean
05     */
06    public boolean validateObject() {
07        if(getDisplayText()==null){
08            System.out.println("LargeSelect:displayText must be set");
09            return false;
10        }
11        if(getProperty()==null){
12            System.out.println("LargeSelect:property must be set");
13            return false;
14        }
15        if(getDefaultValue()==null){
16            System.out.println("LargeSelect:defaultValue must be set");
17            return false;
18        }
19        if(getOptions()==null){
20            System.out.println("LargeSelect:option must have at least two options");
21            return false;
22        }
23        if(getOptions().length<2){
24            System.out.println("LargeSelect:option must have at least two options");
25            return false;
26        }
27        for (int i = 0; i < getOptions().length; i++) {
28            Option o = getOptions()[i];
29            if(o.getText()==null){
30                System.out.println("LargeSelect:option:text must be set");
31                return false;
32            }
33            if(o.value==null){
34                System.out.println("LargeSelect:option:value must be set");
35                return false;
36            }
37        }
38        boolean defaultExists = false;
39        for (int i = 0; i < getOptions().length; i++) {
40            Option o = getOptions()[i];
41            if(o.value.equals(getDefaultValue())){
42                defaultExists=true;
43            }
44        }
45        if(!defaultExists){
46            System.out.println("LargeSelect:option:Default must be one of the options");
47            return false;
48        }
49        return true;
50    }
51}
52