Skip to content

Commit fa3a5ce

Browse files
committed
cli 0.3.1 support
1 parent e1ea726 commit fa3a5ce

File tree

5 files changed

+37
-13
lines changed

5 files changed

+37
-13
lines changed

README.md

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,6 @@
2222
![](/img/step3.png)
2323
![](/img/step4.png)
2424

25-
## ⚠️ Known Restrictions
26-
27-
1. ✅ Waiting for release with fix\
28-
Output metadata .xml file is always named `OData ServiceCsdl.xml` which will throw a runtime exception. See more [https://github.com/OData/ODataConnectedService/issues/384](https://github.com/OData/ODataConnectedService/issues/384)\
29-
There is a workaround:\
30-
`a.` Rename `OData ServiceCsdl.xml` to `<Service name>Csdl.xml`, where `<Service name>` is value from OData CLI UI dialog\
31-
`b.` Adjust embedded resource path in `.csproj` file\
32-
`c.` Find `GeneratedEdmModel.filePath` constant in `Reference.cs` and change value from `OData ServiceCsdl.xml` to `<Service name>Csdl.xml`, where `<Service name>` is value from OData CLI UI dialog
33-
3425
## Additional References
3526

3627
- [Changelog](https://github.com/ellizio/rider--plugin--odata-cli-ui/blob/master/CHANGELOG.md)

src/rider/main/kotlin/ru/ellizio/odatacliui/extensions/ProtocolModelEx.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,17 @@ package ru.ellizio.odatacliui.extensions
22

33
import com.jetbrains.rd.ide.model.DotnetToolVersionDefinition
44

5-
fun DotnetToolVersionDefinition.humanize() : String = "$major.$minor.$patch"
5+
fun DotnetToolVersionDefinition.humanize() : String = "$major.$minor.$patch"
6+
7+
fun DotnetToolVersionDefinition.greaterOrEquals(major: Int, minor: Int, patch: Int) : Boolean {
8+
if (this.major > major)
9+
return true
10+
11+
if (this.major == major && this.minor > minor)
12+
return true
13+
14+
if (this.major == major && this.minor == minor && this.patch >= patch)
15+
return true
16+
17+
return false
18+
}

src/rider/main/kotlin/ru/ellizio/odatacliui/models/CliDialogModel.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,26 @@ import ru.ellizio.odatacliui.extensions.dotnetAddPackageCommand
1010
import ru.ellizio.odatacliui.terminal.BatchCommandLine
1111
import ru.ellizio.odatacliui.terminal.builders.BatchCommandLineBuilder
1212
import com.jetbrains.rider.projectView.solution
13+
import ru.ellizio.odatacliui.extensions.greaterOrEquals
1314
import ru.ellizio.odatacliui.terminal.builders.CommandLineBuilder
1415
import ru.ellizio.odatacliui.utils.DotnetToolsUtils
1516
import kotlin.io.path.Path
1617

1718
private const val CONNECTED_SERVICES = "Connected Services"
18-
private const val CSDL_NAME = "OData ServiceCsdl.xml"
19+
private const val CSDL_NAME_LEGACY = "OData ServiceCsdl.xml"
20+
private const val CSDL_NAME_SUFFIX = "Csdl.xml"
1921

2022
class CliDialogModel(project: Project, private val actionMetadata: ActionMetadata) {
2123
val odataCliTool: DotnetToolDefinition
22-
val dotnetCliPath: String?
24+
private val dotnetCliPath: String?
25+
26+
private val atLeast031: Boolean
2327

2428
init {
2529
odataCliTool = project.solution.protocolModel.getODataCliTool.sync(Unit)
2630
dotnetCliPath = project.solution.dotNetActiveRuntimeModel.activeRuntime.valueOrNull?.dotNetCliExePath
31+
32+
atLeast031 = odataCliTool.version?.greaterOrEquals(0, 3, 1) ?: false
2733
}
2834

2935
val serviceName = MutableProperty("")
@@ -44,10 +50,14 @@ class CliDialogModel(project: Project, private val actionMetadata: ActionMetadat
4450

4551
private fun getOutputDirectory(): String = Path(Path(actionMetadata.projectPath).parent.toString(), CONNECTED_SERVICES, serviceName.get()).toString()
4652

47-
fun getCsdlPath(): String = Path(CONNECTED_SERVICES, serviceName.get(), CSDL_NAME).toString()
53+
fun getCsdlPath(): String {
54+
val csdl = if (atLeast031) "${serviceName.get()}$CSDL_NAME_SUFFIX" else CSDL_NAME_LEGACY
55+
return Path(CONNECTED_SERVICES, serviceName.get(), csdl).toString()
56+
}
4857

4958
fun buildODataCliCommand(): GeneralCommandLine = CommandLineBuilder(DotnetToolsUtils.getToolDefaultPath("odata-cli"), "generate")
5059
.withParameter("--metadata-uri", metadataUri.get())
60+
.withParameter("--service-name", serviceName.get(), atLeast031)
5161
.withParameter("--file-name", fileName.get())
5262
.withParameter("--custom-headers", customHeaders.get())
5363
.withParameter("--proxy", proxy.get())

src/rider/main/kotlin/ru/ellizio/odatacliui/models/validators/CliDialogValidators.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.intellij.ui.layout.ValidationInfoBuilder
66
import javax.swing.JTextField
77

88
object CliDialogValidators {
9+
private val serviceNameRegex = Regex("^[0-9a-zA-Z_\\-. ]+\$")
910
private val proxyRegex = Regex("^(\\w+\\\\\\w+(:\\w+)?@)?\\w+:\\d+\$")
1011

1112
fun serviceNameValidator(): ValidationInfoBuilder.(JTextField) -> ValidationInfo? = {
@@ -15,6 +16,8 @@ object CliDialogValidators {
1516
error("Service name must not start with a space")
1617
else if (it.text.endsWith(' '))
1718
error("Service name must not end with a space")
19+
else if (!serviceNameRegex.matches(it.text))
20+
error("Service name must be in a valid format")
1821
else
1922
null
2023
}

src/rider/main/kotlin/ru/ellizio/odatacliui/terminal/builders/CommandLineBuilder.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@ class CommandLineBuilder(toolName: String, commandName: String) {
1919
return this
2020
}
2121

22+
fun withParameter(parameterName: String, parameterValue: String?, condition: Boolean): CommandLineBuilder {
23+
if (condition)
24+
return withParameter(parameterName, parameterValue)
25+
26+
return this
27+
}
28+
2229
fun withFlag(parameterName: String, parameterValue: Boolean): CommandLineBuilder {
2330
if (!parameterValue)
2431
return this

0 commit comments

Comments
 (0)