Как хранить только двоичные файлы типа PDF в моем расширении хранилища, используя Custom DAO в Tridion 2011

Я написал пользовательский DAO для добавления/ обновления / удаления определенных записей для моих двоичных файлов в моем расширении постоянного хранения в Tridion 2011.

Ниже приведен пример кода, где я пытаюсь использовать свой собственный класс / интерфейс DAO (PublishActionDAO а также PublishAction) в моем собственном бинарном DAO (JPABinaryDAOExtension).

public class JPABinaryDAOExtension extends JPABinaryContentDAO implements BinaryContentDAO 
{

    public JPABinaryDAOExtension(String storageId, EntityManagerFactory entityManagerFactory, String storageName) 
    {
        super(storageId, entityManagerFactory, storageName);
    }

    public JPABinaryDAOExtension(String storageId, EntityManagerFactory entityManagerFactory, EntityManager entityManager, String storageName) 
    {
        super(storageId, entityManagerFactory, entityManager, storageName);
    }

    public void create(final BinaryContent binaryContent, final String relativePath) throws StorageException 
    {
        super.create(binaryContent, relativePath);  
        String url = relativePath;
        String tcmURI = Integer.toString(binaryContent.getBinaryId());
        PublishActionDAO publishActionDAO = (PublishActionDAO) StorageManagerFactory.getDefaultDAO("PublishAction");
        PublishAction publishAction = new PublishAction();
        publishAction.setAction("Add");
        publishAction.setUrl(url);
        publishAction.setTcmUri(tcmURI);
        publishActionDAO.store(publishAction);
    }
}

Выше приведен пример кода для добавления, когда создается новый двоичный файл, и то же самое касается обновления и удаления, я собираюсь сохранить действие как добавление, URL-адрес публикации в двоичном коде, его TCMURI. Я могу легко получить эти данные в приведенном выше коде. Теперь проблема, с которой я сталкиваюсь, заключается в том, что мне просто нужно хранить записи только для PDF-файлов типа Binaries и для других типов двоичных файлов, таких как (JPG/Word и т. Д.) Без записей.

Изменить: ниже решение будет работать для меня или создание объекта для двоичных файлов, это снизит производительность.

ItemDAO item = (ItemDAO) StorageManagerFactory.getDAO(binaryContent.getPublicationId(),StorageTypeMapping.BINARY_META);
BinaryMeta binarymeta = (BinaryMeta) item.findBinaryByPrimaryKey(binaryContent.getPublicationId(),binaryContent.getBinaryId());
binarymeta.getBinaryType();

1 ответ

Решение

Строго проверять тип можно путем проверки расширения relativePath в вашем create метод:

    if (!relativePath.toLowerCase().endsWith(".pdf")) { return; }

Тем не менее, есть лучший способ справиться с этим - в вашем cd_storage_conf.xmlсопоставьте двоичный тип с использованием определенного расширения. Тогда среда хранения CD будет вызывать ваш DAO, только если расширение соответствует:

    <Item typeMapping="Binary" itemExtension=".pdf" storageId="myStorage"/>
Другие вопросы по тегам