From ca93d93d1528ab48876ec06edc60fe29346c343c Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Thu, 27 Jul 2017 13:44:10 -0700 Subject: [PATCH] CA/reconcile for release versions stage 1 Doesn't yet consider version's relationship with release name. --- .../bosh/BoshDeploymentManifestSchema.java | 8 ++-- .../models/BoshCommandReleasesProvider.java | 8 ++++ .../ide/vscode/bosh/models/ReleasesModel.java | 1 + .../ide/vscode/bosh/BoshEditorTest.java | 38 +++++++++++++++++++ 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshDeploymentManifestSchema.java b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshDeploymentManifestSchema.java index 9d812ac57..371c22440 100644 --- a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshDeploymentManifestSchema.java +++ b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshDeploymentManifestSchema.java @@ -180,13 +180,13 @@ public class BoshDeploymentManifestSchema implements YamlSchema { addProp(t_instance_group_env, "bosh", t_params); addProp(t_instance_group_env, "password", t_ne_string); - YAtomicType t_version = f.yatomic("Version"); - t_version.addHints("latest"); - t_version.parseWith(ValueParsers.NE_STRING); + YAtomicType t_release_version = f.yenumFromDynamicValues("ReleaseVersion", dc -> releasesProvider.getModel(dc).getVersions()); + t_release_version.addHints("latest"); + t_release_version.alsoAccept("latest"); YBeanType t_release = f.ybean("Release"); addProp(t_release, "name", t_release_name_def).isPrimary(true); - addProp(t_release, "version", t_version); + addProp(t_release, "version", t_release_version); //TODO: the checking here is just 'my best guess'. Unclarity remains: // See: https://github.com/cloudfoundry/docs-bosh/issues/330 addProp(t_release, "url", t_url); diff --git a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandReleasesProvider.java b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandReleasesProvider.java index 432426dc9..3763eddc7 100644 --- a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandReleasesProvider.java +++ b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandReleasesProvider.java @@ -32,6 +32,9 @@ public class BoshCommandReleasesProvider extends BoshCommandBasedModelProvider< private static final YamlTraversal RELEASE_NAMES = RELEASES .thenValAt("name"); + private static final YamlTraversal RELEASE_VERSIONS = RELEASES + .thenValAt("version"); + public BoshCommandReleasesProvider(BoshCliConfig config) { super(config); } @@ -62,6 +65,11 @@ public class BoshCommandReleasesProvider extends BoshCommandBasedModelProvider< public Collection getReleaseNames() { return getNames(cursor, RELEASE_NAMES); } + + @Override + public Collection getVersions() { + return getNames(cursor, RELEASE_VERSIONS); + } }; } diff --git a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/ReleasesModel.java b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/ReleasesModel.java index 91f5a57d9..244b396c5 100644 --- a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/ReleasesModel.java +++ b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/ReleasesModel.java @@ -16,4 +16,5 @@ import java.util.List; public interface ReleasesModel { List getReleases(); Collection getReleaseNames(); + Collection getVersions(); } diff --git a/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshEditorTest.java b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshEditorTest.java index d4f47f5d3..859ee7603 100644 --- a/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshEditorTest.java +++ b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshEditorTest.java @@ -1179,6 +1179,44 @@ public class BoshEditorTest { editor.assertProblems("bogus|unknown 'ReleaseName'. Valid values are: [foo, bar]"); } + @Test public void contentAssistReleaseVersion() throws Exception { + releasesProvider = provideReleasesFrom( + new ReleaseData("foo", "123.4"), + new ReleaseData("foo", "222.2"), + new ReleaseData("bar", "222.2"), + new ReleaseData("bar", "333.3") + ); + + Editor editor = harness.newEditor( + "releases:\n" + + "- version: <*>" + ); + editor.assertContextualCompletions("<*>", + "123.4<*>", + "222.2<*>", + "333.3<*>", + "latest<*>" + ); + } + + @Test public void reconcileReleaseVersion() throws Exception { + releasesProvider = provideReleasesFrom( + new ReleaseData("foo", "123.4"), + new ReleaseData("foo", "222.2"), + new ReleaseData("bar", "222.2"), + new ReleaseData("bar", "333.3") + ); + + Editor editor = harness.newEditor( + "releases:\n" + + "- version: 123.4\n" + + "- version: bogus\n" + ); + editor.ignoreProblem(YamlSchemaProblems.MISSING_PROPERTY); + editor.assertProblems("bogus|unknown 'ReleaseVersion'. Valid values are: [123.4, 222.2, 333.3]"); + } + + private DynamicModelProvider provideReleasesFrom(ReleaseData... stemcellData) { return new BoshCommandReleasesProvider(cliConfig) { @Override