<?xml version="1.0" encoding="UTF-8"?>
<!--
 *************************************************************************
 * Copyright (c) 2006 Actuate Corporation.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *  Actuate Corporation - initial API and implementation
 *  
 *************************************************************************
 *
 *  build.xml
 *
 *  Build script for project org.eclipse.datatools.enablement.msft.sqlserver.ui.nl
 *
 * "Clean" - Clean nl.jar file and *.properties files generated from
 *           native2ascii.exe.
 * "Jar"   - Convert *_xx_YY.msg files into *_xx_YY.properties files by native2ascii.exe and
 *            create nl.jar file.
 * "Export" - Export the project, for instance, jar files are copied to a designated folder. 
 *            this task must be called after calling Jar task, so it needn't depend on Jar explicitly
 *
 *  Usage:
 *    ant [any one or more of the public targets] 
 *        -Declipse.home=<your eclipse home> 
 *		  -Ddtp.home=<your DTP plugins source home>  [optional]
 *
 *  Default target is "Jar".
 *
 *  Notes:
 *  1. classpath need to be set for junit.jar
 *  2. The build script requires Ant 1.6
 *
-->

<project name="org.eclipse.datatools.enablement.msft.sqlserver.ui.nl" default="Jar" basedir=".">
	<description>NL Fragment for org.org.eclipse.datatools.enablement.msft.sqlserver.ui</description>

	<property file="META-INF/MANIFEST.MF" />
    <property name="dir.src" value="src" />
 	<property name="dir.bin" value="bin" />
	<property name="nl.group" value="1" />
	<property name="module.name" value="org.eclipse.datatools.enablement.msft.sqlserver.ui.nl" />
	<property name="jar.name" value="${module.name}${nl.group}_${Bundle-Version}.jar" />

	<target name="Clean">
		<delete>
			<fileset dir="." includes="**/*_??_??.properties" />
			<fileset dir="." includes="${jar.name}" />
		</delete>
	</target>
	
	<target name="NativeToAscii" 
	     description="Execute native2ascii for *.msg files">


		<native2ascii encoding="Cp1252"
					  src="." 
					  dest="." 
					  ext=".properties" 
					  includes="**/*_de_DE.msg, **/*_fr_FR.msg, **/*_es_ES.msg"/>
		<native2ascii encoding="GBK" 
					  src="." 
					  dest="." 
					  ext=".properties" 
					  includes="**/*_zh_CN.msg"/>	
		<native2ascii encoding="SJIS" 
					  src="." 
					  dest="." 
					  ext=".properties"
					  includes="**/*_ja_JP.msg"/>
		<native2ascii encoding="MS949" 
					  src="." 
					  dest="." 
					  ext=".properties"
					  includes="**/*_ko_KR.msg"/>
	</target>
	
	<target name="nl-jar">
		<jar destfile="${jar.name}" manifest="./META-INF/MANIFEST.MF">
		<zipfileset dir="${dir.src}"  includes="**/*.properties"/>
		   <fileset dir="." includes="plugin_??_??.properties"/>
		</jar>
	</target>
	
	<target name="Jar" depends="NativeToAscii, nl-jar" >
	</target>
	<target name="Export">
		<copy todir="${export.dir}">
	        <fileset dir="." includes="${jar.name}"/>
	  </copy>
	</target>

</project>
