Eclipseのプロジェクト新規作成部分

昨日はプロジェクトに設置したファイルから、プロジェクトフォルダにファイルを作るところまで作りました。Ethnaのプロジェクトの場合390個ぐらいのファイルがあったので、それを全部列挙するのか〜とか考えていました。

他のプラグインだとどうしているのかあとで調べて、とりあえずPHPとかでファイルの一覧から390行のJavaコードでも作成しようと無謀なことを考えていました(笑)

結局jarファイル使えばファイル一覧すぐに取得できるんじゃないかって思って、jarファイルを開いて中身を作るコードを作ってみました。

ファイルの読み込みと新規プロジェクトに追加

private void addJarFileToProject(IContainer container, String filename,
    IProgressMonitor monitor) throws CoreException {
  // リソースからJarファイルを取り出す
  InputStream resourceStream = this.getClass().getResourceAsStream(
      "templates/" + filename);
  JarInputStream jar;
  try {
    // Jar用のInputStream作成
    jar = new JarInputStream(resourceStream);
    while (true) {
      // ファイルエントリ取得
      ZipEntry entry = jar.getNextEntry();
      if (entry == null) {
        // nullの場合完了
        break;
      }

      // フォルダとファイルで処理を変える
      if (entry.isDirectory()) {
        // ディレクトリ
        IFolder imageFolder = container.getFolder(new Path(entry
            .getName()));
        if (!imageFolder.exists()) {
          // フォルダが無い場合のみ作成
          imageFolder.create(true, true, monitor);
        }
      } else {
        // ファイル
        final IFile file = container.getFile(new Path(entry
            .getName()));

        // バイナリ データを読み込みます。
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        while (true) {
          byte[] buffer = new byte[1024];
          int len = jar.read(buffer);
          if (len <= 0) {
            break;
          }
          out.write(buffer, 0, len);
        }
        byte[] entryData = out.toByteArray();

        // バイナリをインプットストリームに変換
        InputStream in = new ByteArrayInputStream(entryData);

        // ファイルの存在チェック
        if (file.exists()) {
          // すでにあるので上書き
          file.setContents(in, true, true, monitor);
        } else {
          // 新規作成
          file.create(in, true, monitor);
        }
      }
    }
  } catch (IOException e) {
    e.printStackTrace();
  }
}

この辺のIFileとかの資料があまりないんですよね。PHPとかと比べてJavaはインターネット上で検索してもあまり見つからないのが趣味より業務で組んでいる人が多いってのと関係あるかもしれませんね。

  InputStream resourceStream = this.getClass().getResourceAsStream(
      "templates/" + filename);

ここの部分でリソースファイルって何があるか検索できないんですよね。たぶんpath情報をどこかから取ってきて、自分で検索すればいいのかな?

今回はあらかじめファイルがわかっているのとEclipseのプロジェクトに大量のファイルを登録するのも嫌なんでJarファイルで行きます!

たぶん、標準のEthna本体と追加ライブラリのJarファイル群になるかな。

感想

予想以上にEclipseの情報がない。。。ただ今大変なのがInputStreamとかJarInputStreamとかJavaの一般的なファイルI/O(笑)

次は新規プロジェクトの名前からアクションなどの名前をテンプレート使って変更するところっすね。今日中にできそうですがBlog書いていると日付変わりそうなので切りのいいところでBlogだけ書きます(笑)

追記

画像取り込んでいたのに入れ忘れている(笑)

プロジェクト新規作成

アイコンをつけないといけませんね。

プロジェクト作成条件


ほぼデフォルトのままです。ここにいろいろ拡張していきますがPDTをベースにするかもしれません。

作成結果

こんな感じでデフォルトのフォルダ構成ができました!
ただしまだプロジェクト名と内部のクラス名などが一致していません(涙)