5.1 系統實作
5.1.3 Common Interface
為了完成基本的檔案操作,我們在IFMS中實作了以下Action.
Action Name Description
InitAction 列出起始可使用之服務,從Configuration檔中讀取出
來
AddSrv 增加一個 Trusted UFP到可用服務中,加入後便可瀏
覽該UFP所公開分享的檔案
CdAction 變換目錄
SearchAction 搜尋本地端服務內之檔案
DelAction 刪除檔案
UploadAction 上載檔案
DownloadAction 下載檔案
PirvateAction 將公開分享檔案設定為不公開之狀態
PublicAction 公開分享檔案
RDLAction 從Trusted UFP中取回分享的檔案
RemoteSearchAction 搜尋Trusted UFP中的分享檔案 RemoteListAction 瀏覽Trusted UFP中的分享檔案
NotifyAction 接收Trusted UFP所傳送之event並PUSH給Widget 表 2 UFP中Action動作
5.1.3 Common Interface
Common Interface是存在於Service Adapter與IFMS之間的介面,在實作上我 們將此定義為Java的Interface類別,由於檔案的架構通常是以階層式呈現,因 此我們依照此架構將Interface分為FileSystem與jFileObject兩種Interface。
FileSystem
Return value Input parameter Description
close N/A N/A 關閉檔案系統,實作上則是必
須與服務結束連線
getFileList jFileObejct [] String path 取得該目錄內的檔案物件,並 須輸入需要取得的路徑
getRootFile jFileObject N/A 取得第一階層目錄的檔案物件
putFile N/A String filename 上傳檔案,若不能取得
inputStream則使用此Method
putFile N/A InputStream fin,
String name
上傳檔案,若可取得
inputstream則使用此Method findFile List of
jFileObject
String filename 尋找檔案系統中之特定檔案
表 3 FileSystem介面中的function
jFileObject則是代表每個檔案的物件,在經由FileSystem介面取得目錄內的檔
案物件後,IFMS可透過物件上的Method進行物件的操作,其中包含之function 如下:
Function Name Return value Input
getFileName String filename
N/A 取得檔案名稱
listFile jFileObject [] N/A 若是該檔案物件為目錄時,取得該
目錄內的檔案物件
getInputStream InputStream N/A 取得InputStream,準備對檔案進 行下載
getOutputStream OutputStream N/A 取得OutputStream,準備對檔案 進行上載
isFolder Boolean N/A 檢驗該檔案物件是否為目錄
getParent jFileObject N/A 取的該檔案物件之上層目錄
表 4 jFileObject介面中的function
5.1.4 Service Adapter
根據設計,Service Adapter必須實作common interface用以完成不同服務 溝通的方法,而不同的服務必須要有不同的Service Adapter做聯繫,在系統中 我們分別實作四種Service Adapter,分別代表四種不同服務類型。
1. Local Storage
我們使用Apache common virtual file system library實作此類Service
Adapter,透過Apache VFS library,我們可以存取到不只是local儲存裝置,還 有FTP內的檔案也可經由VFS存取得到。
2. Online Storage service with API or standard protocol
我們選定Gmail為此類服務之整合目標,Gmial本身為信件服務,但有提供標準
的IMAP介面,要與Gmial溝通必須要使用IMAP Client為實作方法,每次上傳 檔案,即是傳送一封信件並且夾帶所要上傳的檔案,信件的主旨即是該檔放在
Gmial資料夾內的位置與檔名,若要下載檔案或是刪除檔案,在此Gmail Adapter
中的動作也是下載信件附檔與刪除信件。
Widget
Common Interface Java main library
FileSystem Gmail連線並且尋找INBOX信件資料夾
getInputStream 取得信件檔案附件之File stream
delete Purge信件
表 5 Java mail 與common interface之對應關係
3. Online storage service with HTTP and HTML page
在此類服務當中,我們選定Anyhub(http://anyhub.net)為此類服務的整合目標,
Anyhub具有簡潔的畫面,沒有flash與圖案認證,相對於Service Adapter的實 作來說會比較方便,與此類服務溝通主要發生在檔案上傳與下載,其他的檔案操 作皆是在Metadata Storage中完成,所以要實作此類服務之Service Adapter,
首先必須先了解服務的溝通message flow。
透過Ethereal等工具,觀察服務與瀏覽器之間的溝通可發現,要上傳檔案
時必須先利用HTTP File Upload到Http://anyhub.net/upload之URL,上傳成功 之後,系統會使用HTML回傳檔案所在之URL,此時UFP便可parsing回傳之 HTML文件,並從其中找出檔案所在URL之位置,組合成metadata並存入
Metadata Storage中。
圖 28 服務之檔案上傳流程
圖 29 從HTML中找出下載資源之URL
當需要下載檔案時,並須先從Metadata Storage中取出該檔之URL,並且利用 HTTP GET請求檔案,此時系統便會依照HTTP File download protocol將檔案 回傳。
圖 30 檔案下載
根據這些觀察結果,我們可以依照此message flow來設計在Adapter中HTTP Client的行為。
4. Standalone storage device with network access
我們選定standalone PC為此類整合目標,在IFMS Agent的實作方面,我
們選擇Java Applet[ 9]實作IFMS Agent,透過遠端PC的瀏覽器存取UFP中特 定的URL下載IFMS Agent applet並安裝在瀏覽器中,在Applet當中必需要有 listen socket,透過此Applet在遠端PC接收Service Adapter所傳送的檔案命 令,我們就可以將這台PC整合進UFP中。
圖 31 Mobile Agent in Applet
使用Applet的好處是,Applet可以經由網路發送或是下載,並且在不同的平台
中只要有JVM就可以執行,雖然Applet本身在Sandbox中並沒有操作檔案與 網路連線能力,但透過Signed Applet的安全控制,Applet本身就可變成遠端的 小程式,完全操控遠端的PC,此時Applet就如同Agent般代替UFP在遠端PC 操作檔案。