<?xml version="1.0" encoding="UTF-8" ?>
<!--
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
-->

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 6.0//EN"
    "https://struts.apache.org/dtds/struts-6.0.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <package name="bundle-admin" namespace="/osgi/admin" extends="osgi-default" strict-method-invocation="true">
        <default-action-ref name="bundles" />

        <action name="bundle_*!*" class="org.apache.struts2.osgi.admin.actions.BundlesAction" method="{2}">
            <param name="id">{1}</param>
            <result type="freemarker">viewBundle.ftl</result>
            <allowed-methods>index,view,start,stop,update</allowed-methods>
        </action>

        <action name="bundles" class="org.apache.struts2.osgi.admin.actions.BundlesAction" method="index">
            <result type="freemarker">viewBundles.ftl</result>
        </action>

        <action name="execCommand" class="org.apache.struts2.osgi.admin.actions.ShellAction">
            <result type="freemarker">commandResult.ftl</result>
        </action>

        <action name="shell" class="org.apache.struts2.osgi.admin.actions.ShellAction">
            <result type="freemarker">shell.ftl</result>
        </action>
    </package>
</struts>
