Skip to content

Commit

Permalink
Refactor to MVC
Browse files Browse the repository at this point in the history
Add H2 DB for testing
Remove future services for clarity
Enable H2 console
Swap Kdoc crudrepository implementation for a JpaRepository implementation
  • Loading branch information
davedavis committed Feb 21, 2022
1 parent ce94d88 commit aec6996
Show file tree
Hide file tree
Showing 14 changed files with 175 additions and 122 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ build/
.vscode/
/bak/
/.mvn/
/.mvn/
/mvnw
/mvnw.cmd
/secrets/
5 changes: 5 additions & 0 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ https://davedavis.atlassian.net/jira/software/c/projects/PDFIT/boards/4/backlog



## In Mem testing DB
- http://localhost:8080/h2-console/
- jdbc:h2:mem:testdatabase
- No user or pass.

## Sprint 0 requirements
- Introduction to Application (Overall),
- List of User Stories (Overall),
Expand Down
82 changes: 0 additions & 82 deletions src/main/java/io/klutter/DocumentService.java

This file was deleted.

6 changes: 3 additions & 3 deletions src/main/java/io/klutter/KlutterApplication.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package io.klutter;

import io.klutter.dao.KdocRepository;
import io.klutter.entity.Kdoc;
import io.klutter.data.KdocRepository;
import io.klutter.models.Kdoc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;

//Add the scanBasePackages parameter to the annotation as I added my services in
//separate packages so, they need to be configured on application start.
@SpringBootApplication(scanBasePackages = {"io.klutter.declutterservice", "io.klutter.pdfservice", "io.klutter.dao"} )
@SpringBootApplication(scanBasePackages = {"io.klutter.models", "io.klutter.controllers", "io.klutter.data", "io.klutter.services"} )
public class KlutterApplication {

private final KdocRepository kdocRepository;
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/io/klutter/controllers/KdocController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.klutter.controllers;


import io.klutter.models.Kdoc;
import io.klutter.services.KdocService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/kdocs")
public class KdocController {

private final KdocService kdocService;


public KdocController(KdocService kdocService) {
this.kdocService = kdocService;
}

@GetMapping
public List<Kdoc> getAllKdocs(){
return kdocService.getAllKdocs();
}
}
27 changes: 27 additions & 0 deletions src/main/java/io/klutter/controllers/KdocRestController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.klutter.controllers;


import io.klutter.models.Kdoc;
import io.klutter.services.KdocService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/api/v1/kdocs")
public class KdocRestController {

private final KdocService kdocService;


public KdocRestController(KdocService kdocService) {
this.kdocService = kdocService;
}

@GetMapping
public List<Kdoc> getAllKdocs(){
return kdocService.getAllKdocs();
}
}
12 changes: 0 additions & 12 deletions src/main/java/io/klutter/dao/KdocRepository.java

This file was deleted.

13 changes: 13 additions & 0 deletions src/main/java/io/klutter/data/KdocRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package io.klutter.data;

import io.klutter.models.Kdoc;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface KdocRepository extends JpaRepository<Kdoc, Long> {

// Additional non-CRUD related methods.

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package io.klutter.entity;
package io.klutter.models;

import javax.persistence.*;
import java.io.Serializable;

@Entity
@Table(name = "Kdoc")
public class Kdoc implements Serializable {
//public class Kdoc implements Serializable {
public class Kdoc {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
94 changes: 94 additions & 0 deletions src/main/java/io/klutter/services/KdocService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package io.klutter.services;

import io.github.bonigarcia.wdm.WebDriverManager;
import io.klutter.data.KdocRepository;
import io.klutter.models.Kdoc;
import io.whelk.flesch.kincaid.ReadabilityCalculator;
import net.dankito.readability4j.Readability4J;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.safety.Safelist;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/api/v1")
public class KdocService {

private final KdocRepository kdocRepository;

public KdocService(KdocRepository kdocRepository) {
this.kdocRepository = kdocRepository;
}

public List<Kdoc> getAllKdocs(){
return kdocRepository.findAll();
}

// @RequestMapping("/documents")
// public String index() {
//
// String url = "https://realpython.com/python-sockets/";
//
// // Selenium. Using Selenium because jsoup doesn't handle JS and lazy loading.
// // System.setProperty("webdriver.chrome.driver", "/home/dave/chromedriver");
// ChromeOptions options = new ChromeOptions();options.addArguments("--headless");
// //WebDriver driver = new ChromeDriver(options);
//
// // Using Webdriver
// WebDriverManager.chromedriver().setup();
// WebDriver driver = new ChromeDriver(options);
//
// // ToDo: Receive URL from frontend.
// driver.get(url);
//
// // Get the raw HTML source.
// String html = driver.getPageSource();
//
// // Parse with Jsoup, so we can work with it.;
// Document doc = Jsoup.parse(html);
//
// // ToDo: Do a bit of sanitization on the HTML before passing to the PDF service.
// String safe = Jsoup.clean(doc.html(), Safelist.basic());
//
// // Process with the readability4j mozilla readability.js wrapper.
// Readability4J readability4J = new Readability4J(url, doc);
// net.dankito.readability4j.Article article = readability4J.parse();
//
// // returns extracted content in a <div> element
// String extractedContentHtml = article.getContent();
// // to get content wrapped in <html> tags and encoding set to UTF-8, see chapter 'Output encoding'
// String extractedContentHtmlWithUtf8Encoding = article.getContentWithUtf8Encoding();
// String extractedContentPlainText = article.getTextContent();
// String title = article.getTitle();
// String byline = article.getByline();
// String excerpt = article.getExcerpt();
//
//
// // Get the reading ease score.
// double ease = ReadabilityCalculator.calculateReadingEase(extractedContentPlainText);
//
// // Get the grade level score.
// double grade = ReadabilityCalculator.calculateGradeLevel(extractedContentPlainText);
//
// // Check it's working
// System.out.println(ease + " " + grade);
//
// // Testing the sizing of the document for Azure
//// System.out.println(">>>>>>>>>>>>>>>>>>>>>> " + extractedContentPlainText.length());
//// System.out.println(">>>>>>>>>>>>>>>>>>>>>> " + WordUtils.wrap(extractedContentPlainText, 40));
//
// // ToDo: Add user, title, excerpt, byline, content, ease, grade and tag array to model.
//
// // Return the clean HTML
// return extractedContentHtml;
// }


}

Original file line number Diff line number Diff line change
@@ -1,18 +1,9 @@
package io.klutter.pdfservice;
package io.klutter.services;
import com.github.jhonnymertz.wkhtmltopdf.wrapper.Pdf;
import com.github.jhonnymertz.wkhtmltopdf.wrapper.configurations.WrapperConfig;
import com.github.jhonnymertz.wkhtmltopdf.wrapper.params.Param;
import io.github.bonigarcia.wdm.WebDriverManager;
import net.dankito.readability4j.Readability4J;
import okhttp3.HttpUrl;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.safety.Safelist;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

Expand Down

This file was deleted.

4 changes: 0 additions & 4 deletions src/main/java/io/klutter/wavenetservice/WavenetService.java

This file was deleted.

2 changes: 2 additions & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ spring.mvc.pathmatch.matching-strategy=ant_path_matcher
# ToDo: Remove for production
# For logging H2 during dev.
logging.level.org.springframework.jdbc.datasource.init.ScriptUtils=debug
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdatabase

# Tell JPA that I'll handle the schema, just connect to the DB.
spring.jpa.hibernate.ddl-auto=none
Expand Down

0 comments on commit aec6996

Please sign in to comment.