1

Java を使用して、アプリケーション内のすべてのプロパティ ファイルのファイル名のリストを取得する方法を探しています。

ターゲットは、言語選択ドロップダウンのコンテンツを動的に構築することです。

4

1 に答える 1

4

このクラスは、現在のデータベース内のすべてのプロパティ ファイル (言語リソース ファイル) をjava..util.Vectorとして返すメソッドgetPropertFileList()を提供します。

package ch.hasselba.xpages;

import java.util.Vector;
import javax.faces.context.FacesContext;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.NoteCollection;
import lotus.domino.NotesException;

public class DesignElements {

    private final String EMPTY_STRING = "";
    private final String FLAG_PROPERTY = "gC~4K2P";
    private final String FIELD_$FLAGS = "$Flags";
    private final String FIELD_TITLE = "$TITLE";

    /**
     * returns Vector containing all property files 
     * of a database
     * 
     * No error handling included!
     * 
     * @category Domino
     * @author Sven Hasselbach
     * @category Tools
     * @version 0.1
     */
    public Vector getPropertFileList() {

        FacesContext fc = FacesContext.getCurrentInstance();

        Vector data = new Vector();
        try {

            // get DB
            Database db = (Database) fc.getApplication().getVariableResolver()
                    .resolveVariable(fc, "database");

            // get all design docs
            NoteCollection nc = db.createNoteCollection(false);
            nc.selectAllDesignElements(true);
            nc.buildCollection();

            // process all notes 
            String noteId = "";
            noteId = nc.getFirstNoteID();

            Document doc = null;
            // 
            while (!(EMPTY_STRING.equals(noteId))) {

                // get design doc
                doc = db.getDocumentByID(noteId);

                // check if its a property file
                if (FLAG_PROPERTY.equals(doc.getItemValueString(FIELD_$FLAGS))) {
                    // add to Vector
                    data.add(doc.getItemValueString(FIELD_TITLE));
                }

                // next one
                noteId = nc.getNextNoteID(noteId);

                // recycle doc
                recycleObject( doc );
            }

        } catch (NotesException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return data;

    }
    /**
     * recycles a domino document instance
     *
     * @param lotus.domino.Base
     *           obj to recycle
     * @category Domino
     * @author Sven Hasselbach
     * @category Tools
     * @version 1.1
     */
    public static void recycleObject(lotus.domino.Base obj) {
        if (obj != null) {
           try {
              obj.recycle();
           } catch (Exception e) {}
       }
    }
}

XPage で使用するには、次のように呼び出します。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

   <xp:comboBox id="comboBox1">
      <xp:selectItems>
         <xp:this.value>
            <![CDATA[#{javascript:
               importPackage(ch.hasselba.xpages);
               DesignElements().getPropertFileList()
            }]]>
         </xp:this.value>
      </xp:selectItems>
   </xp:comboBox>
</xp:view>
于 2012-11-21T15:57:09.413 に答える