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.hayabusa.report; 017 018 import org.opengion.fukurou.util.LogWriter; 019 020 /** 021 * 雛形EXCELの {@カラ? 解析情報 を管?るローカルクラスです? 022 * 023 * こ?クラスは?形EXCELより取得した?{@カラ? および、{@カラ?枝番}より 024 * カラ??行番号、?番号、枝番を取り?し?セルと?対?で管?る為のクラスです? 025 * 枝番が付かな?ラ??、??ー??になる為、枝番を???で設定します? 026 * シート単位に呼び出す?があります? 027 * 028 * ?注意:このクラスは、equals と??しな??然な?を持って?す?? 029 * 030 * @og.group 帳票シス? 031 * 032 * @version 4.0 033 * @author Kazuhiko Hasegawa 034 * @since JDK5.0, 035 */ 036 public class ExcelLayoutData implements Comparable<ExcelLayoutData> { 037 private final int edbn ; 038 private final String key ; 039 private final String clm ; 040 private final int rowNo ; 041 private final short colNo ; 042 043 private final String uniqKey ; 044 private final int hashcode ; 045 046 /** 047 * コンストラクター 048 * 049 * 雛形EXCELの{@カラ?を含?ルの値と、行?番号を設定します? 050 * 整合?チェ?の条件は、?頭?"{@" で、最後が?}" で、文字?の途中に? 051 * "{@" が含まれて???合?みとします? 052 * 053 * ?で、カラ?枝番に?します? 054 * 055 * @param inkey 処?ラ?{@カラ?形? 056 * @param rowNo 行番号 057 * @param colNo 列番号 058 */ 059 public ExcelLayoutData( final String inkey , final int rowNo ,final short colNo ) { 060 this.key = inkey.trim(); 061 this.rowNo = rowNo; 062 this.colNo = colNo; 063 064 if( ! key.startsWith( "{@" ) || !key.endsWith( "}" ) ) { 065 String errMsg = "??セルのカラ?義が不正です?" 066 + "row,col=[" + rowNo + "," + colNo + "] , key=[" + key + "]" ; 067 throw new IllegalArgumentException( errMsg ); 068 } 069 070 String tempClm = key.substring( 2,key.length()-1 ); // {@AAA_X} ?AAA_X に変換する? 071 int idx = tempClm.lastIndexOf( '_' ); 072 int tempEdbn = -1; 073 074 if( idx > 0 ) { 075 try { 076 tempEdbn = Integer.parseInt( tempClm.substring( idx+1 ) ); 077 tempClm = tempClm.substring( 0,idx ); 078 } 079 catch (NumberFormatException e) { // ヘッ??にアン??バ?が使用されて?ケース 080 String errMsg2 = "ヘッ??にアン??バ?が使用されて?す?[" + tempClm + "]" ; 081 LogWriter.log( errMsg2 ); 082 } 083 } 084 085 edbn = tempEdbn; 086 clm = tempClm; 087 088 if( edbn < 0 ) { 089 uniqKey = clm + ":[" + rowNo + "," + colNo + "]" ; 090 } 091 else { 092 uniqKey = clm + "_" + edbn + ":[" + rowNo + "," + colNo + "]" ; 093 } 094 hashcode = uniqKey.hashCode() ; 095 } 096 097 /** 098 * ?コンストラクター 099 * 100 * 雛形EXCELの{@カラ?を含?ルの値と、行?番号を設定します? 101 * ?で、カラ?枝番に?します? 102 * 103 * @param other ExcelLayoutDataオブジェク? 104 * @param newRowNo 行番号 105 * @param newEdbn 列番号 106 */ 107 private ExcelLayoutData( final ExcelLayoutData other , final int newRowNo, final int newEdbn ) { 108 key = other.key; 109 rowNo = newRowNo; 110 colNo = other.colNo; 111 112 edbn = newEdbn; 113 clm = other.clm; 114 115 if( edbn < 0 ) { 116 uniqKey = clm + ":[" + rowNo + "," + colNo + "]" ; 117 } 118 else { 119 uniqKey = clm + "_" + edbn + ":[" + rowNo + "," + colNo + "]" ; 120 } 121 hashcode = uniqKey.hashCode() ; 122 } 123 124 /** 125 * 枝番を取得します? 126 * 127 * @return ハッシュコー? 128 */ 129 public int getEdbn() { return edbn ; } 130 131 /** 132 * カラ?を取得します? 133 * 134 * @return カラ? 135 */ 136 public String getClm() { return clm ; } 137 138 /** 139 * 行番号を取得します? 140 * 141 * @return 行番号 142 */ 143 public int getRowNo() { return rowNo ; } 144 145 /** 146 * 列番号を取得します? 147 * 148 * @return 列番号 149 */ 150 public short getColNo() { return colNo ; } 151 152 /** 153 * 登録時?オリジナルのキー({@カラ?枝番})を取得します? 154 * 155 * @return オリジナルのキー 156 */ 157 public String getKey() { return key ; } 158 159 /** 160 * 行番号と枝番が異なる新しい ExcelLayoutData を返します? 161 * 162 * @param newRowNo 行番号 163 * @param newEdbn 枝番 164 * 165 * @return 新しいExcelLayoutData 166 */ 167 public ExcelLayoutData copy( final int newRowNo, final int newEdbn ) { 168 return new ExcelLayoutData( this,newRowNo,newEdbn ); 169 } 170 171 /** 172 * こ?オブジェクト?ハッシュコードを取得します? 173 * ???(uniqKey)のハッシュコードと同じ値です? 174 * 175 * @return ハッシュコー? 176 */ 177 @Override 178 public int hashCode() { return hashcode ; } 179 180 /** 181 * こ???と?されたオブジェクトを比?ます? 182 * 183 * 引数?null でなく?こ?オブジェクトと同じ???(uniqKey)を持つ 184 * ExcelLayoutData オブジェクトである場合に?、結果は true になります? 185 * 186 * @param object 比?るオブジェク? 187 * 188 * @return Objectが等し??合? true、そ?な??合? false 189 */ 190 @Override 191 public boolean equals( final Object object ) { 192 if( object instanceof ExcelLayoutData ) { 193 return uniqKey.equals( ((ExcelLayoutData)object).uniqKey ) ; 194 } 195 return false ; 196 } 197 198 /** 199 * 自然比?ソ? 200 * インタフェース Comparable の 実?す? 201 * edbn 、clm 、rowNo 、colNo の?比?ます? 202 * 203 * @param other 比?象のObject 204 * 205 * @return こ?オブジェクトが?されたオブジェクトより小さ??合???整数、等し??合?ゼロ、大きい場合?正の整数 206 */ 207 // public int compareTo( final Object object ) { 208 @Override 209 public int compareTo( final ExcelLayoutData other ) { 210 if( uniqKey.equals( other.uniqKey ) ) { return 0; } 211 212 // if( object instanceof ExcelLayoutData ) { 213 // ExcelLayoutData other = (ExcelLayoutData)object ; 214 if( edbn != other.edbn ) { return edbn - other.edbn; } 215 if( ! clm.equals( other.clm ) ) { return clm.compareTo( other.clm ); } 216 if( rowNo != other.rowNo ) { return rowNo - other.rowNo; } 217 return colNo - other.colNo; 218 // } 219 // throw new ClassCastException(); 220 } 221 222 /** 223 * こ?クラスの??表現を返します? 224 * 225 * ???(uniqKey)と同じ値です? 226 * ヘッ???clm + ":[" + rowNo + "," + colNo + "]" 227 * 明細 ?clm + "_" + edbn + ":[" + rowNo + "," + colNo + "]" 228 * 229 * @return ??表現 230 */ 231 @Override 232 public String toString() { 233 return uniqKey; 234 } 235 }