public boolean equals(Object obj) {
    if (obj == null) return false;

    if (!(obj instanceof IORTemplateImpl)) return false;

    IORTemplateImpl other = (IORTemplateImpl) obj;

    return super.equals(obj) && oktemp.equals(other.getObjectKeyTemplate());
  }
  /** The opaque identifier for the object adapter. */
  public synchronized byte[] adapter_id() {
    checkAccess(MID_ADAPTER_ID);

    if (adapterId == null) {
      checkForNullTemplate();
      adapterId = oktemp.getAdapterId();
    }

    return adapterId;
  }
  public String server_id() {
    checkAccess(MID_SERVER_ID);
    checkForNullTemplate();

    // Good citizen: In the interest of efficiency, we will assume
    // interceptors will not change the resulting byte[] array.
    // Otherwise, we would need to make a clone of this array.

    return Integer.toString(oktemp.getServerId());
  }
  public synchronized String[] adapter_name() {
    checkAccess(MID_ADAPTER_NAME);

    if (adapterName == null) {
      checkForNullTemplate();

      ObjectAdapterId oaid = oktemp.getObjectAdapterId();
      adapterName = oaid.getAdapterName();
    }

    return adapterName;
  }
 public void write(OutputStream os) {
   oktemp.write(os);
   EncapsulationUtility.writeIdentifiableSequence(this, os);
 }
 public int hashCode() {
   return super.hashCode() ^ oktemp.hashCode();
 }