diff --git a/.gitignore b/.gitignore index f35a1af429..84ba101d16 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +<<<<<<< HEAD ### Gradle ### .gradle build/ @@ -233,3 +234,93 @@ fabric.properties # Sonarlint plugin .idea/sonarlint +======= +# Binaries +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip +*.war +*.ear +*.sar +*.class + +# Maven +target/ + +# eclipse project file +.settings/ +.classpath +.project + + +# IntelliJ project files +*.iml +*.iws +*.ipr +.idea/ + + + +# NetBeans specific +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +nbactions.xml +nb-configuration.xml + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# ========================= +# Operating System Files +# ========================= + +# OSX +# ========================= + +.DS_Store +.AppleDouble +.LSOverride + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +>>>>>>> 361e407d91e00158295aadeaca0a91d84a534820 diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index c847011b3a..0000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Datasource local storage ignored files -/../../../../../../:\WorkDir\GitHub\cwiki-us-demo\java-tutorials\.idea/dataSources/ -/dataSources.local.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index 872918e6ae..0000000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -parent-modules \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index 919ce1f1f7..0000000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index a55e7a179b..0000000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index d0319230e1..0000000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 89fa6713f9..0000000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index 712ab9d985..0000000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddfbb..0000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index 92ee8234d9..c2d39d08e8 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,12 @@ -**UPDATE**: The price of "Learn Spring Security OAuth" will permanently change on the 11th of December, along with the upcoming OAuth2 material: http://bit.ly/github-lss - -CWIKI.US -============================== -我们专注于开源信息的分享和文档的更新,并根据需求提供定制和软件开发咨询服务。
-**[>> 访问 CWIKI.US](https://www.cwiki.us/)** - - -The Courses -============================== - - -Here's the new "Learn Spring" course:
-**[>> LEARN SPRING - THE MASTER CLASS](https://www.baeldung.com/learn-spring-course?utm_source=github&utm_medium=social&utm_content=tutorials&utm_campaign=ls#master-class)** - -Here's the Master Class of "REST With Spring" (along with the new announced Boot 2 material):
-**[>> THE REST WITH SPRING - MASTER CLASS](https://www.baeldung.com/rest-with-spring-course?utm_source=github&utm_medium=social&utm_content=tutorials&utm_campaign=rws#master-class)** - -And here's the Master Class of "Learn Spring Security":
-**[>> LEARN SPRING SECURITY - MASTER CLASS](https://www.baeldung.com/learn-spring-security-course?utm_source=github&utm_medium=social&utm_content=tutorials&utm_campaign=lss#master-class)** - - - -Java and Spring Tutorials -================ - -This project is **a collection of small and focused tutorials** - each covering a single and well defined area of development in the Java ecosystem. -A strong focus of these is, of course, the Spring Framework - Spring, Spring Boot and Spring Security. -In additional to Spring, the modules here are covering a number of aspects in Java. - - -构建(build)项目 -==================== -如果你希望运行一个完整的构建(build),请运行命令:`mvn clean install` - - -构建(Building)一个单独模块(module) -==================== -如果你希望构建一个特定的模块(module)的话,请在模块目录中运行命令:`mvn clean install` - - -运行一个 Spring Boot 模块 -==================== -如果你希望运行一个 Spring Boot 模块(module)请在模块目录中(module directory)运行命令: `mvn spring-boot:run` - - -与 IDE 协同进行工作 -==================== -本仓库中包含有大量的模块。 -When you're working with an individual module, there's no need to import all of them (or build all of them) - you can simply import that particular module in either Eclipse or IntelliJ. - - -运行测试 -============= -运行 `mvn clean install` 将会在模块中运行单元测试(unit tests)。 -如果你希望运行整合测试(integration tests),请使用命令 `mvn clean install -Pintegration-lite-first` - +

+ + + +
提供 CWIKI.US 项目中使用的代码 +

+所有的 Java 代码使用的是 JDK 8。 +你可以通过单击下面连接后访问我们网站,并且访问我们提供的最新有关 Java 的开发资料。 +* [概述](https://www.cwiki.us/pages/viewpage.action?pageId=37492282) \ No newline at end of file diff --git a/lang-tutorial.iml b/lang-tutorial.iml new file mode 100644 index 0000000000..2792130f76 --- /dev/null +++ b/lang-tutorial.iml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index f66d8a30ff..4fb8d8c3c2 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,15 @@ +<<<<<<< HEAD 4.0.0 +======= + + + +4.0.0 +>>>>>>> 361e407d91e00158295aadeaca0a91d84a534820 com.ossez lang-tutorial 0.0.1 @@ -38,17 +47,26 @@ +<<<<<<< HEAD com.ossez reoc-common 0.0.1 +======= + + + org.apache.logging.log4j + log4j-slf4j-impl + 2.11.0 +>>>>>>> 361e407d91e00158295aadeaca0a91d84a534820 org.apache.commons commons-compress +<<<<<<< HEAD 1.10 @@ -57,6 +75,17 @@ velocity 1.6 +======= + 1.19 + + + + org.apache.commons + commons-math3 + 3.6.1 + + +>>>>>>> 361e407d91e00158295aadeaca0a91d84a534820 antlr antlr @@ -174,6 +203,7 @@ 1.3.2 +<<<<<<< HEAD com.ossez.rets-io @@ -181,6 +211,24 @@ 0.1.0 +======= + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + +>>>>>>> 361e407d91e00158295aadeaca0a91d84a534820 @@ -248,4 +296,8 @@ - \ No newline at end of file +<<<<<<< HEAD + +======= + +>>>>>>> 361e407d91e00158295aadeaca0a91d84a534820 diff --git a/src/main/java/com/ossez/lang/tutorial/Main.java b/src/main/java/com/ossez/lang/tutorial/Main.java new file mode 100644 index 0000000000..3e743ee941 --- /dev/null +++ b/src/main/java/com/ossez/lang/tutorial/Main.java @@ -0,0 +1,91 @@ +package com.ossez.lang.tutorial; + +import java.util.Properties; + +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.GnuParser; +import org.apache.commons.cli.Options; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Main { + private static final Logger logger = LoggerFactory.getLogger(Main.class); + + private static Options options = new Options(); + private static Properties properties = new Properties(); + + private static CommandLine cl = null; + + private static boolean dryRun = false; + private static int limit = 0; + private static boolean force = false; + + public static void main(String[] args) { + + // get the idx feed properties file + Main.parseProperties(); + + // load console options + Main.parseCommandLine(args); + + logger.debug("Starting feeds..."); + System.out.println("starting feeds..."); + + // execute the feeds + Main.executeFeeds(); + + } + + /** + * Executes the feeds specified in the feeds.properties file. + */ + private static void executeFeeds() { + + } + + /** + * Parses the properties file to get a list of all feeds. + */ + private static void parseProperties() { + try { + // load the properties file + logger.debug("Parsing properties"); + Main.properties.load(Main.class.getClassLoader().getResourceAsStream("rets.properties")); + + // load the feeds + + } catch (Exception ex) { + ex.printStackTrace(); + logger.error("Could not parse feed properties", ex); + } + } + + /** + * Handles creation of console options. + */ + private static void parseCommandLine(String[] args) { + + // parse command line options + CommandLineParser parser = new GnuParser(); + + try { + Main.cl = parser.parse(Main.options, args); + + // get the dry run option + Main.dryRun = Main.cl.hasOption("d"); + logger.trace("Value of dryRun: " + dryRun); + + // get the limit option + // Main.limit = Utility.parseInt(Main.cl.getOptionValue("l", "0")); + logger.trace("Value of limit: " + Main.limit); + + // get the force option + Main.force = Main.cl.hasOption("u"); + logger.trace("Value of force: " + Main.force); + } catch (Exception ex) { + logger.error("An error ocurred parsing command line arguments", ex); + } + } +} diff --git a/src/main/java/com/ossez/lang/tutorial/models/ListNode.java b/src/main/java/com/ossez/lang/tutorial/models/ListNode.java new file mode 100644 index 0000000000..d4fffc8cd5 --- /dev/null +++ b/src/main/java/com/ossez/lang/tutorial/models/ListNode.java @@ -0,0 +1,16 @@ +package com.ossez.lang.tutorial.models; + +/** + * + * @author YuCheng + * + */ +public class ListNode { + public int val; + public ListNode next; + + public ListNode(int x) { + val = x; + next = null; + } +} diff --git a/src/main/java/com/ossez/lang/tutorial/models/TreeNode.java b/src/main/java/com/ossez/lang/tutorial/models/TreeNode.java new file mode 100644 index 0000000000..8051f395f4 --- /dev/null +++ b/src/main/java/com/ossez/lang/tutorial/models/TreeNode.java @@ -0,0 +1,16 @@ +package com.ossez.lang.tutorial.models; + +/** + * + * @author YuCheng + * + */ +public class TreeNode { + public int val; + public TreeNode left, right; + + public TreeNode(int val) { + this.val = val; + this.left = this.right = null; + } +} diff --git a/src/main/java/com/ossez/lang/tutorial/objplusclass/CreateObject.java b/src/main/java/com/ossez/lang/tutorial/objplusclass/CreateObject.java new file mode 100644 index 0000000000..ed62dfaf9c --- /dev/null +++ b/src/main/java/com/ossez/lang/tutorial/objplusclass/CreateObject.java @@ -0,0 +1,18 @@ +package com.ossez.lang.tutorial.objplusclass; + +/** + * + * @author YuCheng + * + */ +public class CreateObject { + public CreateObject(String name) { + // This constructor has one parameter, name + System.out.println("小狗的名字是: " + name); + } + + public static void main(String[] args) { + // Following statement would create an object myPuppy + CreateObject myPuppy = new CreateObject("Tomcat"); + } +} diff --git a/src/main/java/com/ossez/lang/tutorial/overview/FreshJuiceEnums.java b/src/main/java/com/ossez/lang/tutorial/overview/FreshJuiceEnums.java new file mode 100644 index 0000000000..d4d868528e --- /dev/null +++ b/src/main/java/com/ossez/lang/tutorial/overview/FreshJuiceEnums.java @@ -0,0 +1,22 @@ +package com.ossez.lang.tutorial.overview; + +/** + * Java Tutorial + * + * @author YuCheng + * + */ +class FreshJuice { + enum FreshJuiceSize { + SMALL, MEDIUM, LARGE + } + + FreshJuiceSize size; +} + +public class FreshJuiceEnums { + public static void main(String[] args) { + FreshJuice juice = new FreshJuice(); + juice.size = FreshJuice.FreshJuiceSize.MEDIUM; + } +} \ No newline at end of file diff --git a/src/main/java/com/ossez/lang/tutorial/overview/HelloWorld.java b/src/main/java/com/ossez/lang/tutorial/overview/HelloWorld.java index 51b395da04..84e2b7d662 100644 --- a/src/main/java/com/ossez/lang/tutorial/overview/HelloWorld.java +++ b/src/main/java/com/ossez/lang/tutorial/overview/HelloWorld.java @@ -3,11 +3,25 @@ package com.ossez.lang.tutorial.overview; /** * Java Tutorial * +<<<<<<< HEAD +======= + * This is my first java program. This will print 'Hello World' as the output This is an example of multi-line comments + * +>>>>>>> 361e407d91e00158295aadeaca0a91d84a534820 * @author YuCheng * */ public class HelloWorld { public static void main(String[] args) { +<<<<<<< HEAD System.out.println("Hello World"); } -} \ No newline at end of file +} +======= + // This is an example of single line comment + /* This is also an example of single line comment. */ + + System.out.println("Hello World"); + } +} +>>>>>>> 361e407d91e00158295aadeaca0a91d84a534820 diff --git a/src/main/java/com/ossez/lang/tutorial/usecases/VarargsCase.java b/src/main/java/com/ossez/lang/tutorial/usecases/VarargsCase.java new file mode 100644 index 0000000000..d300821e4d --- /dev/null +++ b/src/main/java/com/ossez/lang/tutorial/usecases/VarargsCase.java @@ -0,0 +1,37 @@ +package com.ossez.lang.tutorial.usecases; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * variable arguments use case + */ +public class VarargsCase { + private static final Logger logger = LoggerFactory.getLogger(VarargsCase.class); + + /** + * sumVarargs + * + * @param intArrays + * @return + */ + static int sumVarargs(int... intArrays) { + int sum, i; + sum = 0; + for (i = 0; i < intArrays.length; i++) { + sum += intArrays[i]; + } + return (sum); + } + + /** + * Main Function + * + * @param args + */ + public static void main(String args[]) { + int sum = 0; + sum = sumVarargs(new int[]{10, 12, 33, 7}); + logger.debug("The Sum of the arrays: {}", sum); + } +} diff --git a/src/main/java/com/ossez/lang/tutorial/utils/TreeUtils.java b/src/main/java/com/ossez/lang/tutorial/utils/TreeUtils.java new file mode 100644 index 0000000000..ead47224c0 --- /dev/null +++ b/src/main/java/com/ossez/lang/tutorial/utils/TreeUtils.java @@ -0,0 +1,55 @@ +package com.ossez.lang.tutorial.utils; + +import java.util.ArrayList; + +import com.ossez.lang.tutorial.models.TreeNode; + +/** + * + * @author YuCheng + * + */ +public class TreeUtils { + + public static TreeNode initTree(String data) { + // NULL CHECK + if (data.equals("{}")) { + return null; + } + + ArrayList treeList = new ArrayList(); + + data = data.replace("{", ""); + data = data.replace("}", ""); + String[] vals = data.split(","); + + // INSERT ROOT + TreeNode root = new TreeNode(Integer.parseInt(vals[0])); + treeList.add(root); + + int index = 0; + boolean isLeftChild = true; + for (int i = 1; i < vals.length; i++) { + if (!vals[i].equals("#")) { + TreeNode node = new TreeNode(Integer.parseInt(vals[i])); + if (isLeftChild) { + treeList.get(index).left = node; + } else { + treeList.get(index).right = node; + } + treeList.add(node); + } + + // LEVEL + if (!isLeftChild) { + index++; + } + + // MOVE TO RIGHT OR NEXT LEVEL + isLeftChild = !isLeftChild; + } + + return root; + + } +} diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000000..4a910c253f --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,97 @@ + + + + + + /home/logs/reoc/services/ + + + + + + + + + + + + + + + + + + %-d{yyyy/MM/dd HH:mm:ss} %-5p [%c] - %m%n + + + + + + + + + + + + + + + %-d{yyyy/MM/dd HH:mm:ss} %-5p [%c] - %m%n + + + + + + + + + + + + + + + %-d{yyyy/MM/dd HH:mm:ss} %-5p [%c] - %m%n + + + + + + + + + + + + + + + %-d{yyyy/MM/dd HH:mm:ss} %-5p [%c] - %m%n + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/com/ossez/lang/tutorial/tests/BitOperationTest.java b/src/test/java/com/ossez/lang/tutorial/tests/BitOperationTest.java new file mode 100644 index 0000000000..eb570df0dd --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/BitOperationTest.java @@ -0,0 +1,36 @@ +package com.ossez.lang.tutorial.tests; + +import org.apache.commons.math3.util.FastMath; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author YuCheng + * + */ +public class BitOperationTest { + + private final static Logger logger = LoggerFactory.getLogger(BitOperationTest.class); + + /** + * 35 https://www.lintcode.com/problem/reverse-linked-list/description + */ + @Test + public void testInt2Bit() { + logger.debug("BEGIN"); + System.out.println(Integer.toBinaryString(5)); + System.out.println(Integer.toBinaryString(2)); + + System.out.println(Integer.toBinaryString(2 << 2)); + + System.out.println(Integer.parseInt(Integer.toBinaryString(2 << 2), 2)); + + System.out.println(5 / 3); + System.out.println(5 % 3); + FastMath.pow(2, 3); + + } + +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/DiscourseImportTest.java b/src/test/java/com/ossez/lang/tutorial/tests/DiscourseImportTest.java new file mode 100644 index 0000000000..27cce33d49 --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/DiscourseImportTest.java @@ -0,0 +1,137 @@ +package com.ossez.lang.tutorial.tests; + +import com.google.gson.Gson; +import com.ossez.edtestbank.common.dao.Factory; +import com.ossez.edtestbank.common.dao.factories.PostFactory; +import com.ossez.edtestbank.common.model.entity.BBSOssezForumAttach; +import com.ossez.edtestbank.common.model.entity.BBSOssezForumPost; +import com.ossez.edtestbank.common.model.request.TopicRequest; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.apache.http.HttpHeaders; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.joda.time.DateTime; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * Test Logger and function + * + * @author YuCheng Hu + */ +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class PostTest { + private static Logger logger = LoggerFactory.getLogger(PostTest.class); + + + @BeforeAll + protected void setUp() throws Exception { + Factory.beginTransaction(); + } + + @AfterAll + protected void tearDown() throws Exception { + Factory.rollbackTransaction(); + } + + /** + * Tests search functionality for the customer object. + */ + @Test + public void testPost() throws IOException, InterruptedException { + List idList = FileUtils.readLines(new File("C:\\Users\\yhu\\Pictures\\Pics\\2021-01\\1.txt")); + for (String id : idList) { + processPost(NumberUtils.toLong(id)); + Thread.sleep(6000); +// break; + + } + + + // make sure the customer was found +// assertNotNull(bbsOssezForumPost); + } + + @Test + public void testDateTime() throws IOException { + DateTime dateTime = new DateTime(1256834117 * 1000L); + System.out.println(dateTime.toString()); + + } + + private void processPost(Long tid) throws IOException { + BBSOssezForumPost bbsOssezForumPost = PostFactory.getBBSOssezForumPostTid(tid); + if (bbsOssezForumPost == null) + return; + + logger.debug("Questions Content - {}", bbsOssezForumPost.getSubject()); + + String postCtx = bbsOssezForumPost.getMessage(); +// logger.debug(">>>>{}", postCtx); + + + String pattern = "\\[attach\\]((\\d)*?)\\[\\/attach\\]"; + + // Create a Pattern object + Pattern r = Pattern.compile(pattern); + + // Now create matcher object. + Matcher m = r.matcher(postCtx); + + while (m.find()) { + String attachId = StringUtils.substringBetween(m.group(0), "[attach]", "[/attach]"); + logger.debug("{}", attachId); + BBSOssezForumAttach bbsOssezForumAttach = PostFactory.getBBSOssezForumAttach(NumberUtils.toLong(attachId)); + if (bbsOssezForumAttach!= null) { + String fullURL = "![](https://cdn.ossez.com/com-ossez-www/data/attachment/forum/" + bbsOssezForumAttach.getAttachment() + ")"; + postCtx = StringUtils.replace(postCtx, m.group(0), fullURL); + } + } + + logger.debug("{}", postCtx); + + + CloseableHttpClient client = HttpClients.createDefault(); + + HttpPost httpPost = new HttpPost("https://www.ossez.com/posts.json"); + httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json; charset=UTF-8"); + httpPost.setHeader("Api-Key", "XXXXXX"); + httpPost.setHeader("Api-Username", "XXXXXX"); + + TopicRequest topicRequest = new TopicRequest(); + topicRequest.setTitle(bbsOssezForumPost.getSubject()); + topicRequest.setRaw(postCtx); + topicRequest.setCreated_at(new DateTime(bbsOssezForumPost.getDateline() * 1000L).toString() ); + topicRequest.setCategory(30); + + StringEntity postingString = new StringEntity(new Gson().toJson(topicRequest), StandardCharsets.UTF_8); + + httpPost.setEntity(postingString); + + + CloseableHttpResponse response = client.execute(httpPost); + + logger.info("{}", EntityUtils.toString(response.getEntity()), StandardCharsets.UTF_8); + client.close(); + } + +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/LintcodeTest.java b/src/test/java/com/ossez/lang/tutorial/tests/LintcodeTest.java new file mode 100644 index 0000000000..7cf699092d --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/LintcodeTest.java @@ -0,0 +1,293 @@ +package com.ossez.lang.tutorial.tests; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.management.ListenerNotFoundException; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.ossez.lang.tutorial.models.ListNode; + +/** + * + * @author YuCheng + * + */ +public class LintcodeTest { + + private final static Logger logger = LoggerFactory.getLogger(LintcodeTest.class); + + /** + * 35 https://www.lintcode.com/problem/reverse-linked-list/description + */ + @Test + public void test0035Reverse() { + // INIT LINKED LIST + ListNode head = new ListNode(1); + head.next = new ListNode(2); + head.next.next = new ListNode(3); + + // CHECK BEFORE + System.out.println(head.val); + System.out.println(head.next.val); + System.out.println(head.next.next.val); + + // REVERSE + ListNode prev = null; + while (head != null) { + ListNode temp = head.next; + head.next = prev; + prev = head; + head = temp; + } + + // CHECK AFTER + System.out.println(prev.val); + System.out.println(prev.next.val); + System.out.println(prev.next.next.val); + } + + /** + * 1480 https://www.lintcode.com/problem/dot-product/description + */ + @Test + public void test0044minSubArray() { + + List nums = new ArrayList(); + nums.add(1); + nums.add(1); + + int min_ending_here = 0; + int retStatus = 0; + + for (int i = 0; i < nums.size(); i++) { + if (min_ending_here > 0) { + min_ending_here = nums.get(i); + } else { + min_ending_here += nums.get(i); + } + retStatus = Math.min(retStatus, min_ending_here); + } + + System.out.println(retStatus); + + } + + /** + * 53 https://www.lintcode.com/problem/reverse-words-in-a-string/description + */ + @Test + public void test0053ReverseWords() { + + String s = " Life doesn't always give us the joys we want."; + + String retStr = ""; + String[] inStr = s.split(" "); + + for (int i = inStr.length - 1; i >= 0; i--) { + String cStr = inStr[i].trim(); + if (!cStr.isEmpty()) { + retStr = retStr + " " + cStr; + } + } + retStr = retStr.trim(); + System.out.println(retStr); + // return retStr; + } + + /** + * 56 https://www.lintcode.com/problem/two-sum/description + */ + @Test + public void test0056TwoSum() { + int[] numbers = { 2, 7, 11, 15 }; + int target = 9; + + int[] retArray = new int[2]; + + for (int i = 0; i < numbers.length; i++) { + int intA = numbers[i]; + int intB = 0; + + for (int j = 1 + i; j < numbers.length; j++) { + intB = numbers[j]; + // SUM CHECK + if (target == intA + intB && i < j) { + retArray[0] = i; + retArray[1] = j; + break; + } + } + } + + System.out.println(Arrays.toString(retArray)); + } + + /** + * 209 https://www.lintcode.com/problem/first-unique-character-in-a-string + */ + @Test + public void test0209FirstUniqChar() { + String str = "ddjdz"; + + char retStatus = 0; + + // LOOP CHECK + for (int i = 0; i < 30; i++) { + char c = str.charAt(0); + if (str.indexOf(Character.toString(c)) == str.lastIndexOf(Character.toString(c))) { + retStatus = c; + break; + } + str = str.replaceAll(Character.toString(c), ""); + } + + System.out.println("" + retStatus); + } + + /** + * 411 + * + *

+ *

+ *

+ * + */ + @Test + public void test0411GrayCode() { + int n = 2; + + List retArray = new ArrayList<>(); + + if (n == 0) { + retArray.add(0); + } + + for (int i = 0; i < (2 << (n - 1)); i++) { + int g = i ^ (i / 2); + retArray.add(g); + } + + System.out.println(retArray); + } + + /** + * 1480 https://www.lintcode.com/problem/dot-product/description + */ + @Test + public void test0423IsValidParentheses() { + String s = "([)]"; + + boolean retStatus = false; + for (int i = 0; i < 3; i++) { + s = s.replace("()", ""); + s = s.replace("{}", ""); + s = s.replace("[]", ""); + + if (s.length() == 0) { + retStatus = true; + break; + } + } + + System.out.println(retStatus); + + } + + /** + * 646 https://www.lintcode.com/problem/first-position-unique-character/description + */ + @Test + public void test0646FirstUniqChar() { + String s = "saau"; + + int retStatus = -1; + boolean breakLoop = false; + + int[] iArray = new int[256]; + + // NULL CHECK + if (s == null || s.length() == 0) { + retStatus = -1; + } + + // LOOP CHECK + for (char c : s.toCharArray()) { + iArray[c]++; + } + for (int i = 0; i < s.length(); i++) { + if (iArray[s.charAt(i)] == 1) { + retStatus = i; + breakLoop = true; + break; + } + } + + // LOOP BREAK CHECK + if (!breakLoop) { + retStatus = -1; + } + + System.out.println(retStatus); + } + + /** + * 767 https://www.lintcode.com/problem/reverse-array/description + */ + @Test + public void test0767ReverseArray() { + int[] nums = { 1, 2, 3, 4, 5, 6, 7 }; + + for (int i = 0; i < nums.length / 2; i++) { + int tmp = nums[i]; + nums[i] = nums[nums.length - 1 - i]; + nums[nums.length - 1 - i] = tmp; + } + + System.out.println(Arrays.toString(nums)); + + } + + /** + * 1480 https://www.lintcode.com/problem/dot-product/description + */ + @Test + public void test1377findSubstring() { + String str = ""; + int k = 5; + + HashSet strSet = new HashSet(); + + for (int i = 0; i <= str.length() - k; i++) { + String subStr = str.substring(i, i + k); + + String pattern = ".*(.).*\\1.*"; + + Pattern r = Pattern.compile(pattern); + + Matcher m = r.matcher(subStr); + if (!m.find()) { + strSet.add(subStr); + } + + } + + System.out.println(strSet.size()); + } + +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/SingletonTest.java b/src/test/java/com/ossez/lang/tutorial/tests/SingletonTest.java new file mode 100644 index 0000000000..a6cd888777 --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/SingletonTest.java @@ -0,0 +1,69 @@ +package com.ossez.lang.tutorial.tests; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Eager Singleton + * + * @author YuCheng + * + */ +class EagerSingleton { + private static final EagerSingleton INSTANCE = new EagerSingleton(); + + // Private constructor suppresses + private EagerSingleton() { + } + + // default public constructor + public static EagerSingleton getInstance() { + return INSTANCE; + } +} + +/** + * Lazy Singleton + * + * @author YuCheng + * + */ +class LazySingleton { + private static volatile LazySingleton INSTANCE = null; + + // Private constructor suppresses + // default LazySingleton constructor + private LazySingleton() { + } + + // thread safe and performance promote + public static LazySingleton getInstance() { + if (INSTANCE == null) { + synchronized (LazySingleton.class) { + // when more than two threads run into the first null check same time, to avoid instanced more than one time, it needs to be + // checked again. + if (INSTANCE == null) { + INSTANCE = new LazySingleton(); + } + } + } + return INSTANCE; + } +} + +/** + * + * @author YuCheng + * + */ +public class SingletonTest { + private final static Logger logger = LoggerFactory.getLogger(SingletonTest.class); + + @Test + public void testSingleton() { + logger.debug("TEST Singleton"); + + } + +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/TreeTest.java b/src/test/java/com/ossez/lang/tutorial/tests/TreeTest.java new file mode 100644 index 0000000000..ee67e07c05 --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/TreeTest.java @@ -0,0 +1,85 @@ +package com.ossez.lang.tutorial.tests; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.ossez.lang.tutorial.models.TreeNode; +import com.ossez.lang.tutorial.utils.TreeUtils; + +/** + * + * @author YuCheng + * + */ +public class TreeTest { + private final static Logger logger = LoggerFactory.getLogger(TreeTest.class); + private static List loopList = new ArrayList(); + + @Test + public void testMain() { + logger.debug("TREE TEST"); + String data = "{1,2,3,4,5,#,6,#,#,7,8,#,#}"; + TreeNode treeNode = TreeUtils.initTree(data); + + // PRE + loopList = new ArrayList(); + preOrderTraverselRecursion(treeNode); + System.out.println(loopList); + + // IN + loopList = new ArrayList(); + inOrderTraverselRecursion(treeNode); + System.out.println(loopList); + + // POST + loopList = new ArrayList(); + postOrderTraversalRecursion(treeNode); + System.out.println(loopList); + } + + + + + /** + * + * @param root + */ + public void preOrderTraverselRecursion(TreeNode root) { + if (root != null) { + loopList.add(root.val); + preOrderTraverselRecursion(root.left); + preOrderTraverselRecursion(root.right); + } + } + + /** + * + * @param root + */ + public void inOrderTraverselRecursion(TreeNode root) { + if (root != null) { + inOrderTraverselRecursion(root.left); + loopList.add(root.val); + inOrderTraverselRecursion(root.right); + } + + } + + /** + * + * @param root + */ + public void postOrderTraversalRecursion(TreeNode root) { + if (root != null) { + postOrderTraversalRecursion(root.left); + postOrderTraversalRecursion(root.right); + loopList.add(root.val); + } + + } + +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/VariableTest.java b/src/test/java/com/ossez/lang/tutorial/tests/VariableTest.java new file mode 100644 index 0000000000..a7112e3aea --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/VariableTest.java @@ -0,0 +1,49 @@ +package com.ossez.lang.tutorial.tests; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import junit.framework.TestCase; + +/** + * Object of VariableOssez + * + * @author YuCheng + * + */ +class OssezVariable { + int s1, s2; + static int s3; + + OssezVariable(int x, int y, int z) { + s1 = x; + s2 = y; + s3 = z; + } +} + +/** + * + * @author YuCheng + * + */ +public class VariableTest extends TestCase { + + private final static Logger logger = LoggerFactory.getLogger(VariableTest.class); + + /** + * Do RetsServerConnection Test + */ + @Test + public void testStaticVariableChange() { + + OssezVariable objA = new OssezVariable(1, 2, 3); + logger.debug("s1/s2/s3 - [{}]/[{}]/[{}]", objA.s1, objA.s2, OssezVariable.s3); + + OssezVariable objB = new OssezVariable(4, 5, 6); + logger.debug("s1/s2/s3 - [{}]/[{}]/[{}]", objA.s1, objA.s2, OssezVariable.s3); + logger.debug("s1/s2/s3 - [{}]/[{}]/[{}]", objB.s1, objB.s2, OssezVariable.s3); + } + +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/codility/CodilityBinaryGapTest.java b/src/test/java/com/ossez/lang/tutorial/tests/codility/CodilityBinaryGapTest.java new file mode 100644 index 0000000000..f430a4f5d0 --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/codility/CodilityBinaryGapTest.java @@ -0,0 +1,56 @@ +package com.ossez.lang.tutorial.tests.codility; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + *

+ * More details about question see link below + *

+ *

+ * + * @author YuCheng + * + */ +public class CodilityBinaryGapTest { + + private final static Logger logger = LoggerFactory.getLogger(CodilityBinaryGapTest.class); + + /** + * + */ + @Test + public void testMain() { + logger.debug("BEGIN"); + + int N = 529; + String intStr = Integer.toBinaryString(N); + + intStr = intStr.replace("1", "#1#"); + + String[] strArray = intStr.split("1"); + + int maxCount = 0; + for (int i = 0; i < strArray.length; i++) { + String checkStr = strArray[i]; + int countLength = 0; + + if (checkStr.length() > 2 && checkStr.startsWith("#") && checkStr.endsWith("#")) { + checkStr = checkStr.replace("#", ""); + countLength = checkStr.length(); + + if (maxCount < countLength) { + maxCount = countLength; + } + + } + } + + logger.debug("MAX COUNT: [{}]", maxCount); + } + +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0007SerializeAndDeserializeTest.java b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0007SerializeAndDeserializeTest.java new file mode 100644 index 0000000000..cb900c3f37 --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0007SerializeAndDeserializeTest.java @@ -0,0 +1,131 @@ +package com.ossez.lang.tutorial.tests.lintcode; + +import java.util.ArrayList; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.ossez.lang.tutorial.models.TreeNode; + +/** + *

+ * 7 + *

+ *

+ * + * @author YuCheng + * + */ +public class LintCode0007SerializeAndDeserializeTest { + + private final static Logger logger = LoggerFactory.getLogger(LintCode0007SerializeAndDeserializeTest.class); + + /** + * + */ + @Test + public void testMain() { + logger.debug("BEGIN"); + String data = "{3,9,20,#,#,15,7}"; + + System.out.println(serialize(deserialize(data))); + + } + + /** + * Deserialize from array to tree + * + * @param data + * @return + */ + private TreeNode deserialize(String data) { + // NULL CHECK + if (data.equals("{}")) { + return null; + } + + ArrayList treeList = new ArrayList(); + + data = data.replace("{", ""); + data = data.replace("}", ""); + String[] vals = data.split(","); + + // INSERT ROOT + TreeNode root = new TreeNode(Integer.parseInt(vals[0])); + treeList.add(root); + + int index = 0; + boolean isLeftChild = true; + for (int i = 1; i < vals.length; i++) { + if (!vals[i].equals("#")) { + TreeNode node = new TreeNode(Integer.parseInt(vals[i])); + if (isLeftChild) { + treeList.get(index).left = node; + } else { + treeList.get(index).right = node; + } + treeList.add(node); + } + + // LEVEL + if (!isLeftChild) { + index++; + } + + // MOVE TO RIGHT OR NEXT LEVEL + isLeftChild = !isLeftChild; + } + + return root; + + } + + /** + * + * @param root + * @return + */ + public String serialize(TreeNode root) { + // write your code here + if (root == null) { + return "{}"; + } + + ArrayList queue = new ArrayList(); + queue.add(root); + + for (int i = 0; i < queue.size(); i++) { + TreeNode node = queue.get(i); + if (node == null) { + continue; + } + queue.add(node.left); + queue.add(node.right); + } + + while (queue.get(queue.size() - 1) == null) { + queue.remove(queue.size() - 1); + } + + StringBuilder sb = new StringBuilder(); + sb.append("{"); + sb.append(queue.get(0).val); + for (int i = 1; i < queue.size(); i++) { + if (queue.get(i) == null) { + sb.append(",#"); + } else { + sb.append(","); + sb.append(queue.get(i).val); + } + } + sb.append("}"); + return sb.toString(); + } + +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0069LevelOrderTest.java b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0069LevelOrderTest.java new file mode 100644 index 0000000000..f0f661947a --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0069LevelOrderTest.java @@ -0,0 +1,124 @@ +package com.ossez.lang.tutorial.tests.lintcode; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.ossez.lang.tutorial.models.TreeNode; + +/** + *

+ * 69 + *

+ *

+ * + * @author YuCheng + * + */ +public class LintCode0069LevelOrderTest { + + private final static Logger logger = LoggerFactory.getLogger(LintCode0069LevelOrderTest.class); + + /** + * + */ + @Test + public void testMain() { + logger.debug("BEGIN"); + String data = "{3,9,20,#,#,15,7}"; + + TreeNode tn = deserialize(data); + System.out.println(levelOrder(tn)); + + } + + /** + * Deserialize from array to tree + * + * @param data + * @return + */ + private TreeNode deserialize(String data) { + // NULL CHECK + if (data.equals("{}")) { + return null; + } + + ArrayList treeList = new ArrayList(); + + data = data.replace("{", ""); + data = data.replace("}", ""); + String[] vals = data.split(","); + + // INSERT ROOT + TreeNode root = new TreeNode(Integer.parseInt(vals[0])); + treeList.add(root); + + int index = 0; + boolean isLeftChild = true; + for (int i = 1; i < vals.length; i++) { + if (!vals[i].equals("#")) { + TreeNode node = new TreeNode(Integer.parseInt(vals[i])); + if (isLeftChild) { + treeList.get(index).left = node; + } else { + treeList.get(index).right = node; + } + treeList.add(node); + } + + // LEVEL + if (!isLeftChild) { + index++; + } + + // MOVE TO RIGHT OR NEXT LEVEL + isLeftChild = !isLeftChild; + } + + return root; + + } + + private List> levelOrder(TreeNode root) { + Queue queue = new LinkedList(); + List> rs = new ArrayList>(); + + // NULL CHECK + if (root == null) { + return rs; + } + + queue.offer(root); + + while (!queue.isEmpty()) { + int length = queue.size(); + List list = new ArrayList(); + + for (int i = 0; i < length; i++) { + TreeNode curTN = queue.poll(); + list.add(curTN.val); + if (curTN.left != null) { + queue.offer(curTN.left); + } + if (curTN.right != null) { + queue.offer(curTN.right); + } + } + + rs.add(list); + } + + return rs; + } +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0102HasCycleTest.java b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0102HasCycleTest.java new file mode 100644 index 0000000000..7ded09697e --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0102HasCycleTest.java @@ -0,0 +1,63 @@ +package com.ossez.lang.tutorial.tests.lintcode; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.ossez.lang.tutorial.models.ListNode; + +/** + *

+ * 102 + *

+ *

+ * + * @author YuCheng + * + */ +public class LintCode0102HasCycleTest { + + private final static Logger logger = LoggerFactory.getLogger(LintCode0102HasCycleTest.class); + + /** + * + */ + @Test + public void testMain() { + logger.debug("BEGIN"); + // INIT LINKED LIST + ListNode head = new ListNode(1); + head.next = new ListNode(2); + head.next.next = new ListNode(3); + head.next.next.next = new ListNode(4); + + // CREATE A LOOP + head.next.next.next.next = head.next.next.next; + + boolean retResult = false; + + // LIKED LIST MAY NULL: + if (!(head == null || head.next == null)) { + ListNode s = head; + ListNode f = head.next; + + while (f.next != null && f.next.next != null) { + + s = s.next; + f = f.next.next; + + if (f == s) { + retResult = true; + break; + } + } + } + + System.out.println(retResult); + + } +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0165MergeTwoListsTest.java b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0165MergeTwoListsTest.java new file mode 100644 index 0000000000..5bfac549d6 --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0165MergeTwoListsTest.java @@ -0,0 +1,89 @@ +package com.ossez.lang.tutorial.tests.lintcode; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.ossez.lang.tutorial.models.ListNode; + +/** + *

+ * 102 + *

+ *

+ * + * @author YuCheng + * + */ +public class LintCode0165MergeTwoListsTest { + + private final static Logger logger = LoggerFactory.getLogger(LintCode0165MergeTwoListsTest.class); + + /** + * + */ + @Test + public void testMain() { + logger.debug("BEGIN"); + // INIT LINKED LIST l1 + ListNode l1 = new ListNode(1); + l1.next = new ListNode(3); + l1.next.next = new ListNode(8); + l1.next.next.next = new ListNode(11); + l1.next.next.next.next = new ListNode(15); + + // INIT LINKED LIST l2 + ListNode l2 = new ListNode(2); + + // RETURN RESULT + ListNode retResult = new ListNode(0); + + // NULL CHECK + // if (l1 == null && l2 == null) { + // retResult = null; + // } + // + // if (l1 == null) { + // retResult = l2; + // } + // + // if (l2 == null) { + // retResult = l1; + // } + + // MERGE + retResult = new ListNode(0); + ListNode tmpNode = new ListNode(0); + retResult = tmpNode; + while (l1 != null & l2 != null) { + if (l1.val <= l2.val) { + tmpNode.next = l1; + l1 = l1.next; + } else { + tmpNode.next = l2; + l2 = l2.next; + } + + tmpNode = tmpNode.next; + } + + if (l1 == null) { + tmpNode.next = l2; + } + + if (l2 == null) { + tmpNode.next = l1; + } + + retResult = retResult.next; + + System.out.println(retResult.val); + System.out.println(retResult.next.val); + System.out.println(retResult.next.next.val); + + } +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0425LetterCombinationsTest.java b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0425LetterCombinationsTest.java new file mode 100644 index 0000000000..7312cbb993 --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0425LetterCombinationsTest.java @@ -0,0 +1,78 @@ +package com.ossez.lang.tutorial.tests.lintcode; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + *

+ * 425 + *

+ *

+ * + * @author YuCheng + * + */ +public class LintCode0425LetterCombinationsTest { + + private final static Logger logger = LoggerFactory.getLogger(LintCode0425LetterCombinationsTest.class); + + /** + * + */ + @Test + public void testMain() { + logger.debug("LetterCombinationsTest"); + String digits = "23"; + + HashMap phoneKeyMap = new HashMap(); + phoneKeyMap.put("0", ""); + phoneKeyMap.put("1", ""); + phoneKeyMap.put("2", "abc"); + phoneKeyMap.put("3", "def"); + phoneKeyMap.put("4", "ghi"); + phoneKeyMap.put("5", "jkl"); + phoneKeyMap.put("6", "mno"); + phoneKeyMap.put("7", "pqrs"); + phoneKeyMap.put("8", "tuv"); + phoneKeyMap.put("9", "wxyz"); + + List retStatus = new ArrayList<>(); + + if (digits != null && digits.length() != 0) { + phoneRecursive(digits, retStatus, phoneKeyMap, "", 0); + } + + System.out.println(retStatus); + } + + /** + * phoneRecursive + * + * @param digits + * @param retStatus + * @param phoneKeyMap + * @param comb + * @param index + */ + private void phoneRecursive(String digits, List retStatus, HashMap phoneKeyMap, String comb, int index) { + if (index == digits.length()) { + retStatus.add(comb); + return; + } + + char pos = digits.charAt(index); + for (char c : ((String) phoneKeyMap.get(String.valueOf(pos))).toCharArray()) { + phoneRecursive(digits, retStatus, phoneKeyMap, comb + c, index + 1); + } + } +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0433NumIslandsTest.java b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0433NumIslandsTest.java new file mode 100644 index 0000000000..534bc9f4d6 --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0433NumIslandsTest.java @@ -0,0 +1,94 @@ +package com.ossez.lang.tutorial.tests.lintcode; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + *

+ * 433 + *

+ *

+ * + * @author YuCheng + * + */ +public class LintCode0433NumIslandsTest { + + private final static Logger logger = LoggerFactory.getLogger(LintCode0433NumIslandsTest.class); + + /** + * + */ + @Test + public void testMain() { + logger.debug("BEGIN"); + // INIT GRID + boolean[][] grid = { { true, true, false, false, false }, { false, true, false, false, true }, { false, false, false, true, true }, + { false, false, false, false, false }, { false, false, false, false, true } + + }; + + // NULL CHECK + if (grid.length == 0 || grid[0].length == 0) { + System.out.println("NULL"); + // return 0; + } + + // GET SIZE + int n = grid.length; + int m = grid[0].length; + + // ARRAY FOR VISITED LOG + boolean[][] visited = new boolean[n][m]; + + int count = 0; + + // LOOP FOR GRID + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + if (grid[i][j] && !visited[i][j]) { + numIslandsDFS(grid, visited, i, j); + count++; + } + } + } + + System.out.println(count); + + } + + /** + * + * @param grid + * @param visited + * @param x + * @param y + */ + public void numIslandsDFS(boolean[][] grid, boolean[][] visited, int x, int y) { + if (x < 0 || x >= grid.length) { + return; + } + + if (y < 0 || y >= grid[0].length) { + return; + } + + if (grid[x][y] != true || visited[x][y]) { + return; + } + + visited[x][y] = true; + + // Recursive call + numIslandsDFS(grid, visited, x - 1, y); + numIslandsDFS(grid, visited, x + 1, y); + numIslandsDFS(grid, visited, x, y - 1); + numIslandsDFS(grid, visited, x, y + 1); + + } +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode1480DotProductTest.java b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode1480DotProductTest.java new file mode 100644 index 0000000000..fb62a811a0 --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode1480DotProductTest.java @@ -0,0 +1,35 @@ +package com.ossez.lang.tutorial.tests.lintcode; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + *

+ * 1480 + *

+ *

+ * + * @author YuCheng + * + */ +public class LintCode1480DotProductTest { + + private final static Logger logger = LoggerFactory.getLogger(LintCode1480DotProductTest.class); + + /** + * + */ + @Test + public void testMain() { + logger.debug("BEGIN"); + int t = 87; + int[] dur = { 20, 25, 19, 37 }; + // Write your code here + } + +} diff --git a/src/test/resources/log4j2.xml b/src/test/resources/log4j2.xml new file mode 100644 index 0000000000..4a910c253f --- /dev/null +++ b/src/test/resources/log4j2.xml @@ -0,0 +1,97 @@ + + + + + + /home/logs/reoc/services/ + + + + + + + + + + + + + + + + + + %-d{yyyy/MM/dd HH:mm:ss} %-5p [%c] - %m%n + + + + + + + + + + + + + + + %-d{yyyy/MM/dd HH:mm:ss} %-5p [%c] - %m%n + + + + + + + + + + + + + + + %-d{yyyy/MM/dd HH:mm:ss} %-5p [%c] - %m%n + + + + + + + + + + + + + + + %-d{yyyy/MM/dd HH:mm:ss} %-5p [%c] - %m%n + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/toolkits/.gitignore b/toolkits/.gitignore new file mode 100644 index 0000000000..f35a1af429 --- /dev/null +++ b/toolkits/.gitignore @@ -0,0 +1,235 @@ +### Gradle ### +.gradle +build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +### Gradle Patch ### +**/build/ + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +.idea/sonarlint + + +### Intellij+iml ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij+iml Patch ### +# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 + +*.iml +modules.xml +.idea/misc.xml +*.ipr + +### Maven ### +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +.flattened-pom.xml + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +.idea/sonarlint diff --git a/toolkits/discourse/pom.xml b/toolkits/discourse/pom.xml new file mode 100644 index 0000000000..cdc23f2d83 --- /dev/null +++ b/toolkits/discourse/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + com.ossez + discourse + 0.1.0-SNAPSHOT + discourse + jar + + + com.ossez + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + + + org.apache.commons + commons-lang3 + 3.11 + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.google.code.gson + gson + 2.8.6 + + + joda-time + joda-time + 2.10.10 + + + + javax.persistence + javax.persistence-api + 2.2 + + + + + discourse + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${java.version} + ${java.version} + + + + + + src/main/resources + true + + + + + + + 3.6.1 + 1.8.9 + 1.19 + 1.19 + + 2.22.1 + + + diff --git a/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/entity/BBSOssezForumAttach.java b/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/entity/BBSOssezForumAttach.java new file mode 100644 index 0000000000..9f478fb32f --- /dev/null +++ b/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/entity/BBSOssezForumAttach.java @@ -0,0 +1,55 @@ +package com.ossez.toolkits.discourse.common.model.entity; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.persistence.*; +import java.io.Serializable; + + +@Entity +@Table(catalog = "ossez_bbs", name = "bbsossez_forum_attach") +public class BBSOssezForumAttach implements Serializable { + private static final long serialVersionUID = 5530454436970805656L; + + private static Logger logger = LoggerFactory.getLogger(BBSOssezForumAttach.class); + + + @Id + @Column(name = "aid") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id = 0; + + @Column(name = "attachment") + private String attachment; + + + + /** + * Constructor + */ + public BBSOssezForumAttach() { + + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + + public String getAttachment() { + return attachment; + } + + public void setAttachment(String attachment) { + this.attachment = attachment; + } +} \ No newline at end of file diff --git a/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/entity/BBSOssezForumPost.java b/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/entity/BBSOssezForumPost.java new file mode 100644 index 0000000000..153e6136ad --- /dev/null +++ b/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/entity/BBSOssezForumPost.java @@ -0,0 +1,87 @@ +package com.ossez.toolkits.discourse.common.model.entity; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.persistence.*; +import java.io.Serializable; + + +@Entity +@Table(catalog = "ossez_bbs", name = "bbsossez_forum_post") +public class BBSOssezForumPost implements Serializable { + private static final long serialVersionUID = 5530454436970805656L; + + private static Logger logger = LoggerFactory.getLogger(BBSOssezForumPost.class); + + + @Id + @Column(name = "pid") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id = 0; + + @Column(name = "subject") + private String subject; + + @Column(name = "message") + private String message; + + @Column(name = "tid") + private Long tid; + + @Column(name = "dateline") + private Long dateline; + + + + /** + * Constructor + */ + public BBSOssezForumPost() { + + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getTid() { + return tid; + } + + public void setTid(Long tid) { + this.tid = tid; + } + + public Long getDateline() { + return dateline; + } + + public void setDateline(Long dateline) { + this.dateline = dateline; + } +} \ No newline at end of file diff --git a/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/request/TopicRequest.java b/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/request/TopicRequest.java new file mode 100644 index 0000000000..4922afe57f --- /dev/null +++ b/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/request/TopicRequest.java @@ -0,0 +1,82 @@ +package com.ossez.toolkits.discourse.common.model.request; + +import java.io.Serializable; + + +/** + * SearchRequest Object, UI can send search String and related pagination + * + * @author YuCheng Hu + */ +public class TopicRequest implements Serializable { + private static final long serialVersionUID = 6474765081240948885L; + + + private String title; + private Integer topic_id; + private String raw; + private Integer category; + private String target_recipients; + private String archetype; + private String created_at; + + public static long getSerialVersionUID() { + return serialVersionUID; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Integer getTopic_id() { + return topic_id; + } + + public void setTopic_id(Integer topic_id) { + this.topic_id = topic_id; + } + + public String getRaw() { + return raw; + } + + public void setRaw(String raw) { + this.raw = raw; + } + + public Integer getCategory() { + return category; + } + + public void setCategory(Integer category) { + this.category = category; + } + + public String getTarget_recipients() { + return target_recipients; + } + + public void setTarget_recipients(String target_recipients) { + this.target_recipients = target_recipients; + } + + public String getArchetype() { + return archetype; + } + + public void setArchetype(String archetype) { + this.archetype = archetype; + } + + public String getCreated_at() { + return created_at; + } + + public void setCreated_at(String created_at) { + this.created_at = created_at; + } +} diff --git a/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/response/MyFileResponse.java b/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/response/MyFileResponse.java new file mode 100644 index 0000000000..86b519589f --- /dev/null +++ b/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/response/MyFileResponse.java @@ -0,0 +1,130 @@ +package discourse.common.model.response; + +import java.io.Serializable; + +/** + * MyFileResponse for API my file response + * + * @author YuCheng Hu + */ +public class MyFileResponse implements Serializable { + private static final long serialVersionUID = -5103349220463423614L; + + private Long id; + private String azureInputFileUUID; + private String azureInputFileETag; + private String azureOutputFileUUID; + private String azureOutputFileETag; + private String customerName; + private String inputFileName; + private Integer fileCountRow; + private Integer fileCountAliasMatch; + private Integer fileCountDirectMatch; + private Integer fileCountNoMatch; + private String dateCreated; + private String uuid; + + public String getAzureInputFileUUID() { + return azureInputFileUUID; + } + + public void setAzureInputFileUUID(String azureInputFileUUID) { + this.azureInputFileUUID = azureInputFileUUID; + } + + public String getAzureInputFileETag() { + return azureInputFileETag; + } + + public void setAzureInputFileETag(String azureInputFileETag) { + this.azureInputFileETag = azureInputFileETag; + } + + public String getAzureOutputFileUUID() { + return azureOutputFileUUID; + } + + public void setAzureOutputFileUUID(String azureOutputFileUUID) { + this.azureOutputFileUUID = azureOutputFileUUID; + } + + public String getAzureOutputFileETag() { + return azureOutputFileETag; + } + + public void setAzureOutputFileETag(String azureOutputFileETag) { + this.azureOutputFileETag = azureOutputFileETag; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getInputFileName() { + return inputFileName; + } + + public void setInputFileName(String inputFileName) { + this.inputFileName = inputFileName; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Integer getFileCountRow() { + return fileCountRow; + } + + public void setFileCountRow(Integer fileCountRow) { + this.fileCountRow = fileCountRow; + } + + public Integer getFileCountAliasMatch() { + return fileCountAliasMatch; + } + + public void setFileCountAliasMatch(Integer fileCountAliasMatch) { + this.fileCountAliasMatch = fileCountAliasMatch; + } + + public Integer getFileCountDirectMatch() { + return fileCountDirectMatch; + } + + public void setFileCountDirectMatch(Integer fileCountDirectMatch) { + this.fileCountDirectMatch = fileCountDirectMatch; + } + + public Integer getFileCountNoMatch() { + return fileCountNoMatch; + } + + public void setFileCountNoMatch(Integer fileCountNoMatch) { + this.fileCountNoMatch = fileCountNoMatch; + } + + public String getDateCreated() { + return dateCreated; + } + + public void setDateCreated(String dateCreated) { + this.dateCreated = dateCreated; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } +} diff --git a/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/response/SearchResponse.java b/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/response/SearchResponse.java new file mode 100644 index 0000000000..a990ac0f70 --- /dev/null +++ b/toolkits/discourse/src/main/java/com/ossez/toolkits/discourse/common/model/response/SearchResponse.java @@ -0,0 +1,37 @@ +package discourse.common.model.response; + +import java.io.Serializable; +import java.util.Date; + +/** + * SearchResponse from Remote Source + * + * @author YuCheng Hu + */ +public class SearchResponse implements Serializable { + private static final long serialVersionUID = -2014480627591149391L; + + + private String uuid; + private Date currentDate; + + public static long getSerialVersionUID() { + return serialVersionUID; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public Date getCurrentDate() { + return currentDate; + } + + public void setCurrentDate(Date currentDate) { + this.currentDate = currentDate; + } +} diff --git a/toolkits/discourse/src/test/java/com/ossez/toolkits/discourse/DiscourseTopicsImportTest.java b/toolkits/discourse/src/test/java/com/ossez/toolkits/discourse/DiscourseTopicsImportTest.java new file mode 100644 index 0000000000..281905bf79 --- /dev/null +++ b/toolkits/discourse/src/test/java/com/ossez/toolkits/discourse/DiscourseTopicsImportTest.java @@ -0,0 +1,135 @@ +package com.ossez.toolkits.discourse; + +import com.google.gson.Gson; +import com.ossez.toolkits.discourse.common.model.entity.BBSOssezForumAttach; +import com.ossez.toolkits.discourse.common.model.entity.BBSOssezForumPost; +import com.ossez.toolkits.discourse.common.model.request.TopicRequest; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.apache.http.HttpHeaders; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.joda.time.DateTime; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * Test Logger and function + * + * @author YuCheng Hu + */ +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class DiscourseTopicsImportTest { + private static Logger logger = LoggerFactory.getLogger(DiscourseTopicsImportTest.class); + + + @BeforeAll + protected void setUp() throws Exception { + } + + @AfterAll + protected void tearDown() throws Exception { + } + + /** + * Tests search functionality for the customer object. + */ + @Test + public void testPost() throws IOException, InterruptedException { + List idList = FileUtils.readLines(new File("C:\\Users\\yhu\\Pictures\\Pics\\2021-01\\1.txt")); + for (String id : idList) { + processPost(NumberUtils.toLong(id)); + Thread.sleep(6000); +// break; + + } + + + // make sure the customer was found +// assertNotNull(bbsOssezForumPost); + } + + @Test + public void testDateTime() throws IOException { + DateTime dateTime = new DateTime(1256834117 * 1000L); + System.out.println(dateTime.toString()); + + } + + private void processPost(Long tid) throws IOException { + String postCtx = StringUtils.EMPTY; + +// BBSOssezForumPost bbsOssezForumPost = PostFactory.getBBSOssezForumPostTid(tid); +// if (bbsOssezForumPost == null) +// return; +// +// logger.debug("Questions Content - {}", bbsOssezForumPost.getSubject()); +// +// String postCtx = bbsOssezForumPost.getMessage(); +//// logger.debug(">>>>{}", postCtx); +// +// +// String pattern = "\\[attach\\]((\\d)*?)\\[\\/attach\\]"; +// +// // Create a Pattern object +// Pattern r = Pattern.compile(pattern); +// +// // Now create matcher object. +// Matcher m = r.matcher(postCtx); +// +// while (m.find()) { +// String attachId = StringUtils.substringBetween(m.group(0), "[attach]", "[/attach]"); +// logger.debug("{}", attachId); +// BBSOssezForumAttach bbsOssezForumAttach = PostFactory.getBBSOssezForumAttach(NumberUtils.toLong(attachId)); +// if (bbsOssezForumAttach!= null) { +// String fullURL = "![](https://cdn.ossez.com/com-ossez-www/data/attachment/forum/" + bbsOssezForumAttach.getAttachment() + ")"; +// postCtx = StringUtils.replace(postCtx, m.group(0), fullURL); +// } +// } + + logger.debug("{}", postCtx); + + + CloseableHttpClient client = HttpClients.createDefault(); + + HttpPost httpPost = new HttpPost("https://www.ossez.com/posts.json"); + httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json; charset=UTF-8"); + httpPost.setHeader("Api-Key", "8d789c529c4c22bf1dac3de7dbe7b29af10f2429aeb9a1914eff6da70c2265a9"); + httpPost.setHeader("Api-Username", "honeymoose"); + + TopicRequest topicRequest = new TopicRequest(); + topicRequest.setTitle(bbsOssezForumPost.getSubject()); + topicRequest.setRaw(postCtx); + topicRequest.setCreated_at(new DateTime(bbsOssezForumPost.getDateline() * 1000L).toString() ); + topicRequest.setCategory(30); + + StringEntity postingString = new StringEntity(new Gson().toJson(topicRequest), StandardCharsets.UTF_8); + + httpPost.setEntity(postingString); + + + CloseableHttpResponse response = client.execute(httpPost); + + logger.info("{}", EntityUtils.toString(response.getEntity()), StandardCharsets.UTF_8); + client.close(); + } + +} diff --git a/toolkits/discourse/src/test/resources/data/azure_storage.json b/toolkits/discourse/src/test/resources/data/azure_storage.json new file mode 100644 index 0000000000..eb20d14fae --- /dev/null +++ b/toolkits/discourse/src/test/resources/data/azure_storage.json @@ -0,0 +1,15 @@ +{ + "id": 16, + "uuid": "35057495-bec8-4288-beec-568c552c88e4", + "dateModified": "2020-10-29T11:56:06.630+00:00", + "userId": "24548d05-5274-4ea0-82aa-f1693cb82045", + "userName": "Hu, Yucheng", + "userEmail": "Yucheng.Hu@insight.com", + "customerName": "license (1).txt", + "inputFileName": "license (1).txt", + "fileRowCount": null, + "fileMatchCount": null, + "fileStatus": null, + "fileSHA3": "069f7222e83cecec5663c47b0e2736709c425448b47962d1827ca958", + "createDate": "2020-10-29T11:56:06.630+00:00" +} \ No newline at end of file diff --git a/toolkits/discourse/src/test/resources/log4j.xml b/toolkits/discourse/src/test/resources/log4j.xml new file mode 100644 index 0000000000..4c1a066f00 --- /dev/null +++ b/toolkits/discourse/src/test/resources/log4j.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/toolkits/pom.xml b/toolkits/pom.xml new file mode 100644 index 0000000000..d0d92c38b4 --- /dev/null +++ b/toolkits/pom.xml @@ -0,0 +1,19 @@ + + + 4.0.0 + toolkits + toolkits + pom + + + com.ossez + parent-modules + 1.0.0 + + + + discourse + + +