How about downloading file present in Dataset ?
Consider we have UID for dataset which is to be downloaded i.e its named reference is to be downloaded
Get the Model object from UID
ModelObject[] modelObjects = getModelObjectsFromUIDs( arrayOfUIDs,tcConnection );
private static ModelObject[] getModelObjectsFromUIDs(String[] arrayOfUIDs, Connection connection)
{
ModelObject[] arrModelObjects = null;
if (arrayOfUIDs.length > 0)
{
ArrayList<ModelObject> modelObjects =
new ArrayList<ModelObject>(arrayOfUIDs.length);
DataManagementService dataManagementService =
DataManagementService.getService(connection);
ServiceData loadObjects =
dataManagementService.loadObjects(arrayOfUIDs); //Load objects for provided UIDs
for (int i = 0; i < loadObjects.sizeOfPlainObjects(); i++)
{
modelObjects.add(loadObjects.getPlainObject(i));
}
if (modelObjects != null && modelObjects.size() > 0)
{
arrModelObjects = modelObjects.toArray(new ModelObject[0]);
}
}
return arrModelObjects;
}
Now Load the ref_list property on dataset which actually contain the files names
dataManagementService.getProperties( modelObjects, new String[]{ "ref_list" } );
Dataset dataset =null;
ModelObject[] files = null;
if ( modelObject instanceof Dataset )
{
dataset = ( Dataset ) modelObject;
files = dataset.get_ref_list();//Gives named referenced objects
}
Check if named reference is actually the required file
ArrayList<ModelObject> al = new ArrayList<ModelObject>();
for (int i = 0; i < files.length; i++)
{
if ( files[i] instanceof ImanFile )
al.add( files[i] );
}
ModelObject[] newFiles = al.toArray( new ModelObject[al.size()] );
//Load the original name for files
dataManagementService.getProperties( newFiles, new String[]{"original_file_name"} );
Get/Download the Files
//FileManagementUtility is in package com.teamcenter.soa.client
FileManagementUtility fileManagementUtility = null;
//Get the Fms_BootStrap_Urls Preference
SessionService localSessionService = SessionService.getService(getTcConnection());
Session.ScopedPreferenceNames[] arrayOfScopedPreferenceNames =
new Session.ScopedPreferenceNames[1];
arrayOfScopedPreferenceNames[0] = new Session.ScopedPreferenceNames();
arrayOfScopedPreferenceNames[0].names = new String[] { "Fms_BootStrap_Urls" };
arrayOfScopedPreferenceNames[0].scope = paramString2;
Session.MultiPreferencesResponse localMultiPreferencesResponse =
localSessionService.getPreferences(arrayOfScopedPreferenceNames);
String bootStrapURL=localMultiPreferencesResponse.preferences[0].values[0];
try
{
//strDirPath is folder path /location where file will be downloaded
fileManagementUtility = new FileManagementUtility( localConnection, null,
null, new String[]{ bootStrapURL }, strDirPath);
GetFileResponse responseFiles =
fileManagementUtility.getFiles( modelObjects );//Download the files but with Tc internal name
File[] filesFromModelObjects = responseFiles.getFiles();
}
Rename the file to Original name based on ref list model objects ->newFiles and downloaded files -> filesFromModelObjects
for(File fSrc : filesFromModelObjects)
{
ImanFile imFle = (ImanFile) newFiles[i];
String originalFileName = imFle.get_original_file_name();
File fTmpDest = new File(strDirPath + File.separator + originalFileName);
fSrc.renameTo(fTmpDest);
}
Explanation : Important API
dataManagementService.loadObjects(arrayOfUIDs);
dataset.get_ref_list()
localSessionService.getPreferences(arrayOfScopedPreferenceNames);
fileManagementUtility.getFiles( modelObjects );