code: public static Operation createUndeployOperation(final Set<UndeployDescription> undeployDescriptions) {
          Assertions.requiresNotNullOrNotEmptyParameter("undeployDescriptions", undeployDescriptions);
          final CompositeOperationBuilder builder = CompositeOperationBuilder.create(true);
          for (UndeployDescription undeployDescription : undeployDescriptions) {
              addUndeployOperationStep(builder, undeployDescription);
          }
          return builder.build();
      }
docs: Creates an undeploy operation for each deployment description.
  <p>
  If the {@link UndeployDescription#isRemoveContent()} returns {@code true} the content will also be removed from
  the content repository. Otherwise the content will remain on the server and only the {@code undeploy} operation
  will be executed.
  </p>
  <p>
  Note that the {@link UndeployDescription#isFailOnMissing() failOnMissing} is ignored and the operation will fail
  if any deployments being undeployed are missing.
  </p>
  
  @param undeployDescriptions the set of descriptions used to crate the operation
  
  @return the undeploy operation