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 }