Package com.orchestranetworks.addon.dama.ext
Provides the extension API.
Performing actions on drives and media type fields
-
Performing actions on media fields:
-
Get an instance of
DigitalAssetComponentServices
://Provide component context with the information referring to a specific digital asset component DigitalAssetComponentContext componentContext = new DigitalAssetComponentContext( aUserRecord, aMediaPath, aSession); DriveFactory driveFactory = DriveFactoryProvider.getDriveFactory(); //Get instance of
DigitalAssetComponentServices
from 'componentContext' DigitalAssetComponentServices componentController = driveFactory .getDigitalAssetComponentServices(componentContext); -
Upload, attach, detach assets and get digital asset keys attached in a media field:
//Upload and attach asset to records File uploadFile = new File("sampleFile.png"); FileResource fileResource = new FileResource(uploadFile); List<FileResource> fileResources = new ArrayList<FileResource>(); fileResources.add(fileResource); componentController.upload(fileResources, Action.ATTACH); //Attach digital asset to the media field of a record DigitalAssetKey assetKey = new DigitalAssetKey(PrimaryKey.parseString("assetKey")); List<DigitalAssetKey> assetKeys = new ArrayList<DigitalAssetKey>(); assetKeys.add(assetKey); componentController.attach(assetKeys); //Detach digital asset componentController.detach(assetKeys); //Get the digital asset keys attached in the media field of a user record componentController.getDigitalAssetKeys();
-
-
Performing actions on drives:
-
Get instance of
DriveManager
://Provide
DriveContext
with the information referring to a specific drive. DriveContext driveContext = new DriveContext( this.userDataset, this.table, this.mediaPath, this.session); DriveFactory driveFactory = DriveFactoryProvider.getDriveFactory(); DriveManager driveManager = driveFactory.getDriveManager(driveContext); -
Actions: create, update, delete and download digital assets:
//Create a new
DigitalAsset
File uploadFile = new File("sampleFile.png"); FileResource fileResource = new FileResource(uploadFile); DigitalAssetSpec digitalAssetSpec = new DigitalAssetSpec(fileResource); digitalAssetSpec.setLabel(UserMessage.createInfo("new label")); digitalAssetSpec.setDescription(UserMessage.createInfo("new description")); DigitalAsset newAsset = driveManager.create(digitalAssetSpec); //Update a digital asset newAsset.setState(DigitalAssetState.DEACTIVATED); newAsset.setLabel(UserMessage.createInfo("updated label")); newAsset.setDescription(UserMessage.createInfo("updated label")); driveManager.update(newAsset); //Delete a digital asset driveManager.delete(newAsset.getKey()); //Download asset - current version of asset MediaContent mediaContent = driveManager.getMediaContent(newAsset); mediaContent.getInputStream(); mediaContent.getContentLength(); -
Actions: create, update, delete and download digital asset versions:
//Create a new version for a digital asset DigitalAssetKey assetKey = new DigitalAssetKey(PrimaryKey.parseString("assetKey")); File uploadFile = new File("sampleFile.png"); FileResource fileResource = new FileResource(uploadFile); DigitalAssetVersionSpec versionSpec = new DigitalAssetVersionSpec(assetKey, fileResource); versionSpec.setCurrentVersion(true); versionSpec.setComment("comment"); versionSpec.setVersionName("versionName"); DigitalAssetVersion newVersion = driveManager.create(versionSpec); //Update a version newVersion.setComment("new comment"); newVersion.setVersionName("new version name"); driveManager.update(newVersion); //Delete a version driveManager.delete(newVersion.getKey()); //Download version MediaContent mediaContent = driveManager.getMediaContent(newVersion); mediaContent.getInputStream(); mediaContent.getContentLength();
-
Browsing digital assets in a drive:
//Create a new instance of
SearchFilter
to search digital asset SearchFilter searchFilter = new SearchFilter(); searchFilter.setKeyword("anAssetName"); searchFilter.setExtension("png"); searchFilter.setType("image"); //Filter by creation and updatedDateRange
DateRange creationDateRange = new DateRange(); DateRange updatedDateRange = new DateRange(); searchFilter.setCreationDateRange(creationDateRange); searchFilter.setUpdateDateRange(updatedDateRange); //Filter by tags List<String> tags = new ArrayList<String>(); tags.add("tag"); searchFilter.setTags(tags); //Result of filter will be sorted bySortBy
SortCriteria creationDateSort = new SortCriteria(SortBy.CREATION_DATE, true); SortCriteria physicalNameSort = new SortCriteria(SortBy.PHYSICAL_NAME, true); List<SortCriteria> sortCriterias = new ArrayList<SortCriteria>(); sortCriterias.add(physicalNameSort); sortCriterias.add(creationDateSort); searchFilter.setSortCriterias(sortCriterias); //Search digital asset by 'searchFilter' List<DigitalAsset> digitalAssets = driveManager.search(searchFilter); //Get all active digital assets in Drive List<DigitalAsset> digitalAssetsInDrive = driveManager.getDigitalAssets(); //Look up asset byDigitalAssetKey
DigitalAssetKey assetKey = new DigitalAssetKey(PrimaryKey.parseString("assetKey")); DigitalAsset digitalAsset = driveManager.getDigitalAsset(assetKey);
-
Implementing a new storage manager of a drive type - Google drive
-
Implement
ResourceIdentifier
:public final class GoogleResouceIdentifier implements ResourceIdentifier { private final String folderID; public GoogleResouceIdentifier(String folderID) { this.folderID = folderID; } public String format() { return this.folderID; } }
-
Implement a
ResourceIdentifierFactory
public final class GoogleIdentifierFactory implements ResourceIdentifierFactory { public ResourceIdentifier parse(String identifier) { return new GoogleResouceIdentifier(identifier); } }
-
Implement a
StorageManager
public final class GoogleDriveStorageManager extends StorageManager { public ResourceIdentifier upload(Resource resource, ResourceIdentifier target) { try { return this.upload(resource, target.format()); } catch (Exception ex) { TestLogger.getLoggingCategory().error("Upload failed", ex); return null; } } public boolean delete(ResourceIdentifier target) { try { Drive service = GoogleDriveAPIHelper.getInstance().getDriveService(); service.files().delete(target.format()).execute(); return true; } catch (Exception ex) { TestLogger.getLoggingCategory().error("Delete failed", ex); return false; } } public MediaContent getMediaContent(DigitalAsset asset) { Drive service; try { service = GoogleDriveAPIHelper.getInstance().getDriveService(); HttpResponse httpResponse = service.files().get(asset.getExternalID()).executeMedia(); return new MediaContentImpl( httpResponse.getContent(), httpResponse.getHeaders().getContentLength().longValue()); } catch (Exception ex) { TestLogger.getLoggingCategory().error("Failed", ex); return null; } } public MediaContent getMediaContent(DigitalAssetVersion version) { Drive service; try { service = GoogleDriveAPIHelper.getInstance().getDriveService(); HttpResponse httpResponse = service.files().get(version.getExternalId()).executeMedia(); return new MediaContentImpl( httpResponse.getContent(), httpResponse.getHeaders().getContentLength().longValue()); } catch (Exception ex) { TestLogger.getLoggingCategory().error("Failed", ex); return null; } } public ResourceIdentifierFactory getIdentifierFactory() { return new GoogleIdentifierFactory(); } private ResourceIdentifier upload(Resource resource, String folderID) throws Exception { //Build a new authorized API client service. Drive service = GoogleDriveAPIHelper.getInstance().getDriveService(); File googleFile = new File(); googleFile.setName(resource.getFile().getName()); //gooleFile.setParents(Collections.singletonList(folderID)); FileContent mediaContent = new FileContent( this.identifyFileTypeUsingMimetypesFileTypeMap(resource.getFile().getName()), resource.getFile()); File uploadedFile = service.files() .create(gooleFile, mediaContent) .setFields("id") .execute(); ResourceIdentifierFactory googleIdentifierFactory = this.getIdentifierFactory(); return googleIdentifierFactory.parse(uploadedFile.getId()); } private String identifyFileTypeUsingMimetypesFileTypeMap(String fileName) { return new MimetypesFileTypeMap().getContentType(fileName); } }
-
Register new
StorageManager
for the GoogleDriveDriveType
//get DriveFactory DriveFactory driveFactory = DriveFactoryProvider.getDriveFactory(); //Instance new DriveType and new GoogleDriveStorageManager DriveType googleDriveType = new DriveType("GoogleDrive"); StorageManager googleDriveStorageManager = new GoogleDriveStorageManager(); //register google drive storage manager with the google drive type driveFactory.registerStorageManager(googleDriveType, googleDriveStorageManager); //get storageManager by driveType driveFactory.getStorageManager(googleDriveType);
- To perform actions with the new
GoogleDriveStorageManager
implementation. Please follow the steps below:- Log in as Administrator and navigate to the {addon.label.full} dataset.
- Open the Drive type table and create a new record. In the Code field, select GoogleDrive and create a new drive type.
- Open the Drive table and create a new record. Input new data for the new drive and choose GoogleDrive as the Drive type of the drive.
- Provide any required information for the drive or the digital asset component
referring to the drive as the context to get the
DriveManager
orDigitalAssetComponentServices
. Please refer to the Performing actions on drives and media type fields section.
Performing backup and restore operations on the {addon.label.full} dataset
-
Backing up the {addon.label.full} dataset:
//Use
BackupRestoreFactory
to get an instance ofBackupService
BackupService backupService = BackupRestoreFactory.getBackupService(); //Create a new instance ofBackupSpec
with the name of the backup file, folder for the backup file and EBX® session. BackupSpec backupSpec = new BackupSpec(aSession, "aFileName", aFolder); //Backup the {addon.label.full} dataset and return a File as the backup File. File backupFile = backupService.backup(backupSpec); -
Restoring a digital asset to a specified location:
//Use
BackupRestoreFactory
to get an instance ofRestoreService
RestoreService restoreService = BackupRestoreFactory.getRestoreService(); //Create a new instance ofRestoreSpec
with the location of the backup file and EBX® session RestoreSpec restoreSpec = new RestoreSpec(backupFile, aSession); //Get an instance ofRestoreDetail
RestoreDetail restoreDetail = restoreService.getRestoreDetails(restoreSpec); //Get drives information and input new location for drives List<DriveInformation> driveInformations = restoreDetail.getDriveInformations(); driveInformations.get(0).setNewLocation(aString); //Restore the {addon.label.full} dataset with 'restoreDetail' //OperationExecutionStatus
will be returned as the result of the execution. OperationExecutionStatus status = restoreService.restore(restoreDetail);
Adding a custom filter
-
Implement an
EditorFilter
:public class SampleEditorFilter implements EditorFilter { public boolean accept(EditorFilterContext editorFilterContext) { try { //Get the default directory. If you don't use the EBX® default directory, use
DirectoryHandler
or your own implementation of custom directory. DirectoryDefault directoryDefault = DirectoryDefault .getInstance(Repository.getDefault()); //Get the author of the digital asset being evaluated String profileAuthor = editorFilterContext.getDigitalAsset() .getCurrentVersion() .getProfileAuthor(); UserReference author = (UserReference) UserReference.parse(profileAuthor); //Get the roles of the author List<Role> roles = directoryDefault.getRolesForUser(author); //Get the current user UserReference userReference = editorFilterContext.getSession().getUserReference(); for (Role role : roles) { //Check whether the current user and author have the same role if (directoryDefault.isUserInRole(userReference, role)) { return true; } } } catch (Exception ex) { //Handle any exceptions } return false; } }
-
Interface Summary Interface Description EditorFilter Defines the digital asset filter in the digital asset Editor. -
Class Summary Class Description AssetManager Provide functions to support managing digital assetEditorFilterContext Defines the editor filter context.StorageManager Defines theStorageManager
to perform actions on physical files based on the drive type.