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 Repraesentation einer TLD ein 015 * und laedt 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 erhaelt. 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 @Override 046 public void doStartElement(String uri, String name, String qName, Attributes atts) { 047 if(qName.equals("Owner")) insideOwners=true; 048 if(qName.equals("Buckets")) insideBuckets=true; 049 if(qName.equals("Bucket")) startBucket(); 050 051 } 052 053 @Override 054 public void doEndElement(String uri, String name, String qName) throws SAXException { 055 if(qName.equals("Owner")) insideOwners=false; 056 if(qName.equals("Buckets")) insideBuckets=false; 057 if(qName.equals("Bucket")) endBucket(); 058 } 059 060 061 protected void setContent(String value) throws SAXException { 062 if(insideOwners){ 063 if(inside.equals("ID")) ownerIdKey=value; 064 else if(inside.equals("DisplayName")) ownerDisplayName=value; 065 066 } 067 if(insideBuckets && insideBucket) { 068 // Name 069 if(inside.equals("Name")) bucket.setName(value); 070 // CreationDate 071 else if(inside.equals("CreationDate")) { 072 try { 073 bucket.setCreation(S3.toDate(value,s3.getTimeZone())); 074 } 075 catch (PageException e) { 076 throw new SAXException(e.getMessage()); 077 } 078 } 079 } 080 } 081 082 083 084 /** 085 * Wird jedesmal wenn das Tag attribute beginnt aufgerufen, um intern in einen anderen Zustand zu gelangen. 086 */ 087 private void startBucket() { 088 insideBucket=true; 089 bucket=new Bucket(s3); 090 } 091 092 093 /** 094 * Wird jedesmal wenn das Tag tag endet aufgerufen, um intern in einen anderen Zustand zu gelangen. 095 */ 096 private void endBucket() { 097 bucket.setOwnerDisplayName(ownerDisplayName); 098 bucket.setOwnerIdKey(ownerIdKey); 099 buckets.add(bucket); 100 insideBucket=false; 101 } 102 103 public Bucket[] getBuckets() { 104 return (Bucket[]) buckets.toArray(new Bucket[buckets.size()]); 105 } 106 107 }