private static CapabilityResponseResource asCapabilityResponseResource(
      final CCapability capability) {
    assert capability != null : "Capability cannot be null";

    final CapabilityResource resource = new CapabilityResource();

    resource.setId(capability.getId());
    resource.setName(capability.getName());
    resource.setTypeId(capability.getTypeId());

    if (capability.getProperties() != null) {
      for (final CCapabilityProperty propery : capability.getProperties()) {
        final CapabilityPropertyResource resourceProp = new CapabilityPropertyResource();
        resourceProp.setKey(propery.getKey());
        resourceProp.setValue(propery.getValue());

        resource.addProperty(resourceProp);
      }
    }

    final CapabilityResponseResource response = new CapabilityResponseResource();
    response.setData(resource);

    return response;
  }
  public ValidationResponse validate(final CCapability capability, final boolean isCreateMode) {
    final ValidationResponse response = new ValidationResponse();

    if (!isCreateMode && StringUtils.isEmpty(capability.getId())) {
      final ValidationMessage msg = new ValidationMessage("id", "Capability ID cannot be empty.");

      response.addValidationError(msg);
    }
    if (StringUtils.isEmpty(capability.getName())) {
      final ValidationMessage msg =
          new ValidationMessage("name", "Capability name cannot be empty.");

      response.addValidationError(msg);
    }
    if (StringUtils.isEmpty(capability.getTypeId())) {
      final ValidationMessage msg =
          new ValidationMessage("typeId", "Capability type cannot be empty.");

      response.addValidationError(msg);
    }

    for (final CCapabilityProperty property : capability.getProperties()) {
      if (StringUtils.isEmpty(property.getKey())) {
        final ValidationMessage msg =
            new ValidationMessage("type", "Capability properties cannot cannot have an empty key.");

        response.addValidationError(msg);
        break;
      }
    }

    return response;
  }
  private void convertToKazuki(final File configFile) throws Exception {
    try (Reader r = new FileReader(configFile);
        FileInputStream is = new FileInputStream(configFile);
        Reader fr = new InputStreamReader(is)) {

      Xpp3DomBuilder.build(r);
      Configuration configuration = new NexusCapabilitiesConfigurationXpp3Reader().read(fr);
      List<CCapability> capabilities = configuration.getCapabilities();

      if (capabilities != null) {
        for (final CCapability c : capabilities) {

          // NEXUS-6349: do not convert outreach related capabilities and let outreach plugin
          // recreate them
          if ("OutreachMarkerCapability".equals(c.getTypeId())
              || "OutreachManagementCapability".equals(c.getTypeId())) {
            continue;
          }

          Map<String, String> properties = Maps.newHashMap();
          if (c.getProperties() != null) {
            for (final CCapabilityProperty property : c.getProperties()) {
              properties.put(property.getKey(), property.getValue());
            }
          }

          capabilityStorage.add(
              new CapabilityStorageItem(
                  c.getVersion(), c.getTypeId(), c.isEnabled(), c.getNotes(), properties));
        }
        log.info("Converted {} capabilities from capabilities.xml to Kazuki", capabilities.size());
      }
    }
  }