
com.moon.poi.excel.BaseFactory Maven / Gradle / Ivy
package com.moon.poi.excel;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Comment;
import org.apache.poi.ss.usermodel.Font;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
/**
* @author moonsky
*/
abstract class BaseFactory, P extends BaseFactory> {
protected final static boolean DFT_APPEND_TYPE = true;
/**
* excel 总代理
*/
protected final WorkbookProxy proxy;
/**
* parent factory
*/
protected final P parent;
public BaseFactory(WorkbookProxy proxy, P parent) {
this.parent = parent == null ? (P) this : parent;
this.proxy = proxy;
}
/**
* 获取当前正在操作的对象
*
* @return 当前正在操作的对象
*/
protected abstract T get();
/**
* 当前正在操作的工作簿类型
*
* @return 工作簿类型
*/
WorkbookType getWorkbookType() { return proxy.getWorkbookType(); }
/**
* 获取
*
* @return 获取代理对象
*/
protected WorkbookProxy getProxy() { return proxy; }
/**
* 获取当前行号(从 0 开始)
*
* @return 行号
*/
public int getRowIndex() {
return getProxy().getIndexOfRow();
}
/**
* 预定义样式
*
* @param classname 唯一样式名
* @param builder 构建样式和字体,需要手动调用 style.setFont(font)
*
* @return 当前对象
*/
public F definitionStyle(String classname, BiConsumer builder) {
proxy.definitionBuilder(new ProxyStyleBuilder(classname, builder));
return (F) this;
}
/**
* 预定义样式
*
* @param classname 唯一样式名
* @param builder 构建样式和字体,需要手动调用 style.setFont(font)
*
* @return 当前对象
*/
public F definitionStyle(Integer classname, BiConsumer builder) {
proxy.definitionBuilder(new ProxyStyleBuilder(classname, builder));
return (F) this;
}
/**
* 预定义样式
*
* @param classname 唯一样式名
* @param builder 构建样式(不包括字体)
*
* @return 当前对象
*/
public F definitionStyle(String classname, Consumer builder) {
proxy.definitionBuilder(new ProxyStyleBuilder(classname, builder));
return (F) this;
}
/**
* 预定义样式
*
* @param classname 唯一样式名
* @param builder 构建样式(不包括字体)
*
* @return 当前对象
*/
public F definitionStyle(Integer classname, Consumer builder) {
proxy.definitionBuilder(new ProxyStyleBuilder(classname, builder));
return (F) this;
}
/**
* 预定义注释
*
* @param uniqueName 整个工作簿注释唯一命名
* @param builder 将要如何定义注释的具体逻辑
*
* @return 当前对象
*/
protected F definitionComment(String uniqueName, Consumer builder) {
proxy.definitionBuilder(new ProxyCommentBuilder(uniqueName, proxy.getSheet(), getWorkbookType(), builder));
return (F) this;
}
/**
* 预定义注释
*
* @param uniqueName 整个工作簿注释唯一命名
* @param comment 注释内容
*
* @return 当前对象
*/
protected F definitionComment(String uniqueName, String comment) {
proxy.definitionBuilder(new ProxyCommentBuilder(uniqueName,
proxy.getSheet(),
getWorkbookType(),
cmt -> getWorkbookType().newRichText(comment)));
return (F) this;
}
/**
* 应用代理的样式和注释设置,统一通过代理管理,并调用这个方法,将来可能会为{@link #finish()}添加更多功能
*
* 应用方式为“按需应用”
*
* @return 当前操作工厂
*/
public F finish() {
proxy.applyProxiedModel();
return (F) this;
}
/**
* 返回父节点工厂,如果当前是“根”({@link WorkbookFactory}),则返回自身
*
* 不建议调用这个方法
*
* @return 父节点工厂
*/
public P getParentFactory() { return parent; }
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy