<?xml version="1.0" encoding="UTF-8"?>
<!--
  ANT Buildfile

  Copyright 2015-2019 MicroEJ Corp. All rights reserved.
  MicroEJ Corp. PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.

-->
<project name="fs-embedded-s3-init">

	<import file="${scripts.dir}/extension-init.xml" />
	<import file="../init-fs-embedded-impl/fs-embedded-impl-init.xml"/>
	<dirname file="${ant.file.fs-embedded-s3-init}" property="ant.dir.fs-embedded-s3-init"/>

	<taskdef name="openclose" classname="OpenCloseConnectionTask">
		<classpath>
			<path>
				<path path="${scripts.dir}/"/>
				<fileset dir="${ant.dir.fs-embedded-s3-init}">
					<include name="openclosesp.jar"/>
				</fileset>
			</path>
		</classpath>
	</taskdef>
	<property name="sp.connection.timeout" value="20000"/>
	
	<target name="init/fs-embedded-s3/execution" extensionOf="init/execution" if="onS3">
		<augment id="s3.exec.parallel.tasks">
			<openclose />
		</augment>
	</target>
	
	<target name="context/fs-embedded-s3" extensionOf="init/context">
		<!-- check if application targets FS Embedded on S3 -->
		<condition property="usesFSEMBEDDEDonS3">
			<and>
				<available classname="com.is2t.java.io.FileSystem">
					<classpath>
						<pathelement path="${application.classpath}"/>
						<fileset dir="${platform.dir}/javaLibs" includes="resourcemanager*.jar"/>
					</classpath>
				</available>
				<isset property="onS3"/>
			</and>
		</condition>
	</target>
	
	<target name="init/fs-embedded-s3" depends="init/fs/impl" extensionOf="init/execution" if="usesFSEMBEDDEDonS3">
		
		<!-- check the filesystem root dir -->
		<condition property="fs.mock.root.dir" value="${com.is2t.fs.embedded.mock.root}" else="${output.dir}/filesystem">
			<and>
				<isset property="com.is2t.fs.embedded.mock.root"/>
				<not>
					<equals arg1="${com.is2t.fs.embedded.mock.root}" arg2="" trim="true"/>
				</not>
			</and>
		</condition>
		
		<!-- ensure root dir is not a file -->
		<fail message="The filesystem root dir '${fs.mock.root.dir}' targets a file, not a directory.">
			<condition>
				<available file="${fs.mock.root.dir}" type="file"/>
			</condition>
		</fail>
		
		<!-- create root dir (may already exists) -->
		<mkdir dir="${fs.mock.root.dir}"/>
		
		<augment id="hil.main.classpath">
			<fileset dir="${platform.dir}/mocks" includes="mockfs-embedded-s3.jar"/>
		</augment>
		
		<!--  Augment the classpath with the classes used by FS -->
		<augment id="init.application.classpath">
			<fileset dir="${platform.dir}/javaLibs">
				<include name="sni*.jar"/>
			</fileset>
		</augment>
		
		<!--fs embedded java properties on s3 (user.dir, root.dir...)-->
		<augment id="s3.override.properties">
			<propertyref prefix="${fs.embedded.java.properties.prefix}"/>
			<globmapper from="${fs.embedded.java.properties.prefix}*" to="s3.java.property.*"/>
		</augment>
		
		<!--fs properties for the mock (mock root dir, path separator, etc.) -->
		<augment id="hil.main.properties">
			<propertyref name="fs.mock.root.dir"/>
			<propertyref prefix="${fs.embedded.java.properties.prefix}"/>
		</augment>
		
		<!-- verbose -->
		<property name="com.is2t.fs.embedded.mock.root.file" location="${fs.mock.root.dir}"/>
		<echo message="Simulation Filesystem root directory is ${com.is2t.fs.embedded.mock.root.file}" level="verbose"/>
	</target>

</project>