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

	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.apache.cayenne.modeler</groupId>
		<artifactId>cayenne-modeler-parent</artifactId>
		<version>4.1.RC1</version>
	</parent>

	<artifactId>cayenne-modeler-win</artifactId>
	<name>cayenne-modeler-win: Modeler Windows Assembly</name>
	<packaging>jar</packaging>

	<dependencies>

		<dependency>
			<groupId>org.apache.cayenne.modeler</groupId>
			<artifactId>cayenne-modeler</artifactId>
			<version>${project.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.cayenne.modeler</groupId>
			<artifactId>cayenne-modeler-win-ext</artifactId>
			<version>${project.version}</version>
		</dependency>
		<!-- 
			adding cayenne runtime dependencies explicitly, 
			as they are marked as "provided" in the modeler pom
			and won't be included in the jar 
		-->
		<dependency>
			<groupId>org.apache.cayenne</groupId>
			<artifactId>cayenne-server</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cayenne</groupId>
			<artifactId>cayenne-project</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cayenne.modeler</groupId>
			<artifactId>cayenne-wocompat</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cayenne.modeler</groupId>
			<artifactId>cayenne-modeler-generic-ext</artifactId>
			<version>${project.version}</version>
		</dependency>
	</dependencies>

	<build>
		<resources>
			<resource>
				<directory>target/modeler</directory>
			</resource>
		</resources>
	</build>

	<profiles>
		<!-- Avoid assembly of Modeler on normal build -->
		<profile>
			<id>windows</id>
			<build>
				<plugins>
					<plugin>
						<groupId>org.objectstyle.japp</groupId>
						<artifactId>japp-maven-plugin</artifactId>
						<configuration>
							<name>CayenneModeler</name>
							<longName>${project.version}</longName>
							<destDir>${project.build.outputDirectory}</destDir>
							<mainClass>org.apache.cayenne.modeler.win.WinMain</mainClass>
							<icon>src/japplication/resources/CayenneModeler.ico</icon>
							<os>windows</os>
							<jvm>1.5+</jvm>
							<jvmOptions>-Xmx500m</jvmOptions>
						</configuration>
						<executions>
							<execution>
								<phase>generate-resources</phase>
								<goals>
									<goal>japp</goal>
								</goals>
							</execution>
						</executions>					
					</plugin>
				</plugins>
			</build>
		</profile>
        <profile>
            <id>code-quality</id>

            <activation>
                <property>
                    <name>!fast-and-dirty</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-checkstyle-plugin</artifactId>
                        <!--<configuration>
                            <suppressionsLocation>${project.basedir}/cayenne-checkstyle-suppression.xml</suppressionsLocation>
                        </configuration>-->
                    </plugin>
                    <plugin>
                        <artifactId>maven-pmd-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

	<pluginRepositories>
		<pluginRepository>
			<id>objectstyle</id>
			<name>ObjectStyle repository</name>
			<url>http://maven.objectstyle.org/nexus/content/groups/cayenne-deps</url>
			<layout>default</layout>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
			<releases>
				<enabled>true</enabled>
			</releases>
		</pluginRepository>
	</pluginRepositories>
</project>
