using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using libtcsoa.Client;
using Teamcenter.Services.Strong.Core;
using Teamcenter.Soa.Client;
using Teamcenter.Soa.Client.Model;
using Dataset = Teamcenter.Soa.Client.Model.Strong.Dataset;
using ImanFile = Teamcenter.Soa.Client.Model.Strong.ImanFile;
using PreferencesResponse = Teamcenter.Services.Strong.Core._2006_03.Session.PreferencesResponse;
namespace libtcsoa
{
public class DatasetDownloadClass : DatasetManagmentClass
{
//------------------------------------------------------------------------------
#region Klassenfelder
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
#region GetSet Klassenfelder
//------------------------------------------------------------------------------
#endregion
#endregion
//------------------------------------------------------------------------------
#region Konstruktoren
//------------------------------------------------------------------------------
///
/// Holt die FSC Url aus den Preferences ("Default_Transient_Server")
///
///
public DatasetDownloadClass(string download_folder)
: base(download_folder)
{
}
public DatasetDownloadClass(string fsc_url, string download_folder)
: base(fsc_url, download_folder)
{
}
#endregion
//------------------------------------------------------------------------------
#region Statische Methoden
//------------------------------------------------------------------------------
#endregion
//------------------------------------------------------------------------------
#region Klassenmethoden
//------------------------------------------------------------------------------
public string[] DownloadFile(Dataset dataset)
{
return DownloadFile(dataset, "");
}
public string[] DownloadFile(Dataset dataset, string named_ref_type)
{
List downloaded_files = new List();
if (dataset == null) return downloaded_files.ToArray();
if (this.AutoRefresh)
{
Log.Debug("Refresh Dataset before downloading...");
DMService.RefreshObjects(new ModelObject[] { dataset });
}
//Holen der Propertys Imanfiles und den Namend RefType
DMService.GetProperties(new ModelObject[] { dataset }, new string[] { "ref_list", "ref_names", "object_name" });
//------------------------------------------------------------
Property refListProperty = Session.GetProperty(dataset, "ref_list");
Property reftypeProperty = Session.GetProperty(dataset, "ref_names");
//------------------------------------------------------------
ModelObject[] refObjs = refListProperty.ModelObjectArrayValue;
string[] refType = reftypeProperty.DisplayableValues;
//------------------------------------------------------------
Log.Info("DatasetName " + dataset.Object_name);
for (int i = 0; i < refObjs.Length; i++)
{
//Prüfen ob es dir richtige NamedReferenceType ist.
if (named_ref_type != "" & named_ref_type != refType[i]) continue;
if(refObjs[i] is ImanFile)
{
DMService.GetProperties(new ModelObject[] { refObjs[i] }, new string[] { "original_file_name" });
ImanFile imanfile = (ImanFile)refObjs[i];
GetFileResponse fileResp = FMUtility.GetFiles(new ModelObject[] { refObjs[i] });
FileInfo[] filesinfos = fileResp.GetFiles();
foreach (FileInfo item in filesinfos)
{
Log.Info("Downloaded Files via TCCS: " + item.FullName);
string new_file = Path.Combine(item.DirectoryName, imanfile.Original_file_name);
if (File.Exists(new_file))
{
try
{
Log.Debug("OriginalFile allready Exits...Delete File: " + new_file);
File.Delete(new_file);
}
catch (System.IO.IOException ex)
{
Log.Debug(ex);
new_file = Path.Combine(item.DirectoryName, Path.GetRandomFileName() + imanfile.Original_file_name);
Log.Debug("File allready in use. Try to set temp file name: " + new_file);
}
}
Log.Info("Rename File from " + item.FullName + " to " + new_file);
File.Move(item.FullName, new_file);
Log.Debug("NamedReferenceType: " + refType[i] + " OriginalFilename: " + imanfile.Original_file_name);
downloaded_files.Add(new_file);
}
}
}
return downloaded_files.ToArray();
}
public string DownloadFile(string ticket)
{
if (!string.IsNullOrEmpty(ticket))
{
return FMUtility.GetTransientFile(ticket, Path.GetTempPath()).FullName;
}
return null;
}
#endregion
}
}