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;
}
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);
}
}
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;
}
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);
}
}
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);
}
}
}
}
Aggregations