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 *
028 * @param <T> 型オブジェクト
029 */
030public interface DataModel<T> {
031
032        /**
033         * 変更されたタイプ(追加)
034         *
035         * @og.rev 6.7.9.1 (2017/05/19) インターフェースの見直しにより追加
036         */
037        String INSERT_TYPE = "A";
038
039        /**
040         * 変更されたタイプ(変更)
041         *
042         * @og.rev 6.7.9.1 (2017/05/19) インターフェースの見直しにより追加
043         */
044        String UPDATE_TYPE = "C";
045
046        /**
047         * 変更されたタイプ(削除)
048         *
049         * @og.rev 6.7.9.1 (2017/05/19) インターフェースの見直しにより追加
050         */
051        String DELETE_TYPE = "D";
052
053        /**
054         * row にあるセルのオブジェクト値を置き換えます。
055         *
056         * @param       vals    新しい配列値。
057         * @param       row             値が変更される行(無視されます)
058         */
059        void setValues( final T[] vals,final int row ) ;
060
061        /**
062         * カラム名に対応する カラム番号を返します。
063         *
064         * 特殊なカラムが指定された場合は、負の値を返します。
065         * 例えば、[KEY.カラム名]、[I]、[ROW.ID] など、特定の負の値を返します。
066         * また、カラム名が元のデータモデルに存在しない場合も、負の値か、
067         * Exception を返します。負の値なのか、Exception なのかは、
068         * 実装に依存します。
069         *
070         * @param       columnName      値が参照されるカラム番号
071         *
072         * @return      指定されたセルのカラム番号
073         */
074        int getColumnNo( final String columnName ) ;
075
076        /**
077         * カラム名配列を返します。
078         * 配列オブジェクトは、clone されたコピーを返します。
079         *
080         * @return      カラム名配列
081         */
082        String[] getNames();
083
084        /**
085         * row にあるセルの属性値を配列で返します。
086         *
087         * @param       row     値が参照される行
088         *
089         * @return      指定されたセルの属性値
090         */
091        T[] getValues( int row ) ;
092
093        /**
094         * row および clm にあるセルの属性値を返します。
095         *
096         * @param       row     値が参照される行
097         * @param       clm     値が参照される列
098         *
099         * @return      指定されたセルの値 T
100         */
101        T getValue( int row, int clm ) ;
102
103        /**
104         * clm のNativeタイプを返します。
105         * Nativeタイプはorg.opengion.fukurou.model.NativeTypeで定義されています。
106         *
107         * @og.rev 4.1.1.2 (2008/02/28) 新規追加
108         *
109         * @param       clm     値が参照される列
110         * @return      Nativeタイプ
111         * @see org.opengion.fukurou.model.NativeType
112         */
113        NativeType getNativeType( int clm );
114
115        /**
116         * データテーブル内の行の数を返します。
117         *
118         * 後付I/Fのため、default 設定しておきます。
119         *
120         * @og.rev 6.7.9.1 (2017/05/19) インターフェースの見直しにより追加
121         *
122         * @return      モデルの行数
123         */
124        default int getRowCount() {
125                return -1;
126        }
127
128        /**
129         * row 単位に変更されたタイプ(追加/変更/削除)を返します。
130         *
131         * 後付I/Fのため、default 設定しておきます。
132         *
133         * @og.rev 6.7.9.1 (2017/05/19) インターフェースの見直しにより追加
134         *
135         * @param       row     値が参照される行
136         *
137         * @return      変更されたタイプの値 String
138         */
139        default String getModifyType( final int row ) {
140                return "";
141        }
142
143        /**
144         * row 単位に変更タイプ(追加/変更/削除)をセットします。
145         * このメソッドでは、データのバックアップは取りません。
146         * タイプは始めに一度登録するとそれ以降に変更はかかりません。
147         * なにも変更されていない場合は、""(ゼロストリング)の状態です。
148         *
149         * 後付I/Fのため、default 設定しておきます。
150         *
151         * @og.rev 6.7.9.1 (2017/05/19) インターフェースの見直しにより追加
152         *
153         * @param       row             値が参照される行
154         * @param       modType 変更タイプ(追加/変更/削除)
155         *
156         */
157        default void setModifyType( final int row,final String modType ) {
158                /* Document empty method body */
159        }
160}