MANIFEST.MF を作る

やっと MAINFEST.MF を作るところです。そういえば、今まで暗黙のうちに MANIFEST.MF はプロジェクトのルートにおくようにしてました。まぁ、これはこれでいいでしょう。ちゃんとドキュメント化しておけば。

後はたいした問題はないはずです。そういえば、メインクラスか設定ファイルのどちらか一方が記入されていない場合は警告を出すようにしましょう。

    private void createManifest(String title, String mainClass,
                                String iconFile, String configFile) {
        PrintWriter writer = null;
        
        try {
            File manifest = new File(project.getProject().getLocation().toOSString()
                    + "/" + MANIFEST);
            writer = new PrintWriter(new BufferedWriter(new FileWriter(manifest)));

            if (title != null &&  !title.equals("")) {
                writer.println(TITLE_ITEM + " " + title);
            }
            
            if (mainClass != null &&  !mainClass.equals("")) {
                writer.println(MAIN_CLASS_ITEM + " " + mainClass);
            }
            
            if (iconFile != null &&  !iconFile.equals("")) {
                writer.println(ICON_FILE_ITEM + " " + iconFile);
            }
    
            if (configFile != null && !configFile.equals("")) {
                writer.println(CONFIG_FILE_ITEM + " " + configFile);
            }
        } catch (IOException ex) {
            MessageDialog.openWarning(
                    getShell(),
                    "LG3D WRPE Plug-in",
                    "MANIFEST.MF の作成に失敗しました");
            WrpePlugin.log(ex);
        } finally {
            if (writer != null) {
                writer.close();
            }
        }
    }

このルーチンはダイアログの [Create] ボタンが押されたときにコールさせるようにするため、okPressed メソッドからコールするようにしました。

    protected void okPressed() {
        String title = titleText.getText();
        String mainClass = mainClassText.getText();
        String iconFile = iconFilenameText.getText();
        String configFile = configFilenameText.getText();

        if ((mainClass == null || mainClass.equals(""))
                && (configFile == null || configFile.equals(""))) {
            MessageDialog.openWarning(
                    getShell(),
                    "LG3D WRPE Plug-in",
                    "You must fill in main class or config file.");
            return;
        } else {
            createManifest(title, mainClass, iconFile, configFile);
        }
        super.okPressed();
    }

このルーチンの中で、メインクラスか設定ファイルのどちらかが入力されていないと警告を出すようにしています。どうやら、super.okPressed をコールしない限りダイアログが閉じないようなので、ちょうどいいでしょう。