Skip to content
This repository has been archived by the owner on Apr 16, 2021. It is now read-only.

Commit

Permalink
prepare release
Browse files Browse the repository at this point in the history
  • Loading branch information
Eric Kerwin committed Mar 24, 2020
2 parents ec930e0 + 6633572 commit 74abe47
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 31 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jdk:
notifications:
email:
recipients:
- starlabs@blackducksoftware.com
- starlabs@synopsys.com

script:
- "./gradlew clean build jacocoTestReport coveralls sonarqube"
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ description = 'A library for wrapping report and pdf generation.'
apply plugin: 'com.synopsys.integration.library'

dependencies {
api 'com.synopsys.integration:integration-common:20.0.4'
api 'com.synopsys.integration:integration-common:20.1.1'
api 'org.apache.pdfbox:pdfbox:2.0.12'

testImplementation 'org.codehaus.groovy:groovy-all:2.4.12'
Expand Down
41 changes: 22 additions & 19 deletions src/main/java/com/synopsys/integration/pdf/StringManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@

import org.apache.commons.lang3.StringUtils;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

public class StringManager {
public static List<String> wrapToCombinedList(final PDFont font, final float fontSize, final String str, final float widthLimit) throws IOException {
Expand All @@ -40,6 +41,25 @@ public static List<String> wrapToCombinedList(final PDFont font, final float fon
return nonBlankTrimmedFinalStrings;
}

private static List<String> breakIntoWordsIfTooLong(PDFont font, float fontSize, String str, float widthLimit) throws IOException {
final List<String> words = new ArrayList<>(Arrays.asList(str.split(" ")));
for (int i = 0; i < words.size(); i++) {
final String word = words.get(i);
final float stringWidth = getStringWidth(font, fontSize, word);
if (stringWidth > widthLimit) {
words.remove(word);
final List<String> brokenStrings = breakWrapString(font, fontSize, word, widthLimit);
words.addAll(i, brokenStrings);
i = i + brokenStrings.size();
}
}

return words
.stream()
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
}

private static List<String> recombineBrokenWordsIfPossible(PDFont font, float fontSize, float widthLimit, List<String> nonBlankWords) throws IOException {
List<String> finalStrings = new ArrayList<>();
StringBuilder currentBuilder = new StringBuilder();
Expand All @@ -62,32 +82,14 @@ private static List<String> recombineBrokenWordsIfPossible(PDFont font, float fo
.collect(Collectors.toList());
}

private static List<String> breakIntoWordsIfTooLong(PDFont font, float fontSize, String str, float widthLimit) throws IOException {
final List<String> words = new ArrayList<>(Arrays.asList(str.split(" ")));
for (int i = 0; i < words.size(); i++) {
final String word = words.get(i);
final float stringWidth = getStringWidth(font, fontSize, word);
if (stringWidth > widthLimit) {
words.remove(word);
final List<String> brokenStrings = breakWrapString(font, fontSize, word, widthLimit);
words.addAll(i, brokenStrings);
i = i + brokenStrings.size();
}
}

return words
.stream()
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
}

private static boolean wouldExceedLimit(StringBuilder builder, String toAdd, final PDFont font, final float fontSize, float widthLimit) throws IOException {
return getStringWidth(font, fontSize, builder.toString()) + getStringWidth(font, fontSize, toAdd) > widthLimit;
}

public static float getStringWidth(final PDFont font, final float fontSize, final String text) throws IOException {
final String fixedText = replaceUnsupportedCharacters(text, font);
final float rawLength = font.getStringWidth(fixedText);
//TODO evaluate why we are not using 1000f???
return rawLength * (fontSize / 960f);
}

Expand Down Expand Up @@ -160,4 +162,5 @@ public static String replaceUnsupportedCharacters(final String text, final List<
}
return result;
}

}
19 changes: 9 additions & 10 deletions src/test/java/com/synopsys/integration/pdf/StringManagerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,18 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

import org.apache.commons.lang3.StringUtils;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class StringManagerTest {
@Test
public void testStringWidth() throws IOException {
Expand All @@ -30,7 +29,7 @@ public void testStringWrapping(StringWrappingData stringWrappingData) throws IOE
}

private List<String> getActualResults(StringWrappingData stringWrappingData) throws IOException {
return StringManager.wrapToCombinedList(PDType1Font.HELVETICA, stringWrappingData.fontSize, stringWrappingData.text, stringWrappingData.characterLimit);
return StringManager.wrapToCombinedList(PDType1Font.HELVETICA, stringWrappingData.fontSize, stringWrappingData.text, stringWrappingData.widthLimit);
}

static Stream<StringWrappingData> provideStringWrappingDataStream() {
Expand All @@ -56,13 +55,13 @@ static Stream<StringWrappingData> provideStringWrappingDataStream() {
private static class StringWrappingData {
public float fontSize;
public String text;
int characterLimit;
int widthLimit;
List<String> expectedResults;

public StringWrappingData(float fontSize, String text, int characterLimit, List<String> expectedResults) {
public StringWrappingData(float fontSize, String text, int widthLimit, List<String> expectedResults) {
this.fontSize = fontSize;
this.text = text;
this.characterLimit = characterLimit;
this.widthLimit = widthLimit;
this.expectedResults = expectedResults;
}
}
Expand Down

0 comments on commit 74abe47

Please sign in to comment.