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.7.4.3 (2014/03/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 * @og.rev 5.7.4.2 (2014/03/20) ヘッãƒ??ã®ãƒªã‚½ãƒ¼ã‚¹é©ç”¨è¦‹ç›´ã?
457 * @og.rev 5.7.4.3 (2014/03/28) useHeaderResource å˜ç‹¬ã§ãƒªã‚½ãƒ¼ã‚¹é©ç”¨ã—ã¾ã™ã?
458 *
459 * @return ãƒ??ブルã®ã‚¿ã‚°æ–?—å?
460 */
461 @Override
462 protected String getHeadLine() {
463 if( headerLine != null ) { return headerLine; } // ã‚ャãƒ?‚·ãƒ¥ã‚’è¿”ã™ã€?
464
465 String rowspan = "";
466 if( sumCount > 1 ) { rowspan = " rowspan=\"2\""; }
467
468 String thTag = "<th" + rowspan;
469
470 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
471
472 buf.append("<tr").append( rowspan ).append(" class=\"row_h\"").append(" >").append( HybsSystem.CR );
473
474 // 3.5.5.0 (2004/03/12) No æ¬?ã®ã‚‚ã?ã®ä½œæ?判æ–追åŠ?
475 if( isNumberDisplay() ) {
476 buf.append( thTag ).append(" colspan='3'>").append( getNumberHeader() ).append("</th>");
477 }
478
479 buf.append( HybsSystem.CR );
480 // ヘッãƒ??部åˆ??ã€ãã®ã¾ã¾è¡¨ç¤ºã—ã¾ã™ã?
481 for(int column = 0; column < headCount; column++) {
482 if( isColumnDisplay( column ) ) {
483 buf.append( thTag ).append(">");
484 buf.append( getColumnLabel(column) );
485 buf.append("</th>").append( HybsSystem.CR );
486 }
487 }
488
489 // ヘッãƒ??部åˆ?上段)ã¯ã€ã‚«ãƒ©ãƒ??列を利用ã—ã¾ã™ã?
490 String colspan = "";
491 if( sumCount > 1 ) { colspan = " colspan='" + sumCount + "'"; }
492
493 // 5.2.2.0 (2010/11/01) é›?¨ˆéƒ¨ã® ColumnDisplay/NoDisplay 対å¿?
494 // String gokeiClm = "<th" + colspan + ">" + temp + "</th>" + HybsSystem.CR ;
495 String gokeiClm = null;
496 if( isColumnDisplay( headCount+(clmKeys.length-1)*sumCount ) ) {
497 String temp = clmKeys[clmKeys.length-1];
498 if( temp == null || temp.length() == 0 ) {
499 temp = gokeiLabel;
500 }
501
502 gokeiClm = "<th" + colspan + ">" + temp + "</th>" + HybsSystem.CR ;
503 }
504
505 // 5.2.2.0 (2010/11/01) æœ?¾Œã?カラãƒ?Œã€åˆè¨ˆè¡Œã?
506 // 5.0.0.3 (2009/09/22) firstClmGokei ã?trueã®å ´åˆã?cubeã®å…ˆé?ã«å‡ºã™ã‚ˆã?«ã—ã¾ã™ã?
507 // if( firstClmGokei && isColumnDisplay( headCount+clmKeys.length-1 ) ) {
508 if( firstClmGokei && gokeiClm != null ) {
509 buf.append( gokeiClm );
510 }
511
512 // // 5.0.0.3 (2009/09/22) trueã®å ´åˆã?cubeã®å…ˆé?ã«å‡ºã™ã‚ˆã?«ã—ã¾ã™ã?
513 // if( firstClmGokei ){
514 // String temp = clmKeys[clmKeys.length-1];
515 // if( temp == null || temp.length() == 0 ) {
516 // temp = gokeiLabel;
517 // }
518 // buf.append( "<th").append( colspan ).append( ">" );
519 // buf.append( temp );
520 // buf.append("</th>").append( HybsSystem.CR );
521 // }
522
523 // 3.7.0.4 (2005/03/18) カラãƒ??列ã?ã€ã‚«ãƒ©ãƒ?•ªå·ã¨åˆ¥ç‰©
524 ResourceManager resource = getResourceManager();
525 Selection selection = null;
526 if( headerCode != null && headerCode.length() > 0 && resource != null ){
527 DBColumn clmTmp = resource.getDBColumn( headerCode );
528 //selection = new Selection_CODE(resource.getCodeData( headerCode )); codeç›´ã®å ´å?
529 if ( clmTmp != null ){
530 selection = clmTmp.getSelection();
531 }
532 }
533
534 // 5.7.4.2 (2014/03/20) ヘッãƒ??ã®ãƒªã‚½ãƒ¼ã‚¹é©ç”¨è¦‹ç›´ã?
535 // 5.7.4.3 (2014/03/28) useHeaderResource å˜ç‹¬ã§ãƒªã‚½ãƒ¼ã‚¹é©ç”¨ã—ã¾ã™ã?
536 DBColumn colClm = null;
537 // if( useHeaderResource && useHeaderColumn ) {
538 if( useHeaderResource ) {
539 colClm = table2.getDBColumn( colClmNo );
540 }
541
542 for( int keyNo = 0; keyNo < clmKeys.length-1; keyNo++ ) {
543 // 5.2.2.0 (2010/11/01) ColumnDisplay/NoDisplay 対�
544 if( isColumnDisplay( headCount+keyNo ) ) {
545 buf.append( "<th").append( colspan ).append( ">" );
546 // if( headerCode != null && headerCode.length() > 0 && selection != null ){
547 if( selection != null ){
548 buf.append( selection.getValueLabel( clmKeys[keyNo] ) );
549 }
550 // 5.7.4.2 (2014/03/20) ヘッãƒ??ã®ãƒªã‚½ãƒ¼ã‚¹é©ç”¨è¦‹ç›´ã?
551 // else if( useHeaderResource && useHeaderColumn ){ // 5.5.5.0 (2012/07/28) ヘッ�?リソース対�
552 // buf.append( getColumnLabel(headCount+keyNo) );
553 // }
554 // 5.7.4.3 (2014/03/28) ヘッãƒ??ã®ãƒªã‚½ãƒ¼ã‚¹é©ç”¨ã¯ã€CLMカラãƒ??カラãƒ?•ªå·ã®ã¿ã¨ã—ã¾ã™ã?
555 else if( colClm != null ) {
556 buf.append( colClm.getRendererValue( clmKeys[keyNo] ) );
557 }
558 else{
559 buf.append( clmKeys[keyNo] );
560 }
561 buf.append("</th>").append( HybsSystem.CR );
562 }
563 }
564
565 // 5.2.2.0 (2010/11/01) æœ?¾Œã?カラãƒ?Œã€åˆè¨ˆè¡Œã?
566 // 5.0.0.3 (2009/09/22) firstClmGokei ã?trueã®å ´åˆã?cubeã®å…ˆé?ã«å‡ºã™ã‚ˆã?«ã—ã¾ã™ã?
567 // if( ! firstClmGokei && isColumnDisplay( headCount+clmKeys.length-1 ) ) {
568 if( ! firstClmGokei && gokeiClm != null ) {
569 buf.append( gokeiClm );
570 }
571
572 // 3.5.6.2 (2004/07/05) makeCrossTable( DBTableModel table ) ã«ç§»å‹?
573 // æœ?µ‚カラãƒ?åˆ?ãŒNULL(空æ–?—å?)ã®å ´åˆã?列åˆè¨ˆã§ã™ã?
574 // if( ! firstClmGokei ){ // 5.0.0.3 (2009/09/22) falseã®å ´åˆã?æœ?µ‚å?ã«å‡ºã?
575 // String temp = clmKeys[clmKeys.length-1];
576 // if( temp == null || temp.length() == 0 ) {
577 // temp = gokeiLabel;
578 // }
579 // buf.append( "<th").append( colspan ).append( ">" );
580 // buf.append( temp );
581 // buf.append("</th>").append( HybsSystem.CR );
582 // }
583
584 buf.append("</tr>").append( HybsSystem.CR );
585
586 if( sumCount > 1 ) {
587 buf.append("<tr").append(" class=\"row_h\"").append(" >").append( HybsSystem.CR );
588 int clmCnt = getColumnCount(); // 3.5.5.7 (2004/05/10)
589 for(int column = headCount; column < clmCnt; column++) {
590 if( isColumnDisplay( column ) ) {
591 buf.append( "<th>");
592 buf.append( getColumnLabel(column) );
593 buf.append("</th>").append( HybsSystem.CR );
594 }
595 }
596 buf.append("</tr>").append( HybsSystem.CR );
597 }
598
599 headerLine = buf.toString();
600 return headerLine;
601 }
602
603 /**
604 * クãƒã‚¹é›?¨ˆçµæžœã® DBTableModelオブジェクトを作æ?ã—ã¾ã™ã?
605 *
606 * @og.rev 3.5.4.8 (2004/02/23) paramInit メソãƒ?ƒ‰ã§ã€å?期化を行ã„ã¾ã™ã?
607 * @og.rev 3.5.6.3 (2004/07/12) 列ã?ãƒ?ƒ€ãƒ¼ã®ã‚½ãƒ¼ãƒˆå¯å¦ã®æŒ?®šã‚’追åŠ?
608 * @og.rev 4.0.0.0 (2007/11/27) ヘッãƒ??カラãƒ??エãƒ?‚£ã‚¿ãƒ¼ã€ãƒ¬ãƒ³ãƒ?ƒ©ãƒ¼é©ç”¨å¯¾å¿?
609 * @og.rev 4.3.5.7 (2008/03/22) ↑リソースãŒå˜åœ¨ã—ãªã??åˆã?ã€ãƒ©ãƒ™ãƒ«ã®ã¿å…¥ã‚Œæ›¿ã?
610 * @og.rev 5.2.2.0 (2010/11/01) useHeaderColumn,useClassAdd 属æ?ã®è¿½åŠ?
611 * @og.rev 5.7.4.3 (2014/03/28) useHeaderColumn ã®é©ç”¨æ¡ä»¶ã‚’ã?æœ??ã®é›?¨ˆã‚«ãƒ©ãƒ??ã¿ã«å¤‰æ›´ã€?
612 *
613 * @param table 入力もã¨ã® DBTableModelオブジェクãƒ?
614 *
615 * @return DBTableModelオブジェク�
616 */
617 private DBTableModel makeCrossTable( final DBTableModel table ) {
618 Set<String> clmData = gatSortAlgorithmSet();
619
620 // 列ã?ã‚ーã¨ãªã‚‹ã‚«ãƒ©ãƒ??値をå–å¾—ã—ã¾ã™ã?
621 int rowCnt = table.getRowCount(); // 3.5.5.7 (2004/05/10)
622 for( int row=0; row<rowCnt; row++ ) {
623 String clm = table.getValue( row,colClmNo );
624 if( clm.length() > 0 ) { clmData.add( clm ); }
625 }
626 // ゼãƒã‚¹ãƒˆãƒªãƒ³ã‚°ã¯ã€åˆè¨ˆè¡Œã«ãªã‚Šã¾ã™ã?ã§ã€æœ€å¾Œã«è¿½åŠ?—ã¾ã™ã?
627
628 // 3.5.6.3 (2004/07/12) ゼãƒã‚¹ãƒˆãƒªãƒ³ã‚°ã¯ã€åˆè¨ˆè¡Œã«ãªã‚Šã¾ã™ã?ã§ã€æœ€å¾Œã«è¿½åŠ?—ã¾ã™ã?
629 // clmKeys = new String[ clmData.size() + 1 ];
630 // clmKeys = clmData.toArray( clmKeys ) ;
631 clmKeys = clmData.toArray( new String[clmData.size() + 1] ) ;
632
633 clmKeys[clmKeys.length-1] = "" ;
634
635 int numberOfColumns = headCount + clmKeys.length * sumCount ;
636
637 DBTableModel tableImpl = DBTableModelUtil.newDBTable();
638 tableImpl.init( numberOfColumns );
639
640 // ヘッãƒ??カラãƒ?ROWãƒ??ã‚¿å«ã‚?ã¯ã€ãã®ã¾ã¾ã€è¨å®šã—ã¾ã™ã?
641 for(int column=0; column<headCount; column++) {
642 tableImpl.setDBColumn( column,table.getDBColumn(column) );
643 }
644
645 // åˆ—æƒ…å ±ã¯ã€åˆè¨ˆå?ã®ã‚«ãƒ©ãƒ?®šç¾©ã‚’使用ã—ã¾ã™ã?
646 DBColumn[] dbColumn = new DBColumn[sumCount];
647 for( int i=0; i<sumCount; i++ ) {
648 dbColumn[i] = table.getDBColumn(headCount + 1 + i);
649 }
650
651 // åˆ—æƒ…å ±ã¯ã€å?ã®åå‰ã‚’カラãƒ??値ã«å¤‰ãˆã¦ã€åˆè¨ˆã‚«ãƒ©ãƒ??ã®ã‚³ãƒ”ã?æƒ??ã‚’è¨å®šã—ã¾ã™ã?
652
653 int sumId = 0;
654 ResourceManager resource = getResourceManager();
655 useHeaderColumn = useHeaderColumn && resource != null ; // 5.2.2.0 (2010/11/01)
656
657 // 5.2.2.0 (2010/11/01) useClassAdd 属æ?ã®è¿½åŠ?
658
659 clsAdd = new String[numberOfColumns];
660
661 // åˆ—æƒ…å ±ã‚«ãƒ©ãƒ??ã€ã?ãƒ?ƒ€ãƒ¼åˆ?«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ç‚ºã€?–‹å§‹ãŒã€headCount ã‹ã‚‰ã«ãªã‚Šã¾ã™ã?
662 for(int column=headCount; column<numberOfColumns; column++) {
663 DBColumn dbClm = dbColumn[sumId];
664 String clmKey = clmKeys[ (column-headCount)/sumCount ];
665
666 // 5.2.2.0 (2010/11/01) useClassAdd 属æ?ã®è¿½åŠ?
667 if( useClassAdd ) {
668 // ※ 特殊対応:cssãªã©ã§æŒ?®šã§ãã‚‹IDã‚„CLASS属æ?ã¯ã€å?é æ–?—ãŒæ•°å—ã?å ´åˆã?ã€?
669 // 無効ã«ãªã‚Šã¾ã™ã?(ã¤ã¾ã‚Šã?効ãã¾ã›ã‚“ã€?
670 // 表示ヘッãƒ??ã¯ã€å¹´æœˆã‚„ã€ç¤¾å“¡ç•ªå·(æ•°å?ãªã©ã®ã‚±ãƒ¼ã‚¹ã‚‚ã‚りã¾ã™ã?ãã“ã§ã€å?é ãŒæ•°å—ã?
671 // å ´åˆã?ã€?x"(å°æ–‡å—ã?x)ã‚’è?å‹•çš„ã«é ã«è¿½åŠ?—ã¾ã™ã?
672 StringBuilder buf = new StringBuilder();
673 if( clmKey != null && clmKey.length() > 0 ) {
674 char ch = clmKey.charAt(0);
675 if( ch >= '0' && ch <= '9' ) {
676 buf.append( "x" );
677 }
678 buf.append( clmKey );
679 }
680
681 String nm = dbClm.getName();
682 if( nm != null && nm.length() > 0 ) {
683 buf.append( " " );
684 char ch = nm.charAt(0);
685 if( ch >= '0' && ch <= '9' ) {
686 buf.append( "x" );
687 }
688 buf.append( nm );
689 }
690 clsAdd[column] = buf.toString();
691 }
692
693 // 4.0.0.0 (2007/11/27)
694 // if( resource != null && "true".equalsIgnoreCase( getParam( "useHeaderColumn", null ) ) ) {
695 // 5.2.2.0 (2010/11/01) 処ç?¦‹ç›´ã—ã?useHeaderColumn ã®å‰å?ã—ã¨ã€setName 対å¿?
696
697 // 5.7.4.3 (2014/03/28) useHeaderColumn ã®é©ç”¨æ¡ä»¶ã‚’ã?æœ??ã®é›?¨ˆã‚«ãƒ©ãƒ??ã¿ã«å¤‰æ›´ã€?
698 // if( useHeaderColumn ) {
699 if( useHeaderColumn && sumId == 0 ) {
700 // String clmKey = clmKeys[ (column-headCount)/sumCount ]; // 5.2.2.0 (2010/11/01) 上ã«ç§»å‹?
701 DBColumn clmTmp = resource.getDBColumn( clmKey );
702 if( clmTmp == null ) {
703 // tableImpl.setDBColumn( column,dbColumn[sumId] ); }
704 DBColumnConfig dbCfg2 = dbClm.getConfig();
705 if( clmKey != null && clmKey.length() > 0 ) { // 5.2.2.0 (2010/11/01)
706 dbCfg2.setName( clmKey );
707 dbCfg2.setLabelData( resource.getLabelData( clmKey ) );
708 }
709 else {
710 dbCfg2.setLabelData( resource.getLabelData( gokeiLabel ) );
711 }
712 dbClm = new DBColumn( dbCfg2 );
713 // tableImpl.setDBColumn( column, new DBColumn( dbCfg2 ) );
714 }
715 else {
716 // tableImpl.setDBColumn( column,dbClm );
717 dbClm = clmTmp;
718 }
719 }
720 // else {
721 // tableImpl.setDBColumn( column,dbColumn[sumId] );
722 // }
723
724 tableImpl.setDBColumn( column,dbClm );
725
726 sumId++;
727 if( sumId % sumCount == 0 ) {
728 sumId = 0;
729 }
730 }
731
732 // クãƒã‚¹é›?¨ˆãƒ‡ãƒ¼ã‚¿ã®ä½œæ?
733 CrossMap cross = new CrossMap( clmKeys,headCount,sumCount );
734 for( int row=0; row<rowCnt; row++ ) {
735 String[] data = table.getValues( row );
736 cross.add( data );
737 }
738
739 // ãƒ??タ部ã®è¨å®?
740 int size = cross.getSize();
741 for( int row=0; row<size; row++ ) {
742 tableImpl.addValues( cross.get( row ), row );
743 }
744
745 tableImpl.resetModify();
746
747 final DBTableModel model ;
748 if( gokeiSortDir != null ) {
749 DBTableModelSorter temp = new DBTableModelSorter();
750 temp.setModel( tableImpl );
751
752 boolean direction = Boolean.valueOf( gokeiSortDir ).booleanValue();
753 temp.sortByColumn( numberOfColumns-1,direction );
754 model = temp ;
755 }
756 else {
757 model = tableImpl;
758 }
759 return model ;
760 }
761
762 /**
763 * 列ã?ãƒ?ƒ€ãƒ¼ã®ã‚½ãƒ¼ãƒˆæ–¹æ³•ã«å¿œã˜ãŸã?Setオブジェクトを返ã—ã¾ã™ã?
764 * ã“ã“ã§ã¯ã€NUMBER , STRING , LOAD ã®?“種類用æ„ã—ã¦ã?¾ã™ã?
765 *
766 * @og.rev 3.5.6.3 (2004/07/12) æ–°è¦ä½œæ?
767 *
768 * @return ソート方法ã«å¿œã˜ãŸSetオブジェクãƒ?
769 */
770 private Set<String> gatSortAlgorithmSet() {
771 final Set<String> rtnSet ;
772
773 if( "LOAD".equalsIgnoreCase( cubeSortType ) ) {
774 rtnSet = new LinkedHashSet<String>();
775 }
776 else if( "NUMBER".equalsIgnoreCase( cubeSortType ) ) {
777 rtnSet = new TreeSet<String>( numberSort );
778 }
779 else if( "STRING".equalsIgnoreCase( cubeSortType ) ) {
780 rtnSet = new TreeSet<String>();
781 }
782 else {
783 String errMsg = "cubeSortType ã¯ã€NUMBER,STRING,LOAD 以外指定ã§ãã¾ã›ã‚“ã€? +
784 " cubeSortType=[" + cubeSortType + "]";
785 throw new HybsSystemException( errMsg );
786 }
787
788 return rtnSet ;
789 }
790
791 /**
792 * 表示ä¸å¯ã‚«ãƒ©ãƒ?ã‚’ã?カンマ区åˆ?‚Šã§ä¸Žãˆã¾ã™ã?
793 * 例�OYA,KO,HJO,SU,DYSET,DYUPD"
794 * null を与ãˆãŸå?åˆã?,ãªã«ã‚‚ã—ã¾ã›ã‚“ã€?
795 *
796 * 注æ„:ã“ã®ã‚¯ãƒ©ã‚¹ã§ã¯ã€DBTableModel を作り直ã™ã‚¿ã‚¤ãƒŸãƒ³ã‚°ãŒã?
797 * create メソãƒ?ƒ‰å®Ÿè¡Œæ™‚ã§ã™ã?(パラメータã®åˆæœŸåŒ–ãŒå¿?¦ãªç‚º)
798 * よã£ã¦ã€ã“ã®ãƒ¡ã‚½ãƒ?ƒ‰ã¯ã€å?期ãŒçµ‚äº?¾Œã«ã€å?ã‚»ãƒ?ƒˆã—ã¾ã™ã?
799 *
800 * @og.rev 3.7.0.4 (2005/03/18) æ–°è¦ä½œæ?
801 *
802 * @param columnName カラ�
803 */
804 @Override
805 public void setNoDisplay( final String columnName ) {
806 noDisplayKeys = columnName;
807 }
808
809 /**
810 * 表示å¯èƒ½ã‚«ãƒ©ãƒ?ã‚’ã?カンマ区åˆ?‚Šã§ä¸Žãˆã¾ã™ã?
811 * 例�OYA,KO,HJO,SU,DYSET,DYUPD"
812 * setColumnDisplay( int column,boolean rw ) ã®ç°¡æ˜“版ã§ã™ã?
813 * null を与ãˆãŸå?åˆã?,ãªã«ã‚‚ã—ã¾ã›ã‚“ã€?
814 * ã¾ãŸã?全カラãƒ?«ã¤ã?¦ã€æœ‰åйã«ã™ã‚‹å ´åˆã?ã€columnName="*" ã‚’è¨å®šã—ã¾ã™ã?
815 *
816 * @og.rev 5.2.2.0 (2010/11/01) æ–°è¦è¿½åŠ?
817 *
818 * @param columnName カラ�
819 */
820 @Override
821 public void setColumnDisplay( final String columnName ) {
822 columnDisplayKeys = columnName;
823 }
824
825 /**
826 * NUMBER ソート機è?(æ•´æ•°é™å®? å†?ƒ¨ã‚¯ãƒ©ã‚¹
827 * ã“れã¯é€šå¸¸ã®ã‚½ãƒ¼ãƒˆã§ã¯ãªãã?ヘッãƒ??ã«ä½¿ã?ƒ©ãƒ™ãƒ«ã®ã‚½ãƒ¼ãƒˆãªã®ã§ã€?
828 * æ•´æ•°ã®ã¿ã¨é™å®šã—ã¾ã™ã?実数ã®å ´åˆã?ã€æ¡åˆã‚ã›(å°æ•°ç‚¹ä»¥ä¸‹ã?æ¡æ•°)
829 * ã•れã¦ã?‚‹ã¨ã?†å‰æã§ã™ã?
830 *
831 * @og.rev 3.5.6.3 (2004/07/12) æ–°è¦ä½œæ?
832 *
833 */
834 private static final Comparator<String> numberSort = new NumberComparator();
835
836 private static class NumberComparator implements Comparator<String>,Serializable {
837 private static final long serialVersionUID = 4000 ; // 4.0.0 (2005/01/31)
838
839 public int compare( final String s1, final String s2 ) {
840 if( s1.length() > s2.length() ) { return 1; }
841 else if( s1.length() < s2.length() ) { return -1; }
842 else {
843 return s1.compareTo( s2 );
844 }
845 }
846 }
847
848 /**
849 * 表示é ?›®ã®ç·¨é›?ä¸¦ã³æ›¿ã?ãŒå¯èƒ½ã‹ã©ã?‹ã‚’è¿”ã—ã¾ã?
850 *
851 * @og.rev 5.1.6.0 (2010/05/01) æ–°è¦è¿½åŠ?
852 *
853 * @return 表示é ?›®ã®ç·¨é›?ä¸¦ã³æ›¿ã?ãŒå¯èƒ½ã‹ã©ã?‹(false:ä¸å¯èƒ½)
854 */
855 @Override
856 public boolean isEditable() {
857 return false;
858 }
859 }