Skip to content

Commit

Permalink
add Converts
Browse files Browse the repository at this point in the history
  • Loading branch information
cofcool committed Jan 12, 2023
1 parent 1b67da0 commit a9d3e04
Show file tree
Hide file tree
Showing 7 changed files with 154 additions and 11 deletions.
14 changes: 10 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,18 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.7</version>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.0</version>
<scope>test</scope>
</dependency>
</dependencies>
Expand Down
8 changes: 2 additions & 6 deletions src/main/java/net/cofcool/toolbox/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,8 @@ private static void cacheClass(String name) {
}

public static void main(String[] args) {
System.out.println("Example: name=demo path=tmp");
var pArgs = new Tool.Args(args.length);
for (String arg : args) {
String[] split = arg.split("=");
pArgs.arg(split[0], split[1]);
}
System.out.println("Example: --name=demo --path=tmp");
var pArgs = new Tool.Args(args);
System.out.println("Tools: " + ALL_TOOLS.stream().map(Tool::name).toList());
System.out.println("Args: ");
System.out.println(pArgs);
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/net/cofcool/toolbox/Tool.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,21 @@ public Args(int initialCapacity) {
super(initialCapacity);
}

public Args() {
super(4);
}

public Args(String[] args) {
this();
for (String s : String.join(" ", args).split("--")) {
if (s.isEmpty()) {
continue;
}
String[] strings = s.split("=");
arg(strings[0], strings[1].trim());
}
}

public Args arg(String key, String val) {
add(new Arg(key, val));
return this;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/net/cofcool/toolbox/ToolName.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package net.cofcool.toolbox;

public enum ToolName {
trelloLogseqImporter, shell, link2Tool
trelloLogseqImporter, shell, link2Tool, converts
}
94 changes: 94 additions & 0 deletions src/main/java/net/cofcool/toolbox/internal/Converts.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package net.cofcool.toolbox.internal;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.TimeZone;
import java.util.stream.Collectors;
import net.cofcool.toolbox.Tool;
import net.cofcool.toolbox.ToolName;

public class Converts implements Tool {

@Override
public ToolName name() {
return ToolName.converts;
}

@Override
public void run(Args args) throws Exception {
Arg arg = args.readArg("cmd").get();
String[] split = arg.val().split(" ");
String cmd = split[0];
String val = split[1];
if (split.length > 2) {
val = String.join(" ", Arrays.copyOfRange(split, 1, split.length));
}
var ret = switch (cmd) {
case "md5" -> md5(val);
case "kindle" -> splitKindleClippings(val);
case "upper" -> val.toUpperCase();
case "lower" -> val.toLowerCase();
case "hdate" -> hdate(val);
case "timesp" -> timesp(val);
default -> throw new IllegalArgumentException("do not support " + val);
};
System.out.println(ret);
}

private String timesp(String val) {
return DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS").parse(val, LocalDateTime::from).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() + "";
}

private String hdate(String val) {
return DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS").format(LocalDateTime.ofInstant(Instant.ofEpochMilli(Long.parseLong(val)), TimeZone.getDefault().toZoneId()));
}

private String md5(String val) throws Exception {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(val.getBytes(StandardCharsets.UTF_8));

byte[] byteArray = messageDigest.digest();

StringBuilder md5StrBuff = new StringBuilder();

for (byte b : byteArray) {
if (Integer.toHexString(0xFF & b).length() == 1) {
md5StrBuff.append("0").append(Integer.toHexString(0xFF & b));
} else {
md5StrBuff.append(Integer.toHexString(0xFF & b));
}
}

return md5StrBuff.toString();
}

private String splitKindleClippings(String path) {
return Arrays
.stream(path.split("=========="))
.map(s -> {
String[] split = s.split("\n");
var bookName = "";
var content = "";
if (split.length == 5) {
bookName = split[0];
content = split[3];
} else {
bookName = split[1];
content = split[4];
}
return String.format("### %s\n\n%s\n\n", bookName, content);
})
.collect(Collectors.joining());
}

@Override
public String help() {
return "md5 xxx;kindle xxxx.txt;upper/lower xxx;hdate 1231312321;timesp 2011-11-11 11:11:11.123";
}
}
13 changes: 13 additions & 0 deletions src/test/java/net/cofcool/toolbox/ToolTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package net.cofcool.toolbox;

import net.cofcool.toolbox.Tool.Args;
import org.junit.jupiter.api.Test;

class ToolTest {

@Test
void args() {
System.out.println(new Args(new String[]{"--name=test", "--cmd=md5", "sas"}));
}

}
19 changes: 19 additions & 0 deletions src/test/java/net/cofcool/toolbox/internal/ConvertsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package net.cofcool.toolbox.internal;

import net.cofcool.toolbox.Tool.Args;
import org.junit.jupiter.api.Test;

class ConvertsTest {

final Converts converts = new Converts();

@Test
void run() throws Exception {
System.out.println(converts.help());
converts.run(new Args(4).arg("cmd", "md5 xxxxx"));
converts.run(new Args(4).arg("cmd", "hdate " + System.currentTimeMillis()));
converts.run(new Args(4).arg("cmd", "timesp 2023-01-12 11:54:45.256"));
converts.run(new Args(4).arg("cmd", "upper asdasd"));
converts.run(new Args(4).arg("cmd", "lower ASSS"));
}
}

0 comments on commit a9d3e04

Please sign in to comment.