<?xml version="1.0" encoding="UTF-8"?>
<!-- * Copyright 2001-2009 The Apache Software Foundation. * * Licensed 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.juddi</groupId>
        <artifactId>juddi-parent</artifactId>
        <version>3.3.10</version>
    </parent>
    <artifactId>juddi-gui-dsig</artifactId>
    <name>jUDDI Web Client Digital Signature Applet</name>

    <build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
					  <archive>
						<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
					  </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jarsigner-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>

                            <archive>${project.build.directory}/${project.artifactId}-${project.version}-jar-with-dependencies.jar</archive>
                            <keystore>src/main/keystore/signing-jar.keystore</keystore>
                            <alias>applet</alias>
                            <storepass>applet</storepass>
                            <keypass>applet</keypass>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.apache.juddi</groupId>
            <artifactId>juddi-client</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <!--<dependency>
            <groupId>com.sun.jdk</groupId>
            <artifactId>plugin</artifactId>
            <version>1.6.0</version>
            <type>jar</type>
            <scope>system</scope>
            <systemPath>${java.home}/lib/plugin.jar</systemPath>
        </dependency>-->
    </dependencies>
 <profiles>

    <!-- finagling to deal with plugin.jar not being bundled with OpenJDK -->
    <profile>
      <id>standard-jdk</id>
      <activation>
        <file><exists>${java.home}/lib/plugin.jar</exists></file>
      </activation>
	<dependencies>
         <dependency>
            <groupId>com.sun.jdk</groupId>
            <artifactId>plugin</artifactId>
            <version>1.6.0</version>
            <type>jar</type>
            <scope>system</scope>
            <systemPath>${java.home}/lib/plugin.jar</systemPath>
        </dependency>
    </dependencies>
    </profile>
     <profile>
         <id>standard-with-plugin-in-jre-folder</id>
         <activation>
             <file>
                 <exists>${java.home}/jre/lib/plugin.jar</exists>
             </file>
         </activation>
         <dependencies>
             <dependency>
                 <groupId>com.sun.jdk</groupId>
                 <artifactId>plugin</artifactId>
                 <version>1.6.0</version>
                 <type>jar</type>
                 <scope>system</scope>
                 <systemPath>${java.home}/jre/lib/plugin.jar</systemPath>
             </dependency>
         </dependencies>
     </profile>
    <profile>
      <id>icedtea-web</id>
      <activation>
        <file><exists>/usr/share/icedtea-web/plugin.jar</exists></file>
      </activation>
	<dependencies>
	 <dependency>
            <groupId>com.sun.jdk</groupId>
            <artifactId>plugin</artifactId>
            <version>1.6.0</version>
            <type>jar</type>
            <scope>system</scope>
            <systemPath>/usr/share/icedtea-web/plugin.jar</systemPath>
        </dependency>
	</dependencies>
    </profile>
  </profiles>
</project>
