OSDN Git Service

78fb5cd070351d70d153942cbf7a85413064f98d
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / pmd / model / binio / PmdExporterExt2.java
1 /*
2  * model exporter for pmd-file(Ext2)
3  *
4  * License : The MIT License
5  * Copyright(c) 2010 MikuToga Partners
6  */
7
8 package jp.sourceforge.mikutoga.pmd.model.binio;
9
10 import java.io.IOException;
11 import java.io.OutputStream;
12 import jp.sourceforge.mikutoga.binio.IllegalTextExportException;
13 import jp.sourceforge.mikutoga.pmd.model.PmdModel;
14 import jp.sourceforge.mikutoga.pmd.model.ToonMap;
15 import jp.sourceforge.mikutoga.pmd.parser.PmdLimits;
16
17 /**
18  * PMDファイルのエクスポーター(拡張2:任意のトゥーンファイル名対応)。
19  * <p>
20  * 物理演算対応以降のPMDファイルフォーマットを
21  * 使いたくない場合はこのエクスポーターを用いて出力せよ。
22  */
23 public class PmdExporterExt2 extends PmdExporterExt1{
24
25     /**
26      * コンストラクタ。
27      * @param stream 出力ストリーム
28      * @throws NullPointerException 引数がnull
29      */
30     public PmdExporterExt2(OutputStream stream)
31             throws NullPointerException{
32         super(stream);
33         return;
34     }
35
36     /**
37      * {@inheritDoc}
38      * @param model {@inheritDoc}
39      * @throws IOException {@inheritDoc}
40      * @throws IllegalPmdException {@inheritDoc}
41      */
42     @Override
43     public void dumpPmdModel(PmdModel model)
44             throws IOException, IllegalPmdException{
45         super.dumpPmdModel(model);
46
47         try{
48             dumpToonMap(model);
49         }catch(IllegalTextExportException e){
50             throw new IllegalPmdException(e);
51         }
52
53         return;
54     }
55
56     /**
57      * 独自トゥーンファイルテーブルを出力する。
58      * @param model モデルデータ
59      * @throws IOException 出力エラー
60      * @throws IllegalPmdTextException トゥーンファイル名が長すぎる
61      */
62     private void dumpToonMap(PmdModel model)
63             throws IOException, IllegalTextExportException{
64         ToonMap map = model.getToonMap();
65
66         for(int idx = 0; idx < PmdLimits.TOON_FIXEDNUM; idx++){
67             String toonName = map.getIndexedToon(idx);
68             if(toonName == null) toonName = "";
69             dumpText(toonName, PmdLimits.MAXBYTES_TOONFILENAME);
70         }
71
72         flush();
73
74         return;
75     }
76
77 }