Remove edit, cleanup, rename
This commit is contained in:
parent
4005e3d702
commit
3b2305949c
8
.idea/.gitignore
vendored
8
.idea/.gitignore
vendored
@ -1,8 +0,0 @@
|
|||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
# Editor-based HTTP Client requests
|
|
||||||
/httpRequests/
|
|
||||||
# Datasource local storage ignored files
|
|
||||||
/dataSources/
|
|
||||||
/dataSources.local.xml
|
|
@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="RemoteRepositoriesConfiguration">
|
|
||||||
<remote-repository>
|
|
||||||
<option name="id" value="central" />
|
|
||||||
<option name="name" value="Maven Central repository" />
|
|
||||||
<option name="url" value="https://repo1.maven.org/maven2" />
|
|
||||||
</remote-repository>
|
|
||||||
<remote-repository>
|
|
||||||
<option name="id" value="jboss.community" />
|
|
||||||
<option name="name" value="JBoss Community repository" />
|
|
||||||
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
|
||||||
</remote-repository>
|
|
||||||
<remote-repository>
|
|
||||||
<option name="id" value="MavenRepo" />
|
|
||||||
<option name="name" value="MavenRepo" />
|
|
||||||
<option name="url" value="https://repo.maven.apache.org/maven2/" />
|
|
||||||
</remote-repository>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
@ -4,7 +4,5 @@
|
|||||||
<component name="FrameworkDetectionExcludesConfiguration">
|
<component name="FrameworkDetectionExcludesConfiguration">
|
||||||
<file type="web" url="file://$PROJECT_DIR$" />
|
<file type="web" url="file://$PROJECT_DIR$" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_18" default="true" project-jdk-name="temurin-18" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_18" project-jdk-name="temurin-18" project-jdk-type="JavaSDK" />
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
|
||||||
</component>
|
|
||||||
</project>
|
</project>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="VcsDirectoryMappings">
|
<component name="VcsDirectoryMappings">
|
||||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
<mapping directory="" vcs="Git" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
@ -1,3 +1,3 @@
|
|||||||
# VCardGenerator
|
# Signature Card Generator
|
||||||
|
|
||||||
Worky thingy
|
Worky thingy
|
@ -3,8 +3,8 @@ plugins {
|
|||||||
id 'com.github.johnrengelman.shadow' version '5.2.0'
|
id 'com.github.johnrengelman.shadow' version '5.2.0'
|
||||||
}
|
}
|
||||||
|
|
||||||
group 'tech.nevets.vcardgen'
|
group 'tech.nevets'
|
||||||
version '1.1'
|
version '2.0.0'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
@ -20,7 +20,7 @@ dependencies {
|
|||||||
jar {
|
jar {
|
||||||
manifest {
|
manifest {
|
||||||
attributes(
|
attributes(
|
||||||
'Main-Class': 'tech.nevets.vcardgen.Main'
|
'Main-Class': 'tech.nevets.signaturecardgen.Main'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,2 +1,2 @@
|
|||||||
rootProject.name = 'VCardGenerator'
|
rootProject.name = 'SignatureCardGenerator'
|
||||||
|
|
||||||
|
@ -1,18 +1,13 @@
|
|||||||
package tech.nevets.vcardgen;
|
package tech.nevets.signaturecardgen;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
import javax.imageio.*;
|
import javax.imageio.*;
|
||||||
import javax.imageio.metadata.IIOMetadata;
|
|
||||||
import javax.imageio.metadata.IIOMetadataNode;
|
|
||||||
import javax.imageio.stream.ImageOutputStream;
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
//TODO Clear layer when new data is written...
|
|
||||||
public class Card {
|
public class Card {
|
||||||
public static final Map<String, Card> CARD_SESSIONS = new HashMap<>();
|
public static final Map<String, Card> CARD_SESSIONS = new HashMap<>();
|
||||||
|
|
||||||
@ -30,18 +25,17 @@ public class Card {
|
|||||||
private static final Font ARIAL38I = new Font("Arial", Font.ITALIC, 38);
|
private static final Font ARIAL38I = new Font("Arial", Font.ITALIC, 38);
|
||||||
|
|
||||||
// ---------------- LAYERS ---------------- //
|
// ---------------- LAYERS ---------------- //
|
||||||
private BufferedImage background;
|
private final BufferedImage background;
|
||||||
private BufferedImage nameLayer = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
private final BufferedImage nameLayer = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
||||||
private BufferedImage titleLayer = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
private final BufferedImage titleLayer = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
||||||
private BufferedImage emailLayer = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
private final BufferedImage emailLayer = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
||||||
private BufferedImage locationLayer = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
private final BufferedImage locationLayer = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
||||||
private BufferedImage phoneNumbersLayer = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
private final BufferedImage phoneNumbersLayer = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
||||||
|
|
||||||
// ---------------- Working Images ---------------- //
|
// ---------------- Working Images ---------------- //
|
||||||
private Graphics2D graphics;
|
private Graphics2D graphics;
|
||||||
private BufferedImage rawImage = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
private final BufferedImage rawImage = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
||||||
private BufferedImage workingImage = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
private BufferedImage workingImage = new BufferedImage(1080, 602, BufferedImage.TYPE_INT_ARGB);
|
||||||
private IIOImage finalImage;
|
|
||||||
|
|
||||||
// ---------------- DATA ---------------- //
|
// ---------------- DATA ---------------- //
|
||||||
public final String id;
|
public final String id;
|
||||||
@ -53,14 +47,13 @@ public class Card {
|
|||||||
private String directNumber;
|
private String directNumber;
|
||||||
private String cellNumber;
|
private String cellNumber;
|
||||||
private int size;
|
private int size;
|
||||||
private boolean hasLongAddress;
|
|
||||||
private boolean hasDirectNumber;
|
private boolean hasDirectNumber;
|
||||||
private boolean hasCellNumber;
|
private boolean hasCellNumber;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs an empty card.<br>
|
* Constructs an empty card.<br>
|
||||||
* Calls:<br>{@link tech.nevets.vcardgen.Card#Card(String, String, String, String, String, String, String, int)} with empty strings and full size image
|
* Calls:<br>{@link tech.nevets.signaturecardgen.Card#Card(String, String, String, String, String, String, String, int)} with empty strings and full size image
|
||||||
*/
|
*/
|
||||||
public Card() {
|
public Card() {
|
||||||
this("", "", "", "", "", "", "", 1);
|
this("", "", "", "", "", "", "", 1);
|
||||||
@ -68,19 +61,19 @@ public class Card {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor that fills out entire Card details.<br>
|
* Constructor that fills out entire Card details.<br>
|
||||||
* Calls:<br>{@link tech.nevets.vcardgen.Card#Card(String, String, String, String, String, String, String, int)}
|
* Calls:<br>{@link tech.nevets.signaturecardgen.Card#Card(String, String, String, String, String, String, String, int)}
|
||||||
* @param json Json object from frontend
|
* @param json Json object from frontend
|
||||||
*/
|
*/
|
||||||
public Card(JsonObject json) {
|
public Card(JsonObject json) {
|
||||||
this(
|
this(
|
||||||
json.get("name").getAsString(), //name
|
json.get("name").getAsString(),
|
||||||
json.get("title").getAsString(), //title
|
json.get("title").getAsString(),
|
||||||
json.get("email").getAsString(), //email
|
json.get("email").getAsString(),
|
||||||
json.get("locationId").getAsString(), //locationId
|
json.get("locationId").getAsString(),
|
||||||
json.get("extension").getAsString(), //extension
|
json.get("extension").getAsString(),
|
||||||
json.get("directNumber").getAsString(), //directNumber
|
json.get("directNumber").getAsString(),
|
||||||
json.get("cellNumber").getAsString(), //cellNumber
|
json.get("cellNumber").getAsString(),
|
||||||
json.get("size").getAsInt() //size
|
json.get("size").getAsInt()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,8 +83,8 @@ public class Card {
|
|||||||
* @param title User's Title
|
* @param title User's Title
|
||||||
* @param email User's Email
|
* @param email User's Email
|
||||||
* @param locationId User's Location ID
|
* @param locationId User's Location ID
|
||||||
* @param extension User's Extension (can be empty <b>if</b> {@link tech.nevets.vcardgen.Card#directNumber} is populated)
|
* @param extension User's Extension (can be empty <b>if</b> {@link tech.nevets.signaturecardgen.Card#directNumber} is populated)
|
||||||
* @param directNumber User's Direct Number (can be empty <b>if</b> {@link tech.nevets.vcardgen.Card#extension} is populated)
|
* @param directNumber User's Direct Number (can be empty <b>if</b> {@link tech.nevets.signaturecardgen.Card#extension} is populated)
|
||||||
* @param cellNumber User's Cell Phone Number (can be empty)
|
* @param cellNumber User's Cell Phone Number (can be empty)
|
||||||
* @param size Size to set the Card to (0 for Outlook 2016 size, 1 for full size)
|
* @param size Size to set the Card to (0 for Outlook 2016 size, 1 for full size)
|
||||||
*/
|
*/
|
||||||
@ -144,21 +137,31 @@ public class Card {
|
|||||||
hasCellNumber = cellNumber.length() > 0;
|
hasCellNumber = cellNumber.length() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setSize(int size) {
|
||||||
|
this.size = size;
|
||||||
|
}
|
||||||
|
|
||||||
public BufferedImage getBackground() {
|
public BufferedImage getBackground() {
|
||||||
return background;
|
return background;
|
||||||
}
|
}
|
||||||
|
|
||||||
private BufferedImage renderLayer(BufferedImage layer, String content, Color textColor, Font font, int x, int y) {
|
private void clearLayer(BufferedImage layer) {
|
||||||
|
Graphics2D g = layer.createGraphics();
|
||||||
|
g.setComposite(AlphaComposite.Clear);
|
||||||
|
g.fillRect(0, 0, 1080, 602);
|
||||||
|
g.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void renderLayer(BufferedImage layer, String content, Color textColor, Font font, int x, int y) {
|
||||||
graphics = layer.createGraphics();
|
graphics = layer.createGraphics();
|
||||||
setAntiAlias(graphics);
|
setAntiAlias(graphics);
|
||||||
graphics.setColor(textColor);
|
graphics.setColor(textColor);
|
||||||
graphics.setFont(font);
|
graphics.setFont(font);
|
||||||
graphics.drawString(content, x, y);
|
graphics.drawString(content, x, y);
|
||||||
graphics.dispose();
|
graphics.dispose();
|
||||||
return layer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private BufferedImage renderResizableLayer(BufferedImage layer, String content, Color textColor, int maxLength, Font defaultFont, Font smallFont, int x, int y) {
|
private void renderResizableLayer(BufferedImage layer, String content, Color textColor, int maxLength, Font defaultFont, Font smallFont, int x, int y) {
|
||||||
graphics = layer.createGraphics();
|
graphics = layer.createGraphics();
|
||||||
setAntiAlias(graphics);
|
setAntiAlias(graphics);
|
||||||
graphics.setColor(textColor);
|
graphics.setColor(textColor);
|
||||||
@ -166,19 +169,24 @@ public class Card {
|
|||||||
else graphics.setFont(smallFont);
|
else graphics.setFont(smallFont);
|
||||||
graphics.drawString(content, x, y);
|
graphics.drawString(content, x, y);
|
||||||
graphics.dispose();
|
graphics.dispose();
|
||||||
return layer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BufferedImage renderNameLayer() {
|
public BufferedImage renderNameLayer() {
|
||||||
return renderResizableLayer(nameLayer, name, WHITE, 970, ARIAL65, ARIAL55, 85, 112);
|
clearLayer(nameLayer);
|
||||||
|
renderResizableLayer(nameLayer, name, WHITE, 970, ARIAL65, ARIAL55, 85, 112);
|
||||||
|
return nameLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BufferedImage renderTitleLayer() {
|
public BufferedImage renderTitleLayer() {
|
||||||
return renderResizableLayer(titleLayer, title, WHITE, 970, ARIAL45I, ARIAL40I, 89, 176);
|
clearLayer(titleLayer);
|
||||||
|
renderResizableLayer(titleLayer, title, WHITE, 970, ARIAL45I, ARIAL40I, 89, 176);
|
||||||
|
return titleLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BufferedImage renderEmailLayer() {
|
public BufferedImage renderEmailLayer() {
|
||||||
return renderLayer(emailLayer, email, WHITE, ARIAL45, 62, (380 - getOffsets(0)));
|
clearLayer(emailLayer);
|
||||||
|
renderLayer(emailLayer, email, WHITE, ARIAL45, 62, (380 + getOffsets(0)));
|
||||||
|
return emailLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BufferedImage renderLocationLayer() {
|
public BufferedImage renderLocationLayer() {
|
||||||
@ -203,15 +211,18 @@ public class Card {
|
|||||||
sb.insert(newLineIndex - 2, "\n");
|
sb.insert(newLineIndex - 2, "\n");
|
||||||
sb.deleteCharAt(sb.length() - 1);
|
sb.deleteCharAt(sb.length() - 1);
|
||||||
}
|
}
|
||||||
renderLayer(locationLayer, location.getName(), GREEN, ARIAL44I, 59, (447 - getOffsets(0)));
|
clearLayer(locationLayer);
|
||||||
return renderLayer(locationLayer, sb.toString(), GREEN, ARIAL38I, 59, (491 - getOffsets(0)));
|
renderLayer(locationLayer, location.getName(), GREEN, ARIAL44I, 59, (447 + getOffsets(0)));
|
||||||
|
renderLayer(locationLayer, sb.toString(), GREEN, ARIAL38I, 59, (491 + getOffsets(0)));
|
||||||
|
return locationLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BufferedImage renderPhoneNumbersLayer() {
|
public BufferedImage renderPhoneNumbersLayer() {
|
||||||
|
clearLayer(phoneNumbersLayer);
|
||||||
if (hasDirectNumber) {
|
if (hasDirectNumber) {
|
||||||
renderLayer(phoneNumbersLayer, ("W: " + directNumber), GREEN, ARIAL38I, 59, (540 - getOffsets(1)));
|
renderLayer(phoneNumbersLayer, ("W: " + directNumber), GREEN, ARIAL38I, 59, (540 + getOffsets(1)));
|
||||||
} else {
|
} else {
|
||||||
renderLayer(phoneNumbersLayer, ("W: " + location.getNumber() + " x" + extension), GREEN, ARIAL38I, 59, (540 - getOffsets(1)));
|
renderLayer(phoneNumbersLayer, ("W: " + location.getNumber() + " x" + extension), GREEN, ARIAL38I, 59, (540 + getOffsets(1)));
|
||||||
}
|
}
|
||||||
if (hasCellNumber) {
|
if (hasCellNumber) {
|
||||||
renderLayer(phoneNumbersLayer, ("C: " + cellNumber), GREEN, ARIAL38I, 59, 540);
|
renderLayer(phoneNumbersLayer, ("C: " + cellNumber), GREEN, ARIAL38I, 59, 540);
|
||||||
@ -220,15 +231,15 @@ public class Card {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void renderImage() {
|
public void renderImage() {
|
||||||
|
clearLayer(rawImage);
|
||||||
graphics = rawImage.createGraphics();
|
graphics = rawImage.createGraphics();
|
||||||
setAntiAlias(graphics);
|
|
||||||
|
|
||||||
graphics.drawImage(background, 0, 0, null);
|
graphics.drawImage(background, 0, 0, null);
|
||||||
graphics.drawImage(renderNameLayer(), 0, 0, null);
|
graphics.drawImage(nameLayer, 0, 0, null);
|
||||||
graphics.drawImage(renderTitleLayer(), 0, 0, null);
|
graphics.drawImage(titleLayer, 0, 0, null);
|
||||||
graphics.drawImage(renderEmailLayer(), 0, 0, null);
|
graphics.drawImage(emailLayer, 0, 0, null);
|
||||||
graphics.drawImage(renderLocationLayer(), 0, 0, null);
|
graphics.drawImage(locationLayer, 0, 0, null);
|
||||||
graphics.drawImage(renderPhoneNumbersLayer(), 0, 0, null);
|
graphics.drawImage(phoneNumbersLayer, 0, 0, null);
|
||||||
|
|
||||||
graphics.dispose();
|
graphics.dispose();
|
||||||
resizeImage();
|
resizeImage();
|
||||||
@ -241,7 +252,7 @@ public class Card {
|
|||||||
*/
|
*/
|
||||||
private int getOffsets(int type) {
|
private int getOffsets(int type) {
|
||||||
int totalOffset = 0;
|
int totalOffset = 0;
|
||||||
int doubleNumberOffset = hasDirectNumber ? 40 : 0;
|
int doubleNumberOffset = hasCellNumber ? 40 : 0;
|
||||||
int longAddrOffset = fitsDimensions(location.getAddress(), ARIAL38I, 700) ? 0 : 40;
|
int longAddrOffset = fitsDimensions(location.getAddress(), ARIAL38I, 700) ? 0 : 40;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 0 -> {
|
case 0 -> {
|
||||||
@ -277,31 +288,9 @@ public class Card {
|
|||||||
return resizedImage;
|
return resizedImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addMetadata() throws IOException {
|
public byte[] toByteArray() throws IOException {
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
ImageIO.write(workingImage, "png", baos);
|
ImageIO.write(workingImage, "png", baos);
|
||||||
|
|
||||||
ImageReader reader = ImageIO.getImageReadersByMIMEType("image/png").next();
|
|
||||||
reader.setInput(ImageIO.createImageInputStream(new ByteArrayInputStream(baos.toByteArray())));
|
|
||||||
finalImage = reader.readAll(0, null);
|
|
||||||
|
|
||||||
IIOMetadataNode text = new IIOMetadataNode("tEXt");
|
|
||||||
IIOMetadataNode textEntry = new IIOMetadataNode("tEXtEntry");
|
|
||||||
textEntry.setAttribute("contents", toMetaString(this));
|
|
||||||
text.appendChild(textEntry);
|
|
||||||
IIOMetadataNode root = new IIOMetadataNode("javax_imageio_png_1.0");
|
|
||||||
root.appendChild(text);
|
|
||||||
|
|
||||||
finalImage.getMetadata().mergeTree("javax_imageio_png_1.0", root);
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] toByteArray() throws IOException {
|
|
||||||
addMetadata();
|
|
||||||
ImageWriter writer = ImageIO.getImageWritersByMIMEType("image/png").next();
|
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
||||||
ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
|
|
||||||
writer.setOutput(ios);
|
|
||||||
writer.write(finalImage);
|
|
||||||
return baos.toByteArray();
|
return baos.toByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,38 +306,6 @@ public class Card {
|
|||||||
return C.getFontMetrics(font).stringWidth(text);
|
return C.getFontMetrics(font).stringWidth(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String toMetaString(Card card) {
|
|
||||||
return "name=" + card.name + ";" +
|
|
||||||
"title=" + card.title + ";" +
|
|
||||||
"email=" + card.email + ";" +
|
|
||||||
"locationId=" + card.location.getId() + ";" +
|
|
||||||
"extension=" + card.extension + ";" +
|
|
||||||
"directNumber=" + card.directNumber + ";" +
|
|
||||||
"cellNumber=" + card.cellNumber + ";";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getDataFromVCard(InputStream rawImage) throws IOException {
|
|
||||||
ImageReader reader = ImageIO.getImageReadersByMIMEType("image/png").next();
|
|
||||||
reader.setInput(ImageIO.createImageInputStream(rawImage));
|
|
||||||
|
|
||||||
IIOMetadata metadata = reader.getImageMetadata(0);
|
|
||||||
IIOMetadataNode root = (IIOMetadataNode) metadata.getAsTree("javax_imageio_png_1.0");
|
|
||||||
IIOMetadataNode text = (IIOMetadataNode) root.getElementsByTagName("tEXt").item(0);
|
|
||||||
if (text == null) {
|
|
||||||
return "$null";
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, String> keyValueMap = new HashMap<>();
|
|
||||||
String contents = ((IIOMetadataNode) text.item(0)).getAttribute("contents");
|
|
||||||
String[] contentSplit = contents.split(";");
|
|
||||||
for (String entry : contentSplit) {
|
|
||||||
String[] kvPair = entry.split("=");
|
|
||||||
keyValueMap.put(kvPair[0], kvPair[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Gson().toJson(keyValueMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String getUniqueId() {
|
private static String getUniqueId() {
|
||||||
String uuid = UUID.randomUUID().toString().split("-")[4];
|
String uuid = UUID.randomUUID().toString().split("-")[4];
|
||||||
while (true) {
|
while (true) {
|
@ -0,0 +1,46 @@
|
|||||||
|
package tech.nevets.signaturecardgen;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonSyntaxException;
|
||||||
|
import spark.Request;
|
||||||
|
import spark.Response;
|
||||||
|
import spark.Route;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class GenerateRoute implements Route {
|
||||||
|
@Override
|
||||||
|
public Object handle(Request req, Response res) {
|
||||||
|
Card card;
|
||||||
|
String id = req.queryParams("id");
|
||||||
|
if (!id.isEmpty()) {
|
||||||
|
card = Card.CARD_SESSIONS.get(id);
|
||||||
|
if (card == null) {
|
||||||
|
res.type("text/plain");
|
||||||
|
res.status(404);
|
||||||
|
return "Card with that id not found.";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
JsonObject data;
|
||||||
|
try {
|
||||||
|
data = new Gson().fromJson(req.body(), JsonObject.class);
|
||||||
|
} catch (JsonSyntaxException e) {
|
||||||
|
res.status(422);
|
||||||
|
return "Not valid json: " + e.getMessage();
|
||||||
|
}
|
||||||
|
System.out.println("JSON Data: " + data.toString());
|
||||||
|
card = new Card(data);
|
||||||
|
}
|
||||||
|
card.renderImage();
|
||||||
|
|
||||||
|
res.type("image/png");
|
||||||
|
try {
|
||||||
|
res.status(200);
|
||||||
|
return card.toByteArray();
|
||||||
|
} catch (IOException e) {
|
||||||
|
res.status(500);
|
||||||
|
return "Error getting image stream: " + e.getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package tech.nevets.vcardgen;
|
package tech.nevets.signaturecardgen;
|
||||||
|
|
||||||
import org.eclipse.jetty.websocket.api.*;
|
import org.eclipse.jetty.websocket.api.*;
|
||||||
import org.eclipse.jetty.websocket.api.annotations.*;
|
import org.eclipse.jetty.websocket.api.annotations.*;
|
||||||
@ -25,21 +25,25 @@ public class LiveGenWebSocket {
|
|||||||
|
|
||||||
@OnWebSocketError
|
@OnWebSocketError
|
||||||
public void error(Session session, Throwable throwable) {
|
public void error(Session session, Throwable throwable) {
|
||||||
|
if (throwable instanceof CloseException) {
|
||||||
|
System.out.println("Connection with session address " + session.getRemoteAddress() + " closed");
|
||||||
|
} else {
|
||||||
throwable.printStackTrace();
|
throwable.printStackTrace();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@OnWebSocketMessage
|
@OnWebSocketMessage
|
||||||
public void message(Session session, String message) throws IOException {
|
public void message(Session session, String message) throws IOException {
|
||||||
RemoteEndpoint client = session.getRemote();
|
RemoteEndpoint client = session.getRemote();
|
||||||
|
|
||||||
System.out.println(message);
|
System.out.println("WS Msg: " + message);
|
||||||
String[] splitMsg = message.split(";");
|
String[] splitMsg = message.split(";");
|
||||||
String messageType = splitMsg[0];
|
String messageType = splitMsg[0];
|
||||||
|
|
||||||
if (splitMsg.length == 1) {
|
if (splitMsg.length == 1) {
|
||||||
if (messageType.equals("start")) {
|
if (messageType.equals("start")) {
|
||||||
card = new Card();
|
card = new Card();
|
||||||
client.sendString("success;Card successfully created.");
|
client.sendString("success;" + card.id);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package tech.nevets.vcardgen;
|
package tech.nevets.signaturecardgen;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
@ -53,6 +53,7 @@ public class Location {
|
|||||||
URL backgroundURL = this.getClass().getResource("/backgrounds/" + id + ".png");
|
URL backgroundURL = this.getClass().getResource("/backgrounds/" + id + ".png");
|
||||||
if (backgroundURL == null) backgroundURL = this.getClass().getResource("/backgrounds/default.png");
|
if (backgroundURL == null) backgroundURL = this.getClass().getResource("/backgrounds/default.png");
|
||||||
try {
|
try {
|
||||||
|
assert backgroundURL != null;
|
||||||
background = ImageIO.read(backgroundURL);
|
background = ImageIO.read(backgroundURL);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -86,13 +87,4 @@ public class Location {
|
|||||||
}
|
}
|
||||||
return new Location("", "", "", "");
|
return new Location("", "", "", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getLocationId(String name) {
|
|
||||||
for (Location loc : LOCATIONS) {
|
|
||||||
if (loc.getName().equals(name)) {
|
|
||||||
return loc.getId();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package tech.nevets.vcardgen;
|
package tech.nevets.signaturecardgen;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
||||||
@ -39,8 +39,6 @@ public class Main {
|
|||||||
|
|
||||||
|
|
||||||
post("/generate", new GenerateRoute());
|
post("/generate", new GenerateRoute());
|
||||||
|
|
||||||
post("/edit", new EditRoute());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,45 +0,0 @@
|
|||||||
package tech.nevets.vcardgen;
|
|
||||||
|
|
||||||
import spark.Request;
|
|
||||||
import spark.Response;
|
|
||||||
import spark.Route;
|
|
||||||
|
|
||||||
import javax.servlet.MultipartConfigElement;
|
|
||||||
import javax.servlet.http.Part;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class EditRoute implements Route {
|
|
||||||
@Override
|
|
||||||
public Object handle(Request req, Response res) {
|
|
||||||
req.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement("/temp"));
|
|
||||||
Part cardFile;
|
|
||||||
try {
|
|
||||||
cardFile = req.raw().getPart("card");
|
|
||||||
} catch (Exception e) {
|
|
||||||
res.status(500);
|
|
||||||
return "Error processing file: " + e.getMessage();
|
|
||||||
}
|
|
||||||
if (cardFile.getSize() > 1000000) {
|
|
||||||
res.status(413);
|
|
||||||
return "File too large";
|
|
||||||
}
|
|
||||||
if (!cardFile.getContentType().equalsIgnoreCase("image/png")) {
|
|
||||||
res.status(415);
|
|
||||||
return "Content is not of type image/png";
|
|
||||||
}
|
|
||||||
String cardData;
|
|
||||||
try {
|
|
||||||
cardData = Card.getDataFromVCard(cardFile.getInputStream());
|
|
||||||
} catch (IOException e) {
|
|
||||||
res.status(500);
|
|
||||||
return "Error retrieving data from card" + e.getMessage();
|
|
||||||
}
|
|
||||||
if (cardData.equals("$null")) {
|
|
||||||
res.status(422);
|
|
||||||
return "Card does not contain required metadata";
|
|
||||||
}
|
|
||||||
res.type("application/json");
|
|
||||||
res.status(200);
|
|
||||||
return cardData;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
package tech.nevets.vcardgen;
|
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import com.google.gson.JsonSyntaxException;
|
|
||||||
import spark.Request;
|
|
||||||
import spark.Response;
|
|
||||||
import spark.Route;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class GenerateRoute implements Route {
|
|
||||||
private Card card;
|
|
||||||
@Override
|
|
||||||
public Object handle(Request req, Response res) {
|
|
||||||
JsonObject data;
|
|
||||||
try {
|
|
||||||
data = new Gson().fromJson(req.body(), JsonObject.class);
|
|
||||||
} catch (JsonSyntaxException e) {
|
|
||||||
res.status(422);
|
|
||||||
return "Not valid json: " + e.getMessage();
|
|
||||||
}
|
|
||||||
card = new Card(data);
|
|
||||||
card.renderImage();
|
|
||||||
|
|
||||||
res.type("image/png");
|
|
||||||
res.header("Access-Control-Expose-Headers", "Id");
|
|
||||||
res.header("Id", card.id);
|
|
||||||
try {
|
|
||||||
res.status(200);
|
|
||||||
return card.toByteArray();
|
|
||||||
} catch (IOException e) {
|
|
||||||
res.status(500);
|
|
||||||
return "Error getting image stream: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
package tech.nevets.vcardgen;
|
|
||||||
|
|
||||||
public class TestMain {
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user