<%@ jet 
	imports="
		org.talend.core.model.process.INode 
		org.talend.core.model.process.ElementParameterParser
		org.talend.core.model.metadata.IMetadataTable
		org.talend.designer.codegen.config.CodeGeneratorArgument
		java.util.List
		java.util.Map
		java.util.ArrayList
	"
%>

<%
	CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
	INode node = (INode)codeGenArgument.getArgument();	
	String accessKey = ElementParameterParser.getValue(node, "__ACCESSKEY__");
	String secretKey = ElementParameterParser.getValue(node, "__SECRETKEY__");
	
	String isDeleteRecursive = ElementParameterParser.getValue(node, "__DELETE_RECURSIVE__");
	String bucket = ElementParameterParser.getValue(node, "__BUCKET__");
	
	String cid = node.getUniqueName();
	
%>


	int nb_Object_<%=cid%> = 0;
	
	com.amazon.s3.AWSAuthConnection AWSAuthConnection<%=cid %> =null;
	
	<%
	String useExistingConn = ElementParameterParser.getValue(node, "__USE_EXISTING_CONNECTION__");
	
	if(useExistingConn.equals("true")){
		String connection = ElementParameterParser.getValue(node, "__CONNECTION__");
		String conn= "conn_" + connection;
	%>
	
	AWSAuthConnection<%=cid %> = (com.amazon.s3.AWSAuthConnection)globalMap.get("<%=conn %>");
	
	<%}else{%>		
	AWSAuthConnection<%=cid %> = new com.amazon.s3.AWSAuthConnection(<%=accessKey%>,<%=secretKey%>);
	<%} %>	    
	

    java.util.Map<String, java.util.List<String>> lHeaders = new java.util.TreeMap<String, java.util.List<String>>();
    lHeaders.put("Content-Type", java.util.Arrays.asList(new String[] { "text/plain" }));


    int lNBObjectDeleted<%=cid %> = 0;
        
    try {
    	
    
    	java.util.List<com.amazon.s3.Bucket> lLB = AWSAuthConnection<%=cid %>.listAllMyBuckets(lHeaders).entries;
    	
    	if (lLB!=null && !com.ysance.s3.UtilsS3.listContainsBucket(lLB, <%=bucket%>))
    		throw new com.ysance.s3.exception.S3ObjectAlreadyExistException("The bucket "+<%=bucket%>+" not exists"); 

    	com.amazon.s3.ListBucketResponse lLBR = AWSAuthConnection<%=cid %>.listBucket(<%=bucket%>, null, null, null, lHeaders);
    	
    	if (!"true".equals("<%=isDeleteRecursive%>") && lLBR!=null && lLBR.entries!=null && lLBR.entries.size()>0)
    		throw new com.ysance.s3.exception.S3BucketNotEmptyException("The bucket "+<%=bucket%>+" is not empty"); 
    	
    	if ("true".equals("<%=isDeleteRecursive%>")) {

        	java.util.Iterator<com.amazon.s3.ListEntry> lIterObjects=lLBR.entries.iterator();
        	String lResultDeleteObject = null;
        	
        	while (lIterObjects.hasNext()) {
        		lResultDeleteObject = AWSAuthConnection<%=cid %>.delete(<%=bucket%>, lIterObjects.next().key, lHeaders).connection.getResponseMessage();
        		//System.out.println(lResultDeleteObject);
        		lNBObjectDeleted<%=cid %>++;
        	}
    	}
    	
    	String lResultDeleteBucket = AWSAuthConnection<%=cid %>.deleteBucket(<%=bucket%>, lHeaders).connection.getResponseMessage();

    	//System.out.println(lResultDeleteBucket);
        
    } catch (java.io.IOException ioe) {
    	if ("Connection refused: connect".equals(ioe.getMessage()))
    		throw new com.ysance.s3.exception.S3ConnectionException(ioe.getMessage());
    		else throw new com.ysance.s3.exception.S3BucketCreateException(ioe.getMessage());
    }
    
    globalMap.put("<%=cid %>_NB_OBJECT", lNBObjectDeleted<%=cid %>);
    