RED-4824: Replaced type of the text dir with an enum that only accepts values that can be handled by our code
This commit is contained in:
parent
b592fee500
commit
b2f1201d92
@ -0,0 +1,51 @@
|
|||||||
|
package com.iqser.red.service.redaction.v1.server.parsing.model;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public enum TextDirection {
|
||||||
|
ZERO(0f),
|
||||||
|
QUARTER_CIRCLE(90f),
|
||||||
|
HALF_CIRCLE(180f),
|
||||||
|
THREE_QUARTER_CIRCLE(270f);
|
||||||
|
|
||||||
|
public static final String VALUE_STRING_SUFFIX = "°";
|
||||||
|
private final float degrees;
|
||||||
|
private final float radians;
|
||||||
|
|
||||||
|
TextDirection(float degreeValue) {
|
||||||
|
degrees = degreeValue;
|
||||||
|
radians = (float) Math.toRadians(degreeValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return degrees + VALUE_STRING_SUFFIX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TextDirection fromDegrees(float degrees) {
|
||||||
|
|
||||||
|
for (var dir : TextDirection.values()) {
|
||||||
|
if (degrees == dir.degrees) {
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new IllegalArgumentException(String.format("A value of %f is not supported by TextDirection", degrees));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TextDirection fromString(String degreesAsString) {
|
||||||
|
|
||||||
|
Objects.requireNonNull(degreesAsString, "Cannot construct a text direction from a null value");
|
||||||
|
|
||||||
|
degreesAsString = degreesAsString.strip();
|
||||||
|
|
||||||
|
if (degreesAsString.endsWith(VALUE_STRING_SUFFIX)) {
|
||||||
|
degreesAsString = degreesAsString.replace(VALUE_STRING_SUFFIX + "$", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
return fromDegrees(Float.parseFloat(degreesAsString));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -35,7 +35,7 @@ public class TextPositionSequence implements CharSequence {
|
|||||||
private int page;
|
private int page;
|
||||||
private List<RedTextPosition> textPositions = new ArrayList<>();
|
private List<RedTextPosition> textPositions = new ArrayList<>();
|
||||||
|
|
||||||
private float dir;
|
private TextDirection dir;
|
||||||
private int rotation;
|
private int rotation;
|
||||||
private float pageHeight;
|
private float pageHeight;
|
||||||
private float pageWidth;
|
private float pageWidth;
|
||||||
@ -61,7 +61,7 @@ public class TextPositionSequence implements CharSequence {
|
|||||||
|
|
||||||
this.textPositions = textPositions.stream().map(RedTextPosition::fromTextPosition).collect(Collectors.toList());
|
this.textPositions = textPositions.stream().map(RedTextPosition::fromTextPosition).collect(Collectors.toList());
|
||||||
this.page = page;
|
this.page = page;
|
||||||
this.dir = textPositions.get(0).getDir();
|
this.dir = TextDirection.fromDegrees(textPositions.get(0).getDir());
|
||||||
this.rotation = textPositions.get(0).getRotation();
|
this.rotation = textPositions.get(0).getRotation();
|
||||||
this.pageHeight = textPositions.get(0).getPageHeight();
|
this.pageHeight = textPositions.get(0).getPageHeight();
|
||||||
this.pageWidth = textPositions.get(0).getPageWidth();
|
this.pageWidth = textPositions.get(0).getPageWidth();
|
||||||
@ -139,7 +139,7 @@ public class TextPositionSequence implements CharSequence {
|
|||||||
|
|
||||||
this.textPositions.add(RedTextPosition.fromTextPosition(textPosition));
|
this.textPositions.add(RedTextPosition.fromTextPosition(textPosition));
|
||||||
|
|
||||||
this.dir = textPositions.get(0).getDir();
|
this.dir = TextDirection.fromDegrees(textPositions.get(0).getDir());
|
||||||
this.rotation = textPositions.get(0).getRotation();
|
this.rotation = textPositions.get(0).getRotation();
|
||||||
this.pageHeight = textPositions.get(0).getPageHeight();
|
this.pageHeight = textPositions.get(0).getPageHeight();
|
||||||
this.pageWidth = textPositions.get(0).getPageWidth();
|
this.pageWidth = textPositions.get(0).getPageWidth();
|
||||||
@ -286,16 +286,16 @@ public class TextPositionSequence implements CharSequence {
|
|||||||
Point2D topRight = new Point2D.Double(lastTextPos.getXDirAdj() + lastTextPos.getWidthDirAdj(), lastTextPos.getYDirAdj() + textHeight + HEIGHT_PADDING);
|
Point2D topRight = new Point2D.Double(lastTextPos.getXDirAdj() + lastTextPos.getWidthDirAdj(), lastTextPos.getYDirAdj() + textHeight + HEIGHT_PADDING);
|
||||||
|
|
||||||
AffineTransform transform = new AffineTransform();
|
AffineTransform transform = new AffineTransform();
|
||||||
if (dir == 0 || dir == 180) {
|
if (dir == TextDirection.ZERO || dir == TextDirection.HALF_CIRCLE) {
|
||||||
transform.rotate(Math.toRadians(dir), pageWidth / 2f, pageHeight / 2f);
|
transform.rotate(dir.getRadians(), pageWidth / 2f, pageHeight / 2f);
|
||||||
transform.translate(0f, pageHeight + textHeight);
|
transform.translate(0f, pageHeight + textHeight);
|
||||||
transform.scale(1., -1.);
|
transform.scale(1., -1.);
|
||||||
} else if (dir == 90) {
|
} else if (dir == TextDirection.QUARTER_CIRCLE) {
|
||||||
transform.rotate(Math.toRadians(dir), pageWidth / 2f, pageWidth / 2f);
|
transform.rotate(dir.getRadians(), pageWidth / 2f, pageWidth / 2f);
|
||||||
transform.translate(0f, pageWidth + textHeight);
|
transform.translate(0f, pageWidth + textHeight);
|
||||||
transform.scale(1., -1.);
|
transform.scale(1., -1.);
|
||||||
} else {
|
} else {
|
||||||
transform.rotate(Math.toRadians(dir), pageHeight / 2f, pageHeight / 2f);
|
transform.rotate(dir.getRadians(), pageHeight / 2f, pageHeight / 2f);
|
||||||
transform.translate(0f, pageWidth + textHeight);
|
transform.translate(0f, pageWidth + textHeight);
|
||||||
transform.scale(1., -1.);
|
transform.scale(1., -1.);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user