001/*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016package org.opengion.fukurou.model;
017
018/**
019 * 1レコードのデータを管理するインターフェースです。
020 * Formatter で使用される単純なメソッドを定義しています。
021 *
022 * @og.group 画面表示
023 *
024 * @version  4.0
025 * @author   Kazuhiko Hasegawa
026 * @since    JDK5.0,
027 */
028public interface DataModel<T> {
029
030        /**
031         * 変更されたタイプ(追加)
032         *
033         * @og.rev 6.7.9.1 (2017/05/19) インターフェースの見直しにより、追加
034         */
035        String INSERT_TYPE = "A";
036
037        /**
038         * 変更されたタイプ(変更)
039         *
040         * @og.rev 6.7.9.1 (2017/05/19) インターフェースの見直しにより、追加
041         */
042        String UPDATE_TYPE = "C";
043
044        /**
045         * 変更されたタイプ(削除)
046         *
047         * @og.rev 6.7.9.1 (2017/05/19) インターフェースの見直しにより、追加
048         */
049        String DELETE_TYPE = "D";
050
051        /**
052         * row にあるセルのオブジェクト値を置き換えます。
053         *
054         * @param   vals  新しい配列値。
055         * @param   row   値が変更される行(無視されます)
056         */
057        void setValues( final T[] vals,final int row ) ;
058
059        /**
060         * カラム名に対応する カラム番号を返します。
061         *
062         * 特殊なカラムが指定された場合は、負の値を返します。
063         * 例えば、[KEY.カラム名]、[I]、[ROW.ID] など、特定の負の値を返します。
064         * また、カラム名が元のデータモデルに存在しない場合も、負の値か、
065         * Exception を返します。負の値なのか、Exception なのかは、
066         * 実装に依存します。
067         *
068         * @param   columnName  値が参照されるカラム番号
069         *
070         * @return  指定されたセルのカラム番号
071         */
072        int getColumnNo( final String columnName ) ;
073
074        /**
075         * カラム名配列を返します。
076         * 配列オブジェクトは、clone されたコピーを返します。
077         *
078         * @return      カラム名配列
079         */
080        String[] getNames();
081
082        /**
083         * row にあるセルの属性値を配列で返します。
084         *
085         * @param   row     値が参照される行
086         *
087         * @return  指定されたセルの属性値
088         */
089        T[] getValues( int row ) ;
090
091        /**
092         * row および clm にあるセルの属性値を返します。
093         *
094         * @param   row     値が参照される行
095         * @param   clm     値が参照される列
096         *
097         * @return  指定されたセルの値 T
098         */
099        T getValue( int row, int clm ) ;
100
101        /**
102         * clm のNativeタイプを返します。
103         * Nativeタイプはorg.opengion.fukurou.model.NativeTypeで定義されています。
104         *
105         * @og.rev 4.1.1.2 (2008/02/28) 新規追加
106         *
107         * @param  clm      値が参照される列
108         *
109         * @return Nativeタイプ
110         * @see org.opengion.fukurou.model.NativeType
111         */
112        NativeType getNativeType( int clm );
113
114        /**
115         * データテーブル内の行の数を返します。
116         *
117         * 後付I/Fのため、default 設定しておきます。
118         *
119         * @og.rev 6.7.9.1 (2017/05/19) インターフェースの見直しにより、追加
120         *
121         * @return  モデルの行数
122         */
123        default int getRowCount() {
124                return -1;
125        }
126
127        /**
128         * row 単位に変更されたタイプ(追加/変更/削除)を返します。
129         *
130         * 後付I/Fのため、default 設定しておきます。
131         *
132         * @og.rev 6.7.9.1 (2017/05/19) インターフェースの見直しにより、追加
133         *
134         * @param   row     値が参照される行
135         *
136         * @return  変更されたタイプの値 String
137         */
138        default String getModifyType( final int row ) {
139                return "";
140        }
141
142        /**
143         * row 単位に変更タイプ(追加/変更/削除)をセットします。
144         * このメソッドでは、データのバックアップは取りません。
145         * タイプは始めに一度登録するとそれ以降に変更はかかりません。
146         * なにも変更されていない場合は, ""(ゼロストリング)の状態です。
147         *
148         * 後付I/Fのため、default 設定しておきます。
149         *
150         * @og.rev 6.7.9.1 (2017/05/19) インターフェースの見直しにより、追加
151         *
152         * @param   row      値が参照される行
153         * @param   modType  変更タイプ(追加/変更/削除)
154         *
155         */
156        default void setModifyType( final int row,final String modType ) {
157                /* Document empty method body */
158        }
159}