<!--
    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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.felix</groupId>
        <artifactId>felix-parent</artifactId>
        <version>7</version>
        <relativePath>../pom/pom.xml</relativePath>
    </parent>

    <artifactId>org.apache.felix.webconsole</artifactId>
    <packaging>bundle</packaging>
    <version>4.5.5-SNAPSHOT</version>

    <name>Apache Felix Web Management Console</name>
    <description>
        Web Based Management Console for OSGi Frameworks. See
        http://felix.apache.org/site/apache-felix-web-console.html for more
        information on this bundle.
    </description>
    
    <properties>
        <webconsole.exports>
            org.apache.felix.webconsole;version=3.3.0;provide:=true,
            org.apache.felix.webconsole.bundleinfo;version=1.0.0;provide:=true,
            org.apache.felix.webconsole.i18n;version=1.0.0;provide:=true
        </webconsole.exports>
    </properties>

    <scm>
        <connection>scm:git:https://github.com/apache/felix-dev.git</connection>
        <developerConnection>scm:git:https://github.com/apache/felix-dev.git</developerConnection>
        <url>https://gitbox.apache.org/repos/asf?p=felix-dev.git</url>
      <tag>HEAD</tag>
    </scm>

    <build>
        <resources>
            <!-- default resources (may be removed when compat is removed) -->
            <resource>
                <directory>${basedir}/src/main/resources</directory>
            </resource>
            <resource>
                <targetPath>META-INF</targetPath>
                <directory>${basedir}</directory>
                <includes>
                    <include>LICENSE</include>
                    <include>NOTICE</include>
                    <include>DEPENDENCIES</include>
                    <include>changelog.txt</include>
                </includes>
            </resource>
            <!-- CSS and images for backwards compatibility -->
            <resource>
                <directory>${basedir}/src/main/compat</directory>
            </resource>
        </resources>
        <plugins>
            <!-- translate UTF-8 encoded properties files to ISO-8859-1 -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>native2ascii-maven-plugin</artifactId>
                <version>1.0-beta-1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>native2ascii</goal>
                        </goals>
                        <configuration>
                            <encoding>UTF-8</encoding>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>5.1.1</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>
                            ${project.artifactId}
                        </Bundle-SymbolicName>
                        <Bundle-Vendor>
                            The Apache Software Foundation
                        </Bundle-Vendor>
                        <Bundle-DocURL>
                            http://felix.apache.org/site/apache-felix-web-console.html
                        </Bundle-DocURL>
                        <Bundle-Activator>
                            org.apache.felix.webconsole.internal.OsgiManagerActivator
                        </Bundle-Activator>
                        <Export-Package>
                            ${webconsole.exports}
                        </Export-Package>
                        <Import-Package>
                            javax.servlet.*;version="[2.4,4)",
                            !org.apache.felix.bundlerepository,
                            !org.osgi.service.obr,
                            !org.osgi.service.cm,
                            !org.osgi.service.condpermadmin,
                            !org.osgi.service.log,
                            !org.osgi.service.metatype,
                            !org.osgi.service.permissionadmin,
                            !org.osgi.service.prefs,
                            !org.osgi.service.wireadmin,
                            *
                        </Import-Package>
                        <DynamicImport-Package>
                            org.apache.felix.bundlerepository;version="[2.0,3)",
                            org.osgi.service.obr;version="[1.0,2)",
                            org.osgi.service.cm;version="[1.2,2)",
                            org.osgi.service.condpermadmin;version="[1.0,2)",
                            org.osgi.service.log;version="[1.3,2)",
                            org.osgi.service.metatype;version="[1.1,2)",
                            org.osgi.service.permissionadmin;version="[1.2,2)",
                            org.osgi.service.prefs;version="[1.1,2)",
                            org.osgi.service.wireadmin;version="[1.0,2)"
                        </DynamicImport-Package>
                        <Embed-Dependency>
                            org.apache.felix.utils;inline=org/apache/felix/utils/manifest/**,
                            org.apache.felix.utils;inline=org/apache/felix/utils/json/**
                        </Embed-Dependency>
                        <_removeheaders>
                            Embed-Dependency,Private-Package,Include-Resource
                        </_removeheaders>
                    </instructions>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <excludePackageNames>
                        *.internal
                    </excludePackageNames>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <configuration>
                    <includes>
                        <include>src/**</include>
                    </includes>
                    <excludes>
                        <exclude>src/main/appended-resources/**</exclude>
                        <exclude>src/main/resources/res/lib/jquery-3.5.1.js</exclude>
                        <exclude>src/main/resources/res/lib/jquery-migrate-3.3.0.js</exclude>
                        <exclude>src/main/resources/res/lib/jquery-ui-1.12.1.js</exclude>
                        <exclude>src/main/resources/res/lib/jquery-ui-i18n-1.12.1.js</exclude>
                        <exclude>src/main/resources/res/lib/autosize.min.js</exclude>
                        <exclude>src/main/resources/res/lib/jquery.cookies-2.2.0.js</exclude>
                        <exclude>src/main/resources/res/lib/jquery.multifile-1.4.6.js</exclude>
                        <exclude>src/main/resources/res/lib/jquery.tablesorter-2.0.3.js</exclude>
                        <exclude>src/main/resources/res/lib/reset-min.css</exclude>
                        <exclude>src/main/resources/res/lib/themes/**</exclude>
                        <exclude>src/main/resources/res/ui/ui.tabs.paging.js</exclude>
                        <exclude>src/main/resources/templates/*.html</exclude>
                        <exclude>src/main/debug-resources/res/lib/**</exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

   <profiles>
       <!--
           The "all-in-one-bundle" profile builds a bundle including certain
           3rd party libraries and classes, namely: Commons IO, Commons
           FileUpload, and the OSGi ServiceTracker.
           The "all-in-one-bundle" can be used in deployments where these
           dependencies need not be deployed separately.
       -->
       <profile>
           <id>all-in-one-bundle</id>
           <activation><activeByDefault>true</activeByDefault></activation>
           <build>
               <plugins>
                   <plugin>
                       <groupId>org.apache.felix</groupId>
                       <artifactId>maven-bundle-plugin</artifactId>
                       <executions>
                           <execution>
                               <id>all-in-one-bundle</id>
                               <goals>
                                   <goal>bundle</goal>
                               </goals>
                               <configuration>
                                   <classifier>all</classifier>
                                   <instructions>
                                       <Bundle-Name>
                                           ${project.name} (All In One)
                                       </Bundle-Name>
                                       <Bundle-Version>
                                           ${project.version}-all
                                       </Bundle-Version>
                                       <Export-Package>
                                           org.apache.commons.fileupload,
                                           org.apache.commons.fileupload.disk,
                                           org.apache.commons.fileupload.servlet,
                                           org.apache.commons.fileupload.util,
                                           org.apache.commons.io.*,
                                           org.apache.felix.inventory,
                                           ${webconsole.exports}
                                       </Export-Package>
                                       <Embed-Dependency>
                                           <!-- Import/Export-Package parsing -->
                                           org.apache.felix.utils;inline=org/apache/felix/utils/manifest/**,
                                           org.apache.felix.utils;inline=org/apache/felix/utils/json/**,
                                           org.apache.felix.inventory;inline=true,
                                           commons-fileupload;inline=true,
                                           commons-io;inline=true
                                       </Embed-Dependency>
                                       <Import-Package>!javax.portlet,*</Import-Package>                            
                                       <_removeheaders>
                                           Embed-Dependency,Private-Package,Include-Resource
                                       </_removeheaders>
                                   </instructions>
                               </configuration>
                           </execution>
                       </executions>
                   </plugin>
                   <!--
                  <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-remote-resources-plugin</artifactId>
                    <executions>
                      <execution>
                        <goals>
                          <goal>process</goal>
                        </goals>
                        <configuration>
                          <resourceBundles>
                            <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
                          </resourceBundles>
                        </configuration>
                      </execution>
                    </executions>
                  </plugin>
                  -->
               </plugins>
            </build>
            <dependencies>
                <dependency>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>org.apache.felix.inventory</artifactId>
                    <version>1.0.0</version>
                    <scope>provided</scope>
                </dependency>
            </dependencies>
        </profile>
        
       <!--
           The "debug" profile builds a bundle using the non-minified
           JQuery libraries and CSS files instead to make debugging
           JQuery related issues easier.
       -->
       <profile>
           <id>debug-bundle</id>
           <activation><activeByDefault>true</activeByDefault></activation>
           <build>
               <plugins>
                   <plugin>
                       <groupId>org.apache.felix</groupId>
                       <artifactId>maven-bundle-plugin</artifactId>
                       <executions>
                           <execution>
                               <id>debug-bundle</id>
                               <goals>
                                   <goal>bundle</goal>
                               </goals>
                               <configuration>
                                   <classifier>debug</classifier>
                                   <instructions>
                                       <Bundle-Name>
                                           ${project.name} (JQuery Debug)
                                       </Bundle-Name>
                                       <Bundle-Version>
                                           ${project.version}-debug
                                       </Bundle-Version>
                                       <Include-Resource>
                                           {maven-resources},
                                           res=src/main/debug-resources/res
                                       </Include-Resource>
                                   </instructions>
                               </configuration>
                           </execution>
                       </executions>
                   </plugin>
                   <!--
                  <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-remote-resources-plugin</artifactId>
                    <executions>
                      <execution>
                        <goals>
                          <goal>process</goal>
                        </goals>
                        <configuration>
                          <resourceBundles>
                            <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
                          </resourceBundles>
                        </configuration>
                      </execution>
                    </executions>
                  </plugin>
                  -->
               </plugins>
            </build>
        </profile>
    </profiles>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.4</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>osgi.core</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>osgi.cmpn</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.shell</artifactId>
            <version>1.0.0</version>
            <scope>provided</scope>
        </dependency>

        <!--  Parsing Import/Export-Package headers -->
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.utils</artifactId>
            <version>1.11.4</version>
            <scope>provided</scope>
            <optional>true</optional>
        </dependency>
        
        <!-- OSGi and Apache Felix OBR API -->
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.osgi.service.obr</artifactId>
            <version>1.0.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.bundlerepository</artifactId>
            <version>1.6.0</version>
            <scope>provided</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>3.3.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
