diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java index 828669a892..cebe38b8f2 100644 --- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java +++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java @@ -31,6 +31,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.function.Function; +import java.util.function.Predicate; import javax.xml.namespace.QName; @@ -115,8 +116,6 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai private int chartIndex = 0; - private POIXMLDocumentPart documentPart = null; - protected List axes = new ArrayList<>(); /** @@ -362,14 +361,14 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai } @Override - public Optional findDefinedParagraphProperty(Function isSet, + public Optional findDefinedParagraphProperty(Predicate isSet, Function getter) { // TODO Auto-generated method stub return Optional.empty(); } @Override - public Optional findDefinedRunProperty(Function isSet, + public Optional findDefinedRunProperty(Predicate isSet, Function getter) { // TODO Auto-generated method stub return Optional.empty(); @@ -578,23 +577,23 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai private Map getCategoryAxes() { CTPlotArea plotArea = getCTPlotArea(); int sizeOfArray = plotArea.sizeOfCatAxArray(); - Map axes = new HashMap<>(sizeOfArray); + Map axesMap = new HashMap<>(sizeOfArray); for (int i = 0; i < sizeOfArray; i++) { CTCatAx category = plotArea.getCatAxArray(i); - axes.put(category.getAxId().getVal(), new XDDFCategoryAxis(category)); + axesMap.put(category.getAxId().getVal(), new XDDFCategoryAxis(category)); } - return axes; + return axesMap; } private Map getValueAxes() { CTPlotArea plotArea = getCTPlotArea(); int sizeOfArray = plotArea.sizeOfValAxArray(); - Map axes = new HashMap<>(sizeOfArray); + Map axesMap = new HashMap<>(sizeOfArray); for (int i = 0; i < sizeOfArray; i++) { CTValAx values = plotArea.getValAxArray(i); - axes.put(values.getAxId().getVal(), new XDDFValueAxis(values)); + axesMap.put(values.getAxId().getVal(), new XDDFValueAxis(values)); } - return axes; + return axesMap; } public XDDFValueAxis createValueAxis(AxisPosition pos) { @@ -767,15 +766,14 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai */ public PackageRelationship createRelationshipInChart(POIXMLRelation chartRelation, POIXMLFactory chartFactory, int chartIndex) { - documentPart = createRelationship(chartRelation, chartFactory, chartIndex, true).getDocumentPart(); + POIXMLDocumentPart documentPart = + createRelationship(chartRelation, chartFactory, chartIndex, true).getDocumentPart(); return addRelation(null, chartRelation, documentPart).getRelationship(); } /** * if embedded part was null then create new part * - * @param chartRelation - * chart relation object * @param chartWorkbookRelation * chart workbook relation object * @param chartFactory @@ -784,8 +782,8 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai * @throws InvalidFormatException * @since POI 4.0.0 */ - private PackagePart createWorksheetPart(POIXMLRelation chartRelation, POIXMLRelation chartWorkbookRelation, - POIXMLFactory chartFactory) throws InvalidFormatException { + private PackagePart createWorksheetPart(POIXMLRelation chartWorkbookRelation, POIXMLFactory chartFactory) + throws InvalidFormatException { PackageRelationship xlsx = createRelationshipInChart(chartWorkbookRelation, chartFactory, chartIndex); setExternalId(xlsx.getId()); return getTargetPart(xlsx); @@ -803,11 +801,10 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai public void saveWorkbook(XSSFWorkbook workbook) throws IOException, InvalidFormatException { PackagePart worksheetPart = getWorksheetPart(); if (worksheetPart == null) { - POIXMLRelation chartRelation = getChartRelation(); POIXMLRelation chartWorkbookRelation = getChartWorkbookRelation(); POIXMLFactory chartFactory = getChartFactory(); - if (chartRelation != null && chartWorkbookRelation != null && chartFactory != null) { - worksheetPart = createWorksheetPart(chartRelation, chartWorkbookRelation, chartFactory); + if (chartWorkbookRelation != null && chartFactory != null) { + worksheetPart = createWorksheetPart(chartWorkbookRelation, chartFactory); } else { throw new InvalidFormatException("unable to determine chart relations"); } @@ -950,6 +947,9 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai */ public CellReference setSheetTitle(String title, int column) { XSSFSheet sheet = getSheet(); + if (sheet == null) { + return null; + } XSSFRow row = getRow(sheet, 0); XSSFCell cell = getCell(row, column); cell.setCellValue(title); @@ -1000,7 +1000,7 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai return null; } - private void setWorksheetPartCommitted() throws InvalidFormatException { + private void setWorksheetPartCommitted() { for (RelationPart part : getRelationParts()) { if (POIXMLDocument.PACK_OBJECT_REL_TYPE.equals(part.getRelationship().getRelationshipType())) { part.getDocumentPart().setCommitted(true); diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartAxis.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartAxis.java index d0a8e61d4b..c04e066ed2 100644 --- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartAxis.java +++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartAxis.java @@ -408,7 +408,10 @@ public abstract class XDDFChartAxis implements HasShapeProperties { } protected long getNextAxId(CTPlotArea plotArea) { - long totalAxisCount = plotArea.sizeOfValAxArray() + plotArea.sizeOfCatAxArray() + plotArea.sizeOfDateAxArray() + long totalAxisCount = 0L + + plotArea.sizeOfValAxArray() + + plotArea.sizeOfCatAxArray() + + plotArea.sizeOfDateAxArray() + plotArea.sizeOfSerAxArray(); return totalAxisCount; } diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartLegend.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartLegend.java index 003e613e22..d7a77f568b 100644 --- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartLegend.java +++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartLegend.java @@ -20,6 +20,7 @@ package org.apache.poi.xddf.usermodel.chart; import java.util.List; import java.util.Optional; import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; import org.apache.poi.util.Beta; @@ -195,14 +196,16 @@ public final class XDDFChartLegend implements TextContainer { legend.getOverlay().setVal(value); } + @Override public Optional findDefinedParagraphProperty( - Function isSet, + Predicate isSet, Function getter) { return Optional.empty(); // chart legend has no (indirect) paragraph properties } + @Override public Optional findDefinedRunProperty( - Function isSet, + Predicate isSet, Function getter) { return Optional.empty(); // chart legend has no (indirect) paragraph properties } diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFLegendEntry.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFLegendEntry.java index 6668e77235..526c1ebf19 100644 --- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFLegendEntry.java +++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFLegendEntry.java @@ -19,6 +19,7 @@ package org.apache.poi.xddf.usermodel.chart; import java.util.Optional; import java.util.function.Function; +import java.util.function.Predicate; import org.apache.poi.util.Beta; import org.apache.poi.util.Internal; @@ -113,14 +114,14 @@ public class XDDFLegendEntry implements TextContainer { @Override public Optional findDefinedParagraphProperty( - Function isSet, + Predicate isSet, Function getter) { return Optional.empty(); // legend entry has no (indirect) paragraph properties } @Override public Optional findDefinedRunProperty( - Function isSet, + Predicate isSet, Function getter) { return Optional.empty(); // legend entry has no (indirect) paragraph properties } diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/TextContainer.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/TextContainer.java index 9e11d21e03..a8c89d02f5 100644 --- a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/TextContainer.java +++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/TextContainer.java @@ -19,6 +19,7 @@ package org.apache.poi.xddf.usermodel.text; import java.util.Optional; import java.util.function.Function; +import java.util.function.Predicate; import org.apache.poi.util.Beta; import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties; @@ -27,10 +28,10 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraphProperties @Beta public interface TextContainer { - Optional findDefinedParagraphProperty(Function isSet, + Optional findDefinedParagraphProperty(Predicate isSet, Function getter); - Optional findDefinedRunProperty(Function isSet, + Optional findDefinedRunProperty(Predicate isSet, Function getter); } diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextBody.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextBody.java index 6eae7b88c2..2c97837ab2 100644 --- a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextBody.java +++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextBody.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; import org.apache.poi.util.Beta; @@ -337,12 +338,12 @@ public class XDDFTextBody { } @Internal - protected Optional findDefinedParagraphProperty(Function isSet, + protected Optional findDefinedParagraphProperty(Predicate isSet, Function getter, int level) { if (_body.isSetLstStyle() && level >= 0) { CTTextListStyle list = _body.getLstStyle(); CTTextParagraphProperties props = level == 0 ? list.getDefPPr() : retrieveProperties(list, level); - if (props != null && isSet.apply(props)) { + if (props != null && isSet.test(props)) { return Optional.of(getter.apply(props)); } else { return findDefinedParagraphProperty(isSet, getter, level - 1); @@ -355,12 +356,12 @@ public class XDDFTextBody { } @Internal - protected Optional findDefinedRunProperty(Function isSet, + protected Optional findDefinedRunProperty(Predicate isSet, Function getter, int level) { if (_body.isSetLstStyle() && level >= 0) { CTTextListStyle list = _body.getLstStyle(); CTTextParagraphProperties props = level == 0 ? list.getDefPPr() : retrieveProperties(list, level); - if (props != null && props.isSetDefRPr() && isSet.apply(props.getDefRPr())) { + if (props != null && props.isSetDefRPr() && isSet.test(props.getDefRPr())) { return Optional.of(getter.apply(props.getDefRPr())); } else { return findDefinedRunProperty(isSet, getter, level - 1); diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextParagraph.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextParagraph.java index f2a2107edd..97082725c1 100644 --- a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextParagraph.java +++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextParagraph.java @@ -23,6 +23,7 @@ import java.util.Iterator; import java.util.List; import java.util.Optional; import java.util.function.Function; +import java.util.function.Predicate; import org.apache.commons.collections4.iterators.IteratorIterable; import org.apache.commons.collections4.iterators.ReverseListIterator; @@ -178,8 +179,10 @@ public class XDDFTextParagraph { * @return alignment that is applied to the paragraph */ public TextAlignment getTextAlignment() { - return findDefinedParagraphProperty(props -> props.isSetAlgn(), props -> props.getAlgn()) - .map(align -> TextAlignment.valueOf(align)).orElse(null); + return findDefinedParagraphProperty( + CTTextParagraphProperties::isSetAlgn, + CTTextParagraphProperties::getAlgn) + .map(TextAlignment::valueOf).orElse(null); } /** @@ -205,8 +208,10 @@ public class XDDFTextParagraph { * @return alignment that is applied to the paragraph */ public FontAlignment getFontAlignment() { - return findDefinedParagraphProperty(props -> props.isSetFontAlgn(), props -> props.getFontAlgn()) - .map(align -> FontAlignment.valueOf(align)).orElse(null); + return findDefinedParagraphProperty( + CTTextParagraphProperties::isSetFontAlgn, + CTTextParagraphProperties::getFontAlgn) + .map(FontAlignment::valueOf).orElse(null); } /** @@ -230,8 +235,10 @@ public class XDDFTextParagraph { * the paragraph. */ public Double getIndentation() { - return findDefinedParagraphProperty(props -> props.isSetIndent(), props -> props.getIndent()) - .map(emu -> Units.toPoints(emu)).orElse(null); + return findDefinedParagraphProperty( + CTTextParagraphProperties::isSetIndent, + CTTextParagraphProperties::getIndent) + .map(Units::toPoints).orElse(null); } /** @@ -259,8 +266,10 @@ public class XDDFTextParagraph { * @return the left margin, in points, of the paragraph. */ public Double getMarginLeft() { - return findDefinedParagraphProperty(props -> props.isSetMarL(), props -> props.getMarL()) - .map(emu -> Units.toPoints(emu)).orElse(null); + return findDefinedParagraphProperty( + CTTextParagraphProperties::isSetMarL, + CTTextParagraphProperties::getMarL) + .map(Units::toPoints).orElse(null); } /** @@ -290,8 +299,10 @@ public class XDDFTextParagraph { * @return the right margin, in points, of the paragraph. */ public Double getMarginRight() { - return findDefinedParagraphProperty(props -> props.isSetMarR(), props -> props.getMarR()) - .map(emu -> Units.toPoints(emu)).orElse(null); + return findDefinedParagraphProperty( + CTTextParagraphProperties::isSetMarR, + CTTextParagraphProperties::getMarR) + .map(Units::toPoints).orElse(null); } /** @@ -322,8 +333,10 @@ public class XDDFTextParagraph { * points. */ public Double getDefaultTabSize() { - return findDefinedParagraphProperty(props -> props.isSetDefTabSz(), props -> props.getDefTabSz()) - .map(emu -> Units.toPoints(emu)).orElse(null); + return findDefinedParagraphProperty( + CTTextParagraphProperties::isSetDefTabSz, + CTTextParagraphProperties::getDefTabSz) + .map(Units::toPoints).orElse(null); } /** @@ -352,8 +365,10 @@ public class XDDFTextParagraph { * @return the vertical line spacing. */ public XDDFSpacing getLineSpacing() { - return findDefinedParagraphProperty(props -> props.isSetLnSpc(), props -> props.getLnSpc()) - .map(spacing -> extractSpacing(spacing)).orElse(null); + return findDefinedParagraphProperty( + CTTextParagraphProperties::isSetLnSpc, + CTTextParagraphProperties::getLnSpc) + .map(this::extractSpacing).orElse(null); } @@ -403,8 +418,10 @@ public class XDDFTextParagraph { * @return the vertical white space before the paragraph. */ public XDDFSpacing getSpaceBefore() { - return findDefinedParagraphProperty(props -> props.isSetSpcBef(), props -> props.getSpcBef()) - .map(spacing -> extractSpacing(spacing)).orElse(null); + return findDefinedParagraphProperty( + CTTextParagraphProperties::isSetSpcBef, + CTTextParagraphProperties::getSpcBef) + .map(this::extractSpacing).orElse(null); } /** @@ -451,8 +468,10 @@ public class XDDFTextParagraph { * @return the vertical white space after the paragraph. */ public XDDFSpacing getSpaceAfter() { - return findDefinedParagraphProperty(props -> props.isSetSpcAft(), props -> props.getSpcAft()) - .map(spacing -> extractSpacing(spacing)).orElse(null); + return findDefinedParagraphProperty( + CTTextParagraphProperties::isSetSpcAft, + CTTextParagraphProperties::getSpcAft) + .map(this::extractSpacing).orElse(null); } /** @@ -599,7 +618,10 @@ public class XDDFTextParagraph { } public boolean hasEastAsianLineBreak() { - return findDefinedParagraphProperty(props -> props.isSetEaLnBrk(), props -> props.getEaLnBrk()).orElse(false); + return findDefinedParagraphProperty( + CTTextParagraphProperties::isSetEaLnBrk, + CTTextParagraphProperties::getEaLnBrk) + .orElse(false); } public void setEastAsianLineBreak(Boolean value) { @@ -609,7 +631,9 @@ public class XDDFTextParagraph { } public boolean hasLatinLineBreak() { - return findDefinedParagraphProperty(props -> props.isSetLatinLnBrk(), props -> props.getLatinLnBrk()) + return findDefinedParagraphProperty( + CTTextParagraphProperties::isSetLatinLnBrk, + CTTextParagraphProperties::getLatinLnBrk) .orElse(false); } @@ -620,7 +644,9 @@ public class XDDFTextParagraph { } public boolean hasHangingPunctuation() { - return findDefinedParagraphProperty(props -> props.isSetHangingPunct(), props -> props.getHangingPunct()) + return findDefinedParagraphProperty( + CTTextParagraphProperties::isSetHangingPunct, + CTTextParagraphProperties::getHangingPunct) .orElse(false); } @@ -631,7 +657,10 @@ public class XDDFTextParagraph { } public boolean isRightToLeft() { - return findDefinedParagraphProperty(props -> props.isSetRtl(), props -> props.getRtl()).orElse(false); + return findDefinedParagraphProperty( + CTTextParagraphProperties::isSetRtl, + CTTextParagraphProperties::getRtl) + .orElse(false); } public void setRightToLeft(Boolean value) { @@ -760,7 +789,7 @@ public class XDDFTextParagraph { return getProperties(); } - protected Optional findDefinedParagraphProperty(Function isSet, + protected Optional findDefinedParagraphProperty(Predicate isSet, Function getter) { if (_p.isSetPPr()) { int level = _p.getPPr().isSetLvl() ? 1 + _p.getPPr().getLvl() : 0; @@ -770,17 +799,17 @@ public class XDDFTextParagraph { } } - private Optional findDefinedParagraphProperty(Function isSet, + private Optional findDefinedParagraphProperty(Predicate isSet, Function getter, int level) { final CTTextParagraphProperties props = _p.getPPr(); - if (props != null && isSet.apply(props)) { + if (props != null && isSet.test(props)) { return Optional.ofNullable(getter.apply(props)); } else { return _parent.findDefinedParagraphProperty(isSet, getter, level); } } - protected Optional findDefinedRunProperty(Function isSet, + protected Optional findDefinedRunProperty(Predicate isSet, Function getter) { if (_p.isSetPPr()) { int level = _p.getPPr().isSetLvl() ? 1 + _p.getPPr().getLvl() : 0; @@ -790,10 +819,10 @@ public class XDDFTextParagraph { } } - private Optional findDefinedRunProperty(Function isSet, + private Optional findDefinedRunProperty(Predicate isSet, Function getter, int level) { final CTTextCharacterProperties props = _p.getPPr().isSetDefRPr() ? _p.getPPr().getDefRPr() : null; - if (props != null && isSet.apply(props)) { + if (props != null && isSet.test(props)) { return Optional.ofNullable(getter.apply(props)); } else { return _parent.findDefinedRunProperty(isSet, getter, level); diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextRun.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextRun.java index 8d2c5c2015..a9583c200d 100644 --- a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextRun.java +++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextRun.java @@ -21,6 +21,7 @@ import java.util.LinkedList; import java.util.Locale; import java.util.Optional; import java.util.function.Function; +import java.util.function.Predicate; import org.apache.poi.common.usermodel.fonts.FontGroup; import org.apache.poi.ooxml.POIXMLRelation; @@ -108,7 +109,9 @@ public class XDDFTextRun { } public Boolean getDirty() { - return findDefinedProperty(props -> props.isSetDirty(), props -> props.getDirty()) + return findDefinedProperty( + CTTextCharacterProperties::isSetDirty, + CTTextCharacterProperties::getDirty) .orElse(null); } @@ -117,7 +120,9 @@ public class XDDFTextRun { } public Boolean getSpellError() { - return findDefinedProperty(props -> props.isSetErr(), props -> props.getErr()) + return findDefinedProperty( + CTTextCharacterProperties::isSetErr, + CTTextCharacterProperties::getErr) .orElse(null); } @@ -126,7 +131,9 @@ public class XDDFTextRun { } public Boolean getNoProof() { - return findDefinedProperty(props -> props.isSetNoProof(), props -> props.getNoProof()) + return findDefinedProperty( + CTTextCharacterProperties::isSetNoProof, + CTTextCharacterProperties::getNoProof) .orElse(null); } @@ -135,7 +142,9 @@ public class XDDFTextRun { } public Boolean getNormalizeHeights() { - return findDefinedProperty(props -> props.isSetNormalizeH(), props -> props.getNormalizeH()) + return findDefinedProperty( + CTTextCharacterProperties::isSetNormalizeH, + CTTextCharacterProperties::getNormalizeH) .orElse(null); } @@ -144,7 +153,9 @@ public class XDDFTextRun { } public boolean isKumimoji() { - return findDefinedProperty(props -> props.isSetKumimoji(), props -> props.getKumimoji()) + return findDefinedProperty( + CTTextCharacterProperties::isSetKumimoji, + CTTextCharacterProperties::getKumimoji) .orElse(false); } @@ -162,7 +173,9 @@ public class XDDFTextRun { * @return whether this run of text is formatted as bold text. */ public boolean isBold() { - return findDefinedProperty(props -> props.isSetB(), props -> props.getB()) + return findDefinedProperty( + CTTextCharacterProperties::isSetB, + CTTextCharacterProperties::getB) .orElse(false); } @@ -178,7 +191,9 @@ public class XDDFTextRun { * @return whether this run of text is formatted as italic text. */ public boolean isItalic() { - return findDefinedProperty(props -> props.isSetI(), props -> props.getI()) + return findDefinedProperty( + CTTextCharacterProperties::isSetI, + CTTextCharacterProperties::getI) .orElse(false); } @@ -194,7 +209,9 @@ public class XDDFTextRun { * @return whether this run of text is formatted as striked text. */ public boolean isStrikeThrough() { - return findDefinedProperty(props -> props.isSetStrike(), props -> props.getStrike()) + return findDefinedProperty( + CTTextCharacterProperties::isSetStrike, + CTTextCharacterProperties::getStrike) .map(strike -> strike != STTextStrikeType.NO_STRIKE) .orElse(false); } @@ -203,8 +220,10 @@ public class XDDFTextRun { * @return which strike style this run of text is formatted with. */ public StrikeType getStrikeThrough() { - return findDefinedProperty(props -> props.isSetStrike(), props -> props.getStrike()) - .map(strike -> StrikeType.valueOf(strike)) + return findDefinedProperty( + CTTextCharacterProperties::isSetStrike, + CTTextCharacterProperties::getStrike) + .map(StrikeType::valueOf) .orElse(null); } @@ -220,7 +239,9 @@ public class XDDFTextRun { * @return whether this run of text is formatted as underlined text. */ public boolean isUnderline() { - return findDefinedProperty(props -> props.isSetU(), props -> props.getU()) + return findDefinedProperty( + CTTextCharacterProperties::isSetU, + CTTextCharacterProperties::getU) .map(underline -> underline != STTextUnderlineType.NONE) .orElse(false); } @@ -229,8 +250,10 @@ public class XDDFTextRun { * @return which underline style this run of text is formatted with. */ public UnderlineType getUnderline() { - return findDefinedProperty(props -> props.isSetU(), props -> props.getU()) - .map(underline -> UnderlineType.valueOf(underline)) + return findDefinedProperty( + CTTextCharacterProperties::isSetU, + CTTextCharacterProperties::getU) + .map(UnderlineType::valueOf) .orElse(null); } @@ -246,7 +269,9 @@ public class XDDFTextRun { * @return whether this run of text is formatted as capitalized text. */ public boolean isCapitals() { - return findDefinedProperty(props -> props.isSetCap(), props -> props.getCap()) + return findDefinedProperty( + CTTextCharacterProperties::isSetCap, + CTTextCharacterProperties::getCap) .map(caps -> caps != STTextCapsType.NONE) .orElse(false); } @@ -255,8 +280,10 @@ public class XDDFTextRun { * @return which caps style this run of text is formatted with. */ public CapsType getCapitals() { - return findDefinedProperty(props -> props.isSetCap(), props -> props.getCap()) - .map(caps -> CapsType.valueOf(caps)) + return findDefinedProperty( + CTTextCharacterProperties::isSetCap, + CTTextCharacterProperties::getCap) + .map(CapsType::valueOf) .orElse(null); } @@ -265,7 +292,9 @@ public class XDDFTextRun { * Default is false. */ public boolean isSubscript() { - return findDefinedProperty(props -> props.isSetBaseline(), props -> props.getBaseline()) + return findDefinedProperty( + CTTextCharacterProperties::isSetBaseline, + CTTextCharacterProperties::getBaseline) .map(baseline -> baseline < 0) .orElse(false); } @@ -275,7 +304,9 @@ public class XDDFTextRun { * Default is false. */ public boolean isSuperscript() { - return findDefinedProperty(props -> props.isSetBaseline(), props -> props.getBaseline()) + return findDefinedProperty( + CTTextCharacterProperties::isSetBaseline, + CTTextCharacterProperties::getBaseline) .map(baseline -> baseline > 0) .orElse(false); } @@ -332,8 +363,10 @@ public class XDDFTextRun { } public XDDFColor getFontColor() { - XDDFSolidFillProperties solid = findDefinedProperty(props -> props.isSetSolidFill(), props -> props.getSolidFill()) - .map(props -> new XDDFSolidFillProperties(props)) + XDDFSolidFillProperties solid = findDefinedProperty( + CTTextCharacterProperties::isSetSolidFill, + CTTextCharacterProperties::getSolidFill) + .map(XDDFSolidFillProperties::new) .orElse(new XDDFSolidFillProperties()); return solid.getColor(); } @@ -352,18 +385,18 @@ public class XDDFTextRun { public XDDFFont[] getFonts() { LinkedList list = new LinkedList<>(); - findDefinedProperty(props -> props.isSetCs(), props -> props.getCs()) + findDefinedProperty(CTTextCharacterProperties::isSetCs, CTTextCharacterProperties::getCs) .map(font -> new XDDFFont(FontGroup.COMPLEX_SCRIPT, font)) - .ifPresent(font -> list.add(font)); - findDefinedProperty(props -> props.isSetEa(), props -> props.getEa()) + .ifPresent(list::add); + findDefinedProperty(CTTextCharacterProperties::isSetEa, CTTextCharacterProperties::getEa) .map(font -> new XDDFFont(FontGroup.EAST_ASIAN, font)) - .ifPresent(font -> list.add(font)); - findDefinedProperty(props -> props.isSetLatin(), props -> props.getLatin()) + .ifPresent(list::add); + findDefinedProperty(CTTextCharacterProperties::isSetLatin, CTTextCharacterProperties::getLatin) .map(font -> new XDDFFont(FontGroup.LATIN, font)) - .ifPresent(font -> list.add(font)); - findDefinedProperty(props -> props.isSetSym(), props -> props.getSym()) + .ifPresent(list::add); + findDefinedProperty(CTTextCharacterProperties::isSetSym, CTTextCharacterProperties::getSym) .map(font -> new XDDFFont(FontGroup.SYMBOL, font)) - .ifPresent(font -> list.add(font)); + .ifPresent(list::add); return list.toArray(new XDDFFont[0]); } @@ -384,7 +417,9 @@ public class XDDFTextRun { } public Double getFontSize() { - Integer size = findDefinedProperty(props -> props.isSetSz(), props -> props.getSz()) + Integer size = findDefinedProperty( + CTTextCharacterProperties::isSetSz, + CTTextCharacterProperties::getSz) .orElse(100 * XSSFFont.DEFAULT_FONT_SIZE); // default font size double scale = _parent.getParentBody().getBodyProperties().getAutoFit().getFontScale() / 10_000_000.0; return size * scale; @@ -415,7 +450,9 @@ public class XDDFTextRun { * If this attribute is omitted then returns null. */ public Double getCharacterKerning() { - return findDefinedProperty(props -> props.isSetKern(), props -> props.getKern()) + return findDefinedProperty( + CTTextCharacterProperties::isSetKern, + CTTextCharacterProperties::getKern) .map(kerning -> 0.01 * kerning) .orElse(null); } @@ -449,7 +486,9 @@ public class XDDFTextRun { * If this attribute is omitted then returns null. */ public Double getCharacterSpacing() { - return findDefinedProperty(props -> props.isSetSpc(), props -> props.getSpc()) + return findDefinedProperty( + CTTextCharacterProperties::isSetSpc, + CTTextCharacterProperties::getSpc) .map(spacing -> 0.01 * spacing) .orElse(null); } @@ -459,7 +498,9 @@ public class XDDFTextRun { } public String getBookmark() { - return findDefinedProperty(props -> props.isSetBmk(), props -> props.getBmk()) + return findDefinedProperty( + CTTextCharacterProperties::isSetBmk, + CTTextCharacterProperties::getBmk) .orElse(null); } @@ -484,8 +525,10 @@ public class XDDFTextRun { } public XDDFHyperlink getHyperlink() { - return findDefinedProperty(props -> props.isSetHlinkClick(), props -> props.getHlinkClick()) - .map(link -> new XDDFHyperlink(link)) + return findDefinedProperty( + CTTextCharacterProperties::isSetHlinkClick, + CTTextCharacterProperties::getHlinkClick) + .map(XDDFHyperlink::new) .orElse(null); } @@ -496,8 +539,10 @@ public class XDDFTextRun { } public XDDFHyperlink getMouseOver() { - return findDefinedProperty(props -> props.isSetHlinkMouseOver(), props -> props.getHlinkMouseOver()) - .map(link -> new XDDFHyperlink(link)) + return findDefinedProperty( + CTTextCharacterProperties::isSetHlinkMouseOver, + CTTextCharacterProperties::getHlinkMouseOver) + .map(XDDFHyperlink::new) .orElse(null); } @@ -506,8 +551,10 @@ public class XDDFTextRun { } public Locale getLanguage() { - return findDefinedProperty(props -> props.isSetLang(), props -> props.getLang()) - .map(lang -> Locale.forLanguageTag(lang)) + return findDefinedProperty( + CTTextCharacterProperties::isSetLang, + CTTextCharacterProperties::getLang) + .map(Locale::forLanguageTag) .orElse(null); } @@ -516,8 +563,10 @@ public class XDDFTextRun { } public Locale getAlternativeLanguage() { - return findDefinedProperty(props -> props.isSetAltLang(), props -> props.getAltLang()) - .map(lang -> Locale.forLanguageTag(lang)) + return findDefinedProperty( + CTTextCharacterProperties::isSetAltLang, + CTTextCharacterProperties::getAltLang) + .map(Locale::forLanguageTag) .orElse(null); } @@ -526,8 +575,10 @@ public class XDDFTextRun { } public XDDFColor getHighlight() { - return findDefinedProperty(props -> props.isSetHighlight(), props -> props.getHighlight()) - .map(color -> XDDFColor.forColorContainer(color)) + return findDefinedProperty( + CTTextCharacterProperties::isSetHighlight, + CTTextCharacterProperties::getHighlight) + .map(XDDFColor::forColorContainer) .orElse(null); } @@ -536,14 +587,16 @@ public class XDDFTextRun { } public XDDFLineProperties getLineProperties() { - return findDefinedProperty(props -> props.isSetLn(), props -> props.getLn()) - .map(props -> new XDDFLineProperties(props)) + return findDefinedProperty( + CTTextCharacterProperties::isSetLn, + CTTextCharacterProperties::getLn) + .map(XDDFLineProperties::new) .orElse(null); } - private Optional findDefinedProperty(Function isSet, Function getter) { + private Optional findDefinedProperty(Predicate isSet, Function getter) { CTTextCharacterProperties props = getProperties(); - if (props != null && isSet.apply(props)) { + if (props != null && isSet.test(props)) { return Optional.ofNullable(getter.apply(props)); } else { return _parent.findDefinedRunProperty(isSet, getter); diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java index 0ba39d520f..b0dce8b7de 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java @@ -26,6 +26,7 @@ import java.util.Iterator; import java.util.List; import java.util.Optional; import java.util.function.Function; +import java.util.function.Predicate; import org.apache.poi.ooxml.POIXMLException; import org.apache.poi.sl.draw.DrawFactory; @@ -773,14 +774,14 @@ public abstract class XSLFTextShape extends XSLFSimpleShape } @Override - public Optional findDefinedParagraphProperty(Function isSet, + public Optional findDefinedParagraphProperty(Predicate isSet, Function getter) { // TODO Auto-generated method stub return Optional.empty(); } @Override - public Optional findDefinedRunProperty(Function isSet, + public Optional findDefinedRunProperty(Predicate isSet, Function getter) { // TODO Auto-generated method stub return Optional.empty(); diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSimpleShape.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSimpleShape.java index 92a173e743..dfc7a69466 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSimpleShape.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSimpleShape.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.function.Function; +import java.util.function.Predicate; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.SimpleShape; @@ -1005,14 +1006,14 @@ public class XSSFSimpleShape extends XSSFShape implements Iterable Optional findDefinedParagraphProperty(Function isSet, + public Optional findDefinedParagraphProperty(Predicate isSet, Function getter) { // TODO Auto-generated method stub return Optional.empty(); } @Override - public Optional findDefinedRunProperty(Function isSet, + public Optional findDefinedRunProperty(Predicate isSet, Function getter) { // TODO Auto-generated method stub return Optional.empty();