<?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>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.tuscany.sca</groupId>
        <artifactId>tuscany-sca-tools</artifactId>
        <version>1.7-SNAPSHOT</version>
        <relativePath>../../../pom.xml</relativePath>
    </parent>
    <artifactId>org.apache.tuscany.sca.core</artifactId>
    <name>Apache Tuscany SCA Eclipse Tools Core Plug-in</name>

    <dependencies>
        <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-sca-eclipse-tools</artifactId>
            <version>1.6.1-SNAPSHOT</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jdt.debug</groupId>
            <artifactId>ui</artifactId>
            <version>3.2.100-v20070531-1800</version>
            <!--
                Exclude org.eclipse.equinox:app to avoid maven bug/bad equinox version scheme. i.e.:

                Couldn't find a version in [1.0.0-v20070606] to match range [1.0.0,2.0.0)
                org.eclipse.equinox:app:jar:null
              -->
            <exclusions>
                <exclusion>
                    <groupId>org.eclipse.equinox</groupId>
                    <artifactId>app</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.eclipse.swt.win32.win32</groupId>
            <artifactId>x86</artifactId>
            <version>3.3.0-v3346</version>
        </dependency>
        <!--
            Now include org.eclipse.equinox:app explicitly
          -->
        <dependency>
            <groupId>org.eclipse.equinox</groupId>
            <artifactId>app</artifactId>
            <version>1.0.0-v20070606</version>
        </dependency>
    </dependencies>

    <build>
        <!-- TUSCANY-3858: Specify filters here, not in plugin execution configuration -->
        <filters>
            <filter>${basedir}/../../target/filter.properties</filter>
        </filters>

        <resources>
            <resource>
                <directory>${basedir}</directory>
                <excludes>
                    <exclude>src/**</exclude>
                    <exclude>**/.*/**</exclude>
                    <exclude>pom.xml</exclude>
                    <exclude>build.*</exclude>
                    <exclude>filtered-resources/**</exclude>
                    <exclude>target/**</exclude>
                </excludes>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <!-- TUSCANY-3762: Copy resource files that need to be filtered -->
                    <execution>
                        <id>copy-filtered-resources</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${basedir}</outputDirectory>
                            <resources>          
                                <resource>
                                    <directory>${basedir}/filtered-resources</directory>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>              
                        </configuration>            
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifestFile>target/classes/META-INF/MANIFEST.MF</manifestFile>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <configuration>
                    <filesets>
                        <!-- TUSCANY-3762: Delete copied filtered resource files -->
                        <fileset>
                            <directory>${basedir}</directory>
                            <includes>
                                <include>about.ini</include>
                                <include>about_files/NOTICE</include>
                                <include>META-INF/**</include>
                                <include>org/**</include>
                            </includes>
                        </fileset>
                    </filesets>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>repo1.eclipse</id>
            <url>http://repo1.maven.org/eclipse/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

</project>
