@Override
  public void bootstrap(Resource resource) throws ResourceException {
    log.info("Loading bootstrap to start resource...");
    oldModel = resource.getModel();
    resetModel(resource);

    /* start its capabilities */
    for (ICapability capab : resource.getCapabilities()) {
      /* abstract capabilities have to be initialized */
      log.debug("Found a capability in the resource.");
      /* abstract capabilities have to be initialized */
      if (capab instanceof AbstractCapability) {
        log.debug("Executing capabilities startup...");
        ((AbstractCapability) capab).sendRefreshActions();
      }
    }

    IQueueManagerCapability queueCapab =
        (IQueueManagerCapability) resource.getCapabilityByInterface(IQueueManagerCapability.class);
    QueueResponse response;
    try {
      response = queueCapab.execute();
      if (!response.isOk()) {
        // TODO IMPROVE ERROR REPORTING
        throw new ResourceException(
            "Error during capabilities startup. Failed to execute startUp actions.");
      }
    } catch (ProtocolException e) {
      throw new ResourceException(
          "Error during capabilities startup. Failed to execute startUp actions.", e);
    } catch (ActionException e) {
      throw new ResourceException(
          "Error during capabilities startup. Failed to execute startUp actions.", e);
    } catch (CapabilityException e) {
      throw new ResourceException(
          "Error during capabilities startup. Failed to execute startUp actions.", e);
    }

    if (resource.getProfile() != null) {
      log.debug("Executing initModel from profile...");
      resource.getProfile().initModel(resource.getModel());
    }

    if (ModelHelper.getInterfaces(((ComputerSystem) resource.getModel())).isEmpty()) {
      log.warn("Router has no interfaces");
    }

    // FIXME This should be part of refresh action
    initVirtualResources(resource);
  }