Search in sources :

Example 16 with AdornedTargetCollectionMetadata

use of org.broadleafcommerce.openadmin.dto.AdornedTargetCollectionMetadata in project BroadleafCommerce by BroadleafCommerce.

the class AdminBasicEntityController method showViewUpdateCollection.

/**
 * Shows the view and populates the model for updating a collection item. You can also pass in an entityform and entity
 * which are optional. If they are not passed in then they are automatically looked up
 *
 * @param request
 * @param model
 * @param pathVars
 * @param id
 * @param collectionField
 * @param collectionItemId
 * @param modalHeaderType
 * @param entityForm
 * @param entity
 * @return
 * @throws ServiceException
 */
protected String showViewUpdateCollection(HttpServletRequest request, Model model, Map<String, String> pathVars, String id, String collectionField, String collectionItemId, String alternateId, String modalHeaderType, EntityForm entityForm, Entity entity) throws ServiceException {
    String sectionKey = getSectionKey(pathVars);
    String mainClassName = getClassNameForSection(sectionKey);
    List<SectionCrumb> sectionCrumbs = getSectionCrumbs(request, sectionKey, id);
    ClassMetadata mainMetadata = service.getClassMetadata(getSectionPersistencePackageRequest(mainClassName, sectionCrumbs, pathVars)).getDynamicResultSet().getClassMetaData();
    Property collectionProperty = mainMetadata.getPMap().get(collectionField);
    FieldMetadata md = collectionProperty.getMetadata();
    SectionCrumb nextCrumb = new SectionCrumb();
    if (md instanceof MapMetadata) {
        nextCrumb.setSectionIdentifier(((MapMetadata) md).getValueClassName());
    } else {
        nextCrumb.setSectionIdentifier(((CollectionMetadata) md).getCollectionCeilingEntity());
    }
    nextCrumb.setSectionId(collectionItemId);
    if (!sectionCrumbs.contains(nextCrumb)) {
        sectionCrumbs.add(nextCrumb);
    }
    PersistencePackageRequest ppr = getSectionPersistencePackageRequest(mainClassName, sectionCrumbs, pathVars);
    Entity parentEntity = service.getRecord(ppr, id, mainMetadata, false).getDynamicResultSet().getRecords()[0];
    ppr = PersistencePackageRequest.fromMetadata(md, sectionCrumbs);
    if (md instanceof BasicCollectionMetadata && (((BasicCollectionMetadata) md).getAddMethodType().equals(AddMethodType.PERSIST) || ((BasicCollectionMetadata) md).getAddMethodType().equals(AddMethodType.PERSIST_EMPTY))) {
        BasicCollectionMetadata fmd = (BasicCollectionMetadata) md;
        ClassMetadata collectionMetadata = service.getClassMetadata(ppr).getDynamicResultSet().getClassMetaData();
        if (entity == null) {
            entity = service.getRecord(ppr, collectionItemId, collectionMetadata, true).getDynamicResultSet().getRecords()[0];
        }
        String currentTabName = getCurrentTabName(pathVars, collectionMetadata);
        Map<String, DynamicResultSet> subRecordsMap = service.getRecordsForSelectedTab(collectionMetadata, entity, sectionCrumbs, currentTabName);
        if (entityForm == null) {
            entityForm = formService.createEntityForm(collectionMetadata, entity, subRecordsMap, sectionCrumbs);
        } else {
            entityForm.clearFieldsMap();
            formService.populateEntityForm(collectionMetadata, entity, subRecordsMap, entityForm, sectionCrumbs);
            // remove all the actions since we're not trying to redisplay them on the form
            entityForm.removeAllActions();
        }
        entityForm.removeAction(DefaultEntityFormActions.DELETE);
        addAuditableDisplayFields(entityForm);
        model.addAttribute("entityForm", entityForm);
        model.addAttribute("viewType", "modal/simpleEditEntity");
    } else if (md instanceof AdornedTargetCollectionMetadata) {
        AdornedTargetCollectionMetadata fmd = (AdornedTargetCollectionMetadata) md;
        if (entity == null) {
            entity = service.getAdvancedCollectionRecord(mainMetadata, parentEntity, collectionProperty, collectionItemId, sectionCrumbs, alternateId).getDynamicResultSet().getRecords()[0];
        }
        boolean populateTypeAndId = true;
        boolean isViewCollectionItem = ModalHeaderType.VIEW_COLLECTION_ITEM.getType().equals(modalHeaderType);
        if (entityForm == null) {
            entityForm = formService.buildAdornedListForm(fmd, ppr.getAdornedList(), id, isViewCollectionItem, sectionCrumbs, false);
            entityForm.removeAction(DefaultAdornedEntityFormActions.Add);
            entityForm.addAction(DefaultAdornedEntityFormActions.Save);
        } else {
            entityForm.clearFieldsMap();
            String entityType = entityForm.getEntityType();
            formService.buildAdornedListForm(fmd, ppr.getAdornedList(), id, isViewCollectionItem, entityForm, sectionCrumbs, false);
            entityForm.setEntityType(entityType);
            populateTypeAndId = false;
        }
        Map<String, Object> responseMap = new HashMap<>();
        adornedTargetAutoPopulateExtensionManager.getProxy().autoSetAdornedTargetManagedFields(md, mainClassName, id, collectionField, collectionItemId, responseMap);
        ClassMetadata cmd = service.getClassMetadata(ppr).getDynamicResultSet().getClassMetaData();
        for (String field : fmd.getMaintainedAdornedTargetFields()) {
            if (responseMap.containsKey(field) && responseMap.containsKey("autoSubmit")) {
                continue;
            }
            Property p = cmd.getPMap().get(field);
            if (p != null && p.getMetadata() instanceof AdornedTargetCollectionMetadata) {
                // Because we're dealing with a nested adorned target collection, this particular request must act
                // directly on the first adorned target collection. Because of this, we need the actual id property
                // from the entity that models the adorned target relationship, and not the id of the target object.
                Property alternateIdProperty = entity.getPMap().get(BasicPersistenceModule.ALTERNATE_ID_PROPERTY);
                DynamicResultSet drs = service.getRecordsForCollection(cmd, entity, p, null, null, null, alternateIdProperty.getValue(), sectionCrumbs).getDynamicResultSet();
                ListGrid listGrid = formService.buildCollectionListGrid(alternateIdProperty.getValue(), drs, p, ppr.getAdornedList().getAdornedTargetEntityClassname(), sectionCrumbs);
                listGrid.getToolbarActions().add(DefaultListGridActions.ADD);
                if (drs.getUnselectedTabMetadata().get(EntityForm.DEFAULT_TAB_NAME) != null) {
                    entityForm.addListGrid(cmd, listGrid, EntityForm.DEFAULT_TAB_NAME, EntityForm.DEFAULT_TAB_ORDER, fmd.getGroup(), true);
                } else {
                    entityForm.addListGrid(cmd, listGrid, EntityForm.DEFAULT_TAB_NAME, EntityForm.DEFAULT_TAB_ORDER, fmd.getGroup(), false);
                }
            } else if (p != null && p.getMetadata() instanceof MapMetadata) {
                // See above comment for AdornedTargetCollectionMetadata
                MapMetadata mmd = (MapMetadata) p.getMetadata();
                Property alternateIdProperty = entity.getPMap().get(BasicPersistenceModule.ALTERNATE_ID_PROPERTY);
                DynamicResultSet drs = service.getRecordsForCollection(cmd, entity, p, null, null, null, alternateIdProperty.getValue(), sectionCrumbs).getDynamicResultSet();
                ListGrid listGrid = formService.buildCollectionListGrid(alternateIdProperty.getValue(), drs, p, mmd.getTargetClass(), sectionCrumbs);
                listGrid.getToolbarActions().add(DefaultListGridActions.ADD);
                if (drs.getUnselectedTabMetadata().get(EntityForm.DEFAULT_TAB_NAME) != null) {
                    entityForm.addListGrid(cmd, listGrid, EntityForm.DEFAULT_TAB_NAME, EntityForm.DEFAULT_TAB_ORDER, fmd.getGroup(), true);
                } else {
                    entityForm.addListGrid(cmd, listGrid, EntityForm.DEFAULT_TAB_NAME, EntityForm.DEFAULT_TAB_ORDER, fmd.getGroup(), false);
                }
            }
        }
        formService.populateEntityFormFields(entityForm, entity, populateTypeAndId, populateTypeAndId);
        formService.populateAdornedEntityFormFields(entityForm, entity, ppr.getAdornedList());
        boolean atLeastOneBasicField = false;
        for (Entry<String, Field> entry : entityForm.getFields().entrySet()) {
            if (entry.getValue().getIsVisible() && !responseMap.containsKey(entry.getValue().getName()) && !responseMap.containsKey("autoSubmit")) {
                atLeastOneBasicField = true;
                break;
            }
        }
        if (!atLeastOneBasicField) {
            entityForm.removeAction(DefaultEntityFormActions.SAVE);
        }
        addAuditableDisplayFields(entityForm);
        model.addAttribute("entityForm", entityForm);
        model.addAttribute("viewType", "modal/adornedEditEntity");
    } else if (md instanceof MapMetadata) {
        MapMetadata fmd = (MapMetadata) md;
        ClassMetadata collectionMetadata = service.getClassMetadata(ppr).getDynamicResultSet().getClassMetaData();
        if (entity == null) {
            entity = service.getAdvancedCollectionRecord(mainMetadata, parentEntity, collectionProperty, collectionItemId, sectionCrumbs, null).getEntity();
        }
        boolean populateTypeAndId = true;
        if (entityForm == null) {
            entityForm = formService.buildMapForm(fmd, ppr.getMapStructure(), collectionMetadata, id);
        } else {
            // save off the prior key before clearing out the fields map as it will not appear
            // back on the saved entity
            String priorKey = entityForm.findField("priorKey").getValue();
            entityForm.clearFieldsMap();
            formService.buildMapForm(fmd, ppr.getMapStructure(), collectionMetadata, id, entityForm);
            entityForm.findField("priorKey").setValue(priorKey);
            populateTypeAndId = false;
        }
        formService.populateEntityFormFields(entityForm, entity, populateTypeAndId, populateTypeAndId);
        formService.populateMapEntityFormFields(entityForm, entity);
        addAuditableDisplayFields(entityForm);
        model.addAttribute("entityForm", entityForm);
        model.addAttribute("viewType", "modal/mapEditEntity");
    }
    model.addAttribute("currentUrl", request.getRequestURL().toString());
    model.addAttribute("modalHeaderType", modalHeaderType);
    model.addAttribute("collectionProperty", collectionProperty);
    setModelAttributes(model, sectionKey);
    return "modules/modalContainer";
}
Also used : ClassMetadata(org.broadleafcommerce.openadmin.dto.ClassMetadata) Entity(org.broadleafcommerce.openadmin.dto.Entity) FieldMetadata(org.broadleafcommerce.openadmin.dto.FieldMetadata) BasicFieldMetadata(org.broadleafcommerce.openadmin.dto.BasicFieldMetadata) PersistencePackageRequest(org.broadleafcommerce.openadmin.server.domain.PersistencePackageRequest) ListGrid(org.broadleafcommerce.openadmin.web.form.component.ListGrid) SectionCrumb(org.broadleafcommerce.openadmin.dto.SectionCrumb) Entry(java.util.Map.Entry) BasicCollectionMetadata(org.broadleafcommerce.openadmin.dto.BasicCollectionMetadata) Property(org.broadleafcommerce.openadmin.dto.Property) MapMetadata(org.broadleafcommerce.openadmin.dto.MapMetadata) DynamicResultSet(org.broadleafcommerce.openadmin.dto.DynamicResultSet) Map(java.util.Map) HashMap(java.util.HashMap) FlashMap(org.springframework.web.servlet.FlashMap) MultiValueMap(org.springframework.util.MultiValueMap) AdornedTargetCollectionMetadata(org.broadleafcommerce.openadmin.dto.AdornedTargetCollectionMetadata)

Aggregations

AdornedTargetCollectionMetadata (org.broadleafcommerce.openadmin.dto.AdornedTargetCollectionMetadata)16 FieldMetadata (org.broadleafcommerce.openadmin.dto.FieldMetadata)12 BasicFieldMetadata (org.broadleafcommerce.openadmin.dto.BasicFieldMetadata)9 Property (org.broadleafcommerce.openadmin.dto.Property)9 PersistencePackageRequest (org.broadleafcommerce.openadmin.server.domain.PersistencePackageRequest)9 BasicCollectionMetadata (org.broadleafcommerce.openadmin.dto.BasicCollectionMetadata)8 MapMetadata (org.broadleafcommerce.openadmin.dto.MapMetadata)8 HashMap (java.util.HashMap)6 ClassMetadata (org.broadleafcommerce.openadmin.dto.ClassMetadata)6 Entity (org.broadleafcommerce.openadmin.dto.Entity)6 AdornedTargetList (org.broadleafcommerce.openadmin.dto.AdornedTargetList)5 SectionCrumb (org.broadleafcommerce.openadmin.dto.SectionCrumb)5 Field (java.lang.reflect.Field)4 AdminMainEntity (org.broadleafcommerce.common.admin.domain.AdminMainEntity)4 AdminPresentationAdornedTargetCollectionOverride (org.broadleafcommerce.common.presentation.override.AdminPresentationAdornedTargetCollectionOverride)4 BLCSystemProperty (org.broadleafcommerce.common.util.BLCSystemProperty)4 FieldMetadataOverride (org.broadleafcommerce.openadmin.dto.override.FieldMetadataOverride)4 ArrayList (java.util.ArrayList)3 Map (java.util.Map)3 AdminPresentationMergeOverride (org.broadleafcommerce.common.presentation.override.AdminPresentationMergeOverride)3