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.*; 31 import java.io.Serializable; 32 33 /** 34 * This class provides a global table of all the options currently known. 35 * It is implemented as a singleton as there should be no need for more 36 * than a single instance of this table. It includes both the standard 37 * options and any vendor or site options defined in the current environment. 38 */ 39 public class OptionsTable implements Serializable { 40 private Hashtable options; 41 private static OptionsTable table = null; 42 43 protected OptionsTable() { 44 // Get the standard options we know about 45 StandardOptions stdopts = new StandardOptions(); 46 47 // Initialize hash table with extra size we will probably need. 48 options = new Hashtable(stdopts.size() + 20); 49 50 // Add the standard options to the table 51 add(stdopts.getAllOptions()); 52 } 53 54 /** 55 * Add an array of options to the table. 56 * @param opts An array of Options 57 */ 58 public void add(Option [] opts) { 59 for (int i = 0; opts != null && i < opts.length; ++i) { 60 add(opts[i]); 61 } 62 } 63 64 /** 65 * Add a single option to the table. 66 * @param o The option to add. 67 */ 68 public void add(Option o) { 69 // Don't add unless it is a valid option. 70 if (o.isValid()) { 71 options.put(o.getKey(), o); 72 } 73 } 74 75 /** 76 * Retrieve an option from the table by name 77 * @param opt the name of the option to retrieve 78 * @return the option found, or null if the option is not in the table 79 */ 80 public Option get(String opt) { 81 return (Option)options.get(opt); 82 } 83 84 /** 85 * Retrieve an option from the table by its code 86 * @param code the code of the option to retrieve 87 * @return the option found, or null if the option is not in the table 88 */ 89 public Option getByCode(short code) { 90 91 Option option = null; 92 for (Enumeration e = elements(); e.hasMoreElements(); ) { 93 if (((Option)e.nextElement()).getCode() == code) { 94 option = (Option)e.nextElement(); 95 } 96 } 97 return (option); 98 } 99 100 /** 101 * Enumerate the options in this table for those that might need to walk it. 102 * @return an Enumeration of the options 103 */ 104 public Enumeration elements() { 105 return options.elements(); 106 } 107 108 /** 109 * Return the global table, create it if not already in existence. 110 * @return the current options table 111 */ 112 public static OptionsTable getTable() { 113 if (table == null) { 114 table = new OptionsTable(); 115 } 116 return table; 117 } 118 }