Создание Populator для дублирования функциональности ProductPrimaryImagePopulator - PullRequest
1 голос
/ 11 апреля 2020

Я расширил тип продукта по умолчанию, добавив в него атрибут видео, идентичный атрибуту images, за исключением имени:

<itemtype code="Product" extends="GenericItem" autocreate="false" generate="false">
    <description>Extend the product type to also hold links to videos.</description>
    <attributes>
        <attribute qualifier="videos" type="MediaContainerList">
            <description>List of videos for a given product</description>
            <modifiers/>
            <persistence type="property"/>
        </attribute>
    </attributes>
</itemtype>

Я сейчас пытаюсь скопировать ProductPrimaryImagePopulator в установить видео в объекте данных, но я упускаю что-то очевидное. Вот код и ошибка:


import de.hybris.platform.commercefacades.product.data.ImageData;
import de.hybris.platform.commercefacades.product.data.ImageDataType;
import de.hybris.platform.commercefacades.product.data.ProductData;
import de.hybris.platform.core.model.media.MediaContainerModel;
import de.hybris.platform.core.model.media.MediaModel;
import de.hybris.platform.core.model.product.ProductModel;
import de.hybris.platform.servicelayer.dto.converter.ConversionException;

import java.util.ArrayList;
import java.util.List;

public class ProductVideoPopulator<SOURCE extends ProductModel, TARGET extends ProductData>
        extends AbstractProductImagePopulator<SOURCE, TARGET> {
    @Override
    public void populate(final SOURCE productModel, final TARGET productData) throws ConversionException {
        final MediaContainerModel primaryImageMediaContainer = getPrimaryImageMediaContainer(productModel);
        if (primaryImageMediaContainer != null) {
            final List<ImageData> imageList = new ArrayList<ImageData>();

            // Use the first container as the primary image
            addImagesInFormats(primaryImageMediaContainer, ImageDataType.PRIMARY, 0, imageList);

            for (final ImageData imageData : imageList) {
                if (imageData.getAltText() == null) {
                    imageData.setAltText(productModel.getName());
                }
            }
            productData.setVideos(imageList);
        }
    }

    protected MediaContainerModel getPrimaryImageMediaContainer(final SOURCE productModel) {
        final MediaModel picture = (MediaModel) getProductAttribute(productModel, ProductModel.PICTURE);
        if (picture != null) {
            return picture.getMediaContainer();
        }
        return null;
    }
}

Ошибка

   [yjavac] Compiling 1 source file to /Users/riley/dev/work/hybrisdemo/core-customize/hybris/bin/custom/demo/demofacades/classes
   [yjavac] ----------
   [yjavac] 1. ERROR in /Users/riley/dev/work/hybrisdemo/core-customize/hybris/bin/custom/demo/demofacades/src/com/nobiz/demo/facades/populators/ProductVideoPopulator.java (at line 15)
   [yjavac]     extends AbstractProductImagePopulator<SOURCE, TARGET> {
   [yjavac]             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [yjavac] AbstractProductImagePopulator cannot be resolved to a type
   [yjavac] ----------
   [yjavac] 2. ERROR in /Users/riley/dev/work/hybrisdemo/core-customize/hybris/bin/custom/demo/demofacades/src/com/nobiz/demo/facades/populators/ProductVideoPopulator.java (at line 17)
   [yjavac]     public void populate(final SOURCE productModel, final TARGET productData) throws ConversionException {
   [yjavac]                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [yjavac] The method populate(SOURCE, TARGET) of type ProductVideoPopulator<SOURCE,TARGET> must override or implement a supertype method
   [yjavac] ----------
   [yjavac] 2 problems (2 errors)

Другая проблема, которую мне нужно решить, находится в ProductModel.PICTURE, Eclipse не показывает мне, что значение, что я должен использовать, чтобы получить видео?

1 Ответ

1 голос
/ 11 апреля 2020

AbstractProductImagePopulator не может быть преобразован в тип

Я предполагаю, что вы не определили зависимости.

AbstractProductImagePopulator существует в commercefacades. Убедитесь, что demofacades определяет commercefacades как зависимость в extensioninfo.xml.

Другая проблема, которую мне нужно решить, находится в ProductModel.PICTURE, Eclipse не показывает мне это значение, что я должен использовать для получения видео?

Поскольку вы добавили Product.videos в элементы. xml, в ProductModel.

должно быть доступно что-то вроде ProductModel.VIDEOS. Обязательно сначала исправьте все ошибки сборки / компиляции. Затем проверьте, все ли хорошо. Кроме того, вам также нужно добавить в конвертер популятор, который будет конвертировать ProductModel.

...