🔥 Remove unnecessary @JvmOverloads annotation
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / web / PageToadletRegistry.kt
1 package net.pterodactylus.sone.web
2
3 import freenet.clients.http.*
4 import net.pterodactylus.sone.main.*
5 import net.pterodactylus.sone.web.page.*
6 import net.pterodactylus.util.web.*
7 import java.util.concurrent.atomic.*
8 import javax.inject.*
9
10 private const val soneMenu = "Navigation.Menu.Sone"
11 private const val soneMenuName = "$soneMenu.Name"
12
13 class PageToadletRegistry @Inject constructor(
14                 private val pageMaker: PageMaker,
15                 private val toadletContainer: ToadletContainer,
16                 private val sonePlugin: SonePlugin,
17                 private val pageToadletFactory: PageToadletFactory
18 ) {
19
20         private val pages = mutableListOf<Page<FreenetRequest>>()
21         private val registeredToadlets = mutableListOf<PageToadlet>()
22         private val registered = AtomicBoolean(false)
23
24         fun addPage(page: Page<FreenetRequest>) {
25                 if (registered.get()) throw IllegalStateException()
26                 pages += page
27         }
28
29         fun registerToadlets() {
30                 registered.set(true)
31                 pageMaker.addNavigationCategory("/Sone/index.html", soneMenuName, "$soneMenu.Tooltip", sonePlugin)
32                 addPages()
33         }
34
35         private fun addPages() =
36                         pages
37                                         .map { pageToadletFactory.createPageToadlet(it) }
38                                         .onEach(registeredToadlets::plusAssign)
39                                         .forEach { pageToadlet ->
40                                                 if (pageToadlet.menuName == null) {
41                                                         registerToadletWithoutMenuname(pageToadlet)
42                                                 } else {
43                                                         registerToadletWithMenuname(pageToadlet)
44                                                 }
45                                         }
46
47         private fun registerToadletWithoutMenuname(pageToadlet: PageToadlet) =
48                         toadletContainer.register(pageToadlet, null, pageToadlet.path(), true, false)
49
50         private fun registerToadletWithMenuname(pageToadlet: PageToadlet) =
51                         toadletContainer.register(pageToadlet, soneMenuName, pageToadlet.path(), true, "$soneMenu.Item.${pageToadlet.menuName}.Name", "$soneMenu.Item.${pageToadlet.menuName}.Tooltip", false, pageToadlet)
52
53         fun unregisterToadlets() {
54                 pageMaker.removeNavigationCategory(soneMenuName)
55                 registeredToadlets.forEach(toadletContainer::unregister)
56         }
57
58 }