<?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.ext</groupId>
    <artifactId>syncope-ext-flowable</artifactId>
    <version>2.1.7-SNAPSHOT</version>
  </parent>

  <name>Apache Syncope Ext: Flowable Client Console</name>
  <description>Apache Syncope Ext: Flowable Client Console</description>
  <groupId>org.apache.syncope.ext.flowable</groupId>
  <artifactId>syncope-ext-flowable-client-console</artifactId>
  <packaging>jar</packaging>
  
  <properties>
    <flowable-modeler.directory>${project.build.directory}/classes/META-INF/resources/flowable-modeler</flowable-modeler.directory>
    <rootpom.basedir>${basedir}/../../..</rootpom.basedir>
  </properties>

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

    <dependency>
      <groupId>org.apache.syncope.ext.flowable</groupId>
      <artifactId>syncope-ext-flowable-common-lib</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.syncope.ext.flowable</groupId>
      <artifactId>syncope-ext-flowable-rest-api</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.syncope.client</groupId>
      <artifactId>syncope-client-console</artifactId>
      <version>${project.version}</version>
    </dependency>
    
    <dependency>
      <groupId>org.flowable</groupId>
      <artifactId>flowable-ui-modeler-app</artifactId>
      <type>war</type>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <inherited>true</inherited>
        <executions>
          <execution>
            <id>setupFlowableModeler</id>
            <phase>process-resources</phase>
            <configuration>
              <target>
                <unzip src="${settings.localRepository}/org/flowable/flowable-ui-modeler-app/${flowable.version}/flowable-ui-modeler-app-${flowable.version}.war" dest="${flowable-modeler.directory}">
                  <patternset>
                    <include name="WEB-INF/classes/static/**" />
                    <include name="WEB-INF/lib/flowable-ui-modeler-logic-${flowable.version}.jar" />
                  </patternset>
                </unzip>
                
                <unzip src="${flowable-modeler.directory}/WEB-INF/lib/flowable-ui-modeler-logic-${flowable.version}.jar" dest="${flowable-modeler.directory}">
                  <patternset>
                    <include name="stencilset_bpmn.json" />
                  </patternset>
                </unzip>
                
                <move todir="${flowable-modeler.directory}">
                  <fileset dir="${flowable-modeler.directory}/WEB-INF/classes/static/">
                    <include name="**" />
                  </fileset>
                </move>
                <delete dir="${flowable-modeler.directory}/WEB-INF" />
                
                <replace file="${flowable-modeler.directory}/index.html" token="&lt;/head&gt;" value="&lt;script type=&quot;text/javascript&quot;&gt;window.onunload = refreshParent; function refreshParent() { window.opener.location.reload(); }&lt;/script&gt;&lt;/head&gt;" />
                <replace file="${flowable-modeler.directory}/index.html" token=" ng-click=&quot;backToLanding()&quot;" value=" disabled=&quot;disabled&quot;" />
                <replace file="${flowable-modeler.directory}/index.html" token="&lt;ul class=&quot;nav navbar-nav&quot; id=&quot;main-nav&quot;" value="&lt;ul class=&quot;nav navbar-nav&quot; id=&quot;main-nav&quot; style=&quot;display: none;&quot;" />
                <replace file="${flowable-modeler.directory}/index.html" token="&lt;div class=&quot;pull-right" value="&lt;div style=&quot;display: none;&quot; class=&quot;pull-right" />
                <replace file="${flowable-modeler.directory}/editor-app/editor.html" token="&lt;div class=&quot;btn-group pull-right&quot;" value="&lt;div style=&quot;display: none;&quot; class=&quot;btn-group pull-right&quot;" />
                <replace file="${flowable-modeler.directory}/editor-app/configuration/toolbar-default-actions.js" token="$location.path('/processes');" value="window.close();" />
 
                <copy file="${basedir}/src/main/resources/app-cfg.js" todir="${flowable-modeler.directory}/scripts" overwrite="true" />
                <copy file="${basedir}/src/main/resources/url-config.js" todir="${flowable-modeler.directory}/editor-app/configuration" overwrite="true" />
                <copy file="${basedir}/src/main/resources/toolbar.js" todir="${flowable-modeler.directory}/editor-app/configuration" overwrite="true" />
                <copy file="${basedir}/src/main/resources/save-model.html" todir="${flowable-modeler.directory}/editor-app/popups" overwrite="true" />

                <patch patchfile="${basedir}/src/main/resources/dropdown.diff" dir="${flowable-modeler.directory}" strip="1" />
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
      </plugin>
    </plugins>
    
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>
</project>
