/**
   * Initializes Association related parameters.
   *
   * @param cfg the configuration properties for this class.
   * @param url the DcmURL of the communication partner.
   */
  private final void initAssocParam(ConfigProperties cfg, DcmURL url) {
    String callingAET = null;

    // >>>> Get data for filling the Association object for establishing an
    // >>>> active association from configuration file

    acTimeout = Integer.parseInt(cfg.getProperty("ac-timeout", "5000"));
    dimseTimeout = Integer.parseInt(cfg.getProperty("dimse-timeout", "0"));
    soCloseDelay = Integer.parseInt(cfg.getProperty("so-close-delay", "500"));

    // >>>> Fill the Association Request package (A-ASSOCIATE-RQ)

    // Identifying the communication partner by an AET (Application Entity Title)
    assocRQ.setCalledAET(url.getCalledAET());

    // Identifying ourselves by an AET (Application Entity Title)
    if (url.getCallingAET() != null) {
      callingAET = url.getCallingAET();
    } else {
      callingAET = DEFAULT_CALLING_AET;
    }
    assocRQ.setCallingAET(callingAET);

    // Maximum size of one PDU (Protocol Data Unit)
    assocRQ.setMaxPDULength(Integer.parseInt(cfg.getProperty("max-pdu-len", "16352")));

    // Defines possibilities for asynchron DIMSE communication. Noramly synchron DIMSE communication
    // is used.
    // API doc: AssociationFactory.newAsyncOpsWindow(int maxOpsInvoked, int maxOpsPerfomed)
    // PS 3.7 - Annex D.3.3.3 ASYNCHRONOUS OPERATIONS WINDOW NEGOTIATION
    // maxOpsInvoked: This field shall contain the Maximum-number-operationsinvoked as defined for
    // the Association-requester
    // maxOpsPerfomed: This field shall contain the Maximum-number-operationsperformed as defined
    // for the Association-requester
    assocRQ.setAsyncOpsWindow(
        aFact.newAsyncOpsWindow(Integer.parseInt(cfg.getProperty("max-op-invoked", "0")), 1));

    for (Enumeration it = cfg.keys(); it.hasMoreElements(); ) {
      String key = (String) it.nextElement();

      // Setup available transfer syntaces for storage SOP classes
      // PS 3.4 - Annex B STORAGE SERVICE CLASS
      // PS 3.4 - B.5 STANDARD SOP CLASSES
      if (key.startsWith("pc.")) {
        initPresContext(
            Integer.parseInt(key.substring(3)),
            cfg.tokenize(cfg.getProperty(key), new LinkedList()));
      }
    }
  }
 /**
  * Only used by method initAssocParam: Sets up available transfer syntaces for storage SOP
  * classes.
  *
  * @param pcid is a for the association unique odd number between 1 and 255.
  * @param val a list: First element is the symbolic name of the UID of the SOP to transmit, the
  *     following elements are the supportet transfer syntax for that SOP.
  */
 private final void initPresContext(int pcid, List val) {
   Iterator it = val.iterator();
   String as = UIDs.forName((String) it.next());
   String[] tsUIDs = new String[val.size() - 1];
   for (int i = 0; i < tsUIDs.length; ++i) {
     tsUIDs[i] = UIDs.forName((String) it.next());
   }
   // API doc: AssociationFactory.newPresContext(int pcid, String asuid, String[] tsuid)
   // pcid is a for the association unique odd number between 1 and 255.
   // asuid is the UID of a SOP class
   // TS list of transfer syntaces supported by this class for asuid.
   assocRQ.addPresContext(aFact.newPresContext(pcid, as, tsUIDs));
 }