protected Collection findAllFolders()

in cloud-vmware-server/src/main/java/jetbrains/buildServer/clouds/vmware/connector/VMWareApiConnectorImpl.java [330:388]


  protected Collection<FolderBean> findAllFolders() throws VmwareCheckedCloudException {
    final AtomicReference<VmwareCheckedCloudException> exceptionRef = new AtomicReference<>();
    final Collection<FolderBean> result = findWithDatacenter(dc -> {
      try {
        final ObjectContent[] ocs = getObjectContents(dc, new String[][]{{
          "Folder", "name", "childType", "parent"
        },});
        if (ocs == null){
          return Stream.empty();
        }
        final String datacenterId = dc.getMOR().getVal();
        return Arrays.stream(ocs).map(oc -> {
          try {
            final Map<String, Object> mappedProperties = Arrays.stream(oc.getPropSet()).collect(Collectors.toMap(
              DynamicProperty::getName, DynamicProperty::getVal
            ));

            final String simpleName = String.valueOf(mappedProperties.get("name"));
            final ManagedObjectReference parent = (ManagedObjectReference)mappedProperties.get("parent");

            LOG.debug("Found folder with name '" + simpleName + "'. Parent: " + (parent == null ? "null" : parent.toString()));

            final String[] childTypes = ((ArrayOfString)mappedProperties.get("childType")).getString();
            boolean skip = true;
            for (String childType : childTypes) {
              if (VM_TYPE.equals(childType)) {
                skip = false;
                break;
              }
            }
            if (skip) {
              LOG.debug("The folder cannot contain VMs. Skipping it...");
              return null;
            }

            final String fullFolderPath = getFullPath(simpleName, oc.obj, parent, dc);
            LOG.debug("Calculated path: " + fullFolderPath);

            return new FolderBean(oc.obj,
                                  simpleName,
                                  fullFolderPath,
                                  childTypes,
                                  parent,
                                  datacenterId
            );
          } catch (Exception ex) {
            LOG.warnAndDebugDetails("Error getting folder details", ex);
            return null;
          }
        });
      } catch (RemoteException e) {
        LOG.warnAndDebugDetails("An error occurred while searching for all folders", e);
        exceptionRef.set(new VmwareCheckedCloudException(e));
        return Stream.empty();
      }
    });

    return result;
  }