package jp.ne.mki.wedge.rule.client.component.table; import javax.swing.JTable; import javax.swing.table.TableColumn; import jp.ne.mki.wedge.rule.base.AbstractClient; import jp.ne.mki.wedge.run.client.data.Item; /** * <h2>列幅設定</h2><br/> * <p> * テーブル列の 列幅を設定します。<br> * <br> * 列幅に関しては、入力レコードか、あるいはパラメータで指定します。<br> * 列幅に0を指定した場合、自動的に最小列幅・最大列幅に0を指定します。<br> * 列幅に1 ~ 4を指定した場合、最小幅を同じ幅に合わせ、最大幅をInteger.MAX_VALUEとします。<br> * 列幅に5以上を指定した場合、最小幅を5とし、最大幅をInteger.MAX_VALUEとします。 * <br> * * * * </p> * <br/> * <h4>[I/O RECORD]</h4> * <table border="1" cellpadding="3" cellspacing="0" width="100%"> * <tr class="TableSubHeadingColor"> * <th style="width:50%;">InputRecord</th> * <th>OutputRecord</th> * </tr><tr class="TableRowColor"> * <td> * <!-- InputRecordの内容を記述 --> * <ol> * <li>テーブル列アイテム(複数指定可能)</li> * </ol> * <!-- ここまで --> * </td> * <td> * <!-- OutputRecordの内容を記述 --> * <ol> * <li>結果を格納するアイテム(複数指定可能)</li> * </ol> * <!-- ここまで --> * </td> * </tr></table> * * <h4>[RULE PARAMETER]</h4> * <table border="1" cellpadding="3" cellspacing="0" width="100%"> * <tr> * <th style="width:100px;" class="TableSubHeadingColor">Parameter</th> * <td class="TableRowColor"> * <!-- Parameterの内容を記述 --> * 入力レコードが省略された場合、カンマ区切りで列幅を指定します。<br> * 全列の幅が同じ場合は、カンマで区切らず 一つだけ数値を指定することも可能です。<br> * * * <!--ここまで --> * </td> * </tr></table> * * @author mki * @since 1.2.0 * @version 1.0 */ public class SetColumnWidth extends AbstractClient { private int[] intParams = null; /** * @see jp.ne.mki.wedge.rule.base.interfaces.CommonInterface#getIOParameter() */ public int getIOParameter() throws Throwable { if (getOutRecordCount() == 0) { return IO_ERROR_OUT; } if (getInRecordCount() == 0) { // 入力レコードを省略したときのチェック if (getRuleParameter().length() == 0) { return IO_ERROR; } else { String[] strParams = getRuleParameters(","); intParams = new int[strParams.length]; for (int i = 0; i < intParams.length; i++) { try { intParams[i] = Integer.parseInt(strParams[i]); } catch (NumberFormatException e) { return IO_ERROR_PARAMETER; } } } } else { if (getInRecordCount() != getOutRecordCount()) { return IO_ERROR_IO_MUST_SAME_COUNT; } } return OK; } /** * @see jp.ne.mki.wedge.rule.base.interfaces.CommonInterface#execute() */ public int execute() throws Throwable { if (getInRecordCount() == 0) { return loopOutItem(); } else { return loopInOutItem(); } } /** * ループ処理。パラメータで指定された列幅を、OutItemのテーブル列に設定します。 * @see jp.ne.mki.wedge.rule.base.AbstractClient#loopOutItemSub(jp.ne.mki.wedge.run.client.data.Item, int) */ protected int loopOutItemSub(Item outItem, int index) { if (index < intParams.length) { setColumn(outItem, intParams[index]); } else { setColumn(outItem, intParams[intParams.length - 1]); } return OK; } /** * ループ処理。InItemに設定された列幅を、OutItemのテーブル列に設定します。 * @see jp.ne.mki.wedge.rule.base.AbstractClient#loopInItemSub(jp.ne.mki.wedge.run.client.data.Item, int) */ protected int loopInOutItemSub(Item inItem, Item outItem, int index) { setColumn(outItem, inItem.getInt()); return OK; } /** * @param outItem * @param i */ private void setColumn(Item item, int width) { JTable table = (JTable) item.getComponent(); TableColumn column = table.getColumn(item); if (width == 0) { column.setMinWidth(0); column.setMaxWidth(0); column.setPreferredWidth(0); }else if (width > 4) { column.setMinWidth(5); column.setMaxWidth(Integer.MAX_VALUE); column.setPreferredWidth(width); } else { column.setMinWidth(width); column.setMaxWidth(Integer.MAX_VALUE); column.setPreferredWidth(width); } } /** * @see jp.ne.mki.wedge.rule.base.interfaces.CommonInterface#exit() */ public void exit() throws Throwable { intParams = null; } }