/**
* This method deletes the relation to a digital asset - not the asset itself.
*/
public DigitalAssetVO checkStateAndChangeIfNeeded(Integer contentVersionId, Integer digitalAssetId, InfoGluePrincipal principal, List<Integer> newContentVersionIdList) throws SystemException, Bug
{
DigitalAssetVO resultingDigitalAssetVO = null;
Database db = CastorDatabaseService.getDatabase();
beginTransaction(db);
try
{
MediumContentVersionImpl contentVersion = null;
ContentVersionVO contentVersionVO = ContentVersionController.getContentVersionController().getContentVersionVOWithId(contentVersionId, db);
DigitalAssetVO digitalAssetVO = DigitalAssetController.getController().getDigitalAssetVOWithId(digitalAssetId, db);
if(!contentVersionVO.getStateId().equals(ContentVersionVO.WORKING_STATE))
{
List events = new ArrayList();
ContentVO contentVO = ContentController.getContentController().getContentVOWithId(contentVersionVO.getContentId(), db);
contentVersion = ContentStateController.changeState(contentVersionVO.getId(), contentVO, ContentVersionVO.WORKING_STATE, "new working version", false, null, principal, contentVersionVO.getContentId(), db, events);
newContentVersionIdList.add(contentVersion.getId());
digitalAssetVO = DigitalAssetController.getController().getLatestDigitalAssetVO(contentVersion.getId(), digitalAssetVO.getAssetKey(), db);
}
boolean duplicateAssetsBetweenVersions = CmsPropertyHandler.getDuplicateAssetsBetweenVersions();
logger.info("duplicateAssetsBetweenVersions:" + duplicateAssetsBetweenVersions);
if(!duplicateAssetsBetweenVersions)
{
DigitalAsset oldDigitalAsset = DigitalAssetController.getController().getMediumDigitalAssetWithId(digitalAssetId, db);
logger.info("oldDigitalAsset:" + oldDigitalAsset.getContentVersions().size());
if(oldDigitalAsset.getContentVersions().size() > 1)
{
logger.info("Creating new duplicate of this asset as there are other assets using this one:" + oldDigitalAsset.getId());
logger.info("contentVersion:" + contentVersion);
logger.info("oldDigitalAsset:" + oldDigitalAsset.getId());
if(contentVersion == null)
contentVersion = ContentVersionController.getContentVersionController().getMediumContentVersionWithId(contentVersionId, db);
boolean exists = false;
logger.info("contentVersion:" + contentVersion.getId());
for(MediumDigitalAssetImpl asset : (Collection<MediumDigitalAssetImpl>)contentVersion.getDigitalAssets())
{
logger.info("asset:" + asset.getId() + "-" + asset.getAssetKey());
if(asset.getAssetKey().equals(oldDigitalAsset.getAssetKey()))
{
exists = true;
digitalAssetVO = asset.getValueObject();
}
}
if(!exists)
{
digitalAssetVO = copyDigitalAssetAndRemoveOldReference(contentVersion, oldDigitalAsset, false, db);
logger.info("new digitalAssetVO:" + digitalAssetVO.getId());
}
}
}
resultingDigitalAssetVO = digitalAssetVO;