Skip to content

Commit

Permalink
[Feature Improvements]: Tabs indetation selector added
Browse files Browse the repository at this point in the history
  • Loading branch information
robohorse committed May 1, 2020
1 parent 8942d90 commit 0863255
Show file tree
Hide file tree
Showing 16 changed files with 140 additions and 19 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Expand Up @@ -44,7 +44,7 @@ repositories {
}

group "com.robohorse.robopojogenerator"
version "2.1.0"
version "2.2.0"

intellij {
pluginName "RoboPOJOGenerator"
Expand Down
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.robohorse.robopojogenerator.view.GeneratorVew">
<grid id="27dc6" binding="rootView" layout-manager="GridLayoutManager" row-count="3" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<grid id="27dc6" binding="rootView" layout-manager="GridLayoutManager" row-count="4" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="903" height="594"/>
Expand All @@ -21,7 +21,7 @@
<grid id="3058d" binding="controlsPanel" layout-manager="GridLayoutManager" row-count="5" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<grid row="0" column="1" row-span="3" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
<grid row="0" column="1" row-span="4" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
<border type="none"/>
Expand Down Expand Up @@ -175,7 +175,7 @@
<grid id="72ebd" binding="commonInfoPanel" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
<border type="empty"/>
Expand All @@ -202,13 +202,22 @@
</grid>
<component id="73962" class="javax.swing.JCheckBox" binding="rewriteExistingClassesCheckBox" default-binding="true">
<constraints>
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<selected value="true"/>
<text value="Rewrite existing classes"/>
</properties>
</component>
<component id="5ac4c" class="javax.swing.JCheckBox" binding="useTabsIndentation">
<constraints>
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<selected value="true"/>
<text value="Use tabs indentation"/>
</properties>
</component>
</children>
</grid>
<buttonGroups>
Expand Down
Expand Up @@ -30,9 +30,14 @@ public class GeneratorVew {
private JPanel commonInfoPanel;
private JPanel controlsPanel;
private JScrollPane scrollPropertiesPanel;
private JCheckBox useTabsIndentation;
private ButtonGroup sourceGroup;
private ButtonGroup languageGroup;

public JCheckBox getUseTabsIndentation() {
return useTabsIndentation;
}

public JRadioButton getJavaRadioButton() {
return javaRadioButton;
}
Expand Down
@@ -0,0 +1,11 @@
package com.robohorse.robopojogenerator.delegates

import com.robohorse.robopojogenerator.generator.consts.templates.ClassTemplate

class IndentationDelegate {

fun updateFileBody(body: String) =
body.replace(ClassTemplate.TAB, "$SPACE$SPACE$SPACE$SPACE")
}

private const val SPACE = " "
@@ -0,0 +1,16 @@
package com.robohorse.robopojogenerator.delegates

import com.robohorse.robopojogenerator.models.GenerationModel

class PreWriterDelegate(
private val indentationDelegate: IndentationDelegate
) {

fun updateFileBody(
generationModel: GenerationModel, body: String
) = if (!generationModel.useTabsIndentation) {
indentationDelegate.updateFileBody(body)
} else {
body
}
}
@@ -1,6 +1,7 @@
package com.robohorse.robopojogenerator.delegates.file

import com.robohorse.robopojogenerator.delegates.MessageDelegate
import com.robohorse.robopojogenerator.delegates.PreWriterDelegate
import com.robohorse.robopojogenerator.errors.FileWriteException
import com.robohorse.robopojogenerator.generator.consts.common.ClassItem
import com.robohorse.robopojogenerator.generator.postrocessing.PostProcessorFactory
Expand All @@ -12,7 +13,8 @@ import java.io.IOException
abstract class BaseWriterDelegate(
private val messageDelegate: MessageDelegate,
private val factory: PostProcessorFactory,
private val fileWriterDelegate: FileWriterDelegate
private val fileWriterDelegate: FileWriterDelegate,
private val preWriterDelegate: PreWriterDelegate
) {

abstract fun writeFiles(set: Set<ClassItem>,
Expand Down Expand Up @@ -47,7 +49,9 @@ abstract class BaseWriterDelegate(
} else {
messageDelegate.logEventMessage("created $fileName")
}
fileWriterDelegate.writeToFile(classItemBody, file)
fileWriterDelegate.writeToFile(
preWriterDelegate.updateFileBody(generationModel, classItemBody), file
)
} catch (e: IOException) {
throw FileWriteException(e.message)
}
Expand Down
@@ -1,6 +1,7 @@
package com.robohorse.robopojogenerator.delegates.file

import com.robohorse.robopojogenerator.delegates.MessageDelegate
import com.robohorse.robopojogenerator.delegates.PreWriterDelegate
import com.robohorse.robopojogenerator.generator.consts.common.ClassItem
import com.robohorse.robopojogenerator.generator.postrocessing.PostProcessorFactory
import com.robohorse.robopojogenerator.models.GenerationModel
Expand All @@ -9,8 +10,9 @@ import com.robohorse.robopojogenerator.models.ProjectModel
class CommonFileWriterDelegate(
messageDelegate: MessageDelegate,
factory: PostProcessorFactory,
fileWriterDelegate: FileWriterDelegate
) : BaseWriterDelegate(messageDelegate, factory, fileWriterDelegate) {
fileWriterDelegate: FileWriterDelegate,
preWriterDelegate: PreWriterDelegate
) : BaseWriterDelegate(messageDelegate, factory, fileWriterDelegate, preWriterDelegate) {

override fun writeFiles(
set: Set<ClassItem>,
Expand Down
@@ -1,6 +1,7 @@
package com.robohorse.robopojogenerator.delegates.file

import com.robohorse.robopojogenerator.delegates.MessageDelegate
import com.robohorse.robopojogenerator.delegates.PreWriterDelegate
import com.robohorse.robopojogenerator.generator.consts.common.ClassItem
import com.robohorse.robopojogenerator.generator.consts.templates.ClassTemplate
import com.robohorse.robopojogenerator.generator.postrocessing.PostProcessorFactory
Expand All @@ -13,8 +14,9 @@ class KotlinSingleFileWriterDelegate(
messageDelegate: MessageDelegate,
factory: PostProcessorFactory,
fileWriterDelegate: FileWriterDelegate,
preWriterDelegate: PreWriterDelegate,
private val kotlinDataClassPostProcessor: KotlinDataClassPostProcessor
) : BaseWriterDelegate(messageDelegate, factory, fileWriterDelegate) {
) : BaseWriterDelegate(messageDelegate, factory, fileWriterDelegate, preWriterDelegate) {

override fun writeFiles(
set: Set<ClassItem>,
Expand Down
16 changes: 11 additions & 5 deletions src/main/kotlin/com/robohorse/robopojogenerator/di/AppModules.kt
@@ -1,10 +1,8 @@
package com.robohorse.robopojogenerator.di

import com.robohorse.robopojogenerator.controllers.GeneratePOJOActionController
import com.robohorse.robopojogenerator.delegates.EnvironmentDelegate
import com.robohorse.robopojogenerator.delegates.*
import com.robohorse.robopojogenerator.delegates.file.CommonFileWriterDelegate
import com.robohorse.robopojogenerator.delegates.GenerationDelegate
import com.robohorse.robopojogenerator.delegates.MessageDelegate
import com.robohorse.robopojogenerator.delegates.file.FileWriterDelegate
import com.robohorse.robopojogenerator.delegates.file.KotlinSingleFileWriterDelegate
import com.robohorse.robopojogenerator.generator.RoboPOJOGenerator
Expand Down Expand Up @@ -65,15 +63,23 @@ val appModule = module {
}

single {
KotlinSingleFileWriterDelegate(get(), get(), get(), get())
KotlinSingleFileWriterDelegate(get(), get(), get(), get(), get())
}

single {
FileWriterDelegate()
}

single {
CommonFileWriterDelegate(get(), get(), get())
CommonFileWriterDelegate(get(), get(), get(), get())
}

single {
PreWriterDelegate(get())
}

single {
IndentationDelegate()
}

single {
Expand Down
Expand Up @@ -17,7 +17,8 @@ data class GenerationModel(
val useKotlinSingleDataClass: Boolean,
val useKotlinParcelable: Boolean,
val kotlinNullableFields: Boolean,
val javaPrimitives: Boolean
val javaPrimitives: Boolean,
val useTabsIndentation: Boolean
)

data class ProjectModel(
Expand Down
Expand Up @@ -27,7 +27,8 @@ class ViewModelMapper(
useKotlinParcelable = resolveCheckBox(KOTLIN_PARCELABLE),
useKotlinSingleDataClass = resolveCheckBox(KOTLIN_SINGLE_DATA_CLASS),
kotlinNullableFields = resolveCheckBox(KOTLIN_NULLABLE_FIELDS),
javaPrimitives = resolveCheckBox(JAVA_PRIMITIVE_TYPES)
javaPrimitives = resolveCheckBox(JAVA_PRIMITIVE_TYPES),
useTabsIndentation = useTabsIndentation.isSelected
)
}

Expand Down
5 changes: 3 additions & 2 deletions src/main/resources/META-INF/plugin.xml
@@ -1,7 +1,7 @@
<idea-plugin>
<id>com.robohorse.robopojogenerator</id>
<name>RoboPOJOGenerator</name>
<version>2.1.0</version>
<version>2.2.0</version>
<vendor email="robohorsed@gmail.com" url="https://github.com/robohorse/RoboPOJOGenerator">ROBOHORSE</vendor>

<description><![CDATA[
Expand All @@ -12,7 +12,8 @@
]]></description>

<change-notes><![CDATA[
Plugin design was updated, Kotlin parcelable (Android) support added.
Some improvements was implemented: Kotlin nullable/nonNullable fields support,
Java primitive/boxed fields support, tabs/spaces indentation support.
]]>
</change-notes>

Expand Down
@@ -0,0 +1,16 @@
package com.robohorse.robopojogenerator.delegates

import org.junit.jupiter.api.Test
import kotlin.test.assertEquals

class IndentationDelegateTest {
private val indentationDelegate = IndentationDelegate()

@Test
fun check_body_update() {
assertEquals(RESULT, indentationDelegate.updateFileBody(SOURCE))
}
}

private const val SOURCE = "class MyClass{\t}"
private const val RESULT = "class MyClass{ }"
@@ -0,0 +1,39 @@
package com.robohorse.robopojogenerator.delegates

import com.robohorse.robopojogenerator.models.GenerationModel
import io.mockk.every
import io.mockk.impl.annotations.InjectMockKs
import io.mockk.impl.annotations.RelaxedMockK
import io.mockk.junit5.MockKExtension
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import kotlin.test.assertEquals

@ExtendWith(MockKExtension::class)
class PreWriterDelegateTest {
@RelaxedMockK
lateinit var indentationDelegate: IndentationDelegate

@RelaxedMockK
lateinit var generationModel: GenerationModel

@InjectMockKs
lateinit var preWriterDelegate: PreWriterDelegate

@Test
fun checkIndentationApply() {
every { generationModel.useTabsIndentation }.returns(false)
every { indentationDelegate.updateFileBody(SOURCE) }.returns(RESULT)
assertEquals(RESULT, preWriterDelegate.updateFileBody(generationModel, SOURCE))
}

@Test
fun checkIndentationSkip() {
every { generationModel.useTabsIndentation }.returns(true)
every { indentationDelegate.updateFileBody(SOURCE) }.returns(RESULT)
assertEquals(SOURCE, preWriterDelegate.updateFileBody(generationModel, SOURCE))
}
}

private const val SOURCE = "class MyClass{\t}"
private const val RESULT = "class MyClass{ }"
@@ -1,6 +1,7 @@
package com.robohorse.robopojogenerator.delegates.file

import com.robohorse.robopojogenerator.delegates.MessageDelegate
import com.robohorse.robopojogenerator.delegates.PreWriterDelegate
import com.robohorse.robopojogenerator.generator.consts.common.ClassItem
import com.robohorse.robopojogenerator.generator.postrocessing.PostProcessorFactory
import com.robohorse.robopojogenerator.models.GenerationModel
Expand Down Expand Up @@ -33,6 +34,9 @@ class CommonFileWriterDelegateTest {
@RelaxedMockK
lateinit var fileWriterDelegate: FileWriterDelegate

@RelaxedMockK
lateinit var preWriterDelegate: PreWriterDelegate

@InjectMockKs
lateinit var delegate: CommonFileWriterDelegate

Expand Down
@@ -1,6 +1,7 @@
package com.robohorse.robopojogenerator.delegates.file

import com.robohorse.robopojogenerator.delegates.MessageDelegate
import com.robohorse.robopojogenerator.delegates.PreWriterDelegate
import com.robohorse.robopojogenerator.generator.consts.common.ClassItem
import com.robohorse.robopojogenerator.generator.postrocessing.PostProcessorFactory
import com.robohorse.robopojogenerator.generator.postrocessing.common.KotlinDataClassPostProcessor
Expand Down Expand Up @@ -37,6 +38,9 @@ class KotlinSingleFileWriterDelegateTest {
@RelaxedMockK
lateinit var kotlinDataClassPostProcessor: KotlinDataClassPostProcessor

@RelaxedMockK
lateinit var preWriterDelegate: PreWriterDelegate

@InjectMockKs
lateinit var delegateSingle: KotlinSingleFileWriterDelegate

Expand Down

0 comments on commit 0863255

Please sign in to comment.