Skip to content

Commit

Permalink
refs #76 @XlsMapColumnsに属性nextColumnNameを追加。
Browse files Browse the repository at this point in the history
  • Loading branch information
mygreen committed Mar 12, 2016
1 parent 0477524 commit 2f9a9c5
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,35 @@
* <p>基本的な使い方</p>
* </div>
*
*
* <h3 class="description">終了条件のセルを指定する場合</h3>
* <p>属性{@link #nextColumnName()}で指定した前のカラムまでが処理対象となり、マッピングの終了条件を指定することができます。</p>
*
* <pre class="highlight"><code class="java">
* public class SampleRecord {
*
* {@literal @XlsColumn(columnName="ID")}
* private int id;
*
* {@literal @XlsColumn(columnName="名前")}
* private String name;
*
* {@literal @XlsMapColumns(previousColumnName="名前", nextColumnName="備考")}
* private {@literal Map<String, String>} attendedMap;
*
* {@literal @XlsColumn(columnName="備考")}
* private String comment;
*
* }
* </code></pre>
*
* <div class="picture">
* <img src="doc-files/MapColumns_nextColumnName.png">
* <p>マッピングの終了条件の指定</p>
* </div>
*
*
* <h3 class="description">型変換する場合</h3>
* <p>アノテーション{@link com.gh.mygreen.xlsmapper.annotation.XlsConverter}などで型変換を適用するときは、Mapの値が変換対象となります。
* <br>マップのキーは必ず{@link String}型に設定してください
Expand Down Expand Up @@ -125,7 +154,7 @@
* <li>ラベルを正規化する機能を有効にするには、、システム設定のプロパティ {@link XlsMapperConfig#setNormalizeLabelText(boolean)} の値を trueに設定します。</li>
* </ul>
*
* <p>これらの指定が可能な属性は、{@link #previousColumnName()}です。</p>
* <p>これらの指定が可能な属性は、{@link #previousColumnName()}、{@link #nextColumnName()}です。</p>
*
* <pre class="highlight"><code class="java">
* // システム設定
Expand All @@ -145,9 +174,12 @@
* private String name;
*
* // 正規表現による指定
* {@literal @XlsMapColumns(previousColumnName="/名前.+/")}
* {@literal @XlsMapColumns(previousColumnName="/名前.+/", nextColumnName="/備考.+/")}
* private Map<String, String> attendedMap;
*
* {@literal @XlsColumn(columnName="/備考.+/")}
* private String comment;
*
* }
* </code></pre>
*
Expand All @@ -166,6 +198,15 @@
*/
String previousColumnName();

/**
* この属性で指定した前のカラムまでが処理対象となり、マッピングの終了条件を指定することができます。
* <p>システム設定により、正規表現による指定や正規化(改行、空白、タブの削除)による比較の対象となります。</p>
*
* @since 1.2
* @return
*/
String nextColumnName() default "";

/**
* マップの値のクラスを指定します。
* <p>省略した場合、定義されたたGenericsの情報から取得します。
Expand Down
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
/**
* アノテーション{@link XlsHorizontalRecords}を処理するクラス。
*
* @version 1.1
* @version 1.2
* @author Naoki Takezoe
* @author T.TSUCHIE
*
Expand Down Expand Up @@ -416,16 +416,20 @@ private void loadMapColumns(Sheet sheet, List<RecordHeader> headerInfos,
throw newNotFoundConverterExpcetion(itemClass);
}

boolean flag = false;
boolean found = false;
final Map<String, Object> map = new LinkedHashMap<>();
for(RecordHeader headerInfo : headerInfos) {
if(Utils.matches(headerInfo.getHeaderLabel(), mapAnno.previousColumnName(), config)){
flag = true;
found = true;
begin++;
continue;
}

if(flag){
if(Utils.isNotEmpty(mapAnno.nextColumnName()) && Utils.matches(headerInfo.getHeaderLabel(), mapAnno.nextColumnName(), config)) {
break;
}

if(found){
final Cell cell = POIUtils.getCell(sheet, begin + headerInfo.getHeaderRange(), row);
Utils.setPositionWithMapColumn(cell.getColumnIndex(), cell.getRowIndex(), record, property.getName(), headerInfo.getHeaderLabel());
Utils.setLabelWithMapColumn(headerInfo.getHeaderLabel(), record, property.getName(), headerInfo.getHeaderLabel());
Expand Down Expand Up @@ -969,6 +973,10 @@ private void saveMapColumn(Sheet sheet, List<RecordHeader> headerInfos,
continue;
}

if(Utils.isNotEmpty(mapAnno.nextColumnName()) && Utils.matches(headerInfo.getHeaderLabel(), mapAnno.nextColumnName(), config)) {
break;
}

if(flag) {
final Cell cell = POIUtils.getCell(sheet, begin + headerInfo.getHeaderRange(), row);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
/**
* アノテーション{@link XlsVerticalRecords}を処理するクラス。
*
* @version 1.1
* @version 1.2
* @author Naoki Takezoe
* @author T.TSUCHIE
*
Expand Down Expand Up @@ -430,6 +430,10 @@ private void loadMapColumns(Sheet sheet, List<RecordHeader> headerInfos,
continue;
}

if(Utils.isNotEmpty(mapAnno.nextColumnName()) && Utils.matches(headerInfo.getHeaderLabel(), mapAnno.nextColumnName(), config)) {
break;
}

if(flag){
final Cell cell = POIUtils.getCell(sheet, column, begin + headerInfo.getHeaderRange());
Utils.setPositionWithMapColumn(cell.getColumnIndex(), cell.getRowIndex(), record, property.getName(), headerInfo.getHeaderLabel());
Expand Down Expand Up @@ -923,6 +927,10 @@ private void saveMapColumn(Sheet sheet, List<RecordHeader> headerInfos,
continue;
}

if(Utils.isNotEmpty(mapAnno.nextColumnName()) && Utils.matches(headerInfo.getHeaderLabel(), mapAnno.nextColumnName(), config)) {
break;
}

if(flag) {
final Cell cell = POIUtils.getCell(sheet, column, begin + headerInfo.getHeaderRange());

Expand Down

0 comments on commit 2f9a9c5

Please sign in to comment.