Search in sources :

Example 1 with AssetFieldDescriptor

use of util.ServiceFormUtils.AssetFieldDescriptor in project coprhd-controller by CoprHD.

the class Services method showForm.

/**
 * Builds a form for a particular service
 */
public static void showForm(String serviceId) {
    TenantSelector.addRenderArgs();
    boolean isTestWorkflow = false;
    CatalogServiceRestRep service = CatalogServiceUtils.getCatalogService(uri(serviceId));
    if (null == service.getCatalogCategory()) {
        isTestWorkflow = true;
    }
    List<CatalogServiceFieldRestRep> serviceFields = service.getCatalogServiceFields();
    // If serviceDescriptor is null render another template that spells out the problem for the user.
    ServiceDescriptorRestRep serviceDescriptor = service.getServiceDescriptor();
    if (serviceDescriptor == null) {
        corruptedService(service);
    }
    Map<String, Object> fieldOptions = new HashMap<String, Object>();
    // add the breadcrumb
    if (!isTestWorkflow) {
        addBreadCrumbToRenderArgs(service);
    } else {
        addBreadCrumbToRenderArgs(service, Common.reverseRoute(WorkflowBuilder.class, "view"));
    }
    // Mark the service as recently used
    // RecentUtils.usedService(service);
    Map<String, AssetFieldDescriptor> assetFieldDescriptors = ServiceFormUtils.createAssetFieldDescriptors(serviceDescriptor);
    // Calculate default values for all fields
    Map<String, String> defaultValues = getDefaultValues(serviceDescriptor);
    // Calculate asset parameters for any fields that are overridden
    Map<String, String> overriddenValues = getOverriddenValues(service);
    Map<String, String> availableAssets = getAvailableAssets(assetFieldDescriptors, overriddenValues);
    // Load any Asset Options for root fields so they are rendered directly onto the form
    List<ServiceFieldRestRep> allFields = ServiceDescriptorUtils.getAllFieldList(serviceDescriptor.getItems());
    for (ServiceFieldRestRep field : allFields) {
        if (field.isAsset()) {
            // Compute to see if we have all dependencies. We have all dependencies if fieldsWeDependOn is empty
            // or it only contains fields we have in our overridden values.
            AssetFieldDescriptor fieldDescriptor = assetFieldDescriptors.get(field.getName());
            boolean hasAllDependencies = overriddenValues.keySet().containsAll(fieldDescriptor.fieldsWeDependOn);
            boolean isOverridden = overriddenValues.containsKey(field.getName());
            if (hasAllDependencies && !isOverridden) {
                List<AssetOption> options = getAssetOptions(field, availableAssets);
                fieldOptions.put(field.getType() + "-options", options);
                // If a required field is missing any options, display a warning message
                if (options.isEmpty() && field.isRequired() && !field.getType().equalsIgnoreCase("field")) {
                    flash.put("rawWarning", MessagesUtils.get("service.missingAssets", field.getLabel()));
                }
            }
        }
    }
    Gson gson = new Gson();
    String defaultValuesJSON = gson.toJson(defaultValues);
    String assetFieldDescriptorsJSON = gson.toJson(assetFieldDescriptors);
    String overriddenValuesJSON = gson.toJson(overriddenValues);
    boolean showForm = true;
    // Display an error message and don't display the form if an execution window is required but none are defined
    if (Boolean.TRUE.equals(service.isExecutionWindowRequired()) && !hasExecutionWindows()) {
        flash.error(MessagesUtils.get("service.noExecutionWindows"));
        showForm = false;
    }
    renderArgs.data.putAll(new ImmutableMap.Builder<String, Object>().put("service", service).put("serviceFields", serviceFields).put("serviceDescriptor", serviceDescriptor).put("assetFieldDescriptorsJSON", assetFieldDescriptorsJSON).put("defaultValuesJSON", defaultValuesJSON).put("overriddenValuesJSON", overriddenValuesJSON).put("showForm", new Boolean(showForm)).build());
    // Adding to request, as renderArgs can't be dynamically named
    request.current().args.putAll(fieldOptions);
    copyRenderArgsToAngular();
    angularRenderArgs().putAll(fieldOptions);
    angularRenderArgs().putAll(ImmutableMap.of("assetFieldDescriptors", assetFieldDescriptors, "defaultValues", defaultValues, "overriddenValues", overriddenValues));
    render();
}
Also used : AssetOption(com.emc.vipr.model.catalog.AssetOption) HashMap(java.util.HashMap) Gson(com.google.gson.Gson) ImmutableMap(com.google.common.collect.ImmutableMap) CatalogServiceFieldRestRep(com.emc.vipr.model.catalog.CatalogServiceFieldRestRep) ServiceDescriptorRestRep(com.emc.vipr.model.catalog.ServiceDescriptorRestRep) AssetFieldDescriptor(util.ServiceFormUtils.AssetFieldDescriptor) CatalogServiceFieldRestRep(com.emc.vipr.model.catalog.CatalogServiceFieldRestRep) ServiceFieldRestRep(com.emc.vipr.model.catalog.ServiceFieldRestRep) CatalogServiceRestRep(com.emc.vipr.model.catalog.CatalogServiceRestRep)

Example 2 with AssetFieldDescriptor

use of util.ServiceFormUtils.AssetFieldDescriptor in project coprhd-controller by CoprHD.

the class Services method getAvailableAssets.

/**
 * Gets the available assets from the overridden values. The available assets are mapped by type not name (like the
 * overridden values are).
 *
 * @param descriptors
 *            the asset field descriptors.
 * @param overriddenValues
 *            the overridden values.
 * @return the available assets mapped by type.
 */
private static Map<String, String> getAvailableAssets(Map<String, AssetFieldDescriptor> descriptors, Map<String, String> overriddenValues) {
    Map<String, String> availableAssets = Maps.newHashMap();
    for (Map.Entry<String, AssetFieldDescriptor> entry : descriptors.entrySet()) {
        String name = entry.getKey();
        AssetFieldDescriptor descriptor = entry.getValue();
        boolean isOverridden = overriddenValues.containsKey(name);
        // Add any overridden asset value to the map by type
        if (isOverridden) {
            String value = overriddenValues.get(name);
            availableAssets.put(descriptor.assetType, value);
        }
    }
    return availableAssets;
}
Also used : AssetFieldDescriptor(util.ServiceFormUtils.AssetFieldDescriptor) HashMap(java.util.HashMap) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap)

Aggregations

ImmutableMap (com.google.common.collect.ImmutableMap)2 HashMap (java.util.HashMap)2 AssetFieldDescriptor (util.ServiceFormUtils.AssetFieldDescriptor)2 AssetOption (com.emc.vipr.model.catalog.AssetOption)1 CatalogServiceFieldRestRep (com.emc.vipr.model.catalog.CatalogServiceFieldRestRep)1 CatalogServiceRestRep (com.emc.vipr.model.catalog.CatalogServiceRestRep)1 ServiceDescriptorRestRep (com.emc.vipr.model.catalog.ServiceDescriptorRestRep)1 ServiceFieldRestRep (com.emc.vipr.model.catalog.ServiceFieldRestRep)1 Gson (com.google.gson.Gson)1 Map (java.util.Map)1