<?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.
-->
<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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.activemq</groupId>
        <artifactId>artemis-hawtio-pom</artifactId>
        <version>2.37.0</version>
    </parent>
    
    <artifactId>activemq-branding</artifactId>
    <name>ActiveMQ Artemis HawtIO Branding</name>

    <description>Artemis branding plugin module for the HawtIO web console</description>

    <!-- hawtio plugins are almost always war files -->
    <packaging>war</packaging>

    <properties>
        <activemq.basedir>${project.basedir}/../..</activemq.basedir>

        <!-- filtered plugin properties, we don't define plugin-scripts here
  as we build that dynamically using maven-antrun-plugin below. -->
        <!-- plugin-context is what context this plugin will handle requests on
          in the application server -->
        <plugin-context>/activemq-branding</plugin-context>

        <!-- plugin-name is the name of our plugin, affects the name used for
          the plugin's mbean -->
        <plugin-name>${project.artifactId}</plugin-name>

        <!-- plugin-domain is currently unused, we just define it to an empty
          string -->
        <plugin-domain />

        <!-- this lets this plugin deploy nicely into karaf, these get used
          for the ImportPackage directive for maven-bundle-plugin -->
        <osgi.import>
            javax.servlet,
            *;resolution:=optional
        </osgi.import>

        <webapp-dir>${project.artifactId}-${project.version}</webapp-dir>
        <webapp-outdir>${basedir}/target/${webapp-dir}</webapp-outdir>
        <schema-outdir>${basedir}/src/main/webapp/lib</schema-outdir>
        <appjs-outfile>${webapp-outdir}/app/app.js</appjs-outfile>

    </properties>
    
    <dependencies>

        <!-- we only need to embed this dependency in the war, this contains
          a nice helper class that our plugin can use to export it's plugin
          mbean -->
        <dependency>
            <groupId>io.hawt</groupId>
            <artifactId>hawtio-plugin-mbean</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- servlet API is provided by the container -->
        <dependency>
            <groupId>org.eclipse.jetty.toolchain</groupId>
            <artifactId>jetty-servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>


    <build>

        <!-- we want to ensure src/main/resources/WEB-INF/web.xml is being filtered
          so that it picks up all of our javascript files -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>

        <plugins>

            <!-- We use maven-antrun-plugin to build up a list of
                 javascript files for our plugin mbean, this means
                 it needs to run before the maven-resources-plugin
                 copies and filters the web.xml, since for this
                 example we use contextParam settings to configure
                 our plugin mbean -->

            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>

                    <execution>
                        <!-- we run this early in the build process before
                          maven-resources-plugin is run.  We're exporting the
                          plugin-scripts property from here, so we need to
                          use maven-antrun-plugin 1.6 or up -->
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <target>
                                <echo>Building plugin javascript file list</echo>
                                <!-- javascript-files will contain all of the javascript in
                                  our project -->
                                <fileset id="javascript-files" dir="${basedir}/src/main/webapp">
                                    <include name="**/*.js" />
                                </fileset>
                                <!-- we need to strip out the top level path which is
                                   our source directory and be sure to change the directory
                                   separators to forward slashes -->
                                <pathconvert pathsep="," dirsep="/" property="plugin-scripts" refid="javascript-files">
                                    <map from="${basedir}/src/main/webapp/" to="" />
                                </pathconvert>
                                <echo>Files: ${plugin-scripts}</echo>
                                <!--<replace file="${webapp-outdir}/plugin/js/brandingPlugin.js">
                                    <replacefilter token="@artemis.version@" value="${project.version}" />
                                </replace>-->

                            </target>
                            <!-- this exports plugin-scripts to the maven build, without
                              this line ${plugin-scripts} in the web.xml file won't be
                              replaced -->
                            <exportAntProperties>true</exportAntProperties>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <!-- defining this maven plugin in the same phase as the
                          maven-antrun-plugin but *after* we've configured the
                          maven-antrun-plugin ensures we filter resources *after*
                          we've discovered the plugin .js files. -->
                        <id>copy-resources</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>resources</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- maven-bundle-plugin config, needed to make this war
              deployable in karaf, defines the context that this bundle
              should handle requests on -->
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <executions>
                    <execution>
                        <id>bundle-manifest</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>manifest</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <manifestLocation>${webapp-outdir}/META-INF</manifestLocation>
                    <supportedProjectTypes>
                        <supportedProjectType>jar</supportedProjectType>
                        <supportedProjectType>bundle</supportedProjectType>
                        <supportedProjectType>war</supportedProjectType>
                    </supportedProjectTypes>
                    <instructions>
                        <Webapp-Context>${plugin-context}</Webapp-Context>
                        <Web-ContextPath>${plugin-context}</Web-ContextPath>

                        <Embed-Directory>WEB-INF/lib</Embed-Directory>
                        <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
                        <Embed-Transitive>true</Embed-Transitive>

                        <Export-Package>${osgi.export}</Export-Package>
                        <Import-Package>${osgi.import}</Import-Package>
                        <DynamicImport-Package>${osgi.dynamic}</DynamicImport-Package>
                        <Private-Package>${osgi.private.pkg}</Private-Package>

                        <Bundle-ClassPath>.,WEB-INF/classes</Bundle-ClassPath>

                        <Bundle-Name>${project.name}</Bundle-Name>
                        <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
                        <Implementation-Title>HawtIO</Implementation-Title>
                        <Implementation-Version>${project.version}</Implementation-Version>
                    </instructions>
                </configuration>
            </plugin>

            <!-- We define the maven-war-plugin here and make sure it uses
              the manifest file generated by the maven-bundle-plugin.  We
              also ensure it picks up our filtered web.xml and not the one
              in src/main/resources -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <outputFileNameMapping>@{artifactId}@-@{baseVersion}@@{dashClassifier?}@.@{extension}@</outputFileNameMapping>
                    <packagingExcludes>**/classes/OSGI-INF/**</packagingExcludes>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <archive>
                        <manifestFile>${webapp-outdir}/META-INF/MANIFEST.MF</manifestFile>
                    </archive>
                    <webResources>
                        <resource>
                            <filtering>true</filtering>
                            <directory>src/main/resources</directory>
                            <includes>
                                <include>**/*.*</include>
                            </includes>
                            <excludes>
                                <exclude>log4j.properties</exclude>
                            </excludes>
                        </resource>
                        <resource>
                            <filtering>true</filtering>
                            <directory>src/main/webapp</directory>
                            <includes>
                                <include>**/*.*</include>
                            </includes>
                            <excludes>
                                <exclude>log4j.properties</exclude>
                            </excludes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>

        </plugins>
    </build>


</project>
