/** * indexで指定した{@link RgtProxy}とそれに対応する{@link Collection}を削除します。 * * @param index * @throws IllegalArgumentException indexがコレクションの範囲外の場合 */ public void remove(int index) { if ((index < 0) || (collection_.size() <= index)) { throw new IllegalArgumentException("Bad index:" + index); // $NON-NLS-1$ } collection_.remove(index); isRgtEdited_ = true; }
/** * gameIndexで指定したゲームをアクティブにします。 * * @param activeRgtIndex アクティブにする{@link RgtProxy}のインデックス(0オリジン) * @throws IllegalArgumentException gameIndexがコレクションの範囲を超えた場合 */ public void setActive(int activeRgtIndex) { if ((activeRgtIndex < 0) || (collection_.size() <= activeRgtIndex)) { throw new IllegalArgumentException( "Parameter gameIndex is out of bounds. Game size is " + collection_.size() // $NON-NLS-1$ + ". Parameter gameIndex is " + activeRgtIndex); //$NON-NLS-1$ } activeRgtIndex_ = activeRgtIndex; }
/** * どのゲームが編集されているかを示す配列を返します。<br> * 戻り値は長さが{@link Collection#size()}で各要素がtrueの場合は そのRootGameTreeから始まるゲームが編集されていることを示します。 * * @return {@link RootGameTree}が編集されている場合にtrueを返す配列。 */ public boolean[] getChangedFlags() { boolean[] ret = new boolean[collection_.size()]; for (int i = 0; i < ret.length; ++i) { RgtProxy gm = games_.get(i); ret[i] = (gm != null) && gm.isChanged(); } return ret; }
public void dispose() { games_.clear(); collection_.removeListener(listener_); // コンテキストを全て破棄する。 for (RootGameTree rgt : collection_) { Yukinoshita.context(rgt).clearCurrent(); } Yukinoshita.context(collection_).clearCurrent(); }
/** * このクラスのプライムコンストラクタです。 * * @param collection * @param setChangedFlag * @throws org.unitarou.lang.NullArgumentException collectionがnullの場合。 */ public CollectionProxy(Collection collection, boolean setChangedFlag) { super(); ArgumentChecker.throwIfNull(collection); collection_ = collection; listener_ = new CollectionListenerImpl(); collection_.addListener(listener_); games_ = new ArrayList<RgtProxy>(collection_.size()); for (int i = 0; i < collection_.size(); ++i) { games_.add(null); } activeRgtIndex_ = 0; if (setChangedFlag) { // 最初から編集済み扱いにする時のみ、全てを読み出す。 for (int i = 0; i < collection_.size(); ++i) { initializeGame(i, true); } } isRgtEdited_ = false; }
/** * indexで指定されたGameMediatorを必要であれば作成して返します。 * * @param index * @return indexで指定されたGameMediator * @throws IllegalArgumentException indexがコレクションの範囲外の場合 */ private RgtProxy get(int index) { if ((index < 0) || (collection_.size() <= index)) { throw new IllegalArgumentException("Bad index:" + index); // $NON-NLS-1$ } RgtProxy ret = games_.get(index); if (ret == null) { ret = initializeGame(index, false); } return ret; }
/** * index1とindex2の{@link RgtProxy}を入れ替えます。<br> * なお、index1とindex2が等しい場合は何もしません。 * * @param index1 * @param index2 * @throws IllegalArgumentException index1およびindex2の値がコレクションの範囲を超えた場合 */ public void swap(int index1, int index2) { if (index1 < 0 || collection_.size() <= index1 || index2 < 0 || collection_.size() <= index2) { throw new IllegalArgumentException( "Parameter is out of range. index1:" + index1 //$NON-NLS-1$ + ", index2:" + index2); //$NON-NLS-1$ } if (index1 == index2) { return; } collection_.swap(index1, index2); RgtProxy gm1 = games_.get(index1); games_.set(index1, games_.get(index2)); games_.set(index2, gm1); if (activeRgtIndex_ == index1) { activeRgtIndex_ = index2; } else if (activeRgtIndex_ == index2) { activeRgtIndex_ = index1; } isRgtEdited_ = true; }
/** * rgtをこのCollectionに組み込んでそのコントローラである {@link RgtProxy}を返します。 * * @param rgt * @return 引数をラップした{@link RgtProxy}。NOT NULL */ public RgtProxy createGame(RootGameTree rgt) { ArgumentChecker.throwIfNull(rgt); collection_.addLast(rgt); RgtProxy gm = initializeGame(collection_.size() - 1, true); return gm; }
/** * GameMediatorの総数を返します。 <code>getCollection().size()</code>と等価です。 * * @return GameMediatorの総数 */ public int size() { return collection_.size(); }
/** * indexに該当する{@link RgtProxy}を初期化します。 * * @param index * @param setChangedFlag * @return indexに該当する{@link RgtProxy} */ private RgtProxy initializeGame(int index, boolean setChangedFlag) { RootGameTree rootGameTree = collection_.get(index); RgtProxy ret = new RgtProxy(rootGameTree, setChangedFlag); games_.set(index, ret); return ret; }