Search in sources :

Example 1 with Tab

use of org.broadleafcommerce.openadmin.web.form.entity.Tab in project BroadleafCommerce by BroadleafCommerce.

the class ErrorsProcessor method populateModelVariables.

@Override
public Map<String, Object> populateModelVariables(String tagName, Map<String, String> tagAttributes, String attributeName, String attributeValue, BroadleafTemplateContext context) {
    BindStatus bindStatus = context.getBindStatus(attributeValue);
    Map<String, Object> newLocalVars = new HashMap<>();
    if (bindStatus.isError()) {
        EntityForm form = (EntityForm) ((BindingResult) bindStatus.getErrors()).getTarget();
        // Map of tab name -> (Map field Name -> list of error messages)
        Map<String, Map<String, List<String>>> result = new HashMap<>();
        if (!hideTopLevelFieldErrors) {
            for (FieldError err : bindStatus.getErrors().getFieldErrors()) {
                // attempt to look up which tab the field error is on. If it can't be found, just use
                // the default tab for the group
                String tabName = EntityForm.DEFAULT_TAB_NAME;
                Tab tab = form.findTabForField(err.getField());
                if (tab != null) {
                    tabName = tab.getTitle();
                }
                Map<String, List<String>> tabErrors = result.get(tabName);
                if (tabErrors == null) {
                    tabErrors = new HashMap<>();
                    result.put(tabName, tabErrors);
                }
                if (err.getField().contains(DynamicEntityFormInfo.FIELD_SEPARATOR)) {
                    // at this point the field name actually occurs within some array syntax
                    String fieldName = extractFieldName(err);
                    String[] fieldInfo = fieldName.split("\\" + DynamicEntityFormInfo.FIELD_SEPARATOR);
                    Field formField = form.getDynamicForm(fieldInfo[0]).findField(fieldName);
                    if (formField != null) {
                        addFieldError(formField.getFriendlyName(), err.getCode(), tabErrors);
                    } else {
                        LOG.warn("Could not find field " + fieldName + " within the dynamic form " + fieldInfo[0]);
                        addFieldError(fieldName, err.getCode(), tabErrors);
                    }
                } else {
                    if (form.getTabs().size() > 0) {
                        Field formField = form.findField(err.getField());
                        if (formField != null) {
                            addFieldError(formField.getFriendlyName(), err.getCode(), tabErrors);
                        } else {
                            LOG.warn("Could not find field " + err.getField() + " within the main form");
                            addFieldError(err.getField(), err.getCode(), tabErrors);
                        }
                    } else {
                        // this is the code that is executed when a Translations add action contains errors
                        // this branch of the code just puts a placeholder "tabErrors", to avoid errprProcessor parsing errors, and
                        // avoids checking on tabs, fieldGroups or fields (which for translations are empty), thus skipping any warning
                        newLocalVars.put("tabErrors", tabErrors);
                        return newLocalVars;
                    }
                }
            }
        }
        String translatedGeneralTab = GENERAL_ERRORS_TAB_KEY;
        BroadleafRequestContext blcContext = BroadleafRequestContext.getBroadleafRequestContext();
        if (blcContext != null && blcContext.getMessageSource() != null) {
            translatedGeneralTab = blcContext.getMessageSource().getMessage(translatedGeneralTab, null, translatedGeneralTab, blcContext.getJavaLocale());
        }
        for (ObjectError err : bindStatus.getErrors().getGlobalErrors()) {
            Map<String, List<String>> tabErrors = result.get(GENERAL_ERRORS_TAB_KEY);
            if (tabErrors == null) {
                tabErrors = new HashMap<>();
                result.put(translatedGeneralTab, tabErrors);
            }
            addFieldError(GENERAL_ERROR_FIELD_KEY, err.getCode(), tabErrors);
        }
        newLocalVars.put("tabErrors", result);
    }
    return newLocalVars;
}
Also used : EntityForm(org.broadleafcommerce.openadmin.web.form.entity.EntityForm) HashMap(java.util.HashMap) BroadleafRequestContext(org.broadleafcommerce.common.web.BroadleafRequestContext) FieldError(org.springframework.validation.FieldError) BindStatus(org.springframework.web.servlet.support.BindStatus) Field(org.broadleafcommerce.openadmin.web.form.entity.Field) ObjectError(org.springframework.validation.ObjectError) Tab(org.broadleafcommerce.openadmin.web.form.entity.Tab) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map)

Example 2 with Tab

use of org.broadleafcommerce.openadmin.web.form.entity.Tab in project BroadleafCommerce by BroadleafCommerce.

the class AdminEntityServiceImpl method getRecordsForSelectedTab.

@Override
public Map<String, DynamicResultSet> getRecordsForSelectedTab(ClassMetadata cmd, Entity containingEntity, List<SectionCrumb> sectionCrumb, String currentTabName) throws ServiceException {
    Map<String, DynamicResultSet> map = new HashMap<String, DynamicResultSet>();
    for (Property p : cmd.getProperties()) {
        if (ArrayUtils.contains(p.getMetadata().getAvailableToTypes(), containingEntity.getType()[0]) && p.getMetadata() instanceof CollectionMetadata) {
            CollectionMetadata collectionMetadata = (CollectionMetadata) p.getMetadata();
            // Give preference to the Group since EntityForm.addListGrid() gives preference to the Group
            TabMetadata tabMetadata = cmd.getTabMetadataUsingGroupKey(collectionMetadata.getGroup());
            if (tabMetadata == null) {
                tabMetadata = cmd.getTabMetadataUsingTabKey(collectionMetadata.getTab());
            }
            String tabName = tabMetadata == null ? collectionMetadata.getTab() : tabMetadata.getTabName();
            int tabOrder = tabMetadata == null ? collectionMetadata.getTabOrder() : tabMetadata.getTabOrder();
            updateTabInfo(collectionMetadata, cmd, tabName, tabOrder);
            if (collectionMetadata.getLazyFetch() != null && collectionMetadata.getLazyFetch() && tabName.toUpperCase().startsWith(currentTabName.toUpperCase()) && !collectionMetadata.getManualFetch()) {
                PersistenceResponse response2 = getRecordsForCollection(cmd, containingEntity, p, null, null, null, sectionCrumb);
                map.put(p.getName(), response2.getDynamicResultSet());
            } else if (collectionMetadata.getLazyFetch() != null && !collectionMetadata.getLazyFetch() && !collectionMetadata.getManualFetch()) {
                PersistenceResponse response2 = getRecordsForCollection(cmd, containingEntity, p, null, null, null, sectionCrumb);
                map.put(p.getName(), response2.getDynamicResultSet());
            } else {
                DynamicResultSet drs = new DynamicResultSet();
                Map<String, Tab> tabMap = new HashMap<String, Tab>();
                Tab tab = new Tab();
                tab.setKey(tabName);
                tab.setTitle(BLCMessageUtils.getMessage(tabName));
                tab.setOrder(tabOrder);
                tabMap.put(tab.getTitle(), tab);
                drs.setUnselectedTabMetadata(tabMap);
                drs.setTotalRecords(0);
                drs.setStartIndex(0);
                drs.setBatchId(1);
                drs.setClassMetaData(null);
                drs.setPageSize(1);
                drs.setRecords(new Entity[0]);
                map.put(p.getName(), drs);
            }
        }
    }
    return map;
}
Also used : AdminMainEntity(org.broadleafcommerce.common.admin.domain.AdminMainEntity) Entity(org.broadleafcommerce.openadmin.dto.Entity) BasicCollectionMetadata(org.broadleafcommerce.openadmin.dto.BasicCollectionMetadata) CollectionMetadata(org.broadleafcommerce.openadmin.dto.CollectionMetadata) AdornedTargetCollectionMetadata(org.broadleafcommerce.openadmin.dto.AdornedTargetCollectionMetadata) HashMap(java.util.HashMap) PersistenceResponse(org.broadleafcommerce.openadmin.server.service.persistence.PersistenceResponse) Tab(org.broadleafcommerce.openadmin.web.form.entity.Tab) TabMetadata(org.broadleafcommerce.openadmin.dto.TabMetadata) DynamicResultSet(org.broadleafcommerce.openadmin.dto.DynamicResultSet) BLCSystemProperty(org.broadleafcommerce.common.util.BLCSystemProperty) Property(org.broadleafcommerce.openadmin.dto.Property) Map(java.util.Map) HashMap(java.util.HashMap)

Example 3 with Tab

use of org.broadleafcommerce.openadmin.web.form.entity.Tab in project BroadleafCommerce by BroadleafCommerce.

the class AdminAbstractController method populateJsonValidationErrors.

/**
 * Populates the given <b>json</b> response object based on the given <b>form</b> and <b>result</b>
 * @return the same <b>result</b> that was passed in
 */
protected JsonResponse populateJsonValidationErrors(EntityForm form, BindingResult result, JsonResponse json) {
    List<Map<String, Object>> errors = new ArrayList<>();
    for (FieldError e : result.getFieldErrors()) {
        Map<String, Object> errorMap = new HashMap<>();
        errorMap.put("errorType", "field");
        String fieldName = e.getField().substring(e.getField().indexOf("[") + 1, e.getField().indexOf("]")).replace("_", "-");
        errorMap.put("field", fieldName);
        errorMap.put("message", translateErrorMessage(e));
        errorMap.put("code", e.getCode());
        String tabFieldName = fieldName.replaceAll("-+", ".");
        Tab errorTab = form.findTabForField(tabFieldName);
        if (errorTab != null) {
            errorMap.put("tab", errorTab.getTitle());
        }
        errors.add(errorMap);
    }
    for (ObjectError e : result.getGlobalErrors()) {
        Map<String, Object> errorMap = new HashMap<>();
        errorMap.put("errorType", "global");
        errorMap.put("code", e.getCode());
        errorMap.put("message", translateErrorMessage(e));
        errors.add(errorMap);
    }
    json.with("errors", errors);
    return json;
}
Also used : ObjectError(org.springframework.validation.ObjectError) Tab(org.broadleafcommerce.openadmin.web.form.entity.Tab) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) FieldError(org.springframework.validation.FieldError) HashMap(java.util.HashMap) Map(java.util.Map) MultiValueMap(org.springframework.util.MultiValueMap)

Aggregations

HashMap (java.util.HashMap)3 Map (java.util.Map)3 Tab (org.broadleafcommerce.openadmin.web.form.entity.Tab)3 ArrayList (java.util.ArrayList)2 FieldError (org.springframework.validation.FieldError)2 ObjectError (org.springframework.validation.ObjectError)2 List (java.util.List)1 AdminMainEntity (org.broadleafcommerce.common.admin.domain.AdminMainEntity)1 BLCSystemProperty (org.broadleafcommerce.common.util.BLCSystemProperty)1 BroadleafRequestContext (org.broadleafcommerce.common.web.BroadleafRequestContext)1 AdornedTargetCollectionMetadata (org.broadleafcommerce.openadmin.dto.AdornedTargetCollectionMetadata)1 BasicCollectionMetadata (org.broadleafcommerce.openadmin.dto.BasicCollectionMetadata)1 CollectionMetadata (org.broadleafcommerce.openadmin.dto.CollectionMetadata)1 DynamicResultSet (org.broadleafcommerce.openadmin.dto.DynamicResultSet)1 Entity (org.broadleafcommerce.openadmin.dto.Entity)1 Property (org.broadleafcommerce.openadmin.dto.Property)1 TabMetadata (org.broadleafcommerce.openadmin.dto.TabMetadata)1 PersistenceResponse (org.broadleafcommerce.openadmin.server.service.persistence.PersistenceResponse)1 EntityForm (org.broadleafcommerce.openadmin.web.form.entity.EntityForm)1 Field (org.broadleafcommerce.openadmin.web.form.entity.Field)1