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 */
016 package org.opengion.plugin.view;
017
018 import java.io.Serializable;
019 import java.util.Arrays;
020 import java.util.Comparator;
021 import java.util.LinkedHashSet;
022 import java.util.Set;
023 import java.util.TreeSet;
024
025 import org.opengion.fukurou.util.StringUtil;
026 import org.opengion.hayabusa.common.HybsSystem;
027 import org.opengion.hayabusa.common.HybsSystemException;
028 import org.opengion.hayabusa.db.DBColumn;
029 import org.opengion.hayabusa.db.DBColumnConfig;
030 import org.opengion.hayabusa.db.DBTableModel;
031 import org.opengion.hayabusa.db.DBTableModelSorter;
032 import org.opengion.hayabusa.db.DBTableModelUtil;
033 import org.opengion.hayabusa.db.Selection;
034 import org.opengion.hayabusa.html.CrossMap;
035 import org.opengion.hayabusa.html.ViewCrossTableParam;
036 import org.opengion.hayabusa.resource.CodeData;
037 import org.opengion.hayabusa.resource.ResourceManager;
038
039 /**
040 * クãƒã‚¹é›?¨ˆãƒ†ãƒ¼ãƒ–ル作æ?クラスã§ã™ã?
041 *
042 * select dept.dname,emp.deptno,substrb(job,1,2) as X,job,mgr,sum(sal),count(*)
043 * from emp,dept
044 * where emp.deptno = dept.deptno
045 * group by dept.dname,emp.deptno,cube(job,mgr)
046 * order by emp.deptno,job,mgr;
047 *
048 * HEAD1 ?šã?ãƒ?ƒ€ãƒ¼ã€‚剿®µã¨åŒã˜ãƒ??ã‚¿ã¯è¡¨ç¤ºã•ã›ãªã??
049 * HEAD2 ?šã‚ーブレイクã•ã›ã‚‹ã‚«ãƒ©ãƒ??ã¾ãŸã?剿®µã¨åŒã˜ãƒ??ã‚¿ã¯è¡¨ç¤ºã•ã›ãªã??
050 * HEAD3 ?šã‚ーブレイクã•ã›ãªã?‚«ãƒ©ãƒ??ã¾ãŸã?剿®µã¨åŒã˜ãƒ??ã‚¿ã§ã‚‚表示ã•ã›ã‚‹ã?
051 * ROW ?šè¡Œãƒ‡ãƒ¼ã‚¿ã®ãƒ˜ãƒƒãƒ??ã«ãªã‚‹ã‚«ãƒ©ãƒ?
052 * COL ?šå?ãƒ??ã‚¿ã®ãƒ˜ãƒƒãƒ??ã«ãªã‚‹ã‚«ãƒ©ãƒ??下記ã?SUM1,SUM2ã®ä¸¡æ–¹ã®ãƒ˜ãƒƒãƒ??ã«ãªã‚‹ã?
053 * SUM1 ?šå?ãƒ??ã‚¿ã®å€¤ã«ãªã‚‹ã‚«ãƒ©ãƒ??
054 * SUM2 ?šå?ãƒ??ã‚¿ã®å€¤ã«ãªã‚‹ã‚«ãƒ©ãƒ??
055 *
056 * SUMカラãƒ??æ•°ã€ã‚ーブレイクã®ã‚«ãƒ©ãƒ?ã€ã‚°ãƒ«ãƒ¼ãƒ—化ã™ã‚‹ã‚«ãƒ©ãƒ?ã‚?
057 * æŒ?®šã™ã‚‹ã“ã¨ã§ã€ã“れらã®ã‚¯ãƒã‚¹é›?¨ˆçµæžœã®è¡¨ç¤ºæ–¹æ³•ã‚’æŒ?®šã—ã¾ã™ã?
058 *
059 * breakColumn = "DEPTNO" ã‚ーブレイクã®ã‚«ãƒ©ãƒ?
060 * noGroupColumns = "X" グループ化ã™ã‚‹ã‚«ãƒ©ãƒ?
061 * sumNumber = "2" SUMカラ�?数
062 * cubeXColumn = "JOB" CUBE計算ã??‘ã¤ç›®(X)カラãƒ?‚’æŒ?®?
063 * cubeYColumn = "MGR" CUBE計算ã??’ã¤ç›®(Y)カラãƒ?‚’æŒ?®?
064 * cubeSortType = "NUMBER" CUBE Y ã®åˆ—ã?ãƒ?ƒ€ãƒ¼ã®ã‚½ãƒ¼ãƒˆæ–¹æ³•ã‚’æŒ?®?
065 * gokeiSortDir = "false" åˆè¨ˆã‚«ãƒ©ãƒ??ソート方å‘ã‚’æŒ?®?åˆæœŸå€¤:ソートã—ãªã?
066 * shokeiLabel = "SHOKEI" 列å°è¨ˆã?カラãƒ?«è¡¨ç¤ºã™ã‚‹ãƒ©ãƒ™ãƒ«ID
067 * gokeiLabel = "GOKEI" 列åˆè¨ˆã?カラãƒ?«è¡¨ç¤ºã™ã‚‹ãƒ©ãƒ™ãƒ«ID
068 * useHeaderColumn= "false" ヘッãƒ??カラãƒ?«ãƒ¬ãƒ³ãƒ?ƒ©ãƒ¼ã€ã‚¨ãƒ?‚£ã‚¿ãƒ¼ã‚’é©ç”¨ã™ã‚‹ã‹ã‚’æŒ?®?
069 * useClassAdd = "false" å??æƒ??ã®class属æ?ã«ã€ã‚«ãƒ©ãƒ?ãªã©ã‚’付与ã™ã‚‹ã‹ã©ã?‹ã‚’指å®?
070 * useHeaderResource = "false" ヘッãƒ??表示ã«ãƒ©ãƒ™ãƒ«ãƒªã‚½ãƒ¼ã‚¹ã‚’利用ã™ã‚‹ã?
071 *
072 * å?‚«ãƒ©ãƒ??属æ?(HEAD,SUMç?ã‚’èªè˜ã™ã‚‹æ–¹æ³?
073 *
074 * HEAD1 HEAD2 HEAD3 ROW COL SUM1 SUM2 ã¨ã?†ä¸¦ã³ã‚’èªè˜ã™ã‚‹æ–¹æ³•ã?ã€?
075 * 多数ã®å‰ææ¡ä»¶ã‚’利用ã—ã¦ã€å?æ¥ã‚‹ã ã‘å°‘ãªã?ƒ‘ラメータã§è‡ªå‹•èªè?
076 * ã•ã›ã¦ã?¾ã™ã?
077 * 若干ç?§£ã—ã«ãã„ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã?慣れã¦ãã ã•ã„ã€?
078 *
079 * 剿æ¡ä»¶??
080 * ROW,COL ã¯ã€å¿?š?‘å?ãšã¤å˜åœ¨ã™ã‚‹ã€?
081 * HEAD群ã€ROW,COL,SUM群 ã¨ã?†ä¸¦ã³ã«ãªã£ã¦ã?‚‹ã€?
082 * SUMç¾¤ã®æ•°ã¯ã€ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ã§æŒ?®šã™ã‚‹ã?
083 * 計算方法�
084 * HEADæ•°=カラãƒ?•°(7)-SUMæ•°(2)-1(ROW,COLåˆ? ????å€?(0 ??3)
085 * ROWアドレス?cubeXColumn è¨å®? (3) ※ アドレスã¯?ã‹ã‚‰å§‹ã¾ã‚‹ç‚º
086 * COLアドレス?cubeYColumn è¨å®? (4)
087 * SUMアドレス?HEADæ•°?‹ï¼???カラãƒ?•°(7)-1 (5 ??6)
088 *
089 * @og.rev 3.5.4.0 (2003/11/25) æ–°è¦ä½œæ?
090 * @og.group ç”»é¢è¡¨ç¤º
091 *
092 * @version 4.0
093 * @author Kazuhiko Hasegawa
094 * @since JDK5.0,
095 */
096 public class ViewForm_HTMLCrossTable extends ViewForm_HTMLTable {
097 //* ã“ã?プãƒã‚°ãƒ©ãƒ??VERSIONæ–?—å?ã‚’è¨å®šã—ã¾ã™ã? {@value} */
098 private static final String VERSION = "5.5.5.0 (2012/07/28)" ;
099
100 private String[] groupByData = null;
101 private String[] groupByCls = null;
102
103 // 3.5.4.8 (2004/02/23) 機è?改å–?
104 private int rowClmNo = -1; // ROWカラãƒ??カラãƒ?•ªå·
105 private int colClmNo = -1; // CLMカラãƒ??カラãƒ?•ªå·
106 private int headCount = 0; // HEADカラ�?数
107 private int sumCount = 1; // åˆè¨ˆã‚«ãƒ©ãƒ??æ•°
108 private int breakClmNo = -1; // ブレークã™ã‚‹ã‚«ãƒ©ãƒ??カラãƒ?•ªå·
109 private boolean[] noGroupClm = null; // グループ化ã™ã‚‹/ã—ãªã??フラグé…å?
110 private String shokeiLabel = "å°è¨?; // 列å°è¨ˆã?カラãƒ?«è¡¨ç¤ºã™ã‚‹ãƒ©ãƒ™ãƒ«ID
111 private String gokeiLabel = "åˆè¨?; // 列åˆè¨ˆã?カラãƒ?«è¡¨ç¤ºã™ã‚‹ãƒ©ãƒ™ãƒ«ID
112 private String gokeiSortDir = null; // 列åˆè¨ˆã?カラãƒ?‚’ソートã™ã‚‹æ–¹å?
113
114 // 3.5.6.3 (2004/07/12) ソート方å¼[STRING,NUMBER,LOAD]
115 private String cubeSortType = "LOAD";
116
117 private DBTableModel table2 = null;
118 private boolean firstStep = true;
119
120 private String[] clmKeys = null; // é›?¨ˆéƒ¨ã®ã‚«ãƒ©ãƒ?‚ー(é›?¨ˆã‚«ãƒ©ãƒ?Œè¤?•°ã§ã‚‚ä¸?¤)ã®é…å?
121 private String[] clsAdd = null; // 5.2.2.0 (2010/11/01) class属æ?ã«ä»˜ä¸Žã•れるカラãƒ?‚ー
122
123 private String noDisplayKeys = null; // 3.7.0.4 (2005/03/18)
124 private String columnDisplayKeys = null; // 5.2.2.0 (2010/11/01)
125
126 private boolean firstClmGokei = false; // 5.0.0.3 (2009/09/22)
127 private boolean useHeaderColumn = false; // 5.2.2.0 (2010/11/01)
128 private boolean useClassAdd = false; // 5.2.2.0 (2010/11/01) class属æ?ã«ã‚«ãƒ©ãƒ?‚ーを追åŠ?™ã‚‹ã‹ã©ã?‹
129 private boolean useHeaderResource = false; // 5.5.5.0 (2012/07/28)
130 private String headerCode = null; // 5.5.5.0 (2012/07/28)
131
132 /**
133 * åˆæœŸåŒ–ã—ã¾ã™ã?
134 * ã“ã“ã§ã¯ã€å?部ã§ä½¿ç”¨ã•れã¦ã?‚‹ã‚ャãƒ?‚·ãƒ¥ã‚’クリアã—ã?
135 * æ–°ã—ã„モãƒ?ƒ«(DBTableModel)ã¨è¨?ª?lang) ã‚’å?ã«å†?ƒ¨ãƒ??ã‚¿ã‚’å?構築ã—ã¾ã™ã?
136 * ãŸã ã—ã?è¨å®šæƒ…å ±ã¯ã€ä»¥å‰ã?状態ãŒãã?ã¾ã¾ã‚ープã•れã¦ã?¾ã™ã?
137 *
138 * @og.rev 3.5.4.8 (2004/02/23) paramInit メソãƒ?ƒ‰ã§ã€å?期化を行ã„ã¾ã™ã?
139 * @og.rev 3.5.6.1 (2004/06/25) lang è¨?ªžã‚³ãƒ¼ãƒ?属æ?を削除ã—ã¾ã™ã?
140 *
141 * @param table DBTableModelオブジェク�
142 */
143 @Override
144 public void init( final DBTableModel table ) {
145 table2 = table;
146 firstStep = true;
147 }
148
149 /**
150 * å†?®¹ã‚’クリア(åˆæœŸåŒ?ã—ã¾ã™ã?
151 *
152 * @og.rev 3.5.6.3 (2004/07/12) cubeSortType , gokeiSortDir 属æ?を追åŠ?—ã¾ã™ã?
153 * @og.rev 3.7.0.4 (2005/03/18) noDisplayKeys 属æ?を追åŠ?—ã¾ã™ã?
154 * @og.rev 3.7.1.1 (2005/05/31) shokeiLabel,gokeiLabel ã®åˆæœŸå€¤å¤‰æ›´
155 * @og.rev 5.2.2.0 (2010/11/01) columnDisplayKeysã€clsAddã€useClassAdd 属æ?を追åŠ?—ã¾ã?
156 * @og.rev 5.5.5.0 (2012/07/20) useHeaderResource追�
157 */
158 @Override
159 public void clear() {
160 super.clear();
161 groupByData = null;
162 groupByCls = null;
163 rowClmNo = -1; // ROWカラãƒ??カラãƒ?•ªå·
164 colClmNo = -1; // CLMカラãƒ??カラãƒ?•ªå·
165 headCount = 0; // HEADカラ�?数
166 sumCount = 1; // åˆè¨ˆã‚«ãƒ©ãƒ??æ•°
167 breakClmNo = -1; // ブレークã™ã‚‹ã‚«ãƒ©ãƒ??カラãƒ?•ªå·
168 noGroupClm = null; // グループ化ã™ã‚‹/ã—ãªã??フラグé…å?
169 table2 = null;
170 firstStep = true;
171 clmKeys = null;
172 clsAdd = null; // 5.2.2.0 (2010/11/01)
173 shokeiLabel = "å°è¨?; // 列å°è¨ˆã?カラãƒ?«è¡¨ç¤ºã™ã‚‹ãƒ©ãƒ™ãƒ«ID
174 gokeiLabel = "åˆè¨?; // 列åˆè¨ˆã?カラãƒ?«è¡¨ç¤ºã™ã‚‹ãƒ©ãƒ™ãƒ«ID
175 cubeSortType = "LOAD"; // 3.5.6.3 (2004/07/12)
176 gokeiSortDir = null; // 3.5.6.3 (2004/07/12) 列åˆè¨ˆã?カラãƒ?‚’ソートã™ã‚‹æ–¹å?
177 noDisplayKeys = null; // 3.7.0.4 (2005/03/18)
178 columnDisplayKeys = null; // 5.2.2.0 (2010/11/01)
179 firstClmGokei = false; // 5.2.2.0 (2010/11/01)
180 useHeaderColumn = false; // 5.2.2.0 (2010/11/01)
181 useClassAdd = false; // 5.2.2.0 (2010/11/01)
182 useHeaderResource = false; // 5.5.5.0 (2012/07/20)
183 headerCode = null; // 5.5.5.0 (2012/07/28)
184 }
185
186 /**
187 * DBTableModel ã‹ã‚‰ HTMLæ–?—å?を作æ?ã—ã¦è¿”ã—ã¾ã™ã?
188 * startNo(表示開始ä½ç½®)ã‹ã‚‰ã€pageSize(表示件数)ã¾ã§ã®Viewæ–?—å?を作æ?ã—ã¾ã™ã?
189 * 表示残りãƒ??ã‚¿ã?pageSize 以下ã?å ´åˆã?,残りã®ãƒ??ã‚¿ã‚’ã™ã¹ã¦å‡ºåŠ›ã—ã¾ã™ã?
190 *
191 * @og.rev 3.5.5.0 (2004/03/12) No æ¬?ã®ã‚‚ã?ã®ä½œæ?判æ–ãƒã‚¸ãƒ?‚¯ã‚’追åŠ?
192 * @og.rev 3.5.6.1 (2004/06/25) lang è¨?ªžã‚³ãƒ¼ãƒ?属æ?を削除ã—ã¾ã™ã?
193 * @og.rev 3.5.6.4 (2004/07/16) ヘッãƒ??ã¨ãƒœãƒ‡ã‚£ãƒ¼éƒ¨ã‚’JavaScriptã§åˆ?›¢
194 * @og.rev 3.7.0.4 (2005/03/18) setNoDisplay メソãƒ?ƒ‰ã‚’追åŠ?
195 * @og.rev 4.3.1.0 (2008/09/08) ç·¨é›?¡Œã?ã¿ã‚’表示ã™ã‚‹å±žæ?(isSkipNoEdit)追åŠ?
196 * @og.rev 5.0.0.3 (2009/09/22) åˆè¨ˆå?ã‚’cubeã®å…ˆé?ã«å‡ºã›ã‚‹ã‚ˆã†ã«ã™ã‚‹
197 * @og.rev 5.1.0.0 (2009/11/04) ↑ã§åˆè¨ˆå?ãŒè¤?•°ã‚«ãƒ©ãƒ?˜åœ¨ã™ã‚‹å ´åˆã«æ£ã—ã表示ã•れãªã?ƒã‚°ã‚’ä¿®æ£
198 * @og.rev 5.2.2.0 (2010/11/01) setColumnDisplay メソãƒ?ƒ‰ã‚’追åŠ?
199 *
200 * @param startNo 表示開始ä½ç½®
201 * @param pageSize 表示件数
202 *
203 * @return DBTableModelã‹ã‚‰ä½œæ?ã•れã?HTMLæ–?—å?
204 */
205 @Override
206 public String create( final int startNo, final int pageSize ) {
207 if( firstStep ) {
208 paramInit( table2 );
209 super.init( makeCrossTable(table2) );
210 super.setNoDisplay( noDisplayKeys ) ; // 3.7.0.4 (2005/03/18)
211 super.setColumnDisplay( columnDisplayKeys ) ; // 5.2.2.0 (2010/11/01)
212 markerSet( this ); // 3.5.6.4 (2004/07/16)
213 firstStep = false;
214 }
215
216 if( getRowCount() == 0 ) { return ""; } // 暫定å?ç½®
217
218 int clmCnt = getColumnCount(); // 3.5.5.7 (2004/05/10)
219
220 headerLine = null;
221
222 int lastNo = getLastNo( startNo, pageSize );
223 int blc = getBackLinkCount();
224 String backData = null;
225
226 StringBuilder out = new StringBuilder( HybsSystem.BUFFER_LARGE );
227
228 out.append( getCountForm( startNo,pageSize ) );
229 out.append( getHeader() );
230
231 String ckboxTD = " <td class=\"" + ViewCrossTableParam.HEADER1 + "\">";
232
233 out.append("<tbody>").append( HybsSystem.CR );
234 int bgClrCnt = 0;
235 boolean shokei;
236 for( int row=startNo; row<lastNo; row++ ) {
237 // if( isSkip( row ) ) { continue; } // 3.5.3.1 (2003/10/31)
238 if( isSkip( row ) || isSkipNoEdit( row ) ) { continue; } // 4.3.1.0 (2008/09/08)
239 // ã‚ーブレイク時ã?ヘッãƒ??è¨å®?
240 if( breakClmNo >= 0 ) {
241 String val = getValue( row,breakClmNo );
242 if( backData == null ) { // ã‚ーブレイクã®åˆæœŸãƒ??ã‚¿è¨å®šã?
243 backData = val;
244 }
245 else {
246 if( ! backData.equals( val ) ) {
247 backData = val;
248 out.append( getHeadLine() );
249 }
250 }
251 }
252 // å°è¨ˆã?ãƒ?ƒ€ãƒ¼æ™‚ã?クラスè¨å®?
253 String val2 = getValue( row,rowClmNo );
254 if( val2.length() == 0 ) {
255 shokei = true;
256 out.append("<tr class=\"").append( ViewCrossTableParam.SHOKEI ).append("\">");
257 }
258 else {
259 shokei = false;
260 out.append("<tr").append( getBgColorCycleClass( bgClrCnt++ ) ).append(">");
261 }
262 out.append( HybsSystem.CR );
263 // 3.5.5.0 (2004/03/12) No æ¬?ã®ã‚‚ã?ã®ä½œæ?判æ–追åŠ?
264 if( isNumberDisplay() ) {
265 out.append( makeCheckbox( ckboxTD, row, blc ) ).append( HybsSystem.CR );
266 }
267 for(int column = 0; column < clmCnt; column++) {
268 if( isColumnDisplay( column ) ) {
269 if( column < headCount-1 ) { // CUBEã§ã¯ãªã?¡Œã?ãƒ?ƒ€ãƒ¼éƒ¨
270 String val = getGroupData( column,getRendererValue(row,column) );
271 out.append(" <td class=\"").append( groupByCls[column] ).append("\">");
272 out.append( val );
273 }
274 else if( column == headCount-1 ) { // ヘッãƒ??ã®æœ?¾Œå°¾
275 if( shokei ) {
276 out.append(" <td class=\"").append( ViewCrossTableParam.SHOKEI ).append("\">");
277 out.append( shokeiLabel );
278 }
279 else {
280 if( breakClmNo > 0 ) { // ヘッãƒ??ãŒã‚ã‚‹å?å?
281 out.append(" <td class=\"").append( groupByCls[column-1] ).append("\">");
282 }
283 else {
284 out.append(" <td class=\"").append( ViewCrossTableParam.HEADER1 ).append("\">");
285 }
286 out.append( getRendererValue(row,column) );
287 }
288 }
289 // else if( column >= clmCnt-sumCount ) { // CUBEã®æœ?µ‚カラãƒ?列åˆè¨?
290 else if( column >= clmCnt-sumCount && ! firstClmGokei ) { // 5.0.0.3 (2009/09/22) CUBEã®æœ?µ‚カラãƒ?列åˆè¨?
291 out.append(" <td class=\"").append( ViewCrossTableParam.SHOKEI ).append("\">");
292 out.append( getRendererValue(row,column) );
293 }
294 // else if( column == headCount && firstClmGokei ) { // 5.0.0.3 (2009/09/22) CUBEã®å…ˆé?カラãƒ?列åˆè¨?
295 else if( column >= headCount && column < headCount + sumCount && firstClmGokei ) { // 5.1.0.0 (2009/11/04)
296 out.append(" <td class=\"").append( ViewCrossTableParam.SHOKEI ).append("\">");
297 // out.append( getRendererValue(row,clmCnt-sumCount) );
298 out.append( getRendererValue(row,clmCnt-sumCount+(column-headCount)) ); // 5.1.0.0 (2009/11/04)
299 }
300 else { // カラ�SUM�
301 if( useClassAdd && clsAdd[column] != null ) {
302 out.append(" <td class=\"").append( clsAdd[column] ).append("\">");
303 }
304 else {
305 out.append(" <td>");
306 }
307 if( firstClmGokei ){
308 // out.append( getRendererValue(row,column-1) ); // åˆè¨ˆè¡Œã‚’å…ˆé?ã«å‡ºã™ã¨1ã¤ãšã‚Œã‚?
309 out.append( getRendererValue(row,column-sumCount) ); // 5.1.0.0 (2009/11/04)
310 }
311 else{
312 out.append( getRendererValue(row,column) );
313 }
314 }
315 out.append("</td>").append( HybsSystem.CR );
316 }
317 }
318 out.append("</tr>").append( HybsSystem.CR );
319 }
320 out.append("</tbody>").append( HybsSystem.CR );
321 out.append("</table>").append( HybsSystem.CR );
322
323 out.append( getScrollBarEndDiv() ); // 3.8.0.3 (2005/07/15)
324 return out.toString();
325 }
326
327 /**
328 * パラメータå†?®¹ã‚’å?期化ã—ã¾ã™ã?
329 *
330 * @og.rev 3.5.4.8 (2004/02/23) æ–°è¦ä½œæ?
331 * @og.rev 3.5.6.3 (2004/07/12) 列ã?ãƒ?ƒ€ãƒ¼ã®ã‚½ãƒ¼ãƒˆæ–¹æ³•ã‚’æŒ?®?
332 * @og.rev 5.0.0.3 (2009/09/22) åˆè¨ˆè¡Œã‚’CUBEã®å…ˆé?ã«æŒã£ã¦ãã‚‹ãŸã‚ã®ãƒ•ラグ追åŠ?
333 * @og.rev 5.2.2.0 (2010/11/01) useHeaderColumn,useClassAdd 属æ?ã®è¿½åŠ?
334 *
335 * @param table 入力もã¨ã® DBTableModelオブジェクãƒ?
336 */
337 private void paramInit( final DBTableModel table ) {
338 String breakColumn = getParam( ViewCrossTableParam.BREAK_COLUMN_KEY , null );
339 String noGroupColumns = getParam( ViewCrossTableParam.NO_GROUP_COLUMNS_KEY , null );
340 String sumNumber = getParam( ViewCrossTableParam.SUM_NUMBER_KEY , null );
341 shokeiLabel = getParam( ViewCrossTableParam.SHOKEI_LABEL_KEY , shokeiLabel );
342 gokeiLabel = getParam( ViewCrossTableParam.GOKEI_LABEL_KEY , gokeiLabel );
343 String cubeXColumn = getParam( ViewCrossTableParam.CUBE_X_COLUMN_KEY , null ); // CUBE計算ã??‘ã¤ç›®(X)カラãƒ?‚’æŒ?®?
344 String cubeYColumn = getParam( ViewCrossTableParam.CUBE_Y_COLUMN_KEY , null ); // CUBE計算ã??’ã¤ç›®(Y)カラãƒ?‚’æŒ?®?
345 cubeSortType = getParam( ViewCrossTableParam.CUBE_SORT_TYPE_KEY , "LOAD" ); // 3.5.6.3 (2004/07/12)
346 gokeiSortDir = getParam( ViewCrossTableParam.GOKEI_SORT_DIR_KEY , null ); // 3.5.6.3 (2004/07/12)
347 firstClmGokei = StringUtil.nval( getParam( ViewCrossTableParam.FIRST_CLM_GOKEI_KEY , null ), false); // 5.0.0.3 (2009/09/22)
348 useHeaderColumn = StringUtil.nval( getParam( ViewCrossTableParam.USE_HEADER_COLUMN , null ), false); // 5.2.2.0 (2010/11/01)
349 useClassAdd = StringUtil.nval( getParam( ViewCrossTableParam.USE_CLASS_ADD , null ), false); // 5.2.2.0 (2010/11/01)
350 useHeaderResource = StringUtil.nval( getParam( ViewCrossTableParam.USE_HEADER_RSC , null ), false); // 5.5.5.0 (2012/07/20)
351 headerCode = getParam( ViewCrossTableParam.HEADER_CODE_KEY , null ); // 5.5.5.0 (2012/07/28)
352
353 if( sumNumber != null ) {
354 sumCount = Integer.parseInt( sumNumber );
355 }
356
357 // HEADæ•°=カラãƒ?•°-SUMæ•°-1(COLåˆ? ROW ã¯ã€HEADã«å«ã¿ã¾ã™ã?
358 headCount = table.getColumnCount() - sumCount - 1;
359
360 // 3.5.5.9 (2004/06/07)
361 if( cubeXColumn != null ) {
362 rowClmNo = table.getColumnNo( cubeXColumn );
363 }
364 else {
365 rowClmNo = headCount-1; // ROWカラãƒ??カラãƒ?•ªå·
366 }
367
368 // 3.5.5.9 (2004/06/07)
369 if( cubeYColumn != null ) {
370 colClmNo = table.getColumnNo( cubeYColumn );
371 }
372 else {
373 colClmNo = headCount; // CLMカラãƒ??カラãƒ?•ªå·
374 }
375
376 if( breakColumn != null ) {
377 breakClmNo = table.getColumnNo( breakColumn );
378 }
379
380 groupByData = new String[headCount];
381 groupByCls = new String[headCount];
382 Arrays.fill( groupByCls,ViewCrossTableParam.HEADER2 ); // 変ã§ã‚ã‚‹ãŒã?æœ??ã«å…¥ã‚Œæ›¿ãˆãŒç™ºç”Ÿã™ã‚‹ç‚ºã€?
383
384 noGroupClm = new boolean[headCount]; // グループ化ã™ã‚‹/ã—ãªã??フラグé…å?
385 Arrays.fill( noGroupClm,false );
386
387 if( noGroupColumns != null ) {
388 String[] gClms = StringUtil.csv2Array( noGroupColumns );
389 for( int i=0; i<gClms.length; i++ ) {
390 noGroupClm[table.getColumnNo( gClms[i] )] = true;
391 }
392 }
393
394 if( ! "true".equalsIgnoreCase( gokeiSortDir ) &&
395 ! "false".equalsIgnoreCase( gokeiSortDir ) ) {
396 gokeiSortDir = null;
397 }
398 }
399
400 /**
401 * CUBEã§ã¯ãªã?¡Œã?ãƒ?ƒ€ãƒ¼éƒ¨ã®å€¤ãŒå‰ã¨åŒã˜ãªã‚‰ã?ã€ã‚¼ãƒæ–?—å?ã‚’è¿”ã—ã¾ã™ã?
402 *
403 * @param clm カラãƒ?•ªå·
404 * @param val 比è¼?™ã‚‹å?
405 *
406 * @return å‰ã¨åŒã˜ãªã‚?""ã‚’ã?ç•°ãªã‚‹å?åˆã?ã€å¼•æ•°ã® val ã‚’è¿”ã—ã¾ã™ã?
407 */
408 private String getGroupData( final int clm,final String val ) {
409 if( noGroupClm[clm] ) { return val; }
410
411 if( val.equals( groupByData[clm] )) {
412 return "";
413 }
414 else {
415 groupByData[clm] = val;
416 groupByCls[clm] = ( groupByCls[clm].equals( ViewCrossTableParam.HEADER1 )) ? ViewCrossTableParam.HEADER2 : ViewCrossTableParam.HEADER1 ;
417 return val;
418 }
419 }
420
421 /**
422 * é¸æŠžç”¨ã®ãƒã‚§ãƒ?‚¯ãƒœãƒƒã‚¯ã‚¹ã¨è¡Œç•ªå·ã¨å¤‰æ›´ã‚¿ã‚¤ãƒ?A,C,D)を表示ã—ã¾ã™ã?
423 *
424 * @param ckboxTD ãƒã‚§ãƒ?‚¯ãƒœãƒƒã‚¯ã‚¹ã®ã‚¿ã‚°(マルãƒã‚«ãƒ©ãƒ?™‚ã®rowspan対å¿?
425 * @param row 行番å·
426 * @param blc ãƒãƒƒã‚¯ãƒ©ã‚¤ãƒ³ã‚«ã‚¦ãƒ³ãƒ?å…ˆé?ã¸æˆ»ã‚‹ãƒªãƒ³ã‚¯é–“éš”)
427 *
428 * @return tdã‚¿ã‚°ã§å›²ã¾ã‚ŒãŸãƒã‚§ãƒ?‚¯ãƒœãƒƒã‚¯ã‚¹ã®HTMLæ–?—å?
429 */
430 @Override
431 protected String makeCheckbox( final String ckboxTD,final int row,final int blc ) {
432 StringBuilder out = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
433
434 out.append( ckboxTD ).append("</td>");
435 out.append( ckboxTD ).append("</td>");
436 out.append( ckboxTD );
437 // 3.5.1.0 (2003/10/03) Noカラãƒ?«ã€numberType 属æ?を追åŠ?
438 if( blc != 0 && (row+1) % blc == 0 ) {
439 out.append( "<a href=\"#top\">" ).append( (row+1) ).append( "</a>" );
440 } else {
441 out.append( (row+1) );
442 }
443 out.append("</td>");
444
445 return out.toString();
446 }
447
448 /**
449 * ヘッãƒ??繰り返ã—部をã?getTableHead()メソãƒ?ƒ‰ã‹ã‚‰åˆ?›¢ã€?
450 *
451 * @og.rev 3.5.4.5 (2004/01/23) 実è£?‚’getHeadLine( String thTag )ã«ç§»å‹?
452 * @og.rev 3.5.5.0 (2004/03/12) No æ¬?ã®ã‚‚ã?ã®ä½œæ?判æ–ãƒã‚¸ãƒ?‚¯ã‚’追åŠ?
453 * @og.rev 5.0.0.3 (2009/09/17) åˆè¨ˆè¡Œã‚’出力ã™ã‚‹ä½ç½®ã‚’firstClmGokeiã§å¤‰ãˆã‚?
454 * @og.rev 5.2.2.0 (2010/11/01) é›?¨ˆéƒ¨ã® ColumnDisplay/NoDisplay 対å¿?
455 * @og.rev 5.5.5.0 (2012/07/28) useHeaderResource利用時ã?ヘッãƒ??ラベル/コードリソース対å¿?
456 *
457 * @return ãƒ??ブルã®ã‚¿ã‚°æ–?—å?
458 */
459 @Override
460 protected String getHeadLine() {
461 if( headerLine != null ) { return headerLine; } // ã‚ャãƒ?‚·ãƒ¥ã‚’è¿”ã™ã€?
462
463 String rowspan = "";
464 if( sumCount > 1 ) { rowspan = " rowspan=\"2\""; }
465
466 String thTag = "<th" + rowspan;
467
468 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
469
470 buf.append("<tr").append( rowspan ).append(" class=\"row_h\"").append(" >").append( HybsSystem.CR );
471
472 // 3.5.5.0 (2004/03/12) No æ¬?ã®ã‚‚ã?ã®ä½œæ?判æ–追åŠ?
473 if( isNumberDisplay() ) {
474 buf.append( thTag ).append(" colspan='3'>").append( getNumberHeader() ).append("</th>");
475 }
476
477 buf.append( HybsSystem.CR );
478 // ヘッãƒ??部åˆ??ã€ãã®ã¾ã¾è¡¨ç¤ºã—ã¾ã™ã?
479 for(int column = 0; column < headCount; column++) {
480 if( isColumnDisplay( column ) ) {
481 buf.append( thTag ).append(">");
482 buf.append( getColumnLabel(column) );
483 buf.append("</th>").append( HybsSystem.CR );
484 }
485 }
486
487 // ヘッãƒ??部åˆ?上段)ã¯ã€ã‚«ãƒ©ãƒ??列を利用ã—ã¾ã™ã?
488 String colspan = "";
489 if( sumCount > 1 ) { colspan = " colspan='" + sumCount + "'"; }
490
491 // 5.2.2.0 (2010/11/01) é›?¨ˆéƒ¨ã® ColumnDisplay/NoDisplay 対å¿?
492 // String gokeiClm = "<th" + colspan + ">" + temp + "</th>" + HybsSystem.CR ;
493 String gokeiClm = null;
494 if( isColumnDisplay( headCount+(clmKeys.length-1)*sumCount ) ) {
495 String temp = clmKeys[clmKeys.length-1];
496 if( temp == null || temp.length() == 0 ) {
497 temp = gokeiLabel;
498 }
499
500 gokeiClm = "<th" + colspan + ">" + temp + "</th>" + HybsSystem.CR ;
501 }
502
503 // 5.2.2.0 (2010/11/01) æœ?¾Œã?カラãƒ?Œã€åˆè¨ˆè¡Œã?
504 // 5.0.0.3 (2009/09/22) firstClmGokei ã?trueã®å ´åˆã?cubeã®å…ˆé?ã«å‡ºã™ã‚ˆã?«ã—ã¾ã™ã?
505 // if( firstClmGokei && isColumnDisplay( headCount+clmKeys.length-1 ) ) {
506 if( firstClmGokei && gokeiClm != null ) {
507 buf.append( gokeiClm );
508 }
509
510 // // 5.0.0.3 (2009/09/22) trueã®å ´åˆã?cubeã®å…ˆé?ã«å‡ºã™ã‚ˆã?«ã—ã¾ã™ã?
511 // if( firstClmGokei ){
512 // String temp = clmKeys[clmKeys.length-1];
513 // if( temp == null || temp.length() == 0 ) {
514 // temp = gokeiLabel;
515 // }
516 // buf.append( "<th").append( colspan ).append( ">" );
517 // buf.append( temp );
518 // buf.append("</th>").append( HybsSystem.CR );
519 // }
520
521 // 3.7.0.4 (2005/03/18) カラãƒ??列ã?ã€ã‚«ãƒ©ãƒ?•ªå·ã¨åˆ¥ç‰©
522 ResourceManager resource = getResourceManager();
523 Selection selection = null;
524 if( headerCode != null && headerCode.length() > 0 && resource != null ){
525 DBColumn clmTmp = resource.getDBColumn( headerCode );
526 //selection = new Selection_CODE(resource.getCodeData( headerCode )); codeç›´ã®å ´å?
527 if ( clmTmp != null ){
528 selection = clmTmp.getSelection();
529 }
530 }
531 for( int keyNo = 0; keyNo < clmKeys.length-1; keyNo++ ) {
532 // 5.2.2.0 (2010/11/01) ColumnDisplay/NoDisplay 対�
533 if( isColumnDisplay( headCount+keyNo ) ) {
534 buf.append( "<th").append( colspan ).append( ">" );
535 if( headerCode != null && headerCode.length() > 0 && selection != null ){
536 buf.append( selection.getValueLabel( clmKeys[keyNo] ) );
537 }
538 else if( useHeaderResource && useHeaderColumn ){ // 5.5.5.0 (2012/07/28) ヘッ�?リソース対�
539 buf.append( getColumnLabel(headCount+keyNo) );
540 }
541 else{
542 buf.append( clmKeys[keyNo] );
543 }
544 buf.append("</th>").append( HybsSystem.CR );
545 }
546 }
547
548 // 5.2.2.0 (2010/11/01) æœ?¾Œã?カラãƒ?Œã€åˆè¨ˆè¡Œã?
549 // 5.0.0.3 (2009/09/22) firstClmGokei ã?trueã®å ´åˆã?cubeã®å…ˆé?ã«å‡ºã™ã‚ˆã?«ã—ã¾ã™ã?
550 // if( ! firstClmGokei && isColumnDisplay( headCount+clmKeys.length-1 ) ) {
551 if( ! firstClmGokei && gokeiClm != null ) {
552 buf.append( gokeiClm );
553 }
554
555 // 3.5.6.2 (2004/07/05) makeCrossTable( DBTableModel table ) ã«ç§»å‹?
556 // æœ?µ‚カラãƒ?åˆ?ãŒNULL(空æ–?—å?)ã®å ´åˆã?列åˆè¨ˆã§ã™ã?
557 // if( ! firstClmGokei ){ // 5.0.0.3 (2009/09/22) falseã®å ´åˆã?æœ?µ‚å?ã«å‡ºã?
558 // String temp = clmKeys[clmKeys.length-1];
559 // if( temp == null || temp.length() == 0 ) {
560 // temp = gokeiLabel;
561 // }
562 // buf.append( "<th").append( colspan ).append( ">" );
563 // buf.append( temp );
564 // buf.append("</th>").append( HybsSystem.CR );
565 // }
566
567 buf.append("</tr>").append( HybsSystem.CR );
568
569 if( sumCount > 1 ) {
570 buf.append("<tr").append(" class=\"row_h\"").append(" >").append( HybsSystem.CR );
571 int clmCnt = getColumnCount(); // 3.5.5.7 (2004/05/10)
572 for(int column = headCount; column < clmCnt; column++) {
573 if( isColumnDisplay( column ) ) {
574 buf.append( "<th>");
575 buf.append( getColumnLabel(column) );
576 buf.append("</th>").append( HybsSystem.CR );
577 }
578 }
579 buf.append("</tr>").append( HybsSystem.CR );
580 }
581
582 headerLine = buf.toString();
583 return headerLine;
584 }
585
586 /**
587 * クãƒã‚¹é›?¨ˆçµæžœã® DBTableModelオブジェクトを作æ?ã—ã¾ã™ã?
588 *
589 * @og.rev 3.5.4.8 (2004/02/23) paramInit メソãƒ?ƒ‰ã§ã€å?期化を行ã„ã¾ã™ã?
590 * @og.rev 3.5.6.3 (2004/07/12) 列ã?ãƒ?ƒ€ãƒ¼ã®ã‚½ãƒ¼ãƒˆå¯å¦ã®æŒ?®šã‚’追åŠ?
591 * @og.rev 4.0.0.0 (2007/11/27) ヘッãƒ??カラãƒ??エãƒ?‚£ã‚¿ãƒ¼ã€ãƒ¬ãƒ³ãƒ?ƒ©ãƒ¼é©ç”¨å¯¾å¿?
592 * @og.rev 4.3.5.7 (2008/03/22) ↑リソースãŒå˜åœ¨ã—ãªã??åˆã?ã€ãƒ©ãƒ™ãƒ«ã®ã¿å…¥ã‚Œæ›¿ã?
593 * @og.rev 5.2.2.0 (2010/11/01) useHeaderColumn,useClassAdd 属æ?ã®è¿½åŠ?
594 *
595 * @param table 入力もã¨ã® DBTableModelオブジェクãƒ?
596 *
597 * @return DBTableModelオブジェク�
598 */
599 private DBTableModel makeCrossTable( final DBTableModel table ) {
600 Set<String> clmData = gatSortAlgorithmSet();
601
602 // 列ã?ã‚ーã¨ãªã‚‹ã‚«ãƒ©ãƒ??値をå–å¾—ã—ã¾ã™ã?
603 int rowCnt = table.getRowCount(); // 3.5.5.7 (2004/05/10)
604 for( int row=0; row<rowCnt; row++ ) {
605 String clm = table.getValue( row,colClmNo );
606 if( clm.length() > 0 ) { clmData.add( clm ); }
607 }
608 // ゼãƒã‚¹ãƒˆãƒªãƒ³ã‚°ã¯ã€åˆè¨ˆè¡Œã«ãªã‚Šã¾ã™ã?ã§ã€æœ€å¾Œã«è¿½åŠ?—ã¾ã™ã?
609
610 // 3.5.6.3 (2004/07/12) ゼãƒã‚¹ãƒˆãƒªãƒ³ã‚°ã¯ã€åˆè¨ˆè¡Œã«ãªã‚Šã¾ã™ã?ã§ã€æœ€å¾Œã«è¿½åŠ?—ã¾ã™ã?
611 // clmKeys = new String[ clmData.size() + 1 ];
612 // clmKeys = clmData.toArray( clmKeys ) ;
613 clmKeys = clmData.toArray( new String[clmData.size() + 1] ) ;
614
615 clmKeys[clmKeys.length-1] = "" ;
616
617 int numberOfColumns = headCount + clmKeys.length * sumCount ;
618
619 DBTableModel tableImpl = DBTableModelUtil.newDBTable();
620 tableImpl.init( numberOfColumns );
621
622 // ヘッãƒ??カラãƒ?ROWãƒ??ã‚¿å«ã‚?ã¯ã€ãã®ã¾ã¾ã€è¨å®šã—ã¾ã™ã?
623 for(int column=0; column<headCount; column++) {
624 tableImpl.setDBColumn( column,table.getDBColumn(column) );
625 }
626
627 // åˆ—æƒ…å ±ã¯ã€åˆè¨ˆå?ã®ã‚«ãƒ©ãƒ?®šç¾©ã‚’使用ã—ã¾ã™ã?
628 DBColumn[] dbColumn = new DBColumn[sumCount];
629 for( int i=0; i<sumCount; i++ ) {
630 dbColumn[i] = table.getDBColumn(headCount + 1 + i);
631 }
632
633 // åˆ—æƒ…å ±ã¯ã€å?ã®åå‰ã‚’カラãƒ??値ã«å¤‰ãˆã¦ã€åˆè¨ˆã‚«ãƒ©ãƒ??ã®ã‚³ãƒ”ã?æƒ??ã‚’è¨å®šã—ã¾ã™ã?
634
635 int sumId = 0;
636 ResourceManager resource = getResourceManager();
637 useHeaderColumn = useHeaderColumn && resource != null ; // 5.2.2.0 (2010/11/01)
638
639 // 5.2.2.0 (2010/11/01) useClassAdd 属æ?ã®è¿½åŠ?
640
641 clsAdd = new String[numberOfColumns];
642
643 // åˆ—æƒ…å ±ã‚«ãƒ©ãƒ??ã€ã?ãƒ?ƒ€ãƒ¼åˆ?«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ç‚ºã€?–‹å§‹ãŒã€headCount ã‹ã‚‰ã«ãªã‚Šã¾ã™ã?
644 for(int column=headCount; column<numberOfColumns; column++) {
645 DBColumn dbClm = dbColumn[sumId];
646 String clmKey = clmKeys[ (column-headCount)/sumCount ];
647
648 // 5.2.2.0 (2010/11/01) useClassAdd 属æ?ã®è¿½åŠ?
649 if( useClassAdd ) {
650 // ※ 特殊対応:cssãªã©ã§æŒ?®šã§ãã‚‹IDã‚„CLASS属æ?ã¯ã€å?é æ–?—ãŒæ•°å—ã?å ´åˆã?ã€?
651 // 無効ã«ãªã‚Šã¾ã™ã?(ã¤ã¾ã‚Šã?効ãã¾ã›ã‚“ã€?
652 // 表示ヘッãƒ??ã¯ã€å¹´æœˆã‚„ã€ç¤¾å“¡ç•ªå·(æ•°å?ãªã©ã®ã‚±ãƒ¼ã‚¹ã‚‚ã‚りã¾ã™ã?ãã“ã§ã€å?é ãŒæ•°å—ã?
653 // å ´åˆã?ã€?x"(å°æ–‡å—ã?x)ã‚’è?å‹•çš„ã«é ã«è¿½åŠ?—ã¾ã™ã?
654 StringBuilder buf = new StringBuilder();
655 if( clmKey != null && clmKey.length() > 0 ) {
656 char ch = clmKey.charAt(0);
657 if( ch >= '0' && ch <= '9' ) {
658 buf.append( "x" );
659 }
660 buf.append( clmKey );
661 }
662
663 String nm = dbClm.getName();
664 if( nm != null && nm.length() > 0 ) {
665 buf.append( " " );
666 char ch = nm.charAt(0);
667 if( ch >= '0' && ch <= '9' ) {
668 buf.append( "x" );
669 }
670 buf.append( nm );
671 }
672 clsAdd[column] = buf.toString();
673 }
674
675 // 4.0.0.0 (2007/11/27)
676 // if( resource != null && "true".equalsIgnoreCase( getParam( "useHeaderColumn", null ) ) ) {
677 // 5.2.2.0 (2010/11/01) 処ç?¦‹ç›´ã—ã?useHeaderColumn ã®å‰å?ã—ã¨ã€setName 対å¿?
678 if( useHeaderColumn ) {
679 // String clmKey = clmKeys[ (column-headCount)/sumCount ]; // 5.2.2.0 (2010/11/01) 上ã«ç§»å‹?
680 DBColumn clmTmp = resource.getDBColumn( clmKey );
681 if( clmTmp == null ) {
682 // tableImpl.setDBColumn( column,dbColumn[sumId] ); }
683 DBColumnConfig dbCfg2 = dbClm.getConfig();
684 if( clmKey != null && clmKey.length() > 0 ) { // 5.2.2.0 (2010/11/01)
685 dbCfg2.setName( clmKey );
686 dbCfg2.setLabelData( resource.getLabelData( clmKey ) );
687 }
688 else {
689 dbCfg2.setLabelData( resource.getLabelData( gokeiLabel ) );
690 }
691 dbClm = new DBColumn( dbCfg2 );
692 // tableImpl.setDBColumn( column, new DBColumn( dbCfg2 ) );
693 }
694 else {
695 // tableImpl.setDBColumn( column,dbClm );
696 dbClm = clmTmp;
697 }
698 }
699 // else {
700 // tableImpl.setDBColumn( column,dbColumn[sumId] );
701 // }
702
703 tableImpl.setDBColumn( column,dbClm );
704
705 sumId++;
706 if( sumId % sumCount == 0 ) {
707 sumId = 0;
708 }
709 }
710
711 // クãƒã‚¹é›?¨ˆãƒ‡ãƒ¼ã‚¿ã®ä½œæ?
712 CrossMap cross = new CrossMap( clmKeys,headCount,sumCount );
713 for( int row=0; row<rowCnt; row++ ) {
714 String[] data = table.getValues( row );
715 cross.add( data );
716 }
717
718 // ãƒ??タ部ã®è¨å®?
719 int size = cross.getSize();
720 for( int row=0; row<size; row++ ) {
721 tableImpl.addValues( cross.get( row ), row );
722 }
723
724 tableImpl.resetModify();
725
726 final DBTableModel model ;
727 if( gokeiSortDir != null ) {
728 DBTableModelSorter temp = new DBTableModelSorter();
729 temp.setModel( tableImpl );
730
731 boolean direction = Boolean.valueOf( gokeiSortDir ).booleanValue();
732 temp.sortByColumn( numberOfColumns-1,direction );
733 model = temp ;
734 }
735 else {
736 model = tableImpl;
737 }
738 return model ;
739 }
740
741 /**
742 * 列ã?ãƒ?ƒ€ãƒ¼ã®ã‚½ãƒ¼ãƒˆæ–¹æ³•ã«å¿œã˜ãŸã?Setオブジェクトを返ã—ã¾ã™ã?
743 * ã“ã“ã§ã¯ã€NUMBER , STRING , LOAD ã®?“種類用æ„ã—ã¦ã?¾ã™ã?
744 *
745 * @og.rev 3.5.6.3 (2004/07/12) æ–°è¦ä½œæ?
746 *
747 * @return ソート方法ã«å¿œã˜ãŸSetオブジェクãƒ?
748 */
749 private Set<String> gatSortAlgorithmSet() {
750 final Set<String> rtnSet ;
751
752 if( "LOAD".equalsIgnoreCase( cubeSortType ) ) {
753 rtnSet = new LinkedHashSet<String>();
754 }
755 else if( "NUMBER".equalsIgnoreCase( cubeSortType ) ) {
756 rtnSet = new TreeSet<String>( numberSort );
757 }
758 else if( "STRING".equalsIgnoreCase( cubeSortType ) ) {
759 rtnSet = new TreeSet<String>();
760 }
761 else {
762 String errMsg = "cubeSortType ã¯ã€NUMBER,STRING,LOAD 以外指定ã§ãã¾ã›ã‚“ã€? +
763 " cubeSortType=[" + cubeSortType + "]";
764 throw new HybsSystemException( errMsg );
765 }
766
767 return rtnSet ;
768 }
769
770 /**
771 * 表示ä¸å¯ã‚«ãƒ©ãƒ?ã‚’ã?カンマ区åˆ?‚Šã§ä¸Žãˆã¾ã™ã?
772 * 例�OYA,KO,HJO,SU,DYSET,DYUPD"
773 * null を与ãˆãŸå?åˆã?,ãªã«ã‚‚ã—ã¾ã›ã‚“ã€?
774 *
775 * 注æ„:ã“ã®ã‚¯ãƒ©ã‚¹ã§ã¯ã€DBTableModel を作り直ã™ã‚¿ã‚¤ãƒŸãƒ³ã‚°ãŒã?
776 * create メソãƒ?ƒ‰å®Ÿè¡Œæ™‚ã§ã™ã?(パラメータã®åˆæœŸåŒ–ãŒå¿?¦ãªç‚º)
777 * よã£ã¦ã€ã“ã®ãƒ¡ã‚½ãƒ?ƒ‰ã¯ã€å?期ãŒçµ‚äº?¾Œã«ã€å?ã‚»ãƒ?ƒˆã—ã¾ã™ã?
778 *
779 * @og.rev 3.7.0.4 (2005/03/18) æ–°è¦ä½œæ?
780 *
781 * @param columnName カラ�
782 */
783 @Override
784 public void setNoDisplay( final String columnName ) {
785 noDisplayKeys = columnName;
786 }
787
788 /**
789 * 表示å¯èƒ½ã‚«ãƒ©ãƒ?ã‚’ã?カンマ区åˆ?‚Šã§ä¸Žãˆã¾ã™ã?
790 * 例�OYA,KO,HJO,SU,DYSET,DYUPD"
791 * setColumnDisplay( int column,boolean rw ) ã®ç°¡æ˜“版ã§ã™ã?
792 * null を与ãˆãŸå?åˆã?,ãªã«ã‚‚ã—ã¾ã›ã‚“ã€?
793 * ã¾ãŸã?全カラãƒ?«ã¤ã?¦ã€æœ‰åйã«ã™ã‚‹å ´åˆã?ã€columnName="*" ã‚’è¨å®šã—ã¾ã™ã?
794 *
795 * @og.rev 5.2.2.0 (2010/11/01) æ–°è¦è¿½åŠ?
796 *
797 * @param columnName カラ�
798 */
799 @Override
800 public void setColumnDisplay( final String columnName ) {
801 columnDisplayKeys = columnName;
802 }
803
804 /**
805 * NUMBER ソート機è?(æ•´æ•°é™å®? å†?ƒ¨ã‚¯ãƒ©ã‚¹
806 * ã“れã¯é€šå¸¸ã®ã‚½ãƒ¼ãƒˆã§ã¯ãªãã?ヘッãƒ??ã«ä½¿ã?ƒ©ãƒ™ãƒ«ã®ã‚½ãƒ¼ãƒˆãªã®ã§ã€?
807 * æ•´æ•°ã®ã¿ã¨é™å®šã—ã¾ã™ã?実数ã®å ´åˆã?ã€æ¡åˆã‚ã›(å°æ•°ç‚¹ä»¥ä¸‹ã?æ¡æ•°)
808 * ã•れã¦ã?‚‹ã¨ã?†å‰æã§ã™ã?
809 *
810 * @og.rev 3.5.6.3 (2004/07/12) æ–°è¦ä½œæ?
811 *
812 */
813 private static final Comparator<String> numberSort = new NumberComparator();
814
815 private static class NumberComparator implements Comparator<String>,Serializable {
816 private static final long serialVersionUID = 4000 ; // 4.0.0 (2005/01/31)
817
818 public int compare( final String s1, final String s2 ) {
819 if( s1.length() > s2.length() ) { return 1; }
820 else if( s1.length() < s2.length() ) { return -1; }
821 else {
822 return s1.compareTo( s2 );
823 }
824 }
825 }
826
827 /**
828 * 表示é ?›®ã®ç·¨é›?ä¸¦ã³æ›¿ã?ãŒå¯èƒ½ã‹ã©ã?‹ã‚’è¿”ã—ã¾ã?
829 *
830 * @og.rev 5.1.6.0 (2010/05/01) æ–°è¦è¿½åŠ?
831 *
832 * @return 表示é ?›®ã®ç·¨é›?ä¸¦ã³æ›¿ã?ãŒå¯èƒ½ã‹ã©ã?‹(false:ä¸å¯èƒ½)
833 */
834 @Override
835 public boolean isEditable() {
836 return false;
837 }
838 }