package railo.commons.io.res.type.s3;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import railo.runtime.exp.PageException;
/**
* Die Klasse TagLibFactory liest die XML Repraesentation einer TLD ein
* und laedt diese in eine Objektstruktur.
* Sie tut dieses mithilfe eines Sax Parser.
* Die Klasse kann sowohl einzelne Files oder gar ganze Verzeichnisse von TLD laden.
*/
public final class BucketFactory extends S3Factory {
private boolean insideBuckets=false;
private boolean insideBucket=false;
private final S3 s3;
private Bucket bucket;
private final List buckets=new ArrayList();
private boolean insideOwners;
private String ownerIdKey;
private String ownerDisplayName;
/**
* Privater Konstruktor, der als Eingabe die TLD als File Objekt erhaelt.
* @param saxParser String Klassenpfad zum Sax Parser.
* @param file File Objekt auf die TLD.
* @throws IOException
* @throws SAXException
*/
public BucketFactory(InputStream in, S3 s3) throws IOException, SAXException {
super();
this.s3=s3;
init(in);
}
@Override
public void doStartElement(String uri, String name, String qName, Attributes atts) {
if(qName.equals("Owner")) insideOwners=true;
if(qName.equals("Buckets")) insideBuckets=true;
if(qName.equals("Bucket")) startBucket();
}
@Override
public void doEndElement(String uri, String name, String qName) throws SAXException {
if(qName.equals("Owner")) insideOwners=false;
if(qName.equals("Buckets")) insideBuckets=false;
if(qName.equals("Bucket")) endBucket();
}
protected void setContent(String value) throws SAXException {
if(insideOwners){
if(inside.equals("ID")) ownerIdKey=value;
else if(inside.equals("DisplayName")) ownerDisplayName=value;
}
if(insideBuckets && insideBucket) {
// Name
if(inside.equals("Name")) bucket.setName(value);
// CreationDate
else if(inside.equals("CreationDate")) {
try {
bucket.setCreation(S3.toDate(value,s3.getTimeZone()));
}
catch (PageException e) {
throw new SAXException(e.getMessage());
}
}
}
}
/**
* Wird jedesmal wenn das Tag attribute beginnt aufgerufen, um intern in einen anderen Zustand zu gelangen.
*/
private void startBucket() {
insideBucket=true;
bucket=new Bucket(s3);
}
/**
* Wird jedesmal wenn das Tag tag endet aufgerufen, um intern in einen anderen Zustand zu gelangen.
*/
private void endBucket() {
bucket.setOwnerDisplayName(ownerDisplayName);
bucket.setOwnerIdKey(ownerIdKey);
buckets.add(bucket);
insideBucket=false;
}
public Bucket[] getBuckets() {
return (Bucket[]) buckets.toArray(new Bucket[buckets.size()]);
}
}