@@ -846,21 +846,7 @@ public ExtensionJson toExtensionVersionJson(ExtensionVersion extVersion, String
846846 var latestPreRelease = repositories .findLatestVersionForAllUrls (extension , targetPlatform , true , onlyActive );
847847
848848 var json = extVersion .toExtensionJson ();
849- if (extension .getReplacement () != null ) {
850- var replacementId = extension .getReplacement ().getId ();
851- var replacement = repositories .findLatestReplacement (replacementId , targetPlatform , false , onlyActive );
852- if (replacement != null ) {
853- var displayName = StringUtils .isNotEmpty (replacement .getDisplayName ())
854- ? replacement .getDisplayName ()
855- : replacement .getExtension ().getName ();
856-
857- var replacementJson = new ExtensionReplacementJson ();
858- replacementJson .setUrl (UrlUtil .createApiUrl (webuiUrl , "extension" , replacement .getExtension ().getNamespace ().getName (), replacement .getExtension ().getName ()));
859- replacementJson .setDisplayName (displayName );
860- json .setReplacement (replacementJson );
861- }
862- }
863-
849+ json .setReplacement (toReplacementJson (extension , targetPlatform , onlyActive , true ));
864850 json .setPreview (latest != null && latest .isPreview ());
865851 var versionAlias = new ArrayList <String >();
866852 if (latest != null && extVersion .getVersion ().equals (latest .getVersion ()))
@@ -932,20 +918,7 @@ public ExtensionJson toExtensionVersionJson(
932918 json .setReviewsUrl (createApiReviewsUrl (serverUrl , json .getNamespace (), json .getName ()));
933919
934920 var extension = extVersion .getExtension ();
935- if (extension .getReplacement () != null ) {
936- var replacementId = extension .getReplacement ().getId ();
937- var replacement = repositories .findLatestReplacement (replacementId , targetPlatformParam , false , true );
938- if (replacement != null ) {
939- var displayName = StringUtils .isNotEmpty (replacement .getDisplayName ())
940- ? replacement .getDisplayName ()
941- : replacement .getExtension ().getName ();
942-
943- var replacementJson = new ExtensionReplacementJson ();
944- replacementJson .setUrl (UrlUtil .createApiUrl (serverUrl , "api" , replacement .getExtension ().getNamespace ().getName (), replacement .getExtension ().getName ()));
945- replacementJson .setDisplayName (displayName );
946- json .setReplacement (replacementJson );
947- }
948- }
921+ json .setReplacement (toReplacementJson (extension , targetPlatformParam , true , false ));
949922
950923 var versionAlias = new ArrayList <String >(2 );
951924 if (extVersion .equals (latest )) {
@@ -1024,21 +997,7 @@ public ExtensionJson toExtensionVersionJsonV2(
1024997 json .setUrl (createApiVersionUrl (serverUrl , json ));
1025998
1026999 var extension = extVersion .getExtension ();
1027- if (extension .getReplacement () != null ) {
1028- var replacementId = extension .getReplacement ().getId ();
1029- var replacement = repositories .findLatestReplacement (replacementId , targetPlatformParam , false , true );
1030- if (replacement != null ) {
1031- var displayName = StringUtils .isNotEmpty (replacement .getDisplayName ())
1032- ? replacement .getDisplayName ()
1033- : replacement .getExtension ().getName ();
1034-
1035- var replacementJson = new ExtensionReplacementJson ();
1036- replacementJson .setUrl (UrlUtil .createApiUrl (serverUrl , "api" , replacement .getExtension ().getNamespace ().getName (), replacement .getExtension ().getName ()));
1037- replacementJson .setDisplayName (displayName );
1038-
1039- json .setReplacement (replacementJson );
1040- }
1041- }
1000+ json .setReplacement (toReplacementJson (extension , targetPlatformParam , true , false ));
10421001
10431002 var versionAlias = new ArrayList <String >(2 );
10441003 if (extVersion .equals (latest )) {
@@ -1094,6 +1053,34 @@ public ExtensionJson toExtensionVersionJsonV2(
10941053 return json ;
10951054 }
10961055
1056+ private ExtensionReplacementJson toReplacementJson (Extension extension , String targetPlatform , boolean onlyActive , boolean webui ) {
1057+ if (extension .getReplacement () == null ) {
1058+ return null ;
1059+ }
1060+
1061+ var replacementId = extension .getReplacement ().getId ();
1062+ var replacement = repositories .findLatestReplacement (replacementId , targetPlatform , false , onlyActive );
1063+ if (replacement == null ) {
1064+ return null ;
1065+ }
1066+
1067+ var baseUrl = webui ? webuiUrl : UrlUtil .getBaseUrl ();
1068+ var segments = new String []{
1069+ webui ? "extension" : "api" ,
1070+ replacement .getExtension ().getNamespace ().getName (),
1071+ replacement .getExtension ().getName ()
1072+ };
1073+
1074+ var displayName = StringUtils .isNotEmpty (replacement .getDisplayName ())
1075+ ? replacement .getDisplayName ()
1076+ : replacement .getExtension ().getName ();
1077+
1078+ var json = new ExtensionReplacementJson ();
1079+ json .setUrl (UrlUtil .createApiUrl (baseUrl , segments ));
1080+ json .setDisplayName (displayName );
1081+ return json ;
1082+ }
1083+
10971084 private boolean isVerified (ExtensionVersion extVersion ) {
10981085 if (extVersion .getPublishedWith () == null ) {
10991086 return false ;
0 commit comments