Skip to content

Commit

Permalink
refactor: creating adapters static
Browse files Browse the repository at this point in the history
  • Loading branch information
1grzyb1 committed Apr 9, 2024
1 parent 46578ce commit 999446a
Show file tree
Hide file tree
Showing 9 changed files with 89 additions and 84 deletions.
16 changes: 12 additions & 4 deletions src/main/kotlin/odyseja/odysejapka/drive/DriveAdapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,31 @@ import com.google.api.client.auth.oauth2.Credential
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport
import com.google.api.client.http.javanet.NetHttpTransport
import com.google.api.client.json.JsonFactory
import com.google.api.client.json.gson.GsonFactory
import com.google.api.services.drive.Drive
import com.google.api.services.drive.model.File

class DriveAdapter(
credentials: Credential,
jsonFactory: JsonFactory,
val fromFolderId: String,
jsonFactory: JsonFactory
) {

companion object {
fun getDriveAdapter(): DriveAdapter {
val credentials = CredentialsProvider().getCredentials()
val jsonFactory = GsonFactory.getDefaultInstance()
return DriveAdapter(credentials, jsonFactory)
}
}

private val httpTransport: NetHttpTransport = GoogleNetHttpTransport.newTrustedTransport()
private val service: Drive = Drive.Builder(httpTransport, jsonFactory, credentials)
.setApplicationName("gad")
.build()

fun listFiles(): List<File> {
fun listFiles(folderId: String): List<File> {
return service.files().list()
.setQ("parents in '$fromFolderId'")
.setQ("parents in '$folderId'")
.execute()
.files
}
Expand Down
34 changes: 30 additions & 4 deletions src/main/kotlin/odyseja/odysejapka/drive/SheetAdapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,24 @@ import com.google.api.client.auth.oauth2.Credential
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport
import com.google.api.client.http.javanet.NetHttpTransport
import com.google.api.client.json.JsonFactory
import com.google.api.client.json.gson.GsonFactory
import com.google.api.services.sheets.v4.Sheets
import com.google.api.services.sheets.v4.model.Sheet
import com.google.api.services.sheets.v4.model.ValueRange

class SheetAdapter(
credentials: Credential,
jsonFactory: JsonFactory,
) {

companion object {
fun getSheetAdapter(): SheetAdapter {
val credentials = CredentialsProvider().getCredentials()
val jsonFactory = GsonFactory.getDefaultInstance()
return SheetAdapter(credentials, jsonFactory)
}
}

private val httpTransport: NetHttpTransport = GoogleNetHttpTransport.newTrustedTransport()
private val service: Sheets = Sheets.Builder(httpTransport, jsonFactory, credentials)
.setApplicationName("gad")
Expand All @@ -31,10 +41,26 @@ class SheetAdapter(
return stringValues
}

fun writeValue(sheetId: String, sheetName: String, range: String, value: String) {
val values = listOf(listOf(value))
val body = com.google.api.services.sheets.v4.model.ValueRange().setValues(values)
service.spreadsheets().values().update(sheetId, "$sheetName!$range", body).setValueInputOption("USER_ENTERED")
fun writeValue(
sheetId: String,
sheetName: String,
range: String,
value: String,
inputType: String = "USER_ENTERED"
) {
writeValues(sheetId, sheetName, range, listOf(value), inputType)
}

fun writeValues(
sheetId: String,
sheetName: String,
range: String,
writeValues: List<String>,
inputType: String = "USER_ENTERED"
) {
val values = listOf(writeValues)
val body = ValueRange().setValues(values)
service.spreadsheets().values().update(sheetId, "$sheetName!$range", body).setValueInputOption(inputType)
.execute()
}
}
81 changes: 33 additions & 48 deletions src/main/kotlin/odyseja/odysejapka/drive/ZspSheetsAdapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,51 +2,36 @@ package odyseja.odysejapka.drive

import Team
import Teams
import com.google.api.client.auth.oauth2.Credential
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport
import com.google.api.client.http.javanet.NetHttpTransport
import com.google.api.client.json.JsonFactory
import com.google.api.services.sheets.v4.Sheets
import com.google.api.services.sheets.v4.model.Sheet
import com.google.api.services.sheets.v4.model.ValueRange

class ZspSheetsAdapter(
credentials: Credential,
jsonFactory: JsonFactory,
private val sheetAdapter: SheetAdapter,
private val zspId: String
) {

private val httpTransport: NetHttpTransport = GoogleNetHttpTransport.newTrustedTransport()
private val service: Sheets = Sheets.Builder(httpTransport, jsonFactory, credentials)
.setApplicationName("gad")
.build()

fun writeZsp(row: String, value: List<String>, sheetName: String) {
val range = "$sheetName!$row"
val valueRange = listOf(value)
service.spreadsheets().values().update(zspId, range, ValueRange().setValues(valueRange))
.setValueInputOption("USER_ENTERED")
.execute()
companion object {
fun getZspSheetsAdapter(zspId: String): ZspSheetsAdapter {
return ZspSheetsAdapter(SheetAdapter.getSheetAdapter(), zspId)
}
}

fun writeZsp(cell: String, value: List<String>, sheetName: String) {
sheetAdapter.writeValues(zspId, sheetName, cell, value)
}

fun writeCell(row: String, value: String, sheetId: String) {
val range = "Arkusz Ocen Cząstkowych!$row"
val valueRange = listOf(listOf(value))
service.spreadsheets().values().update(sheetId, range, ValueRange().setValues(valueRange))
.setValueInputOption("RAW")
.execute()
fun writeCell(cell: String, value: String, sheetId: String) {
listOf(listOf(value))
sheetAdapter.writeValue(sheetId, "Arkusz Ocen Cząstkowych", cell, value, "RAW")
}

fun getCellValue(row: String, sheetId: String): String {
val values =
service.spreadsheets().values().get(sheetId, "Arkusz Ocen Cząstkowych!$row").execute()
.getValues()
return values[0][0].toString()
fun getCellValue(cell: String, sheetId: String): String {
val values = sheetAdapter.getValue(sheetId, "Arkusz Ocen Cząstkowych", cell)
return values[0][0]
}


fun getSheets(): MutableList<Sheet>? {
return service.spreadsheets().get(zspId).execute().sheets
return sheetAdapter.getSheet(zspId)
}

fun getNumericalValue(row: List<Any>, size: Int): Float {
Expand All @@ -64,40 +49,40 @@ class ZspSheetsAdapter(
}

fun getTeams(sheetName: String): Teams {
val values = service.spreadsheets().values().get(zspId, "$sheetName!A1:P").execute().getValues()
val values = sheetAdapter.getValue(zspId, sheetName, "A1:P")
val teams = mutableListOf<Team>()
var judges = ""
var day = ""
var stage = 1
for ((i, row) in values.withIndex()) {

if (row.size > 0 && isJudge(row[0].toString())) {
judges = row[1].toString()
if (row.size > 0 && isJudge(row[0])) {
judges = row[1]
break
}

if (row.size > 0 && isDay(row[0].toString())) {
day = row[0].toString()
if (row.size > 0 && isDay(row[0])) {
day = row[0]
}

if (row.size > 0 && isStage(row[0].toString())) {
stage = row[0].toString().split(" ")[1].toInt()
if (row.size > 0 && isStage(row[0])) {
stage = row[0].split(" ")[1].toInt()
}

if (row.size == 0 || !isTime(row[0].toString())) {
if (row.size == 0 || !isTime(row[0])) {
continue
}
teams.add(
Team(
performanceHour = row[0].toString(),
spontanHour = row[1].toString(),
code = row[2].toString(),
membershipNumber = row[3].toString(),
league = row[4].toString(),
part = row[5].toString(),
teamName = row[6].toString(),
shortTeamName = row[7].toString(),
city = row[8].toString(),
performanceHour = row[0],
spontanHour = row[1],
code = row[2],
membershipNumber = row[3],
league = row[4],
part = row[5],
teamName = row[6],
shortTeamName = row[7],
city = row[8],
zspRow = i + 1,
day = day,
stage = stage,
Expand Down
10 changes: 3 additions & 7 deletions src/main/kotlin/odyseja/odysejapka/gad/GadConfiguration.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import com.google.api.client.json.gson.GsonFactory
import odyseja.odysejapka.drive.CredentialsProvider
import odyseja.odysejapka.drive.DriveAdapter
import odyseja.odysejapka.drive.ZspSheetsAdapter

Expand All @@ -11,10 +9,8 @@ internal class GadConfiguration(
) {

fun gadRunner(): GadRunner {
val credentials = CredentialsProvider().getCredentials()
val jsonFactory = GsonFactory.getDefaultInstance()
val driveAdapter = DriveAdapter(credentials, jsonFactory, templatesFolderId)
val sheetsAdapter = ZspSheetsAdapter(credentials, jsonFactory, zspId)
return GadRunner(driveAdapter, sheetsAdapter, problemPunctuationCells, destinationFolderId)
val driveAdapter = DriveAdapter.getDriveAdapter()
val sheetsAdapter = ZspSheetsAdapter.getZspSheetsAdapter(zspId)
return GadRunner(driveAdapter, sheetsAdapter, problemPunctuationCells, destinationFolderId, templatesFolderId)
}
}
5 changes: 3 additions & 2 deletions src/main/kotlin/odyseja/odysejapka/gad/GadRunner.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ internal class GadRunner(
private val driveAdapter: DriveAdapter,
private val sheetsAdapter: ZspSheetsAdapter,
private val problemPunctuationCells: Map<String, PunctationCells>,
private val destinationFolderId: String
private val destinationFolderId: String,
private val templatesFolderId: String
) : Runner {

private val templates = getTemplates()
Expand Down Expand Up @@ -87,7 +88,7 @@ internal class GadRunner(

private fun getTemplates(): Map<Char, File> {
return driveAdapter
.listFiles()
.listFiles(templatesFolderId)
.filter { it.name.endsWith("_KOD_NAZWA") }
.associateBy { it.name[1] }
}
Expand Down
10 changes: 3 additions & 7 deletions src/main/kotlin/odyseja/odysejapka/sak/SakConfiguration.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import com.google.api.client.json.gson.GsonFactory
import odyseja.odysejapka.drive.CredentialsProvider
import odyseja.odysejapka.drive.DriveAdapter
import odyseja.odysejapka.drive.SheetAdapter
import odyseja.odysejapka.sak.SakRunner
Expand All @@ -12,10 +10,8 @@ internal class SakConfiguration(
) {

fun sakRunner(): SakRunner {
val credentials = CredentialsProvider().getCredentials()
val jsonFactory = GsonFactory.getDefaultInstance()
val driveAdapter = DriveAdapter(credentials, jsonFactory, templatesFolderId)
val sheetsAdapter = SheetAdapter(credentials, jsonFactory)
return SakRunner(driveAdapter, sheetsAdapter, timetableService, zspId)
val driveAdapter = DriveAdapter.getDriveAdapter()
val sheetsAdapter = SheetAdapter.getSheetAdapter()
return SakRunner(driveAdapter, sheetsAdapter, timetableService, zspId, templatesFolderId)
}
}
5 changes: 3 additions & 2 deletions src/main/kotlin/odyseja/odysejapka/sak/SakRunner.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ internal class SakRunner(
private val driveAdapter: DriveAdapter,
private val sheetsAdapter: SheetAdapter,
private val timetableService: TimeTableService,
private val zspId: String
private val zspId: String,
private val templatesFolderId: String
) : Runner {

private val templates = getTemplates()
Expand Down Expand Up @@ -91,7 +92,7 @@ internal class SakRunner(

private fun getTemplates(): List<File> {
return driveAdapter
.listFiles()
.listFiles(templatesFolderId)
.filter { it.name.startsWith("P") }
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package odyseja.odysejapka.timetable

import TimeTableImporter
import com.google.api.client.json.gson.GsonFactory
import odyseja.odysejapka.Progress
import odyseja.odysejapka.Status
import odyseja.odysejapka.city.CityRepository
import odyseja.odysejapka.drive.CredentialsProvider
import odyseja.odysejapka.drive.ZspSheetsAdapter
import org.springframework.stereotype.Service

Expand All @@ -25,9 +23,7 @@ class ImportTimetableService(
}

clearTimeTable(cityId)
val credentials = CredentialsProvider().getCredentials()
val jsonFactory = GsonFactory.getDefaultInstance()
val sheetsAdapter = ZspSheetsAdapter(credentials, jsonFactory, zspId)
val sheetsAdapter = ZspSheetsAdapter.getZspSheetsAdapter(zspId)
val cityName = cityRepository.findFirstById(cityId).name
performanceService.deleteCity(cityId)
importer = TimeTableImporter(performanceService, sheetsAdapter, cityName)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package odyseja.odysejapka.tournament.manager

import Team
import com.google.api.client.json.gson.GsonFactory
import odyseja.odysejapka.drive.CredentialsProvider
import odyseja.odysejapka.drive.ZspSheetsAdapter
import org.springframework.stereotype.Service
import java.io.ByteArrayOutputStream
Expand Down Expand Up @@ -45,9 +43,7 @@ class TournamentManagerService {
}

fun generateCsv(zspId: String): ByteArray {
val credentials = CredentialsProvider().getCredentials()
val jsonFactory = GsonFactory.getDefaultInstance()
val sheetsAdapter = ZspSheetsAdapter(credentials, jsonFactory, zspId)
val sheetsAdapter = ZspSheetsAdapter.getZspSheetsAdapter(zspId)
val sheets = sheetsAdapter.getSheets()
val byteArrayOutputStream = ByteArrayOutputStream()

Expand Down

0 comments on commit 999446a

Please sign in to comment.