/**
  * Helper method for adding to the response's already existing collection. This method should only
  * be called before returning the response to the client.
  */
 public void addCollection(Collection bCollection) {
   if (bCollection != null) {
     Iterator iter = bCollection.iterator();
     while (iter.hasNext()) {
       collection.add(iter.next());
     }
   }
 }
 /**
  * Add multiple exceptions to exception collection. This method should only be called before
  * returning the response to the client.
  */
 public void addException(Collection bException) {
   if (bException != null && bException.size() > 0) {
     setStatus(STATUS_FAILURE);
     initExceptions();
     Iterator iter = bException.iterator();
     while (iter.hasNext()) {
       exceptions.add(iter.next());
     }
   }
 }
  /**
   * Utility method for combining the contents of many bulk responses into one. This is useful for
   * JAXR calls that will include multiple calls to the registry for information.
   *
   * <p>If any of the given responses have isPartial set to true, then the returned response will
   * have isPartial set to true as well.
   *
   * <p>This method does not set requestId on the returned bulk response.
   *
   * <p>Status for the returned response is determined after the information has been filled in as
   * follows: 1. default = STATUS_SUCCESS 2. if partial, STATUS_WARNING 3. if exceptions.size() > 0,
   * STATUS_FAILURE
   *
   * @param responses A Collection of BulkResponses
   * @return A BulkResponse containing all the included information
   */
  public static BulkResponse combineBulkResponses(Collection responses) {
    BulkResponseImpl combinedResponse = new BulkResponseImpl();
    combinedResponse.setStatus(JAXRResponse.STATUS_SUCCESS);
    try {
      BulkResponseImpl response = null;
      Collection information = new ArrayList();
      Collection exceptions = new ArrayList();
      boolean isPartial = false;
      Iterator iter = responses.iterator();

      while (iter.hasNext()) {
        response = (BulkResponseImpl) iter.next();
        information.addAll(response.getCollection());
        if (response.getExceptions() != null) {
          exceptions.addAll(response.getExceptions());
        }
        if (response.isPartialResponse() == true) {
          isPartial = true;
        }
      }

      // set partial status before collection
      combinedResponse.setPartialResponse(isPartial);
      if (isPartial == true) {
        combinedResponse.setStatus(JAXRResponse.STATUS_WARNING);
      }
      combinedResponse.setCollection(information);
      if (exceptions.size() > 0) {
        combinedResponse.setExceptions(exceptions);
        combinedResponse.setStatus(JAXRResponse.STATUS_FAILURE);
      }
    } catch (JAXRException e) {
      logger.log(Level.SEVERE, e.getMessage(), e);
    }
    return combinedResponse;
  }
  /**
   * Creates an organization, its classification, and its services, and saves it to the registry.
   */
  public String executePublish(String username, String password, String endpoint) {

    String id = null;
    RegistryService rs = null;
    BusinessLifeCycleManager blcm = null;
    BusinessQueryManager bqm = null;

    try {
      rs = connection.getRegistryService();
      blcm = rs.getBusinessLifeCycleManager();
      bqm = rs.getBusinessQueryManager();
      System.out.println("Got registry service, query " + "manager, and life cycle manager");

      // Get authorization from the registry
      PasswordAuthentication passwdAuth =
          new PasswordAuthentication(username, password.toCharArray());

      Set creds = new HashSet();
      creds.add(passwdAuth);
      connection.setCredentials(creds);
      System.out.println("Established security credentials");

      // Get hardcoded strings from a ResourceBundle
      ResourceBundle bundle = ResourceBundle.getBundle("com.sun.cb.CoffeeRegistry");

      // Create organization name and description
      Organization org = blcm.createOrganization(bundle.getString("org.name"));
      InternationalString s = blcm.createInternationalString(bundle.getString("org.description"));
      org.setDescription(s);

      // Create primary contact, set name
      User primaryContact = blcm.createUser();
      PersonName pName = blcm.createPersonName(bundle.getString("person.name"));
      primaryContact.setPersonName(pName);

      // Set primary contact phone number
      TelephoneNumber tNum = blcm.createTelephoneNumber();
      tNum.setNumber(bundle.getString("phone.number"));
      Collection phoneNums = new ArrayList();
      phoneNums.add(tNum);
      primaryContact.setTelephoneNumbers(phoneNums);

      // Set primary contact email address
      EmailAddress emailAddress = blcm.createEmailAddress(bundle.getString("email.address"));
      Collection emailAddresses = new ArrayList();
      emailAddresses.add(emailAddress);
      primaryContact.setEmailAddresses(emailAddresses);

      // Set primary contact for organization
      org.setPrimaryContact(primaryContact);

      // Set classification scheme to NAICS
      ClassificationScheme cScheme =
          bqm.findClassificationSchemeByName(null, bundle.getString("classification.scheme"));

      // Create and add classification
      Classification classification =
          (Classification)
              blcm.createClassification(
                  cScheme,
                  bundle.getString("classification.name"),
                  bundle.getString("classification.value"));
      Collection classifications = new ArrayList();
      classifications.add(classification);
      org.addClassifications(classifications);

      // Create services and service
      Collection services = new ArrayList();
      Service service = blcm.createService(bundle.getString("service.name"));
      InternationalString is =
          blcm.createInternationalString(bundle.getString("service.description"));
      service.setDescription(is);

      // Create service bindings
      Collection serviceBindings = new ArrayList();
      ServiceBinding binding = blcm.createServiceBinding();
      is = blcm.createInternationalString(bundle.getString("service.binding"));
      binding.setDescription(is);
      binding.setValidateURI(false);
      binding.setAccessURI(endpoint);
      serviceBindings.add(binding);

      // Add service bindings to service
      service.addServiceBindings(serviceBindings);

      // Add service to services, then add services to organization
      services.add(service);
      org.addServices(services);

      // Add organization and submit to registry
      // Retrieve key if successful
      Collection orgs = new ArrayList();
      orgs.add(org);
      BulkResponse response = blcm.saveOrganizations(orgs);
      Collection exceptions = response.getExceptions();
      if (exceptions == null) {
        System.out.println("Organization saved");

        Collection keys = response.getCollection();
        Iterator keyIter = keys.iterator();
        if (keyIter.hasNext()) {
          javax.xml.registry.infomodel.Key orgKey =
              (javax.xml.registry.infomodel.Key) keyIter.next();
          id = orgKey.getId();
          System.out.println("Organization key is " + id);
        }
      } else {
        Iterator excIter = exceptions.iterator();
        Exception exception = null;
        while (excIter.hasNext()) {
          exception = (Exception) excIter.next();
          System.err.println("Exception on save: " + exception.toString());
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
      if (connection != null) {
        try {
          connection.close();
        } catch (JAXRException je) {
          System.err.println("Connection close failed");
        }
      }
    }
    return id;
  }