@Override
  protected void buildDemoApplicationImpl(AdminClient client) throws Exception {

    logger.info("Loading 'Street lights driver application' data...");

    loginTenantAdmin(client);

    ApplicationDto streetLightApplication = new ApplicationDto();
    streetLightApplication.setName("Street light driver");
    streetLightApplication = client.editApplication(streetLightApplication);

    sdkProfileDto.setApplicationId(streetLightApplication.getId());
    sdkProfileDto.setProfileSchemaVersion(0);
    sdkProfileDto.setNotificationSchemaVersion(1);
    sdkProfileDto.setLogSchemaVersion(1);
    sdkProfileDto.setConfigurationSchemaVersion(1);

    loginTenantDeveloper(client);

    logger.info("Creating profile schema...");

    CTLSchemaInfoDto profileCtlSchema =
        client.saveCTLSchema(
            getResourceAsString("profile.avsc"),
            CTLSchemaScopeDto.PROFILE_SCHEMA,
            streetLightApplication.getId());

    EndpointProfileSchemaDto profileSchemaDto = new EndpointProfileSchemaDto();
    profileSchemaDto.setApplicationId(streetLightApplication.getId());
    profileSchemaDto.setName("StreetLightsDriverProfile schema");
    profileSchemaDto.setDescription("Street light driver profile schema");
    profileSchemaDto.setCtlSchemaId(profileCtlSchema.getId());
    profileSchemaDto = client.saveProfileSchema(profileSchemaDto);
    logger.info("Profile schema version: {}", profileSchemaDto.getVersion());
    sdkProfileDto.setProfileSchemaVersion(profileSchemaDto.getVersion());
    logger.info("Profile schema was created.");

    logger.info("Creating configuration schema...");
    ConfigurationSchemaDto configurationSchema = new ConfigurationSchemaDto();
    configurationSchema.setApplicationId(streetLightApplication.getId());
    configurationSchema.setName("StreetLightsConfiguration schema");
    configurationSchema.setDescription("Street Light configuration schema");
    configurationSchema =
        client.createConfigurationSchema(
            configurationSchema, getResourcePath("configuration.avsc"));
    logger.info("Configuration schema version: {}", configurationSchema.getVersion());
    sdkProfileDto.setConfigurationSchemaVersion(configurationSchema.getVersion());
    logger.info("Configuration schema was created");

    for (int i = 0; i < LIGHT_ZONE_COUNT; ++i) {
      EndpointGroupDto group = new EndpointGroupDto();
      group.setApplicationId(streetLightApplication.getId());
      group.setName("Zone " + Integer.toString(i));
      group.setWeight(i + 1);
      logger.info("Creating Endpoint group for Light Zone {}", i);
      group = client.editEndpointGroup(group);
      logger.info("Created Endpoint group for Light Zone {}", i);

      ProfileFilterDto filter = new ProfileFilterDto();
      filter.setApplicationId(streetLightApplication.getId());
      filter.setEndpointGroupId(group.getId());
      filter.setEndpointProfileSchemaId(profileSchemaDto.getId());
      filter.setEndpointProfileSchemaVersion(profileSchemaDto.getVersion());
      filter.setBody("lightZones.contains(new Integer(" + Integer.toString(i) + "))");
      filter.setStatus(UpdateStatus.INACTIVE);
      logger.info("Creating Profile filter for Light Zone {}", i);
      filter = client.editProfileFilter(filter);
      logger.info("Activating Profile filter for Light Zone {}", i);
      client.activateProfileFilter(filter.getId());
      logger.info("Created and activated Profile filter for Light Zone {}", i);

      ConfigurationDto baseGroupConfiguration = new ConfigurationDto();
      baseGroupConfiguration.setApplicationId(streetLightApplication.getId());
      baseGroupConfiguration.setEndpointGroupId(group.getId());
      baseGroupConfiguration.setSchemaId(configurationSchema.getId());
      baseGroupConfiguration.setSchemaVersion(configurationSchema.getVersion());
      baseGroupConfiguration.setDescription("Base street light driver configuration");
      String body = getConfigurationBodyForEndpointGroup(i);
      logger.info("Configuration body: [{}]", body);
      baseGroupConfiguration.setBody(body);
      logger.info("Editing the configuration...");
      baseGroupConfiguration = client.editConfiguration(baseGroupConfiguration);
      logger.info("Configuration was successfully edited");
      logger.info("Activating the configuration");
      client.activateConfiguration(baseGroupConfiguration.getId());
      logger.info("Configuration was activated");
    }

    logger.info("Finished loading 'Street lights driver application' data...");
  }