1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * ident "%Z%%M% %I% %E% SMI"
24 *
25 * Copyright (c) 1998-2001 by Sun Microsystems, Inc.
26 * All rights reserved.
27 */
28 package com.sun.dhcpmgr.data;
29
30 import java.util.Vector;
31
32 /**
33 * This class provides the functionality to construct an option value of the
34 * correct type when only the tag we associate with the option value is known.
35 */
36 public class OptionValueFactory {
37 private static OptionsTable optionsTable = OptionsTable.getTable();
38
39 /**
40 * Construct an option value given the name, and initialize it to the
41 * provided value.
42 * @param name the name of the option
43 * @param value the initial value for the option
44 * @return an OptionValue of the correct type for this option. If the name
45 * or value supplied is invalid in some way, an instance of
46 * BogusOptionValue is returned and the caller should take appropriate
47 * action.
48 */
49 public static OptionValue newOptionValue(String name, Object value) {
50 OptionValue v;
51 try {
52 v = newOptionValue(name);
53 v.setValue(value);
54 } catch (ValidationException e) {
55 // Not a valid value; put it in the bogus value placeholder
56 v = new BogusOptionValue(name, value);
57 }
58 return v;
59 }
60
61 /**
62 * Construct an empty option value given the name
63 * @param name the name of the option
64 * @return an OptionValue of the correct type for this option.
65 */
66 public static OptionValue newOptionValue(String name) {
67 if (name.length() == 0) {
68 // Empty name is not acceptable
69 return new BogusOptionValue(name);
70 }
71 Option opt = optionsTable.get(name);
72 if (opt == null) {
73 // Include is not in the options table
74 if (name.equals("Include")) {
75 return new IncludeOptionValue();
76 } else {
77 /*
78 * Bogus option name; create a bogus value that callers
79 * can pick up later.
80 */
81 return new BogusOptionValue(name);
82 }
83 }
84
85 byte type = opt.getType();
86 if (type == Option.types[Option.ASCII].getCode()) {
87 return new AsciiOptionValue(name);
88 } else if (type == Option.types[Option.BOOLEAN].getCode()) {
89 return new BooleanOptionValue(name);
90 } else if (type == Option.types[Option.IP].getCode()) {
91 return new IPOptionValue(name);
92 } else if (type == Option.types[Option.OCTET].getCode()) {
93 return new OctetOptionValue(name);
94 } else if (type == Option.types[Option.NUMBER].getCode() ||
95 type == Option.types[Option.UNUMBER8].getCode() ||
96 type == Option.types[Option.UNUMBER16].getCode() ||
97 type == Option.types[Option.UNUMBER32].getCode() ||
98 type == Option.types[Option.UNUMBER64].getCode() ||
99 type == Option.types[Option.SNUMBER8].getCode() ||
100 type == Option.types[Option.SNUMBER16].getCode() ||
101 type == Option.types[Option.SNUMBER32].getCode() ||
102 type == Option.types[Option.SNUMBER64].getCode()) {
103 return new NumberOptionValue(name);
104 } else {
105 // This should never happen
106 return new BogusOptionValue(name);
107 }
108 }
109 }