1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/*
2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *  Licensed to the Apache Software Foundation (ASF) under one or more
3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *  contributor license agreements.  See the NOTICE file distributed with
4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *  this work for additional information regarding copyright ownership.
5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *  The ASF licenses this file to You under the Apache License, Version 2.0
6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *  (the "License"); you may not use this file except in compliance with
7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *  the License.  You may obtain a copy of the License at
8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *     http://www.apache.org/licenses/LICENSE-2.0
10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *  Unless required by applicable law or agreed to in writing, software
12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *  distributed under the License is distributed on an "AS IS" BASIS,
13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *  See the License for the specific language governing permissions and
15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *  limitations under the License.
16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.apache.harmony.javax.security.auth.callback;
19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.io.Serializable;
21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class ChoiceCallback implements Callback, Serializable {
25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private static final long serialVersionUID = -3975664071579892167L;
27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private int defaultChoice;
29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private String prompt;
31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private boolean multipleSelectionsAllowed;
33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private String[] choices;
35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private int[] selections;
37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private void setChoices(String[] choices) {
39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (choices == null || choices.length == 0) {
40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            throw new IllegalArgumentException("auth.1C"); //$NON-NLS-1$
41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        for (int i = 0; i < choices.length; i++) {
43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (choices[i] == null || choices[i].length() == 0) {
44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                throw new IllegalArgumentException("auth.1C"); //$NON-NLS-1$
45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        //FIXME: System.arraycopy(choices, 0 , new String[choices.length], 0, choices.length);
48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.choices = choices;
49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private void setPrompt(String prompt) {
53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (prompt == null || prompt.length() == 0) {
54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            throw new IllegalArgumentException("auth.14"); //$NON-NLS-1$
55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.prompt = prompt;
57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private void setDefaultChoice(int defaultChoice) {
60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (0 > defaultChoice || defaultChoice >= choices.length) {
61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            throw new IllegalArgumentException("auth.1D"); //$NON-NLS-1$
62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.defaultChoice = defaultChoice;
64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public ChoiceCallback(String prompt, String[] choices, int defaultChoice,
67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            boolean multipleSelectionsAllowed) {
68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        super();
69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        setPrompt(prompt);
70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        setChoices(choices);
71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        setDefaultChoice(defaultChoice);
72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.multipleSelectionsAllowed = multipleSelectionsAllowed;
73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public boolean allowMultipleSelections() {
76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return multipleSelectionsAllowed;
77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String[] getChoices() {
80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return choices;
81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public int getDefaultChoice() {
84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return defaultChoice;
85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String getPrompt() {
88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return prompt;
89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public int[] getSelectedIndexes() {
92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return selections;
93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public void setSelectedIndex(int selection) {
96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.selections = new int[1];
97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.selections[0] = selection;
98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public void setSelectedIndexes(int[] selections) {
101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (!multipleSelectionsAllowed) {
102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            throw new UnsupportedOperationException();
103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.selections = selections;
105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        //FIXME:
106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        // this.selections = new int[selections.length]
107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        //System.arraycopy(selections, 0, this.selections, 0, this.selections.length);
108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
110