⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genericaddress.java.svn-base

📁 snmp hibernate 源码, 类似hibernate的映射.
💻 SVN-BASE
字号:
/*_############################################################################  _##   _##  SNMP4J - GenericAddress.java    _##   _##  Copyright 2003-2006  Frank Fock and Jochen Katz (SNMP4J.org)  _##    _##  Licensed under the Apache License, Version 2.0 (the "License");  _##  you may not use this file except in compliance with the License.  _##  You may obtain a copy of the License at  _##    _##      http://www.apache.org/licenses/LICENSE-2.0  _##    _##  Unless required by applicable law or agreed to in writing, software  _##  distributed under the License is distributed on an "AS IS" BASIS,  _##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  _##  See the License for the specific language governing permissions and  _##  limitations under the License.  _##    _##########################################################################*/package org.snmp4j.smi;import java.io.*;import java.util.*;import org.snmp4j.log.*;import org.snmp4j.asn1.BERInputStream;import org.snmp4j.SNMP4JSettings;/** * The <code>GenericAddress</code> implements the decorator and factory * design pattern to provide a generic address type. * <p> * To register address types other than the default, set the system property * {@link #ADDRESS_TYPES_PROPERTIES} before calling the {@link #parse} method * for the first time. * * @author Frank Fock * @version 1.7 */public class GenericAddress extends SMIAddress {  static final long serialVersionUID = -6102594326202231511L;  public static final String ADDRESS_TYPES_PROPERTIES =      "org.snmp4j.addresses";  private static final String ADDRESS_TYPES_PROPERTIES_DEFAULT =      "address.properties";  private static final LogAdapter logger = LogFactory.getLogger(GenericAddress.class);  private SMIAddress address;  private static Hashtable knownAddressTypes = null;  public GenericAddress() {  }  public GenericAddress(SMIAddress address) {    this.address = address;  }  public int getSyntax() {    return address.getSyntax();  }  public boolean isValid() {    if (address == null) {      return false;    }    return address.isValid();  }  public String toString() {    return address.toString();  }  public int hashCode() {    return address.hashCode();  }  public int compareTo(Object o) {    return address.compareTo(o);  }  public boolean equals(Object o) {    return address.equals(o);  }  public void decodeBER(BERInputStream inputStream) throws java.io.IOException {    throw new UnsupportedOperationException();  }  public void encodeBER(OutputStream outputStream) throws java.io.IOException {    address.encodeBER(outputStream);  }  public int getBERLength() {    return address.getBERLength();  }  public void setAddress(SMIAddress address) {    this.address = address;  }  public Address getAddress() {    return address;  }  /**   * Register Address classes from a properties file. The registered   * address types are used by the {@link parse} method to type-safe   * instantiate sub-classes from <code>Address</code> from a   * <code>String</code>.   */  private synchronized static void registerAddressTypes() {    if (SNMP4JSettings.isExtensibilityEnabled()) {      String addresses = System.getProperty(ADDRESS_TYPES_PROPERTIES,                                            ADDRESS_TYPES_PROPERTIES_DEFAULT);      InputStream is = Variable.class.getResourceAsStream(addresses);      if (is == null) {        throw new InternalError("Could not read '" + addresses +                                "' from classpath!");      }      Properties props = new Properties();      try {        props.load(is);        Hashtable h = new Hashtable(props.size() + 1);        for (Enumeration en = props.propertyNames(); en.hasMoreElements(); ) {          String id = (String) en.nextElement();          String className = props.getProperty(id);          try {            Class c = Class.forName(className);            h.put(id, c);          }          catch (ClassNotFoundException cnfe) {            logger.error(cnfe);          }        }        knownAddressTypes = h;      }      catch (IOException iox) {        String txt = "Could not read '" + addresses + "': " + iox.getMessage();        logger.error(txt);        throw new InternalError(txt);      }      finally {        try {          is.close();        }        catch (IOException ex) {          // ignore          logger.warn(ex);        }      }    }    else {      Hashtable h = new Hashtable(3);      h.put("udp", UdpAddress.class);      h.put("tcp", TcpAddress.class);      h.put("ip", IpAddress.class);      knownAddressTypes = h;    }  }  /**   * Parses a given transport protocol dependent address string into an   * <code>Address</code> instance that is subsumed by this   * <code>GenericAddress</code> object.   *   * @param address   *    an address string with a leading type specifier as defined in the   *    "address.properties". The format is <code>"type:address"</code> where   *    the format of <code>address</code> depends on <code>type</code>.   *    Valid values for <code>type</code> are, for example, "udp" and "tcp".   * @return   *    a <code>Address</code> instance of the address classes specified   *    in "address.properties" whose type ID matched the specified ID in   *    <code>address</code>. If <code>address</code> cannot be parsed,   *    <code>null</code> is returned.   * @throws IllegalArgumentException   *    if the address type indicator supplied is not know.   */  public static Address parse(String address) {    if (knownAddressTypes == null) {      registerAddressTypes();    }    String type = "udp";    int sep = address.indexOf(':');    if (sep > 0) {      type = address.substring(0, sep);      address = address.substring(sep+1);    }    type = type.toLowerCase();    Class c = (Class)knownAddressTypes.get(type);    if (c == null) {      throw new IllegalArgumentException("Address type " + type + " unknown");    }    try {      Address addr = (Address)c.newInstance();      if (addr.parseAddress(address)) {        return addr;      }      return null;    }    catch (Exception ex) {      logger.warn(ex);    }    return null;  }  /**   * Parse an address form the supplied string.   * @param address   *    an address string known by the GenericAddress.   * @return boolean   * @see #parse(String address)   */  public boolean parseAddress(String address) {    Address addr = parse(address);    if (addr instanceof SMIAddress) {      setAddress((SMIAddress)addr);      return true;    }    return false;  }  public Object clone() {    return new GenericAddress(address);  }  public int toInt() {    throw new UnsupportedOperationException();  }  public long toLong() {    throw new UnsupportedOperationException();  }  public OID toSubIndex(boolean impliedLength) {    throw new UnsupportedOperationException();  }  public void fromSubIndex(OID subIndex, boolean impliedLength) {    throw new UnsupportedOperationException();  }  public void setValue(String value) {    if (!parseAddress(value)) {			throw new IllegalArgumentException(value + " cannot be parsed by "					+ getClass().getName());		}	}	@Override	public Object getValue() {		return address.toString();	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -