001 package railo.commons.io.res.type.s3; 002 003 import java.io.IOException; 004 import java.io.InputStream; 005 import java.util.ArrayList; 006 import java.util.List; 007 008 import org.xml.sax.Attributes; 009 import org.xml.sax.SAXException; 010 011 import railo.runtime.exp.PageException; 012 013 /** 014 * Die Klasse TagLibFactory liest die XML Repr�sentation einer TLD ein 015 * und l�dt diese in eine Objektstruktur. 016 * Sie tut dieses mithilfe eines Sax Parser. 017 * Die Klasse kann sowohl einzelne Files oder gar ganze Verzeichnisse von TLD laden. 018 */ 019 public final class BucketFactory extends S3Factory { 020 021 private boolean insideBuckets=false; 022 private boolean insideBucket=false; 023 private final S3 s3; 024 025 private Bucket bucket; 026 private final List buckets=new ArrayList(); 027 private boolean insideOwners; 028 private String ownerIdKey; 029 private String ownerDisplayName; 030 031 032 /** 033 * Privater Konstruktor, der als Eingabe die TLD als File Objekt erh�lt. 034 * @param saxParser String Klassenpfad zum Sax Parser. 035 * @param file File Objekt auf die TLD. 036 * @throws IOException 037 * @throws SAXException 038 */ 039 public BucketFactory(InputStream in, S3 s3) throws IOException, SAXException { 040 super(); 041 this.s3=s3; 042 init(in); 043 } 044 045 /** 046 * Geerbte Methode von org.xml.sax.ContentHandler, 047 * wird bei durchparsen des XML, beim Auftreten eines Start-Tag aufgerufen. 048 * 049 * @see org.xml.sax.ContentHandler#startElement(String, String, String, Attributes) 050 */ 051 public void doStartElement(String uri, String name, String qName, Attributes atts) { 052 if(qName.equals("Owner")) insideOwners=true; 053 if(qName.equals("Buckets")) insideBuckets=true; 054 if(qName.equals("Bucket")) startBucket(); 055 056 } 057 058 /** 059 * Geerbte Methode von org.xml.sax.ContentHandler, 060 * wird bei durchparsen des XML, beim auftreten eines End-Tag aufgerufen. 061 * 062 * @see org.xml.sax.ContentHandler#endElement(String, String, String) 063 */ 064 public void doEndElement(String uri, String name, String qName) throws SAXException { 065 if(qName.equals("Owner")) insideOwners=false; 066 if(qName.equals("Buckets")) insideBuckets=false; 067 if(qName.equals("Bucket")) endBucket(); 068 } 069 070 071 protected void setContent(String value) throws SAXException { 072 if(insideOwners){ 073 if(inside.equals("ID")) ownerIdKey=value; 074 else if(inside.equals("DisplayName")) ownerDisplayName=value; 075 076 } 077 if(insideBuckets && insideBucket) { 078 // Name 079 if(inside.equals("Name")) bucket.setName(value); 080 // CreationDate 081 else if(inside.equals("CreationDate")) { 082 try { 083 bucket.setCreation(S3.toDate(value,s3.getTimeZone())); 084 } 085 catch (PageException e) { 086 throw new SAXException(e.getMessage()); 087 } 088 } 089 } 090 } 091 092 093 094 /** 095 * Wird jedesmal wenn das Tag attribute beginnt aufgerufen, um intern in einen anderen Zustand zu gelangen. 096 */ 097 private void startBucket() { 098 insideBucket=true; 099 bucket=new Bucket(s3); 100 } 101 102 103 /** 104 * Wird jedesmal wenn das Tag tag endet aufgerufen, um intern in einen anderen Zustand zu gelangen. 105 */ 106 private void endBucket() { 107 bucket.setOwnerDisplayName(ownerDisplayName); 108 bucket.setOwnerIdKey(ownerIdKey); 109 buckets.add(bucket); 110 insideBucket=false; 111 } 112 113 public Bucket[] getBuckets() { 114 return (Bucket[]) buckets.toArray(new Bucket[buckets.size()]); 115 } 116 117 }