<?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.syncope</groupId>
    <artifactId>syncope</artifactId>
    <version>4.1.1</version>
  </parent>

  <name>Apache Syncope Standalone Distribution</name>
  <description>Apache Syncope Standalone Distribution</description>
  <groupId>org.apache.syncope</groupId>
  <artifactId>syncope-standalone</artifactId>
  <packaging>jar</packaging>
  
  <properties>
    <rootpom.basedir>${basedir}/..</rootpom.basedir>

    <test.csvdir.path>./test-csvdir</test.csvdir.path>

    <work.dir>${project.build.directory}/standalone</work.dir>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.syncope.fit</groupId>
      <artifactId>syncope-fit-build-tools</artifactId>
      <version>${project.version}</version>
      <type>war</type>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.syncope.fit</groupId>
      <artifactId>syncope-fit-core-reference</artifactId>
      <version>${project.version}</version>
      <type>war</type>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.syncope.fit</groupId>
      <artifactId>syncope-fit-console-reference</artifactId>
      <version>${project.version}</version>
      <type>war</type>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.syncope.fit</groupId>
      <artifactId>syncope-fit-enduser-reference</artifactId>
      <version>${project.version}</version>
      <type>war</type>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.syncope.fit</groupId>
      <artifactId>syncope-fit-wa-reference</artifactId>
      <version>${project.version}</version>
      <type>war</type>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>

    <plugins>
      <plugin>
        <groupId>org.codehaus.cargo</groupId>
        <artifactId>cargo-maven3-plugin</artifactId>
        <inherited>true</inherited>
        <configuration>
          <container>
            <containerId>tomcat11x</containerId>
            <zipUrlInstaller>
              <url>https://repo1.maven.org/maven2/org/apache/tomcat/tomcat/${tomcat.version}/tomcat-${tomcat.version}.zip</url>
              <downloadDir>${settings.localRepository}/org/codehaus/cargo/cargo-container-archives</downloadDir>
              <extractDir>${project.build.directory}/cargo/extract</extractDir>
            </zipUrlInstaller>
            <timeout>300000</timeout>
          </container>
        </configuration>
        <executions>
          <execution>
            <id>install-tomcat</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>install</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
          
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>prepare-standalone</id>
            <goals>
              <goal>run</goal>
            </goals>
            <phase>verify</phase>
            <configuration>
              <target>
                <mkdir dir="${work.dir}"/>

                <!-- legal stuff -->
                <copy file="${project.build.outputDirectory}/README" todir="${work.dir}"/>
                <copy file="LICENSE" todir="${work.dir}"/>
                <copy file="NOTICE" todir="${work.dir}"/>

                <!-- Unzip Tomcat and remove docs and examples from webapps (space saving) -->
                <unzip src="${settings.localRepository}/org/codehaus/cargo/cargo-container-archives/tomcat-${tomcat.version}.zip" dest="${work.dir}"/>
                <delete dir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/docs"/>
                <delete dir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/examples"/>

                <!-- Syncope core -->
                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope">
                  <fileset dir="../fit/core-reference/target/syncope-fit-core-reference-${project.version}" includes="**/*"/>
                </copy>
                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope/WEB-INF/classes" overwrite="true">
                  <fileset dir="${project.build.outputDirectory}/core"/>
                </copy>
                <copy file="${settings.localRepository}/org/postgresql/postgresql/${jdbc.postgresql.version}/postgresql-${jdbc.postgresql.version}.jar" todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope/WEB-INF/lib" overwrite="true"/>
                <copy file="../fit/core-reference/target/test-classes/saml.keystore.jks" todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope/WEB-INF/classes" overwrite="true"/>

                <!-- Syncope console -->
                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-console">
                  <fileset dir="../fit/console-reference/target/syncope-fit-console-reference-${project.version}" includes="**/*"/>
                </copy>
                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-console/WEB-INF/classes" overwrite="true">
                  <fileset dir="${project.build.outputDirectory}/console"/>
                </copy>

                <!-- Syncope enduser -->
                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-enduser">
                  <fileset dir="../fit/enduser-reference/target/syncope-fit-enduser-reference-${project.version}" includes="**/*"/>
                </copy>
                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-enduser/WEB-INF/classes" overwrite="true">
                  <fileset dir="${project.build.outputDirectory}/enduser"/>
                </copy>f

                <!-- Syncope wa -->
                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-wa">
                  <fileset dir="../fit/wa-reference/target/syncope-fit-wa-reference-${project.version}" includes="**/*"/>
                </copy>
                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-wa/WEB-INF/classes" overwrite="true">
                  <fileset dir="${project.build.outputDirectory}/wa"/>
                </copy>
                <copy file="../fit/wa-reference/src/test/resources/keystore.jks" todir="${work.dir}/apache-tomcat-${tomcat.version}/conf" overwrite="true"/>

                <mkdir dir="${work.dir}/apache-tomcat-${tomcat.version}/${test.csvdir.path}"/>
                <copy file="../fit/core-reference/src/test/resources/test.csv" todir="${work.dir}/apache-tomcat-${tomcat.version}/${test.csvdir.path}"/>

                <!-- Syncope build tools (provide H2, LDAP and REST / SOAP resources + ConnId connector server) -->
                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-fit-build-tools">
                  <fileset dir="../fit/build-tools/target/syncope-fit-build-tools-${project.version}" includes="**/*"/>
                </copy>
                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-fit-build-tools/WEB-INF/lib">
                  <fileset dir="../fit/core-reference/target/bundles/" includes="**/*"/>
                </copy>

                <!-- Tomcat shared libraries: StAX2 API, Woodstox -->
                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/lib">
                  <fileset dir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope/WEB-INF/lib" includes="stax2-api-*.jar"/>
                  <fileset dir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope/WEB-INF/lib" includes="woodstox-core-asl-*.jar"/>
                </copy>

                <!-- Other custom Tomcat resources -->
                <copy file="${project.build.outputDirectory}/context.xml" todir="${work.dir}/apache-tomcat-${tomcat.version}/conf" overwrite="true"/>
                <copy file="${project.build.outputDirectory}/setenv.sh" todir="${work.dir}/apache-tomcat-${tomcat.version}/bin"/>
                <copy file="${project.build.outputDirectory}/setenv.bat" todir="${work.dir}/apache-tomcat-${tomcat.version}/bin"/>
                <replace file="${work.dir}/apache-tomcat-${tomcat.version}/conf/server.xml" token="8080" value="${cargo.servlet.port}"/>
                <replace file="${work.dir}/apache-tomcat-${tomcat.version}/conf/server.xml" token="8443" value="9443"/>
                <replace file="${work.dir}/apache-tomcat-${tomcat.version}/conf/server.xml">
                  <replacetoken><![CDATA[<Service name="Catalina">]]></replacetoken>
                  <replacevalue><![CDATA[<Service name="Catalina">

<Connector SSLEnabled="true" URIEncoding="UTF-8" connectionTimeout="20000" emptySessionPath="cargo.tomcat.connector.emptySessionPath" maxParameterCount="1000" port="9443" protocol="HTTP/1.1"><SSLHostConfig><Certificate certificateKeystoreFile="conf/keystore.jks" certificateKeystorePassword="password" type="RSA"/></SSLHostConfig></Connector>]]></replacevalue>
                </replace>
                <replace file="${work.dir}/apache-tomcat-${tomcat.version}/conf/server.xml" token="8009" value="${cargo.tomcat.ajp.port}"/>
                <replace file="${work.dir}/apache-tomcat-${tomcat.version}/conf/server.xml" token="8005" value="${cargo.rmi.port}"/>
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptors>
            <descriptor>src/assemble/standalone-zip.xml</descriptor>
          </descriptors>
        </configuration>
        <executions>
          <execution>
            <id>make-standalone-zip</id>
            <phase>verify</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <configuration>
          <resourceIncludes>src/main/resources/**/*.*</resourceIncludes>
        </configuration>
      </plugin>
    </plugins>

    <resources>
      <resource>
        <directory>../core/persistence-jpa/src/main/resources</directory>
        <includes>
          <include>persistence.properties</include>
        </includes>
        <targetPath>core</targetPath>
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>../core/persistence-jpa/src/test/resources/domains</directory>
        <targetPath>core/domains</targetPath>
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>../fit/core-reference/src/main/resources</directory>
        <includes>
          <include>*.xml</include>
          <include>*.properties</include>
        </includes>
        <targetPath>core</targetPath>
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>../fit/core-reference/src/main/resources/all</directory>
        <includes>
          <include>*.xml</include>
          <include>*.properties</include>
        </includes>
        <targetPath>core</targetPath>
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>../fit/core-reference/src/test/resources</directory>
        <includes>
          <include>mail.properties</include>
        </includes>
        <targetPath>core</targetPath>
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>../fit/core-reference/src/test/resources/scriptedsql</directory>
        <targetPath>core/scriptedsql</targetPath>
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>../fit/core-reference/src/test/resources/rest</directory>
        <targetPath>core/rest</targetPath>
        <filtering>true</filtering>
      </resource>

      <resource>
        <directory>../fit/console-reference/src/main/resources</directory>
        <targetPath>console</targetPath>
        <filtering>true</filtering>
      </resource>
      
      <resource>
        <directory>../fit/enduser-reference/src/main/resources</directory>
        <targetPath>enduser</targetPath>
        <filtering>true</filtering>
      </resource>

      <resource>
        <directory>../fit/wa-reference/src/main/resources</directory>
        <targetPath>wa</targetPath>
        <filtering>true</filtering>
      </resource>

      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>setenv.*</include>
        </includes>
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <excludes>
          <exclude>setenv.*</exclude>
        </excludes>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>src/assemble</directory>
      </resource>
    </resources>
  </build>

  <profiles>
    <profile>
      <id>site</id>

      <build>
        <plugins>
          <plugin>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctor-maven-plugin</artifactId>
            <inherited>false</inherited>
            <configuration>
              <skip>true</skip>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <inherited>true</inherited>
            <configuration>
              <skip>true</skip>
              <skipDeploy>true</skipDeploy>
              <generateReports>false</generateReports>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>copy-docs-to-site</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    
    <profile>
      <id>apache-release</id>

      <build>
        <plugins>      
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <configuration>
              <skip>true</skip>
            </configuration>
          </plugin>           
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <inherited>false</inherited>
            <configuration>
              <skipSource>true</skipSource>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
