From c530a55f2f306b81cd1ffe8aef7a1e9874e1dbfa Mon Sep 17 00:00:00 2001 From: Steven Tracey Date: Thu, 11 May 2023 13:51:15 -0400 Subject: [PATCH] Refactoring Galore! --- .../java/tech/nevets/vcardgen/Location.java | 86 ++++++++ src/main/java/tech/nevets/vcardgen/Main.java | 208 +----------------- src/main/java/tech/nevets/vcardgen/VCard.java | 204 +++++++++++++++++ .../{background.png => backgrounds/caiu.png} | Bin src/main/resources/backgrounds/default.png | Bin 0 -> 2605984 bytes 5 files changed, 292 insertions(+), 206 deletions(-) create mode 100644 src/main/java/tech/nevets/vcardgen/Location.java create mode 100644 src/main/java/tech/nevets/vcardgen/VCard.java rename src/main/resources/{background.png => backgrounds/caiu.png} (100%) create mode 100644 src/main/resources/backgrounds/default.png diff --git a/src/main/java/tech/nevets/vcardgen/Location.java b/src/main/java/tech/nevets/vcardgen/Location.java new file mode 100644 index 0000000..1f8e816 --- /dev/null +++ b/src/main/java/tech/nevets/vcardgen/Location.java @@ -0,0 +1,86 @@ +package tech.nevets.vcardgen; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.FileReader; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +public class Location { + public static final List LOCATIONS = new ArrayList<>(); + + private final String id; + private final String name; + private final String address; + private final String number; + private transient BufferedImage background; + + public Location(String id, String name, String address, String number) throws IOException { + this.id = id; + this.name = name; + this.address = address; + this.number = number; + background = ImageIO.read(this.getClass().getResourceAsStream("/backgrounds/" + id + ".png")); + } + + public String getId() { + return id; + } + + public String getName() { + return name; + } + + public String getAddress() { + return address; + } + + public String getNumber() { + return number; + } + + public BufferedImage getBackground() { + return background; + } + + public void loadBackground() throws IOException { + URL backgroundURL = this.getClass().getResource("/backgrounds/" + id + ".png"); + if (backgroundURL == null) backgroundURL = this.getClass().getResource("/backgrounds/default.png"); + background = ImageIO.read(backgroundURL); + } + + public static void loadLocations () { + try { + Gson gson = new Gson(); + JsonArray jsonFile = gson.fromJson(new FileReader("./locations.json"), JsonArray.class); + for (JsonElement element : jsonFile.asList()) { + Location location = gson.fromJson(element, Location.class); + location.loadBackground(); + LOCATIONS.add(location); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static Location getLocation (String locationId){ + for (Location loc : LOCATIONS) { + if (loc.getId().equals(locationId)) { + return loc; + } + } + return null; + } + + @Override + public String toString() { + return "{ \"id\": " + id + ", \"name\": " + name + ", \"address\": " + address + ", \"number\": " + number + " }"; + } + +} \ No newline at end of file diff --git a/src/main/java/tech/nevets/vcardgen/Main.java b/src/main/java/tech/nevets/vcardgen/Main.java index 0b3aa5e..bc46384 100644 --- a/src/main/java/tech/nevets/vcardgen/Main.java +++ b/src/main/java/tech/nevets/vcardgen/Main.java @@ -1,40 +1,15 @@ package tech.nevets.vcardgen; import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import javax.imageio.ImageIO; import java.io.*; -import java.util.List; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.util.ArrayList; import static spark.Spark.*; public class Main { - - private static final Color WHITE = new Color(255, 255, 255); - private static final Color GREEN = new Color(101, 142, 61); - - private static final Font ARIAL65 = new Font("Arial", Font.PLAIN, 65); - private static final Font ARIAL55 = new Font("Arial", Font.PLAIN, 55); - private static final Font ARIAL45 = new Font("Arial", Font.PLAIN, 45); - private static final Font ARIAL45I = new Font("Arial", Font.ITALIC, 45); - private static final Font ARIAL44I = new Font("Arial", Font.ITALIC, 44); - private static final Font ARIAL40I = new Font("Arial", Font.ITALIC, 40); - private static final Font ARIAL38I = new Font("Arial", Font.ITALIC, 38); - - private static final List LOCATIONS = new ArrayList<>(); - public static void main(String[] args) { - loadLocations(); - - for (Location loc : LOCATIONS) { - System.out.println(loc); - } + Location.loadLocations(); port(8080); get("/heartbeat", (req, res) -> { @@ -54,187 +29,8 @@ public class Main { post("/", (req, res) -> { res.type("image/png"); res.header("Access-Control-Allow-Origin", "*"); - System.out.println(req.body()); JsonObject data = new Gson().fromJson(req.body(), JsonObject.class); - return generate( - data.get("name").getAsString(), - data.get("title").getAsString(), - data.get("email").getAsString(), - data.get("locationId").getAsString(), - data.get("extension").getAsString(), - data.get("directNumber").getAsString(), - data.get("cellNumber").getAsString(), - data.get("size").getAsInt() - ); + return new VCard(data).toByteArray(); }); - - } - - private static byte[] generate(String name, String title, String email, String locationId, String extension, String directNumber, String cellNumber, int size) { - Location loc = getLocation(locationId); - assert loc != null; - String location = loc.name(); - String address = loc.address(); - String schoolNumber = loc.number(); - - boolean hasExtension = extension.length() > 0; - boolean hasDirectNumber = directNumber.length() > 0; - boolean hasCell = cellNumber.length() > 0; - - BufferedImage rawImage = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB); - BufferedImage background; - - try { - background = ImageIO.read(Main.class.getResource("/background.png")); - } catch (IOException e) { - e.printStackTrace(); - return null; - } - - Graphics2D g = rawImage.createGraphics(); - g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); - - g.drawImage(background, 0, 0, null); - - FontMetrics fm = g.getFontMetrics(ARIAL65); - - g.setColor(WHITE); - if (fm.stringWidth(name) <= 969){ - g.setFont(ARIAL65); - } else { - g.setFont(ARIAL55); - } - g.drawString(name, 85, 112); - - fm = g.getFontMetrics(ARIAL45I); - if (fm.stringWidth(title) <= 970) { - g.setFont(ARIAL45I); - } else { - g.setFont(ARIAL40I); - } - g.drawString(title, 89, 176); - - int doubleNumOffset = 0; - if (!hasCell) { - doubleNumOffset = 40; - } - - //TODO: Fix when 2 numbers present no mergy - int longAddrOffset = 0; - fm = g.getFontMetrics(ARIAL38I); - if (fm.stringWidth(address) > 694) { - longAddrOffset = 40; - } - - g.setFont(ARIAL45); - g.drawString(email, 62, 380 - doubleNumOffset - longAddrOffset); - - g.setColor(GREEN); - g.setFont(ARIAL44I); - g.drawString(location, 59, 447 - doubleNumOffset - longAddrOffset); - - if (fm.stringWidth(address) >= 694) { - - StringBuilder addrLineOne = new StringBuilder(); - StringBuilder addrLineTwo = new StringBuilder(); - - String[] splitAddr = address.split(","); - int i = 0; - for (int width = 0; width < 694; i++) { - int splitSize = fm.stringWidth(splitAddr[i]); - if ((width + splitSize) < 694) { - width += splitSize; - addrLineOne.append(splitAddr[i]); - addrLineOne.append(","); - } else { - addrLineOne.deleteCharAt(addrLineOne.length() - 1); - break; - } - } - - for (; i < splitAddr.length; i++) { - addrLineTwo.append(splitAddr[i]); - addrLineTwo.append(","); - } - addrLineTwo.deleteCharAt(addrLineTwo.length() - 1); - - g.setFont(ARIAL38I); - g.drawString(addrLineOne.toString().trim(), 59, 491 - doubleNumOffset - longAddrOffset); - g.drawString(addrLineTwo.toString().trim(), 59, 491 - doubleNumOffset); - } else { - g.drawString(address, 59, 491 - doubleNumOffset); - } - - String number = ""; - int numY = hasCell ? 540 : 496; - - if (hasExtension) { - number = "W: " + schoolNumber + " x" + extension; - } - if (hasDirectNumber) { - number = "W: " + directNumber; - } - - g.drawString(number, 59, numY); - - if (hasCell) { - g.drawString("C: " + cellNumber, 59, 540); - } - - g.dispose(); - - BufferedImage finalImage; - - switch (size) { - case 0 -> { - finalImage = new BufferedImage(300, 167, BufferedImage.TYPE_INT_ARGB); - g = finalImage.createGraphics(); - g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); - g.drawImage(rawImage, 0, 0, 300, 167, null); - g.dispose(); - } - case 1 -> finalImage = rawImage; - default -> finalImage = background; - } - - ByteArrayOutputStream baos; - try { - baos = new ByteArrayOutputStream(); - ImageIO.write(finalImage, "png", baos); - } catch (IOException e) { - e.printStackTrace(); - return null; - } - - return baos.toByteArray(); - } - - private static void loadLocations() { - try { - Gson gson = new Gson(); - JsonArray jsonFile = gson.fromJson(new FileReader("./locations.json"), JsonArray.class); - for (JsonElement element : jsonFile.asList()) { - LOCATIONS.add(gson.fromJson(element, Location.class)); - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - } - - private static Location getLocation(String locationId) { - for (Location loc : LOCATIONS) { - if (loc.id().equals(locationId)) { - return loc; - } - } - return null; - } -} - -record Location(String id, String name, String address, String number) { - - @Override - public String toString() { - return "{ \"id\": " + id + ", \"name\": " + name + ", \"address\": " + address + ", \"number\": " + number + " }"; } } diff --git a/src/main/java/tech/nevets/vcardgen/VCard.java b/src/main/java/tech/nevets/vcardgen/VCard.java new file mode 100644 index 0000000..9bf3185 --- /dev/null +++ b/src/main/java/tech/nevets/vcardgen/VCard.java @@ -0,0 +1,204 @@ +package tech.nevets.vcardgen; + +import com.google.gson.JsonObject; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +public class VCard { + private static final Color WHITE = new Color(255, 255, 255); + private static final Color GREEN = new Color(101, 142, 61); + + private static final Font ARIAL65 = new Font("Arial", Font.PLAIN, 65); + private static final Font ARIAL55 = new Font("Arial", Font.PLAIN, 55); + private static final Font ARIAL45 = new Font("Arial", Font.PLAIN, 45); + private static final Font ARIAL45I = new Font("Arial", Font.ITALIC, 45); + private static final Font ARIAL44I = new Font("Arial", Font.ITALIC, 44); + private static final Font ARIAL40I = new Font("Arial", Font.ITALIC, 40); + private static final Font ARIAL38I = new Font("Arial", Font.ITALIC, 38); + + private BufferedImage workingImage = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB); + + private final String[] data = new String[9]; + private final boolean[] flags = new boolean[3]; // 0 - Long Address, 1 - Has Direct Number, 2 - Has Cell Phone + private final BufferedImage background; + private final int size; + + public VCard(JsonObject json) { + this.data[0] = json.get("name").getAsString(); //name + this.data[1] = json.get("title").getAsString(); //title + this.data[2] = json.get("email").getAsString(); //email + Location location = Location.getLocation(json.get("locationId").getAsString()); + this.data[3] = location.getName(); //locationName + this.data[4] = location.getAddress(); //address + this.data[5] = location.getName(); //schoolNumber + background = location.getBackground(); + this.data[6] = json.get("extension").getAsString(); //extension + this.data[7] = json.get("directNumber").getAsString(); //directNumber + this.data[8] = json.get("cellNumber").getAsString(); //cellNumber + this.flags[1] = this.data[7].length() > 0; //hasDirectNumber + this.flags[2] = this.data[8].length() > 0; //hasCellNumber + size = json.get("size").getAsInt(); + + renderImage(); + } + + public VCard(String name, String title, String email, String locationId, String extension, String directNumber, String cellNumber, int size) { + this.data[0] = name; //name + this.data[1] = title; //title + this.data[2] = email; //email + Location location = Location.getLocation(locationId); + this.data[3] = location.getName(); //locationName + this.data[4] = location.getAddress(); //address + this.data[5] = location.getName(); //schoolNumber + background = location.getBackground(); + this.data[6] = extension; //extension + this.data[7] = directNumber; //directNumber + this.data[8] = cellNumber; //cellNumber + this.flags[1] = this.data[7].length() > 0; //hasDirectNumber + this.flags[2] = this.data[8].length() > 0; //hasCellNumber + this.size = size; + + renderImage(); + } + + private void renderImage() { + Graphics2D g = workingImage.createGraphics(); + g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + + g.drawImage(background, 0, 0, null); + + FontMetrics fm = g.getFontMetrics(ARIAL65); + + g.setColor(WHITE); + if (fm.stringWidth(data[0]) <= 969) g.setFont(ARIAL65); + else g.setFont(ARIAL55); + g.drawString(data[0], 85, 112); + + fm = g.getFontMetrics(ARIAL45I); + if (fm.stringWidth(data[1]) <= 970) g.setFont(ARIAL45I); + else g.setFont(ARIAL40I); + g.drawString(data[1], 89, 176); + + int doubleNumOffset = 0; + if (flags[2]) { + doubleNumOffset = 40; + } + + int longAddrOffset = 0; + fm = g.getFontMetrics(ARIAL38I); + if (fm.stringWidth(data[4]) > 694) longAddrOffset = 40; + + g.setFont(ARIAL45); + g.drawString(data[2], 62, 380 - doubleNumOffset - longAddrOffset); + + g.setColor(GREEN); + g.setFont(ARIAL44I); + g.drawString(data[3], 59, 447 - doubleNumOffset - longAddrOffset); + + if (fm.stringWidth(data[4]) >= 694) { + StringBuilder addrLineOne = new StringBuilder(); + StringBuilder addrLineTwo = new StringBuilder(); + + String[] splitAddr = data[4].split(","); + int i = 0; + for (int width = 0; width < 694; i++) { + int splitSize = fm.stringWidth(splitAddr[i]); + if ((width + splitSize) < 694) { + width += splitSize; + addrLineOne.append(splitAddr[i]); + addrLineOne.append(","); + } else { + addrLineOne.deleteCharAt(addrLineOne.length() - 1); + break; + } + } + + for (; i < splitAddr.length; i++) { + addrLineTwo.append(splitAddr[i]); + addrLineTwo.append(","); + } + addrLineTwo.deleteCharAt(addrLineTwo.length() - 1); + + g.setFont(ARIAL38I); + g.drawString(addrLineOne.toString().trim(), 59, 491 - doubleNumOffset - longAddrOffset); + g.drawString(addrLineTwo.toString().trim(), 59, 491 - doubleNumOffset); + } else { + g.drawString(data[4], 59, 491 - doubleNumOffset); + } + + String number; + int numY = flags[2] ? 496 : 540; + + if (!flags[1]) number = "W: " + data[5] + " x" + data[6]; + else number = "W: " + data[7]; + + g.drawString(number, 59, numY); + + if (flags[2]) g.drawString("C: " + data[8], 59, 540); + + g.dispose(); + } + + public void resizeImage() { + resizeImage(this.size); + } + + public void resizeImage(int size) { + BufferedImage resizedImage; + switch (size) { + case 0 -> resizedImage = resizeImage(300, 167, false); + case 1 -> resizedImage = workingImage; + default -> resizedImage = background; + } + workingImage = resizedImage; + } + + public BufferedImage resizeImage(int width, int height, boolean antiAlias) { + BufferedImage resizedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + Graphics2D g = resizedImage.createGraphics(); + g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); + if (antiAlias) g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.drawImage(workingImage, 0, 0, width, height, null); + g.dispose(); + return resizedImage; + } + + public byte[] toByteArray() { + ByteArrayOutputStream baos; + try { + baos = new ByteArrayOutputStream(); + ImageIO.write(workingImage, "png", baos); + } catch (IOException e) { + e.printStackTrace(); + return new byte[0]; + } + + return baos.toByteArray(); + } + + private boolean[] bitFlags(int bits) { + boolean[] flags = new boolean[bits]; + for (int i = 0; i < flags.length; i++) { + flags[i] = ((bits) & (1 << ((flags.length - i) - 1))) != 0; + } + return flags; + } + + private int bitFlagsFromFlags(boolean[] flags) { + StringBuilder sb = new StringBuilder(); + for (boolean b : flags) { + sb.append(b ? "1" : "0"); + } + return Integer.parseInt(sb.toString()); + } + + private static boolean fitsDimensions(String text, Font font, int maxLength) { + Canvas c = new Canvas(); + FontMetrics fm = c.getFontMetrics(font); + return fm.stringWidth(text) < maxLength; + } +} diff --git a/src/main/resources/background.png b/src/main/resources/backgrounds/caiu.png similarity index 100% rename from src/main/resources/background.png rename to src/main/resources/backgrounds/caiu.png diff --git a/src/main/resources/backgrounds/default.png b/src/main/resources/backgrounds/default.png new file mode 100644 index 0000000000000000000000000000000000000000..5356b6e548def3845ddead0aab387fd3d64fc026 GIT binary patch literal 2605984 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