1313import com .intellij .openapi .ui .Messages ;
1414import com .microsoft .azure .toolkit .ide .appservice .AppServiceActionsContributor ;
1515import com .microsoft .azure .toolkit .ide .appservice .function .FunctionAppActionsContributor ;
16- import com .microsoft .azure .toolkit .ide .appservice .function .FunctionAppConfig ;
1716import com .microsoft .azure .toolkit .ide .appservice .function .coretools .FunctionsCoreToolsManager ;
1817import com .microsoft .azure .toolkit .ide .appservice .webapp .WebAppActionsContributor ;
19- import com .microsoft .azure .toolkit .ide .appservice .webapp .model .WebAppConfig ;
2018import com .microsoft .azure .toolkit .ide .common .IActionsContributor ;
2119import com .microsoft .azure .toolkit .ide .common .action .ResourceCommonActionsContributor ;
2220import com .microsoft .azure .toolkit .ide .containerregistry .ContainerRegistryActionsContributor ;
2321import com .microsoft .azure .toolkit .ide .guidance .GuidanceViewManager ;
2422import com .microsoft .azure .toolkit .intellij .appservice .actions .AppServiceFileAction ;
2523import com .microsoft .azure .toolkit .intellij .appservice .actions .OpenAppServicePropertyViewAction ;
2624import com .microsoft .azure .toolkit .intellij .containerregistry .pushimage .PushImageAction ;
25+ import com .microsoft .azure .toolkit .intellij .function .actions .FunctionAppUpdateImageAction ;
2726import com .microsoft .azure .toolkit .intellij .function .remotedebug .FunctionEnableRemoteDebuggingAction ;
2827import com .microsoft .azure .toolkit .intellij .function .remotedebug .FunctionRemoteDebuggingAction ;
29- import com .microsoft .azure .toolkit .intellij .legacy .appservice .action .OpenLogsInMonitorAction ;
30- import com .microsoft .azure .toolkit .intellij .legacy .appservice .action .ProfileFlightRecordAction ;
31- import com .microsoft .azure .toolkit .intellij .legacy .appservice .action .SSHIntoWebAppAction ;
32- import com .microsoft .azure .toolkit .intellij .legacy .appservice .action .StartStreamingLogsAction ;
33- import com .microsoft .azure .toolkit .intellij .legacy .appservice .action .StopStreamingLogsAction ;
28+ import com .microsoft .azure .toolkit .intellij .legacy .appservice .action .*;
3429import com .microsoft .azure .toolkit .intellij .legacy .function .action .CreateFunctionAppAction ;
3530import com .microsoft .azure .toolkit .intellij .legacy .function .action .DeployFunctionAppAction ;
3631import com .microsoft .azure .toolkit .intellij .legacy .webapp .action .CreateWebAppAction ;
3732import com .microsoft .azure .toolkit .intellij .legacy .webapp .action .DeployWebAppAction ;
3833import com .microsoft .azure .toolkit .lib .Azure ;
3934import com .microsoft .azure .toolkit .lib .appservice .AppServiceAppBase ;
35+ import com .microsoft .azure .toolkit .lib .appservice .config .AppServiceConfig ;
36+ import com .microsoft .azure .toolkit .lib .appservice .config .FunctionAppConfig ;
37+ import com .microsoft .azure .toolkit .lib .appservice .config .RuntimeConfig ;
4038import com .microsoft .azure .toolkit .lib .appservice .entity .FunctionEntity ;
4139import com .microsoft .azure .toolkit .lib .appservice .function .AzureFunctions ;
4240import com .microsoft .azure .toolkit .lib .appservice .function .FunctionApp ;
4341import com .microsoft .azure .toolkit .lib .appservice .function .FunctionAppBase ;
4442import com .microsoft .azure .toolkit .lib .appservice .function .FunctionAppDeploymentSlot ;
4543import com .microsoft .azure .toolkit .lib .appservice .model .AppServiceFile ;
44+ import com .microsoft .azure .toolkit .lib .appservice .model .FunctionAppDockerRuntime ;
45+ import com .microsoft .azure .toolkit .lib .appservice .model .PricingTier ;
4646import com .microsoft .azure .toolkit .lib .appservice .model .Runtime ;
4747import com .microsoft .azure .toolkit .lib .appservice .webapp .AzureWebApp ;
4848import com .microsoft .azure .toolkit .lib .appservice .webapp .WebApp ;
4949import com .microsoft .azure .toolkit .lib .appservice .webapp .WebAppDeploymentSlot ;
50+ import com .microsoft .azure .toolkit .lib .auth .AzureAccount ;
5051import com .microsoft .azure .toolkit .lib .common .action .Action ;
5152import com .microsoft .azure .toolkit .lib .common .action .AzureActionManager ;
5253import com .microsoft .azure .toolkit .lib .common .event .AzureEventBus ;
5354import com .microsoft .azure .toolkit .lib .common .messager .AzureMessager ;
5455import com .microsoft .azure .toolkit .lib .common .model .AbstractAzService ;
5556import com .microsoft .azure .toolkit .lib .common .model .AzResource ;
57+ import com .microsoft .azure .toolkit .lib .common .model .Subscription ;
5658import com .microsoft .azure .toolkit .lib .common .task .AzureTaskManager ;
59+ import com .microsoft .azure .toolkit .lib .common .utils .Utils ;
60+ import com .microsoft .azure .toolkit .lib .containerapps .environment .ContainerAppsEnvironment ;
5761import com .microsoft .azure .toolkit .lib .containerregistry .ContainerRegistry ;
5862import com .microsoft .azure .toolkit .lib .resource .ResourceGroup ;
59- import com .microsoft .azure .toolkit .lib .resource .ResourceGroupConfig ;
6063import lombok .RequiredArgsConstructor ;
6164import org .apache .commons .lang3 .StringUtils ;
6265
66+ import javax .annotation .Nonnull ;
67+ import javax .annotation .Nullable ;
68+ import java .util .HashMap ;
6369import java .util .Objects ;
6470import java .util .Optional ;
6571import java .util .function .BiConsumer ;
@@ -102,7 +108,7 @@ public void registerHandlers(AzureActionManager am) {
102108 am .registerHandler (ResourceCommonActionsContributor .GETTING_STARTED , (r , e ) -> r instanceof AzureWebApp ,
103109 (AbstractAzService <?, ?> c , AnActionEvent e ) -> GuidanceViewManager .getInstance ().openCourseView (e .getProject (), "hello-webapp" ));
104110
105- final BiPredicate <AppServiceAppBase <?, ?, ?>, AnActionEvent > isAppService = (r , e ) -> r instanceof AppServiceAppBase <?, ?, ?> ;
111+ final BiPredicate <AppServiceAppBase <?, ?, ?>, AnActionEvent > isAppService = (r , e ) -> r != null ;
106112 final BiPredicate <AppServiceAppBase <?, ?, ?>, AnActionEvent > nonLinuxFunction = (r , e ) -> Objects .nonNull (r ) &&
107113 !(r instanceof FunctionApp && Optional .ofNullable (r .getRuntime ()).map (Runtime ::isLinux ).orElse (Boolean .FALSE ));
108114 final AzureTaskManager tm = AzureTaskManager .getInstance ();
@@ -130,13 +136,13 @@ public void registerHandlers(AzureActionManager am) {
130136 final BiConsumer <AzResource , AnActionEvent > deployWebAppHandler = (c , e ) -> DeployWebAppAction .deploy ((WebApp ) c , Objects .requireNonNull (e .getProject ()));
131137 am .registerHandler (ResourceCommonActionsContributor .DEPLOY , (r , e ) -> r instanceof WebApp , deployWebAppHandler );
132138
133- final BiConsumer <Object , AnActionEvent > createWebAppHandler = (c , e ) -> CreateWebAppAction .openDialog (e .getProject (), null );
139+ final BiConsumer <Object , AnActionEvent > createWebAppHandler = (c , e ) -> CreateWebAppAction .openDialog (e .getProject (), getDefaultWebAppConfig ( null ) );
134140 am .registerHandler (ResourceCommonActionsContributor .CREATE , (r , e ) -> r instanceof AzureWebApp , createWebAppHandler );
135141
136142 final BiConsumer <AzResource , AnActionEvent > deployFunctionAppHandler = (c , e ) -> DeployFunctionAppAction .deploy ((FunctionApp ) c , Objects .requireNonNull (e .getProject ()));
137143 am .registerHandler (ResourceCommonActionsContributor .DEPLOY , (r , e ) -> r instanceof FunctionApp , deployFunctionAppHandler );
138144
139- final BiConsumer <Object , AnActionEvent > createFunctionHandler = (c , e ) -> CreateFunctionAppAction .openDialog (e .getProject (), null );
145+ final BiConsumer <Object , AnActionEvent > createFunctionHandler = (c , e ) -> CreateFunctionAppAction .openDialog (e .getProject (), getDefaultFunctionAppConfig ( null ) );
140146 am .registerHandler (ResourceCommonActionsContributor .CREATE , (r , e ) -> r instanceof AzureFunctions , createFunctionHandler );
141147
142148 final BiConsumer <AzResource , AnActionEvent > showFunctionPropertyViewHandler = (c , e ) -> tm
@@ -155,7 +161,7 @@ public void registerHandlers(AzureActionManager am) {
155161 .runLater (() -> new OpenAppServicePropertyViewAction ().openDeploymentSlotPropertyView ((WebAppDeploymentSlot ) c , e .getProject ()));
156162 am .registerHandler (ResourceCommonActionsContributor .SHOW_PROPERTIES , (r , e ) -> r instanceof WebAppDeploymentSlot , showWebAppSlotPropertyViewHandler );
157163
158- final BiPredicate <FunctionEntity , AnActionEvent > triggerPredicate = (r , e ) -> r instanceof FunctionEntity ;
164+ final BiPredicate <FunctionEntity , AnActionEvent > triggerPredicate = (r , e ) -> r != null ;
159165 final BiConsumer <FunctionEntity , AnActionEvent > triggerFunctionHandler = (entity , e ) -> {
160166 final String functionId = Optional .ofNullable (entity .getFunctionAppId ())
161167 .orElseGet (() -> ResourceId .fromString (entity .getTriggerId ()).parent ().id ());
@@ -178,28 +184,19 @@ public void registerHandlers(AzureActionManager am) {
178184 am .registerHandler (FunctionAppActionsContributor .TRIGGER_FUNCTION , triggerPredicate , triggerFunctionHandler );
179185
180186 // keep push docker image in app service library as form is shared between appservice/container repository but could not split into different project
181- final BiPredicate <ContainerRegistry , AnActionEvent > pushImageCondition = (r , e ) -> r instanceof ContainerRegistry ;
187+ final BiPredicate <ContainerRegistry , AnActionEvent > pushImageCondition = (r , e ) -> r != null ;
182188 final BiConsumer <ContainerRegistry , AnActionEvent > pushImageHandler =
183189 (c , e ) -> PushImageAction .push (c , Objects .requireNonNull (e .getProject ()));
184190 am .registerHandler (ContainerRegistryActionsContributor .PUSH_IMAGE , pushImageCondition , pushImageHandler );
185191
186- final BiConsumer <ResourceGroup , AnActionEvent > groupCreateFunctionHandler =
187- (r , e ) -> CreateFunctionAppAction .openDialog (e .getProject (),
188- FunctionAppConfig .getFunctionAppDefaultConfig ().toBuilder ()
189- .subscription (r .getSubscription ())
190- .region (r .getRegion ())
191- .resourceGroup (ResourceGroupConfig .fromResource (r )).build ());
192+ final BiConsumer <ResourceGroup , AnActionEvent > groupCreateFunctionHandler = (r , e ) -> CreateFunctionAppAction .openDialog (e .getProject (), getDefaultFunctionAppConfig (r ));
192193 am .registerHandler (FunctionAppActionsContributor .GROUP_CREATE_FUNCTION , (r , e ) -> true , groupCreateFunctionHandler );
193194
194195 final BiConsumer <ResourceGroup , AnActionEvent > groupCreateWebAppHandler =
195- (r , e ) -> CreateWebAppAction .openDialog (e .getProject (),
196- WebAppConfig .getWebAppDefaultConfig ().toBuilder ()
197- .subscription (r .getSubscription ())
198- .region (r .getRegion ())
199- .resourceGroup (ResourceGroupConfig .fromResource (r )).build ());
196+ (r , e ) -> CreateWebAppAction .openDialog (e .getProject (), getDefaultWebAppConfig (r ));
200197 am .registerHandler (WebAppActionsContributor .GROUP_CREATE_WEBAPP , (r , e ) -> true , groupCreateWebAppHandler );
201198
202- final BiPredicate <FunctionAppBase <?, ?, ?>, AnActionEvent > isFunction = (r , e ) -> r instanceof FunctionAppBase <?, ?, ?> ;
199+ final BiPredicate <FunctionAppBase <?, ?, ?>, AnActionEvent > isFunction = (r , e ) -> r != null ;
203200 final BiConsumer <FunctionAppBase <?, ?, ?>, AnActionEvent > enableRemoteDebuggingHandler = (c , e ) ->
204201 FunctionEnableRemoteDebuggingAction .enableRemoteDebugging (c , e .getProject ());
205202 am .registerHandler (FunctionAppActionsContributor .ENABLE_REMOTE_DEBUGGING , isFunction , enableRemoteDebuggingHandler );
@@ -227,6 +224,46 @@ public void registerHandlers(AzureActionManager am) {
227224 final String INSTALL_SUCCEED_MESSAGE = "Download and install Azure Functions Core Tools successfully. Auto configured Azure Functions Core Tools path in Azure Settings" ;
228225 AzureMessager .getMessager ().success (INSTALL_SUCCEED_MESSAGE , null , openSettingsActionInMessage );
229226 }));
227+
228+ am .registerHandler (AppServiceActionsContributor .UPDATE_IMAGE , (c , e ) -> c instanceof FunctionApp ,
229+ (AppServiceAppBase <?, ?, ?> c , AnActionEvent e ) -> FunctionAppUpdateImageAction .updateImage ((FunctionApp ) c , e .getProject ()));
230+
231+ final BiConsumer <ContainerAppsEnvironment , AnActionEvent > createFunctionInEnvironmentHandler = (r , e ) ->
232+ CreateFunctionAppAction .openDialog (e .getProject (), getDefaultContainerHostedFunctionAppConfig (r ));
233+ am .registerHandler (FunctionAppActionsContributor .ENVIRONMENT_CREATE_FUNCTION , (c , e ) -> c != null , createFunctionInEnvironmentHandler );
234+ }
235+
236+ private FunctionAppConfig getDefaultContainerHostedFunctionAppConfig (@ Nonnull final ContainerAppsEnvironment environment ) {
237+ final FunctionAppConfig config = getDefaultFunctionAppConfig (environment .getResourceGroup ());
238+ config .region (environment .getRegion ());
239+ config .environment (environment .getName ());
240+ config .runtime (RuntimeConfig .fromRuntime (FunctionAppDockerRuntime .INSTANCE ));
241+ return config ;
242+ }
243+
244+ public static AppServiceConfig getDefaultWebAppConfig (@ Nullable final ResourceGroup group ) {
245+ final Subscription subscription = Optional .ofNullable (group ).map (ResourceGroup ::getSubscription )
246+ .orElseGet (() -> Azure .az (AzureAccount .class ).account ().getSelectedSubscriptions ().stream ().findFirst ().orElse (null ));
247+ final String appName = Utils .generateRandomResourceName ("app" , 32 );
248+ final String rgName = Optional .ofNullable (group ).map (ResourceGroup ::getName ).orElseGet (() -> "rg-" + appName );
249+ final AppServiceConfig result = AppServiceConfig .buildDefaultWebAppConfig (rgName , appName , "jar" );
250+ result .appSettings (new HashMap <>());
251+ result .pricingTier (PricingTier .BASIC_B2 );
252+ Optional .ofNullable (subscription ).map (Subscription ::getId ).ifPresent (result ::subscriptionId );
253+ Optional .ofNullable (group ).map (ResourceGroup ::getRegion ).ifPresent (result ::region );
254+ return result ;
255+ }
256+
257+ public static FunctionAppConfig getDefaultFunctionAppConfig (@ Nullable final ResourceGroup group ) {
258+ final Subscription subscription = Optional .ofNullable (group ).map (ResourceGroup ::getSubscription )
259+ .orElseGet (() -> Azure .az (AzureAccount .class ).account ().getSelectedSubscriptions ().stream ().findFirst ().orElse (null ));
260+ final String appName = Utils .generateRandomResourceName ("app" , 32 );
261+ final String rgName = Optional .ofNullable (group ).map (ResourceGroup ::getName ).orElseGet (() -> "rg-" + appName );
262+ final FunctionAppConfig result = FunctionAppConfig .buildDefaultFunctionConfig (rgName , appName );
263+ result .appSettings (new HashMap <>());
264+ Optional .ofNullable (subscription ).map (Subscription ::getId ).ifPresent (result ::subscriptionId );
265+ Optional .ofNullable (group ).map (ResourceGroup ::getRegion ).ifPresent (result ::region );
266+ return result ;
230267 }
231268
232269 @ Override
0 commit comments