- <bluray.bindingunit.root> / <organization_id> / <disc_id> / BUDA.test
- <bluray.bindingunit.root> / <organization_id> / BUDA.test2
また、BUDAに書き込んだファイルがVirtual Packageのルートディレクトリにマッピングされるよう、BUMFには以下のものを使用している。
sample.xmf
<?xml version="1.0" encoding="UTF-8"?>
<bumf:manifest xmlns:bumf="urn:BDA:bdmv;manifest"
ID="0x00000001"
orgID="0x7fff0001"
discID="0x00000000000000000000000000000001" >
<Assets>
<Asset VPFilename="BUDA.test">
<BUDAFile name="7fff0001/1/BUDA.test"></BUDAFile>
</Asset>
<Asset VPFilename="BUDA.test2">
<BUDAFile name="7fff0001/BUDA.test2"></BUDAFile>
</Asset>
</Assets>
</bumf:manifest>
本サンプルコードが意図したとおりに動作するために必要な条件を以下にリストアップする。
- 事前に「BUDAへのファイルの追加」のサンプルコードを実行
- organization_idは0x7fff0001, disc_idは1
- organization_id, disc_id, app.discroot.crtはBUDAへのファイルの追加のサンプルコードと同一
- bluray.Main.permという名称の署名つき
- bu.discroot.crtおよびBUSFを用意
Main.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.io.File;
import javax.tv.service.selection.ServiceContextFactory;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import org.bluray.ti.Title;
import org.bluray.ti.selection.TitleContext;
import org.bluray.vfs.VFSManager;
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import org.havi.ui.HScreen;
public class Main implements Xlet {
private XletContext xc;
String media_root = System.getProperty("bluray.vfs.root");
String BUMFDir = media_root+File.separator+"Upload";
Graphics g = null;
int x = 100, y = 100;
public void initXlet(XletContext context) {
xc = context;
boolean isUpdated = false; // アップデート済みかどうかを示すフラグ
try {
Font font = new Font(null, java.awt.Font.BOLD, 48);
HScene hs= HSceneFactory.getInstance().getFullScreenScene(
HScreen.getDefaultHScreen().getDefaultHGraphicsDevice());
hs.setFont(font);
hs.setVisible(true);
g = hs.getGraphics();
g.setColor(Color.white);
// Virtual Packageのルート直下にあるディレクトリ/ファイルのリスト作成
String[] flist = new File(media_root+File.separator).list();
String s = "Files/Directories under /: ";
for( int i = 0; i < flist.length; i++ ){
s += (flist[i]+" ");
if( flist[i].equals("BUDA.test")) isUpdated = true; // BUDA.testがあったらアップデート済みと判断
}
g.drawString(s, x, y); y += 50;
// VFSManagerを取得
VFSManager manager = VFSManager.getInstance();
if( isUpdated ){
// アップデート済みならアップデートを解除
g.drawString("Start cancelling updated VFS...", x, y); y+=50;Thread.sleep(1000);
manager.requestUpdating(null, null, true);
} else {
// 未アップデートなら、/UpdateにあるBUMFとBUSFを使ってアップデート
g.drawString("Start updating VFS...", x, y); y+=50;Thread.sleep(1000);
manager.requestUpdating(BUMFDir + File.separator + "sample.xml",
BUMFDir + File.separator + "sample.sf", true);
}
} catch (Throwable e) {
}
}
public void startXlet() {
try {
// アップデートを有効にするため、同一タイトルをリスタート(別タイトルへの切り替えでもよい)
TitleContext tc = (TitleContext)ServiceContextFactory.getInstance().getServiceContext(xc);
Title t = (Title) tc.getService();
g.drawString("Restarting the title " + t.getLocator() + "...", x, y); y+=50; Thread.sleep(1000);
tc.start(t, true); // trueでなければリスタートしない
} catch (Throwable e) {
}
}
public void pauseXlet() {}
public void destroyXlet(boolean unconditional) {}
}
関連する項目
- BDメディアからのファイル読み込み: Virtual Packageアクセス方法を記載
- VFS: Virtual Files Systemについて記載
- Titleの再スタート,別のTitleへの切り替え: アップデートを有効にするために必要なタイトル切り替えのサンプルコード