This is an automated email from the ASF dual-hosted git repository.

psxjoy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fesod.git


The following commit(s) were added to refs/heads/main by this push:
     new 12fcc228 refactor: Remove the duplicate ExcelWriteHeadProperty class 
(#747)
12fcc228 is described below

commit 12fcc22897b3e9b112984418cf7b101f67739f25
Author: DeleiGuo <[email protected]>
AuthorDate: Tue Dec 23 23:24:12 2025 +0800

    refactor: Remove the duplicate ExcelWriteHeadProperty class (#747)
---
 .../write/property/ExcelWriteHeadProperty.java     | 287 ---------------------
 1 file changed, 287 deletions(-)

diff --git 
a/fesod/src/main/java/org/apache/fesod/sheet/write/property/ExcelWriteHeadProperty.java
 
b/fesod/src/main/java/org/apache/fesod/sheet/write/property/ExcelWriteHeadProperty.java
deleted file mode 100644
index 4bf2e673..00000000
--- 
a/fesod/src/main/java/org/apache/fesod/sheet/write/property/ExcelWriteHeadProperty.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.fesod.sheet.write.property;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.Setter;
-import org.apache.fesod.sheet.annotation.write.style.ColumnWidth;
-import org.apache.fesod.sheet.annotation.write.style.ContentLoopMerge;
-import org.apache.fesod.sheet.annotation.write.style.ContentRowHeight;
-import org.apache.fesod.sheet.annotation.write.style.HeadFontStyle;
-import org.apache.fesod.sheet.annotation.write.style.HeadRowHeight;
-import org.apache.fesod.sheet.annotation.write.style.HeadStyle;
-import org.apache.fesod.sheet.annotation.write.style.OnceAbsoluteMerge;
-import org.apache.fesod.sheet.enums.HeadKindEnum;
-import org.apache.fesod.sheet.enums.HeaderMergeStrategy;
-import org.apache.fesod.sheet.metadata.CellRange;
-import org.apache.fesod.sheet.metadata.ConfigurationHolder;
-import org.apache.fesod.sheet.metadata.Head;
-import org.apache.fesod.sheet.metadata.property.ColumnWidthProperty;
-import org.apache.fesod.sheet.metadata.property.ExcelHeadProperty;
-import org.apache.fesod.sheet.metadata.property.FontProperty;
-import org.apache.fesod.sheet.metadata.property.LoopMergeProperty;
-import org.apache.fesod.sheet.metadata.property.OnceAbsoluteMergeProperty;
-import org.apache.fesod.sheet.metadata.property.RowHeightProperty;
-import org.apache.fesod.sheet.metadata.property.StyleProperty;
-
-/**
- * Define the header attribute of excel
- *
- */
-@Getter
-@Setter
-@EqualsAndHashCode
-public class ExcelWriteHeadProperty extends ExcelHeadProperty {
-
-    private RowHeightProperty headRowHeightProperty;
-    private RowHeightProperty contentRowHeightProperty;
-    private OnceAbsoluteMergeProperty onceAbsoluteMergeProperty;
-
-    public ExcelWriteHeadProperty(
-            ConfigurationHolder configurationHolder, Class<?> headClazz, 
List<List<String>> head) {
-        super(configurationHolder, headClazz, head);
-        if (getHeadKind() != HeadKindEnum.CLASS) {
-            return;
-        }
-        this.headRowHeightProperty = 
RowHeightProperty.build(headClazz.getAnnotation(HeadRowHeight.class));
-        this.contentRowHeightProperty = 
RowHeightProperty.build(headClazz.getAnnotation(ContentRowHeight.class));
-        this.onceAbsoluteMergeProperty =
-                
OnceAbsoluteMergeProperty.build(headClazz.getAnnotation(OnceAbsoluteMerge.class));
-
-        ColumnWidth parentColumnWidth = 
headClazz.getAnnotation(ColumnWidth.class);
-        HeadStyle parentHeadStyle = headClazz.getAnnotation(HeadStyle.class);
-        HeadFontStyle parentHeadFontStyle = 
headClazz.getAnnotation(HeadFontStyle.class);
-
-        for (Map.Entry<Integer, Head> entry : getHeadMap().entrySet()) {
-            Head headData = entry.getValue();
-            if (headData == null) {
-                throw new IllegalArgumentException(
-                        "Passing in the class and list the head, the two must 
be the same size.");
-            }
-            Field field = headData.getField();
-
-            ColumnWidth columnWidth = field.getAnnotation(ColumnWidth.class);
-            if (columnWidth == null) {
-                columnWidth = parentColumnWidth;
-            }
-            
headData.setColumnWidthProperty(ColumnWidthProperty.build(columnWidth));
-
-            HeadStyle headStyle = field.getAnnotation(HeadStyle.class);
-            if (headStyle == null) {
-                headStyle = parentHeadStyle;
-            }
-            headData.setHeadStyleProperty(StyleProperty.build(headStyle));
-
-            HeadFontStyle headFontStyle = 
field.getAnnotation(HeadFontStyle.class);
-            if (headFontStyle == null) {
-                headFontStyle = parentHeadFontStyle;
-            }
-            headData.setHeadFontProperty(FontProperty.build(headFontStyle));
-
-            
headData.setLoopMergeProperty(LoopMergeProperty.build(field.getAnnotation(ContentLoopMerge.class)));
-        }
-    }
-
-    /**
-     * Calculate all cells that need to be merged
-     *
-     * @return cells that need to be merged
-     * @deprecated Use {@link #headCellRangeList(HeaderMergeStrategy)} instead
-     */
-    @Deprecated
-    public List<CellRange> headCellRangeList() {
-        return headCellRangeList(HeaderMergeStrategy.AUTO);
-    }
-
-    /**
-     * Calculate all cells that need to be merged based on the merge strategy
-     *
-     * @param mergeStrategy The merge strategy to use
-     * @return cells that need to be merged
-     */
-    public List<CellRange> headCellRangeList(HeaderMergeStrategy 
mergeStrategy) {
-        if (mergeStrategy == null || mergeStrategy == 
HeaderMergeStrategy.NONE) {
-            return new ArrayList<>();
-        }
-
-        List<CellRange> cellRangeList = new ArrayList<>();
-        Set<String> alreadyRangeSet = new HashSet<>();
-        List<Head> headList = new ArrayList<>(getHeadMap().values());
-
-        for (int i = 0; i < headList.size(); i++) {
-            Head head = headList.get(i);
-            List<String> headNameList = head.getHeadNameList();
-            for (int j = 0; j < headNameList.size(); j++) {
-                if (alreadyRangeSet.contains(i + "-" + j)) {
-                    continue;
-                }
-                alreadyRangeSet.add(i + "-" + j);
-                String headName = headNameList.get(j);
-                int lastCol = i;
-                int lastRow = j;
-
-                // Horizontal merge (if allowed by strategy)
-                if (mergeStrategy == HeaderMergeStrategy.HORIZONTAL_ONLY
-                        || mergeStrategy == HeaderMergeStrategy.FULL_RECTANGLE
-                        || mergeStrategy == HeaderMergeStrategy.AUTO) {
-                    for (int k = i + 1; k < headList.size(); k++) {
-                        String key = k + "-" + j;
-                        if (headList.get(k).getHeadNameList().size() > j
-                                && Objects.equals(
-                                        
headList.get(k).getHeadNameList().get(j), headName)
-                                && !alreadyRangeSet.contains(key)) {
-                            alreadyRangeSet.add(key);
-                            lastCol = k;
-                        } else {
-                            break;
-                        }
-                    }
-                }
-
-                // Vertical merge (if allowed by strategy)
-                Set<String> tempAlreadyRangeSet = new HashSet<>();
-                if (mergeStrategy == HeaderMergeStrategy.VERTICAL_ONLY
-                        || mergeStrategy == HeaderMergeStrategy.FULL_RECTANGLE
-                        || mergeStrategy == HeaderMergeStrategy.AUTO) {
-                    outer:
-                    for (int k = j + 1; k < headNameList.size(); k++) {
-                        // For FULL_RECTANGLE and AUTO, verify all cells in 
the row
-                        boolean canMerge = true;
-                        for (int l = i; l <= lastCol; l++) {
-                            String key = l + "-" + k;
-                            if (headList.get(l).getHeadNameList().size() <= k
-                                    || !Objects.equals(
-                                            
headList.get(l).getHeadNameList().get(k), headName)
-                                    || alreadyRangeSet.contains(key)) {
-                                canMerge = false;
-                                break;
-                            }
-                        }
-
-                        // For AUTO strategy, also check context consistency
-                        if (canMerge && mergeStrategy == 
HeaderMergeStrategy.AUTO) {
-                            canMerge = canMergeVertically(headList, j, k, i, 
lastCol);
-                        }
-
-                        if (canMerge) {
-                            for (int l = i; l <= lastCol; l++) {
-                                String key = l + "-" + k;
-                                tempAlreadyRangeSet.add(key);
-                            }
-                            lastRow = k;
-                        } else {
-                            break outer;
-                        }
-                    }
-                    alreadyRangeSet.addAll(tempAlreadyRangeSet);
-                }
-
-                // For FULL_RECTANGLE strategy, verify the entire rectangle is 
valid
-                if (mergeStrategy == HeaderMergeStrategy.FULL_RECTANGLE) {
-                    if (!isValidRectangleRegion(headList, j, lastRow, i, 
lastCol, headName)) {
-                        // If rectangle is invalid, fall back to single cell 
(no merge)
-                        continue;
-                    }
-                }
-
-                // Add merge range if it's larger than a single cell
-                if (j != lastRow || i != lastCol) {
-                    cellRangeList.add(new CellRange(
-                            j,
-                            lastRow,
-                            head.getColumnIndex(),
-                            headList.get(lastCol).getColumnIndex()));
-                }
-            }
-        }
-        return cellRangeList;
-    }
-
-    /**
-     * Check if two rows can be merged vertically based on context consistency
-     *
-     * @param headList    The list of heads
-     * @param row1        First row index
-     * @param row2        Second row index
-     * @param startCol    Start column index
-     * @param endCol      End column index
-     * @return true if the rows can be merged
-     */
-    private boolean canMergeVertically(List<Head> headList, int row1, int 
row2, int startCol, int endCol) {
-        // Check if there's a row above that provides context
-        if (row1 > 0) {
-            // Check if all cells in the range have the same context above
-            for (int col = startCol; col <= endCol; col++) {
-                boolean hasUpper1 = headList.get(col).getHeadNameList().size() 
> row1;
-                boolean hasUpper2 = headList.get(col).getHeadNameList().size() 
> row2;
-
-                // If one row has upper context but the other doesn't, don't 
merge
-                if (hasUpper1 != hasUpper2) {
-                    return false;
-                }
-
-                if (hasUpper1) {
-                    String upper1 = 
headList.get(col).getHeadNameList().get(row1 - 1);
-                    String upper2 = 
headList.get(col).getHeadNameList().get(row2 - 1);
-                    // If context (upper cells) is different, don't merge
-                    if (!Objects.equals(upper1, upper2)) {
-                        return false;
-                    }
-                }
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Verify if a rectangle region is valid (all cells exist and have the 
same name)
-     *
-     * @param headList      The list of heads
-     * @param startRow      Start row index
-     * @param endRow        End row index
-     * @param startCol      Start column index
-     * @param endCol        End column index
-     * @param expectedName  Expected cell name
-     * @return true if the rectangle is valid
-     */
-    private boolean isValidRectangleRegion(
-            List<Head> headList, int startRow, int endRow, int startCol, int 
endCol, String expectedName) {
-        for (int row = startRow; row <= endRow; row++) {
-            for (int col = startCol; col <= endCol; col++) {
-                if (headList.get(col).getHeadNameList().size() <= row) {
-                    return false; // Cell doesn't exist
-                }
-                String cellName = headList.get(col).getHeadNameList().get(row);
-                if (!Objects.equals(expectedName, cellName)) {
-                    return false; // Cell name doesn't match
-                }
-            }
-        }
-        return true;
-    }
-}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to