Search in sources :

Example 1 with Media

use of org.broadleafcommerce.common.media.domain.Media in project BroadleafCommerce by BroadleafCommerce.

the class MediaFieldPersistenceProvider method populateValue.

@Override
public MetadataProviderResponse populateValue(PopulateValueRequest populateValueRequest, Serializable instance) throws PersistenceException {
    if (!canHandlePersistence(populateValueRequest, instance)) {
        return MetadataProviderResponse.NOT_HANDLED;
    }
    String prop = populateValueRequest.getProperty().getName();
    if (prop.contains(FieldManager.MAPFIELDSEPARATOR)) {
        Field field = populateValueRequest.getFieldManager().getField(instance.getClass(), prop.substring(0, prop.indexOf(FieldManager.MAPFIELDSEPARATOR)));
        if (field.getAnnotation(OneToMany.class) == null) {
            throw new UnsupportedOperationException("MediaFieldPersistenceProvider is currently only compatible with map fields when modelled using @OneToMany");
        }
    }
    MetadataProviderResponse response = MetadataProviderResponse.HANDLED;
    boolean dirty = false;
    try {
        setNonDisplayableValues(populateValueRequest);
        Class<?> valueType = getStartingValueType(populateValueRequest);
        if (Media.class.isAssignableFrom(valueType)) {
            Media newMedia = mediaBuilderService.convertJsonToMedia(populateValueRequest.getProperty().getUnHtmlEncodedValue(), valueType);
            boolean persist = false;
            boolean noPrimary = false;
            boolean update = false;
            Media media;
            Boolean cleared;
            try {
                checkExtension: {
                    if (extensionManager != null) {
                        ExtensionResultHolder<Tuple<Media, Boolean>> result = new ExtensionResultHolder<Tuple<Media, Boolean>>();
                        ExtensionResultStatusType statusType = extensionManager.getProxy().retrieveMedia(instance, populateValueRequest, result);
                        if (ExtensionResultStatusType.NOT_HANDLED != statusType) {
                            Tuple<Media, Boolean> tuple = result.getResult();
                            media = tuple.getFirst();
                            cleared = tuple.getSecond();
                            break checkExtension;
                        }
                    }
                    media = (Media) populateValueRequest.getFieldManager().getFieldValue(instance, populateValueRequest.getProperty().getName());
                    cleared = false;
                }
                if (newMedia == null) {
                    noPrimary = true;
                    dirty = true;
                    update = false;
                    if (!cleared && media != null) {
                        // remove entry in sku to media map
                        populateValueRequest.getFieldManager().setFieldValue(instance, populateValueRequest.getProperty().getName(), null);
                        populateValueRequest.getPersistenceManager().getDynamicEntityDao().remove(media);
                    }
                } else if (media == null) {
                    media = (Media) valueType.newInstance();
                    mediaBuilderService.instantiateMediaFields(media);
                    Object parent = extractParent(populateValueRequest, instance);
                    populateValueRequest.getFieldManager().setFieldValue(media, populateValueRequest.getMetadata().getToOneParentProperty(), parent);
                    populateValueRequest.getFieldManager().setFieldValue(media, populateValueRequest.getMetadata().getMapKeyValueProperty(), prop.substring(prop.indexOf(FieldManager.MAPFIELDSEPARATOR) + FieldManager.MAPFIELDSEPARATOR.length(), prop.length()));
                    persist = true;
                }
            } catch (FieldNotAvailableException e) {
                throw new IllegalArgumentException(e);
            }
            if (media != null) {
                if (media instanceof Status && 'Y' == ((Status) media).getArchived()) {
                    persist = true;
                }
                populateValueRequest.getProperty().setOriginalValue(convertMediaToJson(media));
            }
            if (!noPrimary) {
                dirty = establishDirtyState(newMedia, media);
                update = dirty;
            }
            if (dirty) {
                if (update) {
                    updateMedia(populateValueRequest, newMedia, persist, media);
                }
                response = MetadataProviderResponse.HANDLED_BREAK;
            }
        } else {
            throw new UnsupportedOperationException("MediaFields only work with Media types.");
        }
    } catch (Exception e) {
        throw ExceptionHelper.refineException(PersistenceException.class, PersistenceException.class, e);
    }
    populateValueRequest.getProperty().setIsDirty(dirty);
    return response;
}
Also used : Status(org.broadleafcommerce.common.persistence.Status) MetadataProviderResponse(org.broadleafcommerce.openadmin.server.service.type.MetadataProviderResponse) Media(org.broadleafcommerce.common.media.domain.Media) ExtensionResultStatusType(org.broadleafcommerce.common.extension.ExtensionResultStatusType) OneToMany(javax.persistence.OneToMany) FieldNotAvailableException(org.broadleafcommerce.openadmin.server.service.persistence.module.FieldNotAvailableException) InvocationTargetException(java.lang.reflect.InvocationTargetException) ParentEntityPersistenceException(org.broadleafcommerce.openadmin.server.service.persistence.ParentEntityPersistenceException) PersistenceException(org.broadleafcommerce.openadmin.server.service.persistence.PersistenceException) Field(java.lang.reflect.Field) FieldNotAvailableException(org.broadleafcommerce.openadmin.server.service.persistence.module.FieldNotAvailableException) ParentEntityPersistenceException(org.broadleafcommerce.openadmin.server.service.persistence.ParentEntityPersistenceException) PersistenceException(org.broadleafcommerce.openadmin.server.service.persistence.PersistenceException) Tuple(org.broadleafcommerce.common.util.Tuple) ExtensionResultHolder(org.broadleafcommerce.common.extension.ExtensionResultHolder)

Example 2 with Media

use of org.broadleafcommerce.common.media.domain.Media in project BroadleafCommerce by BroadleafCommerce.

the class MediaFieldPersistenceProvider method convertMediaToJson.

protected String convertMediaToJson(Media media) {
    try {
        ObjectMapper om = new ObjectMapper();
        Media unwrapped = media;
        if (media.isUnwrappableAs(Media.class)) {
            unwrapped = media.unwrap(Media.class);
        }
        return om.writeValueAsString(unwrapped);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
Also used : Media(org.broadleafcommerce.common.media.domain.Media) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) FieldNotAvailableException(org.broadleafcommerce.openadmin.server.service.persistence.module.FieldNotAvailableException) InvocationTargetException(java.lang.reflect.InvocationTargetException) ParentEntityPersistenceException(org.broadleafcommerce.openadmin.server.service.persistence.ParentEntityPersistenceException) PersistenceException(org.broadleafcommerce.openadmin.server.service.persistence.PersistenceException)

Example 3 with Media

use of org.broadleafcommerce.common.media.domain.Media in project BroadleafCommerce by BroadleafCommerce.

the class SeoDefaultPropertyServiceImpl method getImage.

@Override
public String getImage(Category category) {
    Map<String, CategoryMediaXref> categoryMediaXrefs = category.getCategoryMediaXref();
    CategoryMediaXref primaryMediaXref = categoryMediaXrefs.get("primary");
    if (primaryMediaXref != null) {
        Media primaryMedia = primaryMediaXref.getMedia();
        return urlResolver.getSiteBaseUrl() + primaryMedia.getUrl();
    }
    return null;
}
Also used : Media(org.broadleafcommerce.common.media.domain.Media) CategoryMediaXref(org.broadleafcommerce.core.catalog.domain.CategoryMediaXref)

Example 4 with Media

use of org.broadleafcommerce.common.media.domain.Media in project BroadleafCommerce by BroadleafCommerce.

the class ProductSiteMapGenerator method constructImageURLs.

protected void constructImageURLs(SiteMapBuilder siteMapBuilder, SiteMapURLWrapper siteMapUrl, Product product) {
    for (Media media : product.getMedia().values()) {
        SiteMapImageWrapper siteMapImage = new SiteMapImageWrapper();
        siteMapImage.setLoc(BroadleafSitemapUtils.generateImageUrl(siteMapBuilder, media));
        siteMapUrl.addImage(siteMapImage);
    }
}
Also used : Media(org.broadleafcommerce.common.media.domain.Media) SiteMapImageWrapper(org.broadleafcommerce.common.sitemap.wrapper.SiteMapImageWrapper)

Example 5 with Media

use of org.broadleafcommerce.common.media.domain.Media in project BroadleafCommerce by BroadleafCommerce.

the class MediaBuilderServiceImpl method instantiateMediaFields.

@Override
public void instantiateMediaFields(Media media) {
    Field[] fields = media.getClass().getDeclaredFields();
    for (Field field : fields) {
        if (Media.class.isAssignableFrom(field.getType())) {
            field.setAccessible(true);
            try {
                Media mediaField = entityConfiguration.createEntityInstance(Media.class.getName(), Media.class);
                field.set(media, mediaField);
            } catch (IllegalAccessException e) {
                LOG.warn("Error initializing media field " + StringUtil.sanitize(field.getName()) + " on " + media.getClass().getName(), e);
            }
        }
    }
}
Also used : Field(java.lang.reflect.Field) Media(org.broadleafcommerce.common.media.domain.Media)

Aggregations

Media (org.broadleafcommerce.common.media.domain.Media)10 FieldNotAvailableException (org.broadleafcommerce.openadmin.server.service.persistence.module.FieldNotAvailableException)3 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)2 Field (java.lang.reflect.Field)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)2 ArrayList (java.util.ArrayList)2 ExtensionResultHolder (org.broadleafcommerce.common.extension.ExtensionResultHolder)2 ExtensionResultStatusType (org.broadleafcommerce.common.extension.ExtensionResultStatusType)2 MediaImpl (org.broadleafcommerce.common.media.domain.MediaImpl)2 Category (org.broadleafcommerce.core.catalog.domain.Category)2 CategoryImpl (org.broadleafcommerce.core.catalog.domain.CategoryImpl)2 CategoryMediaXref (org.broadleafcommerce.core.catalog.domain.CategoryMediaXref)2 CategoryMediaXrefImpl (org.broadleafcommerce.core.catalog.domain.CategoryMediaXrefImpl)2 Sku (org.broadleafcommerce.core.catalog.domain.Sku)2 ParentEntityPersistenceException (org.broadleafcommerce.openadmin.server.service.persistence.ParentEntityPersistenceException)2 PersistenceException (org.broadleafcommerce.openadmin.server.service.persistence.PersistenceException)2 File (java.io.File)1 Calendar (java.util.Calendar)1 OneToMany (javax.persistence.OneToMany)1 Money (org.broadleafcommerce.common.money.Money)1