I have written custom DAO to Add/Update/Delete specific records for my Binaries in my persistence type of storage extension in Tridion 2011.
Below is sample code where I am trying to use my custom DAO class/interface (PublishActionDAO
and PublishAction
) in my custom binary 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);
}
}
Above is sample code for Add when a new binary is created and same goes for Update and Delete, I am going to store Action as Add, binary publish URL, its TCMURI. I can get these data easily in above code. Now the problem which I am facing is that I just need to store records for PDFs types of Binaries only and for other type of binaries like (JPG/Word etc.) no record entry.
Edit: Is below solution will work for me or making object for binaries it will slow down the performance.
ItemDAO item = (ItemDAO) StorageManagerFactory.getDAO(binaryContent.getPublicationId(),StorageTypeMapping.BINARY_META);
BinaryMeta binarymeta = (BinaryMeta) item.findBinaryByPrimaryKey(binaryContent.getPublicationId(),binaryContent.getBinaryId());
binarymeta.getBinaryType();
Strictly checking for the type can be done by verifying the extension of the
relativePath
in yourcreate
method:However, there is a better way of handling this -- in your
cd_storage_conf.xml
, map the Binary type using a specific extension. Then the CD storage framework will only call your DAO if the extension matches: