/**
   * Process a {@link XADLHostPropertyEvent}.
   *
   * @param event
   */
  private void process(XADLHostPropertyEvent event) {
    IHostedArchInstance instance =
        modelRoot.getHostedArchInstance(event.getArchitectureRuntimeId());
    IHost host =
        DBLUtils.createHost(instance, event.getHostId(), modelRoot.getHostpropertyContext());

    switch (event.getXadlEventType()) {
      case ADD:
        logger.info("Adding hostproperties for host " + event.getHostId());
        for (Entry<Object, Object> entry : event.getHostProperties().entrySet()) {
          String name = entry.getKey().toString();

          // get or create property
          IProperty prop = DBLUtils.getHostProperty(host, name);
          if (prop == null) {
            prop = DBLUtils.createHostProperty(name, modelRoot.getHostpropertyContext());
            host.addHostProperty(prop);
          }

          // add values
          if (entry.getValue() instanceof Iterable<?>) {
            for (Object o : (Iterable<?>) entry.getValue()) {
              prop.addValue(
                  DBLUtils.createDescription(o.toString(), modelRoot.getHostpropertyContext()));
            }
          } else {
            prop.addValue(
                DBLUtils.createDescription(
                    entry.getValue().toString(), modelRoot.getHostpropertyContext()));
          }
        }
        break;
      case UPDATE:
        logger.info("Updating hostproperties for host " + event.getHostId());
        for (Entry<Object, Object> entry : event.getHostProperties().entrySet()) {
          String name = entry.getKey().toString();

          // get or create property
          IProperty prop = DBLUtils.getHostProperty(host, name);
          if (prop == null) {
            prop = DBLUtils.createHostProperty(name, modelRoot.getHostpropertyContext());
            host.addHostProperty(prop);
          }

          // update values
          prop.clearValues();
          if (entry.getValue() instanceof Iterable<?>) {
            for (Object o : (Iterable<?>) entry.getValue()) {
              prop.addValue(
                  DBLUtils.createDescription(o.toString(), modelRoot.getHostpropertyContext()));
            }
          } else {
            prop.addValue(
                DBLUtils.createDescription(
                    entry.getValue().toString(), modelRoot.getHostpropertyContext()));
          }
        }
        break;
      case REMOVE:
        logger.info("Removing hostproperties from host " + event.getHostId());
        for (Entry<Object, Object> entry : event.getHostProperties().entrySet()) {
          String name = entry.getKey().toString();

          IProperty prop = DBLUtils.getHostProperty(host, name);
          if (prop != null) {
            host.removeHostProperty(prop);
          }
        }
        break;
      default:
        // not supported
        break;
    }
  }