Some more additions to contrib for JDBC
authorPeter Mount
Tue, 23 Jan 2001 10:22:22 +0000 (10:22 +0000)
committerPeter Mount
Tue, 23 Jan 2001 10:22:22 +0000 (10:22 +0000)
contrib/retep/CHANGELOG
contrib/retep/build.xml
contrib/retep/data/cds.dtd [new file with mode: 0644]
contrib/retep/data/cds.xml [new file with mode: 0644]
contrib/retep/retep.jpx
contrib/retep/uk/org/retep/xml/core/XMLFactory.java [new file with mode: 0644]
contrib/retep/uk/org/retep/xml/core/XMLFactoryException.java [new file with mode: 0644]
contrib/retep/uk/org/retep/xml/jdbc/XMLDatabase.java [new file with mode: 0644]
contrib/retep/uk/org/retep/xml/jdbc/XMLResultSet.java [new file with mode: 0644]
contrib/retep/uk/org/retep/xml/parser/TagHandler.java
contrib/retep/uk/org/retep/xml/test/XMLExport.java [new file with mode: 0644]

index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..59f7c335cb9b5353e6db97725ba2d1bb51a5fbff 100644 (file)
@@ -0,0 +1,4 @@
+Tue Jan 23 10:19:00 GMT 2001 [email protected]
+        - Finished the XML Export classes
+   - First of the test data suite now in CVS.
+
index cf377d3bad384f12500caec68c1a6e5b2c41913c..019903bc798efb25a1fbe730fd217dd6031ef27a 100644 (file)
@@ -2,7 +2,7 @@
 
   build file to build the donated retep tools packages
 
-  $Id: build.xml,v 1.1 2001/01/18 14:50:14 peter Exp $
+  $Id: build.xml,v 1.2 2001/01/23 10:22:18 peter Exp $
 
 -->
 
@@ -44,7 +44,7 @@
   
   
     
-      parser/**" if="xml" />
+      
     
   
 
diff --git a/contrib/retep/data/cds.dtd b/contrib/retep/data/cds.dtd
new file mode 100644 (file)
index 0000000..df542c3
--- /dev/null
@@ -0,0 +1,16 @@
+
+
+title CDATA #IMPLIED
+ aid CDATA #IMPLIED
+>
+
+
+
+ name CDATA #IMPLIED
+>
+
+
+ tid CDATA #IMPLIED
+ id CDATA #IMPLIED
+>
+\r
diff --git a/contrib/retep/data/cds.xml b/contrib/retep/data/cds.xml
new file mode 100644 (file)
index 0000000..fb0203b
--- /dev/null
@@ -0,0 +1,2691 @@
+
+  
+    
+      01 - Kiling Time
+      02 - Waiting To Die
+      03 - Feel Good
+      04 - Bartender
+      05 - Crazy Legs
+      06 - Pac Bell
+      07 - I Got You
+      08 - Boom (How You Like That)
+      09 - Swan Dive
+      10 - Stevie
+      11 - Jesus (Of Nazareth)
+      12 - The Meadow
+  
+  
+    
+    
+      jump for joy
+    
+    
+      01 - No Limit
+      02 - Tribal Dance
+      03 - Mysterious
+      04 - Faces
+      05 - Maximum Overdrive
+      06 - The Power Age
+      07 - Break The Chain
+      08 - Kiss Me Bliss Me
+      09 - Thow The Groove Down
+      10 - R.U.O.K
+      11 - Let The Beat Control Your Body
+      12 - Invinite Me To Trance
+      13 - Where Are You Now
+      14 - Shelter For A Rainy Day
+      15 - Get Ready For This (WILDE MIX)
+      16 - No Limit - (AUTOMATIC BREAKBEAT REMIX)
+  
+  
+    
+    
+      01 - 2-Raum Wohnung - Wir trafen uns in einem Garten
+      02 - 2-Raum Wohnung - Wir trafen uns in einem Garten (Inga Humpes Version)
+      03 - 2-Raum Wohnung - Wir trafen uns in einem Garten mit Max
+      04 - 2-Raum Wohnung - Wir trafen uns in einem Garten (i-oI - Remix)
+  
+  
+    
+    
+      01 - Track  1
+      02 - Track  2
+      03 - Track  3
+      04 - Track  4
+      05 - Track  5
+      06 - Track  6
+      07 - Track  7
+      08 - Track  8
+      09 - Track  9
+      10 - Track 10
+      11 - Track 11
+      12 - Track 12
+      13 - Track 13
+  
+  
+    
+    
+      01 - Show me something good
+      02 - Feel 'ya
+      03 - Find Your Own Peace
+      04 - Nourishing The Ocean
+      05 - Walking
+      06 - Bring Out Your Love
+      07 - Primetime
+      08 - Stormy
+      09 - Philosophie
+      10 - No
+      11 - Dharma
+      12 - Shine On
+  
+  
+    
+    
+      01 - Ambitionz As A Ridah
+      02 - All bout u
+      03 - Skandalouz
+      04 - Got My Mind Made Up
+      05 - How Do You Want It
+      06 - 2 Of Amerikaz Most Wanted
+      07 - No More Pain
+      08 - Heartz of Men
+      09 - Life Goes On
+      10 - Only God can judge me
+      11 - Tradin War Stories
+      12 - California Love(RMX)
+      13 - I Ain't Mad At Cha
+      14 - What'z Ya Phone Number
+    
+    
+      01 - Radio Mix
+      02 - Instrumental
+      03 - Album Mix
+    
+    
+      01 - Redemption
+      02 - Open Fire
+      03 - R U Still Down_ (Remeber Me)
+      04 - Hellrazor
+      05 - Thug Style
+      06 - Where Do We Go From Here
+      07 - I Wonder If Heaven Got A Ghetto
+      08 - Nothing To Lose
+      09 - I'm Gettin Money
+      10 - Lie To Kick It
+      11 - Fuck All Y'all
+      12 - Let Them Thangs Go
+      13 - Definition Of A Thug Nigga
+    
+    
+      01 - Ready 4 Whatever
+      02 - When I Get Free
+      03 - Hold On Be Strong
+      04 - I'm Losin It
+      05 - Fake Ass Bitches
+      06 - Do For Love
+      07 - Enemies With Me
+      08 - Nothin But Love
+      09 - 16 On Death Row
+      10 - I Wonder If Heaven Got A Ghetto (Hip-hop Version)
+      11 - When I Get Free
+      12 - Black Starry Night (Interlude)
+      13 - Only Fear Of Death
+  
+  
+    
+    
+      01 - Original Version
+      02 - SNA Club Mix
+      03 - Jack Daniel´s
+  
+  
+    
+    
+      01-Loveless
+      02-Golden Age of Life
+      03-Planeteria
+      04-Third Stream
+      05-Escape That
+      06-Cosmic Tree
+      07-Spirits in Transit
+      08-The Action
+      09-Star Chasers
+      10-Wishful Thinking
+      11-Universal Reprise
+    
+    
+      01-We who are not as others
+      02-Humans
+      03-In the shadows
+      04-Mathmatical Probability
+      05-Greys
+      06-Pegasus 51
+      07-!$^^$%
+      08-Wormholes
+      09-Dauntless
+    
+    
+      01-Planetaria (Hefner Remix)
+      02-We Who Are Not As Others (Jazzaova Version)
+      03-Mathematical Probability (Mustang Remix)
+      04-Escape That (New Sector Movements Selekshan 2 Sector Rub Remix)
+      05-Escape That (Off-World Remix)
+      06-Dauntless (Restless Soul South Pacific Remix)
+      07-Star Chasers (Masters at Work Main Mix)
+      08-Star Chasers (Azymuth Remix)
+      09-The Action (Shawn J Period Remix)
+      10-We Who Are Not As Others (Alpha Omega Remix)
+      11-We Who Are Not As Others (Sonar Circle Remix)
+  
+  
+    
+    
+      01 - Train
+      02 - Superfly
+      03 - What's Up
+      04 - Pleasantly Blue
+      05 - Morphin & Chocolate
+      06 - Spaceman
+      07 - Old Mr. Heffer
+      08 - Calling All The People
+      09 - Dear Mr. President
+      10 - Drifting
+      11 - No Place Like Home
+  
+  
+    
+    
+      01 - Owner Of A Lonely Heart
+      02 - Hold On
+      03 - It Can Happen
+      04 - Changes
+      05 - Cinema
+      06 - Leave It
+      07 - Our Song
+      08 - City Of Love
+      09 - Hearts
+  
+  
+    
+    
+      01 - For Starters
+      02 - Monkey Kong
+      03 - A
+      04 - Old Folks
+      05 - Hopper Jonnus Fang
+      06 - Summer On The Underground
+      07 - Warning
+      08 - If It Ain't Broke Fix It Anyway
+      09 - I Love Lake Tahoe
+      10 - Don't Be Punks
+      11 - Down On The Floor
+      12 - Jason's Addiction
+      13 - Miles Away
+      14 - Getting Around
+  
+  
+    
+    
+      01-The Universe-A Guy Called Gerald
+      02-The First Breath-A Guy Called Gerald
+      03-Humanity-A Guy Called Gerald
+      04-Multiplies-A Guy Called Gerald
+      05-Fever (Or a Flame)-A Guy Called Gerald
+      06-Could you Understand-A Guy Called Gerald
+      07-Alien Report-A Guy Called Gerald
+      08-Glow-A Guy Called Gerald
+      09-Beaches & Deserts-A Guy Called Gerald
+      10-Final Call-A Guy Called Gerald
+      11-I Make It-A Guy Called Gerald
+      12-Universal Spirit-A Guy Called Gerald
+      13-Hurry To Go Easy-A Guy Called Gerald
+      14-Scale Circle-A Guy Called Gerald
+      15-Landed-A Guy Called Gerald
+  
+  
+    
+    
+      01 A Teens - Mamma Mia
+      03 A Teens - Super Trouper
+      02 A Teens - gimme gimme gimme (a man after midnight)
+      04 A Teens - One of us
+      05 A Teens - Voulez vous
+      06 A Teens - SOS
+      07 A Teens - Dancing Queen
+      08 A Teens - Take a chance on me
+      09 A Teens - Lay all your love on me
+      10 A Teens - The name of the game
+      11 ATeens - Our last summer
+  
+  
+    
+    
+      01 - Take On Me
+      02  - Cry Wolf
+      03 - Touchy
+      04 - You Are The One
+      05 - Manhattan Skyline
+      06 - The Blood That Moves The Body
+      07 - Early Morning
+      08 - Hunting High And Low
+      09 - Move To Memphis
+      10 - I've Been Losing You
+      11 - The Living Daylights
+      12 - Crying In The Rain
+      13 - I Call Your Name
+      14 - Stay On These Roads
+      15 - Train Of Thought
+      16 - The Sun Always Shines On TV
+    
+    
+      01 - Take on me
+      02 - Train of Thought
+      03 - Hunting High and Low
+      04 - The Blue Sky
+      05 - Living a Boy's Adventure Tale 
+      06 - The Sun Always Shines On TV
+      07 - And You Tell Me
+      08 - Love Is Reason
+      09 - I Dream Myself Alive
+      10 - Here I Stand and Face the Rain
+    
+    
+      01 - minor earth major sky
+      02 - little black heart
+      03 - velvet
+      04 - summer moved on
+      05 - the sun never shone that day
+      06 - to let you win
+      07 - the company man
+      08 - thought that it was you
+      09 - i wish i cared
+      10 - barely hanging on
+      11 - you will never get over me
+      12 - i wont forget here
+      13 - mary ellen makes the moment count
+  
+  
+    
+    
+      01 - Dancing Queen
+      02 - Knowing Me, Knowing You
+      03 - Take A Chance On Me
+      04 - Mamma Mia
+      05 - Lay All Your Love On Me
+      06 - Super Trouper
+      07 - I Have A Dream
+      08 - The Winner Takes It All
+      09 - Money, Money, Money
+      10 - S.O.S
+      11 - Chiquitita
+      12 - Fernando
+      13 - Voulez Vous
+      14 - Gimme! Gimme! Gimme!
+      15 - Does Your Mother Know
+      16 - One Of Us
+      17 - The Name Of The Game
+      18 - Thank You For The Musik
+      19 - Waterloo
+    
+    
+      01 - Waterloo
+      02 - Honey, Honey
+      03 - So long
+      04 - I do
+      05 - SOS
+      06 - Mamma mia
+      07 - Fernando
+      09 - Money, Money, Money
+      10 - The name of the game
+      11 - Take a chance on me
+      12 - Chiquitita
+      13 - I have a dream
+      14 - The winner takes it all
+      15 - Super trouper
+      16 - Thank you for the music
+    
+    
+      01 - Summer Night City
+      02 - Angeleyes
+      03 - The Day Before You Came
+      04 - Eagle
+      05 - I Do, I Do, I Do, I Do, I Do
+      06 - So Long
+      07 - Honey Honey
+      08 - The Visitors
+      09 - Our Last Summer
+      10 - On & On
+      11 - Ring Ring
+      12 - I Wonder
+      13 - Lovelight
+      14 - Head Over Heels
+      15 - When I Kissed The Teacher
+      16 - I Am The City
+      17 - Cassandra
+      18 - Under Attack
+      19 - When All Is Said And Done
+      20 - The Way Old Friends Do
+    
+    
+      01 - People Need Love
+      02 - Ring Ring
+      03 - Waterloo
+      04 - Waterloo (German Version) 
+      05 - Honey Honey
+      06 - So Long
+      07 - I Do, I Do, I Do, I Do, I Do
+      08 - S.O.S
+      09 - Mamma Mia
+      10 - Fernando
+      11 - Dancing Queen
+      12 - Money, Money, Money
+      13 - Knowing Me, Knowing You
+      14 - The Name Of The Game
+      15 - Take A Chance On Me
+      16 - Eagle
+      17 - Thank You For The Music
+      18 - Summer Night City
+    
+    
+      01 - Chiquitita
+      02 - Does Your Mother Know
+      03 - Voulez-Vous
+      04 - Gimme! Gimme! Gimme! (A Man After Midnight)
+      05 - I Have A Dream
+      06 - The Winner Takes It All
+      07 - Super Trouper
+      08 - Lay All Your Love On Me
+      09 - One Of Us
+      10 - Head Over Heels
+      11 - The Day Before You Came
+      12 - Under Attack
+      13 - Ring Ring (German Version)
+      14 - Happy New Year
+      15 - Wer Im Wartesaal Der Liebe Steht
+  
+  
+    
+    
+      01. Absolute Beginner - Das Boot
+      02. Absolute Beginner - Hammerhart
+      03. Absolute Beginner - Rock On
+      04. Absolute Beginner - Liebeslied
+      05. Absolute Beginner - Füchse
+      06. Absolute Beginner - Fahr'n
+      07. Absolute Beginner - Showmaster
+      08. Absolute Beginner - Geht Was
+      09. Absolute Beginner - Geh bitte
+      10. Absolute Beginner - Nie Nett
+      11. Absolute Beginner - Mikro in der Hand
+      12. Absolute Beginner - Nicht Allein
+      5Sterne Delux - Dein Herz schlägt schneller
+  
+  
+    
+    
+      01-Zonenzombie
+      02-Papier
+      03-Friss den Stahl
+      04-Charly
+      05-Die Ballade von Karl Arsch
+      06-Europa
+      07-Terror und Schrott
+      08-Küss mich
+      09-Weit daneben gepisst
+      10-Welt voll Harmonie
+      11-Die Zeit
+      12-Unfall
+      13-Ich und die Wirklichkeit
+      14Die Reise
+  
+  
+    
+    
+      01 AC-DC - Riff Raff
+      02 AC-DC - Let There Be Rock
+      03 AC-DC - Whole Lotta Rosie
+      04 AC-DC - Sin City
+      05 AC-DC - Dirty Deeds Done Dirt Cheap
+      06 AC-DC - Baby Please Don't Go
+      07 AC-DC - Big Balls
+      08 AC-DC - Walk All Over You
+      09 AC-DC - Hard As Rock
+      10 AC-DC - Hells Bells
+      11 AC-DC - What Next To The Moon
+      12 AC-DC - Shake Your Foundations
+      13 AC-DC - Gone Shooting
+      14 AC-DC - Thunderstuck
+  
+  
+    
+    
+      01 - Life Is A Flower
+      02 - Always Have, Always Will
+      03 - Cruel Summer
+      04 - Travel To Romantis
+      05 - Adventures In Paradise
+      06 - Dr. Sun
+      07 - Cecilia
+      08 - He Decides
+      09 - I Pray
+      10 - Tokyo Girl
+      11 - Don't Go Away
+      12 - Captain Nemo
+      13 - Donnie
+      14 - Cruel Summer (Big Bonus Mix)
+    
+    
+      01 - Voules-Vous Dancer
+      02 - All That She Wants
+      03 - Münchhausen (Just Chaos)
+      04 - Happy Nation
+      05 - Waiting For Magic
+      06 - Fashion Party
+      07 - Wheel Of Fortune
+      08 - Dancer In A Daydream
+      09 - My Mind -Mindles Mix-
+      10 - W.O.F. -Original Club Mix-
+      11 - Dimension Of Depth
+      12 - Young And Proud
+      13 - A.T.S.W. -Banghra Version-
+    
+    
+      01 - The sign (radio edit)
+      02 - The sign (long version)
+  
+  
+    
+    
+      01 - Made in Paradise
+      02 - Auf der Rolltreppe
+      03 - Kuddel Daddel Du
+      04 - Die Zauberin
+      06 - Sturmflut
+      07 - Robert der Roboter
+      08 - Melancholie
+      09 - Karawane ins Glück
+      10 - Das Lied von Susi und Johnny
+      11 - Mein Herz ist ein Ufo
+  
+  
+    
+    
+      01 - acid marathon 1
+      02 - acid marathon 2
+      03 - acid marathon 3
+      04 - washaa
+      05 - acid marathon 4
+      06 - jing jang
+      07 - in front of da outland
+      08 - mondonon
+      09 - clock seven
+      10 - 4 degrees
+      11 - balance
+      12 - + + + acid
+  
+  
+    
+    
+      01 - Intro
+      02 - 73
+      03 - Metropolis
+      04 - Music in my Mind
+      05 - Jaxx
+      06 - Mother Death
+      07 - The Tree Knows Everything
+      08 - Circles
+      09 - Dirty Happy
+      10 - F-Jam
+      11 - Colours
+      12 - Aromatherapy
+  
+  
+    
+    
+      01 - Tiro Ao  lvaro
+      02 - Iracema
+      03 - Trem Das Onze
+      04 - Saudosa Maloca
+      05 - O Samba Do Arnesto
+      06 - Torresmo   Milanesa
+      07 - Viaduto Santa Efig nia
+      08 - Bom Dia Tristeza
+      09 - As Mariposas
+      10 - Despejo Na Favela
+      11 - Ag enta a M o, Jo o
+      12 - Vide Verso Meu Endere o
+      13 - Acende O Candieiro
+      14 - No Morro Da Casa Verde
+      15 - Vila Esperan a
+      16 - Fica Mais Um Pouco Amor
+      17 - Apaga O Fogo Man 
+  
+  
+    
+    
+      01 - Por que voc  faz cinema-
+      02 - A f brica do Poema
+      03 - Bagatelas
+      04 - Metade
+      05 - Sudoeste
+      06 - O verme e a estrela
+      07 - Estrelas
+      08 - Aconteceu
+      09 - Cariocas
+      10 - Morro dois irm os
+      11 - Inverno
+      12 - Roleta russa
+      13 - Tema de Alice
+      14 - Portrait of Gertrude
+      15 - Minha m sica
+  
+  
+    
+    
+      Amazing
+      Boogie Man
+      Can't Stop Messin'
+      Crazy
+      Cryin'
+      Eat the Rich
+      Fever
+      Flesh
+      Get a Grip
+      Gotta Love It
+      Intro
+      Line Up
+      Livin' on the Edge
+      Shut Up And Dance
+      Walk On Down
+    
+    
+      01 - Nine Lives
+      02 - Falling In Love
+      03 - Hole In My Soul
+      04 - Taste Of India
+      05 - Full Circle
+      06 - Something's Gotta Give
+      07 - Ain't That A Bitch
+      08 - Take Me To The Farm
+      09 - Crash
+      10 - Kiss Your Past Good-bye
+      11 - Pink
+      12 - Falling Off
+      13 - Attitude Adjustment
+  
+  
+    
+    
+      01 - Amor Verdadero
+      02 - Alto Songo
+      03 - Habana Del Este
+      04 - A Toda Cuba Le Gusta
+      05 - Fiesta de la Rumba
+      06 - Los Sitio' Asere
+      07 - Pio Mentiroso
+      08 - Maria Caracoles
+      09 - Clasiqueando con Ruben
+      10 - Elube Chango
+  
+  
+    
+    
+      01 - Das Möbiusband - Zeychen und Wunder
+      02 - Triebwerk
+      03 - Felix
+      04 - Kosmonauten
+      05 - Fingerwalze
+      06 - So sollte es nicht sein!
+      07 - Küchenlied
+      08 - Das Scheusal
+      09 - Déjà vu (Snap Mix #2)
+      10 - Hasensong
+      11 - Schöner leben
+      12 - Rohleder's
+      13 - Maximale Gier
+      14 - Nach Hause (instr.)
+      15 - Gesichter
+      16 - Stadt-Fisch
+  
+  
+    
+    
+      01-Intro
+      02-Cold Water Music
+      03-The Force
+      04-Sail
+      05-Downstate
+      06-Ain't Got Time To Waste
+      07-Fat City (Interlude)
+      08-True To Hip Hop
+      09-Demonique
+      10-A Tree, A Rock And A Cloud
+      11-Journey To The End Of The Night
+      12-From Here To Fame
+  
+  
+    
+    
+      01 - Original mix
+      02 - Sexy boy
+      03 - Album version
+      04 - Remember
+    
+    
+      01 - La Femme D'Argent
+      02 - Sexy Boy
+      03 - All I Need
+      04 - Kelly Watch The Stars
+      05 - Talisman
+      06 - Remember
+      07 - You Make It Easy
+      08 - Ce Matin La
+      09 - New Star In The Sky
+      10 - Le Voyage De Pénélope
+    
+    
+      01 - Modular Mix
+      02 - Casanova 70
+      03 - Les Professionnels
+      04 - J'ai dormi sous l'Eau
+      05 - Le Soleil est pres de Moi
+      06 - Californie
+      07 - Brakes On
+    
+    
+      01 - playground love
+      02 - clouds up
+      03 - bathroom girl
+      04 - cemetary party
+      05 - dark messages
+      06 - the word 'hurricane'
+      07 - dirty trip
+      08 - highschool lover
+      09 - afternoon sister
+      10 - ghost song
+      11 - empty house
+      12 - dead bodies
+      13 - suicide underground
+  
+  
+    
+    
+      A Teens - Super Trouper
+      Aqua - Cartoon Heroes
+      Backstreet Boys - Show Me The Meaning Of Being Lonely
+      Bloodhound Gang - The Bad Touch
+      Die Toten Hosen - Unsterblich
+      Enrique Iglesias - Rhythm Divine
+      Highland - Bella Stella
+      HIM - Join me
+      Lene Marlin -  Sitting Down Here
+      Madonna - American Pie
+      Marc Anthony - I Need To Know
+      Melanie C - Northern Star
+      Metallica - Nothing Else Matters
+      Modern Talking - China In Your Eyes (Ext.Version)
+      N'Sync - Bye Bye Bye
+      Natural Born Hippies - Am I Not Sweet
+      Oli.P - Niemals Mehr
+      Prezioso feat. Marvin- Tell Me Why
+      Santana - Maria Maria
+      Sash! - Adelante [Original Mix]
+      Stefan Raab - Wadde Hadde Dudde Da
+      Sting - Desert Rose
+      Thomas D. - Liebesbrief
+      Vengaboys - Shalala Lala
+      Yamboo - Come With Me
+    
+    
+      01_Blank & Jones - The Nightfly
+      02_Passion Fruit - Wonderland
+      03_GIGI D'AGOSTINO - The Riddle
+      04_Echt - Junimond
+      05_Bon Jovi - It´s My Life
+      06_Backstreet Boys - The One
+      07_Venga Boys - Uncle John From Jamaica
+      08_GIGI D'AGOSTINO - Another Way
+      09_Ace Of Base - Hallo Hallo
+      10_Melanie C - Never Be The Same Again
+      11_Anton Aus Tirol Feat DJ Ötzi - Gemma Bier Trinken
+      12_Britney Spears - Oops I Did It Again
+      13_GIGI D'AGOSTINO - La Passion
+      14_Reamonn - Supergirl
+      15_John Davies - I Promised Myself
+      16_Fools Garden - Suzy
+      17_Bomfunk MC's - Freestyler
+      18_Die Toten Hosen - Bayern
+      19_Die Band Ohne Namen - Take My Heart
+    
+    
+      Anastacia - I'm Outta Love 
+      Andreas Stenschke - Just When I Needed You Most
+      Antonia Feat. Sandra - ...Ich Bin Viel Schöner
+      Azuca - Este Chico (I Fall In Love With You) (Radio Mix)
+      Bastian Raagas - You Complete Me (Radio Dance Version)
+      Captain Jack - Only You
+      Celine Dion - I Want You To Need Me (Radio Edit)
+      Celine Dion - I Want You To Need Me (Thunderpuss Radio Mix)
+      Chayanne - Boom Boom (Spanglish Version)
+      Eskobar - Good Day For Dying (Radio Edit)
+      Hooverphonic - Mad About You (Radio Edit)
+      Madonna - Music (CD Version)
+      Monaco - I´ve Got A Feeling (Radio Edit)
+      Red Sector - Invasion Over Berlin (Short Energy Mix)
+      Senait - Aura (Radio Edit)
+      Sharon Williams - Life Is So Strong (Single Edit)
+      Sladdgo - Was Du Woll
+      Sonique - It Feels So Good
+      Sound Convoy - Hey Baby ( Radio Edit )
+      Verena - Ist das alles
+    
+    
+      Berger - Zeig mir Dein Gesicht
+      Britney Spears - Lucky
+      Darude - Sandstorm
+      Marque - Electronic Lady
+      Mel C - I Turn To You
+      Mr President - Up´n Away 2k
+      N Sync 02 - It's Gonna Be Me
+      Orange Blue - She's Got That Light
+      Rednex - Hold Me (For A While)
+      Rednex - The Spirit Of The Hawk
+      Ronan Keating - Life is a Rollercoaster
+      Sasha - Owner Of My Heart
+      Tic Tac Toe - Ich liebe Disch
+      Toploader - Dancing in the Moonlight
+      Vanessa Amorosi - Absolutely Everybody
+      Whitney Houston & Enrique Iglesias - Could I Have This Kiss Forever
+  
+  
+    
+    
+      01 - Che Angelo Sei (Amore Mio)
+      02 - Tu Soltanto Tu (Mi Hai Fatto Innamorare)
+      03 - Ci Sara
+      04 - Imagini 77
+      05 - Canto Di Libertá
+      06 - Abbandonati
+      07 - Prima Notte D´amore
+      08 - Sharazan
+      09 - Felicitá
+      10 - Meditando
+      11 - Caro Gesú
+      12 - E Fu Subito Amore
+      13 - Angeli
+      14 - Aria Pura
+      15 - Lo Ti Cerco
+      16 - Canzone Blu
+  
+  
+    
+    
+      01 - All I Really Want
+      02 - You Oughta Know
+      03 - Perfect
+      04 - Hand In My Pocket
+      05 - Right Through You
+      06 - Forgiven
+      07 - You Learn
+      08 - Head Over Feet
+      09 - Mary Jane
+      10 - Ironic
+      11 - Not the Doctor
+      12 - Wake Up
+      13 - You Oughta Know (remix)
+    
+    
+      01 - You Learn-1
+      01 - You Learn
+      02 - Joining You
+      03 - No Pressure Over Cappuccino
+      04 - That I Would Be Good
+      05 - Head Over Feet
+      06 - Princes Familiar
+      07 - I Was Hoping
+      08 - Ironic
+      09 - These R The Thoughts
+      10 - King Of Pain
+      11 - You Oughta Know
+      12 - Uninvited
+    
+    
+      Alanis Morisette - 01 Front Row
+      Alanis Morisette - 02 Baba
+      Alanis Morisette - 03 Thank U
+      Alanis Morisette - 04 Are You Still Mad
+      Alanis Morisette - 05 Sympathetic Character
+      Alanis Morisette - 06 That I Would be Good
+      Alanis Morisette - 07 The Couch
+      Alanis Morisette - 08 Can't Not
+  
+  
+    
+    
+      01 - Time
+      02 - Tryin'
+      03 - The Child
+      04 - Ralph & Kathy
+      05 - With U
+      06 - You, my Baby & I
+      07 - 06 10 98
+      08 - Party People
+      09 - Consolidated
+      10 - Quiet Storm
+  
+  
+    
+    
+      01 - Feel the Sunshine
+      02 - Jazz Master
+      03 - Intro 1
+      04 - Acid Lab
+      05 - Pulp Friction
+      06 - Candles
+      07 - Ibiza
+      08 - Intro 2
+      09 - Out of Time
+      10 - U R
+  
+  
+    
+    
+      01 - Big In Japan
+      02 - Sounds Like A Melody
+      03 - Sensations
+      04 - The Mysteries Of Love
+      05 - Lassie Come Home
+      06 - Jerusalem
+      07 - Dance With Me
+      08 - For A Million
+      09 - A Victory Of Love
+      10 - The Jet Set
+      11 - Red Rose
+      12 - Romeos
+      13 - Summer Rain
+      14 - Forever Young
+      15 - Big In Japan [Culture Mix]
+    
+    
+      A Victory Of Love
+      Big In Japan
+      Fallen Angel
+      Forever Young
+      In The Mood
+      Lies
+      Sounds Like A Melody
+      Summer In Berlin
+      The Jet Set
+      To Germany With Love
+  
+  
+    
+    
+      01 - Follow Me
+      02 - Gold
+      03 - Mother Look What They've Done To Me
+      04 - Run Baby Run
+      05 - Queen Of China Town
+      06 - The Sphinx
+      07 - Blood And Honey
+      08 - Fashion Pack
+      09 - Fabulous Lover Love Me
+      10 - Diamonds
+      11 - Egal
+      12 - Fever
+      13 - Never Trus A Pretty Face
+      14 - Alphabet
+      15 - Im A Photograph
+      16 - Blue Tango
+      17 - Tomorrow
+      18 - The Lady In Black
+      19 - I Need A Man
+      20 - Nymphomania
+  
+  
+    
+    
+      01 - Let it rain
+      02 - Birmingham
+      03 - Fall from grace
+      04 - Dark Horse
+      05 - Beautiful goodbye
+      06 - Sitting on the top of the world
+      07 - Last exit to eden
+      08 - Trust me (This is love)
+      09 - Let's got lost
+      10 - Promises
+    
+    
+      01 - Dark Horse
+      02 - Let It Rain
+      03 - Birmingham
+    
+    
+      01 - Believe in you
+      02 - Love lift me
+      03 - Why don't you love me-
+      04 - Too little, too late
+      05 - If I didn't have you
+      06 - Ride
+      07 - Right here all along
+      08 - Wishful thinking
+      09 - Shades of grey
+      10 - Give up giving in
+      11 - Best of me
+      12 - Never said goodbye
+      13 - Out of bounds
+  
+  
+    
+    
+      01 - Stoney Street
+      02 - Easy Muffin
+      03 - Yasawas
+      04 - Creatures
+      05 - Chomp Samba
+      06 - The New York Editor
+      07 - Defocus
+      08 - The Nasty
+      09 - Bitter & Twisted
+      10 - Wires & Snakes
+      11 - One Day In My Garden
+      12 - Dream Sequence
+      13 - One Small Step
+      14 - Mission
+    
+    
+      01 - Get Your Snack On
+      02 - Four Ton Mantis
+      03 - Slowly
+      04 - Marine Machines
+      05 - Golfer vrs Boxer
+      06 - Deo
+      07 - Precursor (feat. Quadraceptor)
+      08 - Saboteur
+      09 - Chocolate Lovely
+      10 - Rhino Jockey
+      11 - Keepin' It Steel (The Anvil Track)
+      12 - Natureland
+  
+  
+    
+    
+      01 - Not That Kind
+      02 - I'm Outta Love
+      03 - Cowboys & Kisses
+      04 - Who's Gonna Stop The Rain
+      05 - Love Is Alive
+      06 - I Ask Of You
+      07 - Wishing Well
+      08 - Made For Lovin' You
+      09 - Black Roses
+      10 - Yo Trippin'
+      11 - One More Chance
+      12 - Some Old Story
+  
+  
+    
+    
+      01 - Get you closer
+      02 - Michael caine
+      03 - Evil boys
+      04 - Pimmelmann
+      05 - Und wieder
+      06 - Love & fingers
+      07 - Pray
+      08 - Men in uniform
+      09 - Hypnotize
+      10 - Der erste Schritt
+    
+    
+      01 - Devil airlines
+      02 - Second front
+      03 - Metalhammer
+      04 - Menschen
+      05 - And one
+      06 - Only one
+      07 - Crimetime
+      08 - Synthetik
+      09 - Geld
+      10 - Second voice
+      11 - Exit
+      12 - Anguish
+      13 - Deliverance
+      14 - Metalhammer (Heavy mix)
+    
+    
+      01 - Get You Closer (Radio Mix)
+      02 - Get You Closer (Club Mix)
+      03 - Pimmelmann (Nixmix)
+    
+    
+      01 - Ego
+      02 - Murder murder
+      03 - Driving with my darling
+      04 - The only guest
+      05 - Dein Duft
+      06 - It happend last night
+      07 - When the feet hurt
+      08 - The secret
+      09 - Fuer
+      10 - Second day
+      11 - Body nerv
+      12 - Take some more
+      13 - Deutschmaschine
+      14 - Heart of stone
+      15 - Ghama voodoo
+      16 - Bonus
+    
+    
+      01 - Nachtschicht in der hassfabrik
+      02 - Teufel oder engel
+      03 - Klon mich lieber nicht!
+      04 - Maschinenstuermer
+      05 - Bedienungsanleitungen
+    
+    
+      01 - Und dafuer
+      02 - Sometimes
+      03 - Movie star
+      04 - Uns geht's gut
+      05 - My warrior
+      06 - Creatures
+      07 - Sweety sweety
+      08 - Schluss mit lustig
+      09 - Sitata tirulala
+      10 - Friends in heaven
+      11 - Mirror in your heart
+      12 - Nordhausen
+    
+    
+      01 - Sometimes (Radio Edit)
+      02 - High (Bonus)
+      03 - White Doves (Bonus)
+      04 - Technoman (Live !)
+      05 - Sometimes (Instr.)
+      06 - Nordhausen (Album Mix)
+    
+    
+      01 - Wild pain
+      02 - Life isnt easy in germany
+      03 - Consequence of time
+      04 - Spontanverkehr
+      05 - Friend of stars
+      06 - Hall of souls
+      07 - Recover you
+      08 - Der erste Stein
+      09 - Tanz der Arroganz
+      10 - The and
+      11 - Spot
+      41 - Wild pain (maxi)
+    
+    
+      01 - Virgin superstar
+      02 - Wasted
+      03 - You don't love me anymore
+      04 - Goodbye Germany
+      05 - Wet spot
+      06 - Panzer Mensch
+      07 - My story
+      08 - Life to lose
+      09 - Not the only one
+      10 - Don't need the drugs
+      11 - Mr Jenka
+    
+    
+      01 - Wasted (Radio Edit)
+      02 - Forever J (Bonus)
+      03 - Wasted (Naghavi Mix)
+      04 - Maschinenhimmel (Bonus)
+      05 - Lawrence Of Arabia (Bonus)
+  
+  
+    
+    
+      01-Track  1
+      02-Track  2
+      03-Track  3
+      04-Track  4
+      05-Track  5
+      06-Track  6
+      07-Track  7
+      08-Track  8
+      09-Track  9
+      10-Track  10
+      11-Track  11
+      12-Track  12
+      13-Track  13
+      14-Track  14
+      15-Track  15
+      16-Track  16
+      17-Track  17
+      18-Track  18
+  
+  
+    
+    
+      01 - lass uns brennen
+      02 - girls in love
+      03 - so ist das nun mal
+      04 - ab
+      05 - allein im park
+      06 - das weisst nur du
+      07 - du bist da
+      08 - blaumeise yvonne
+      09 - es ist nur der rauch
+      10 - in mich selbst verliebt
+      11 - wenn du menschen triffst
+      12 - das maedchen auf dem foto
+      13 - scheinzahm
+    
+    
+      01 - girls in love (original version)
+      02 - girls in love (grungerman remix)
+      03 - girls in love (forever sweet remix)
+      04 - singen hoeren
+    
+    
+      01 - girls in love
+      02 - ich weiss es nicht (tegel a23)
+      03 - es ist nur der rauch
+      04 - ich weiss es nicht
+    
+    
+      01 - so ist das nun mal
+      02 - linda
+      03 - so ist das nun mal (mike ink mix)
+      04 - so ist das nun mal (reinhard & tobias happy sundays mix)
+  
+  
+    
+    
+      01 - Il giocatore di biliardo
+      02 - La comica finale
+      03 - Il dito e la luna
+      04 - L'ultimo giorno del circo
+      05 - Per ogni matematico
+      06 - La parola ai mimi
+      07 - L'uso dell'amore
+      08 - Lamento di un uomo di neve
+      09 - La regola del filo a piombo
+      10 - Vita quotidana di uno spettro
+      11 - La leggenda del collezionista
+      12 - Confesso che ho vissuto
+    
+    
+      01 - il ladro
+      02 - Madame
+      03 - bella faccia
+      04 - uomini di passaggio
+      05 - Ballerina
+      06 - Amazzonia
+      07 - il bambino dei topi
+      08 - il tempo di partire
+      09 - il grido
+      10 - ai confini dell'asia
+      11 - Festa
+    
+    
+      01 - Il Cantico Delle Creature
+      02 - Il Sultano Di Babilonia E La Prostituta
+      03 - Il Lupo Di Gubbio
+      04 - Audite Poverelle
+      05 - Divina Commedia - Paradiso, Canto XI
+      06 - Il Trattato Dei Miracoli
+      07 - Nelle Paludi Di Venezia Francesco Si Fermò Per Pregare E Tutto Tacue
+      08 - La Regola
+      09 - La Predica Della Perfetta Letizia
+      10 - La Morte Di Francesco
+      11 - Salmo
+  
+  
+    
+    
+      01 - Nothing at all
+      02 - Weltschmerz
+      03 - Killing time
+      04 - True love tales
+      05 - Self destruct
+      06 - Out darkness
+      07 - The sitting room
+      08 - Swimming
+      09 - An ordinary life
+      10 - Shades
+      11 - Short story
+      12 - The power game
+      13 - All we have to be thankful for
+    
+    
+      Letter Of Thanks To A Friend (club edit)
+      Letter Of Thanks To A Friend (instrumental edit)
+      Letter Of Thanks To A Friend (radio edit)
+    
+    
+      01 - Hardfloor 97 Radio edit
+      02 - Hardfloor 97 version
+      03 - Total eclipse remix
+    
+    
+      01 - Heaven
+      02 - Red Sands
+      03 - Alarm Call
+      04 - Tide
+      05 - The Interruption
+      06 - The Power Game
+      07 - World Without Warning
+      08 - Bursting
+      09 - Lovers Retreat
+    
+    
+      If I could
+      Our Darkness-2
+      Our Darkness
+    
+    
+      At Midnight
+      Closed Circuit
+      Come In
+      Dedication
+      Echoes Remain Forever
+      Fragility
+      Improvisation
+      Interlude
+      Journey By Night
+      Killing Time
+      So Quiet Here
+      Swallow Song
+      That We Have Been Here
+      The Sitting Room
+      The Spinning Turning Of The Summer Earth
+      This Be The Verse
+      Unstill Life
+      Windmills Of Your Mind
+      World Without Warning
+    
+    
+      01 - Up
+      02 - Homecoming
+      03 - Red sands
+      04 - The power game
+      05 - Cane hill
+      06 - Leaving
+      07 - Heaven
+      08 - The last emotion
+      09 - Killing time
+      10 - Wallies
+      11 - Out darkness
+      12 - Now
+      13 - This be the verse
+      14 - Sleeper in metropolis
+    
+    
+      01 - the sitting room
+      02 - swimming
+      03 - an ordinary live
+      04 - shades
+      06 - the power game
+      07 - all we have to be thankful
+      08 - contact
+      09 - sleeper in metropolis
+      10 - poem for a nuclear romance
+      11 - wallies
+      12 - the lovers audition
+      13 - poets turmoil no 364
+      14 - echoes remain forever
+      15 - all night party
+      16 - pandoras box
+      17 - feel
+      18 - the last emotion
+      19 - nothing at all
+      20 - true love tales
+      21 - self destruct
+      23 - weltschmerz
+      24 - our darkness remix 12
+      x0 - killing time
+      y0 - for
+    
+    
+      Acropolis
+      Athens
+      Dream Made Real
+      Elegy For A Lost Summer
+      Letter Of Thanks To A Friend
+      Mundesley Beach
+      Painting
+      The Healing
+      The Key
+      Virtuality
+    
+    
+      01 Anne Clark - Virtuality ( Global Youth Remix )
+      02 Anne Clark - The Healing ( Aural Float Treatment )
+      03 Anne Clark - Sleeper In Metropolis ( Hardfloor 97 Version )
+      04 Anne Clark - Letter Of Thanks To A Friend ( Radi Mate Mix By Mouse On Mars )
+      05 Anne Clark - Nida ( Saafi Bros. Remix )
+      06 Anne Clark - Our Darkness ( Hardfloor 97 Version )
+      07 Anne Clark - Homecoming ( Pascal F.E.O.S. Remix )
+      08 Anne Clark - Sleeper In Metropolis ( Sleepers Revenge Mix by Sven Väth & Ralf Hildenbeutel )
+      09 Anne Clark - Contact ( Contact 2017 Mix by the Mover )
+      10 Anne Clark - Wallies ( Night Of The Hunter Remix By Juno Reactor )
+      11 Anne Clark - Our Darkness ( Total Eclipse Remix )
+  
+  
+    
+    
+      01 - Radio edit
+      02 - Album version
+      03 - Instrumental
+      04 - It is a shame
+  
+  
+    
+    
+      abe
+      barney2
+      barney3
+      bart
+      bfpvny
+      bush
+      cfuture
+      duffy
+      eckat
+      fett
+      feuerste
+      homer
+      homer2
+      homer3
+      homer4
+      homer5
+      krusty
+      moe
+      moe2
+      nafzu
+      ned
+      nick
+      prfsimon
+      roehrich
+      sexchat
+      simpson
+      spd
+      spd2
+      troymc
+    
+    
+      0190maen
+      0190weib
+      anonym
+      bettdecke
+      domina
+      hotline
+      otto
+      peppig
+      sexchat
+      sexshop
+      sigilive
+      susi3
+      telsex
+    
+    
+      3_schritte
+      abends
+      ali
+      anwalt
+      baby
+      bananen
+      beichte
+      bleib_ma_dran
+      boehme
+      butler
+      f-prinzp
+      franzoesisch
+      friedhof
+      geld
+      genervt
+      heller
+      hengst
+      horoskop
+      hypnose
+      indianer
+      inkasso
+      kind
+      klh-ende
+      klhradio
+      kontonr
+      lauter
+      mallorca
+      mamifix
+      maschine
+      maxmanu
+      mensch
+      mir
+      mkp
+      morgens
+      nervoes
+      omm
+      polizei
+      privater_anschiss
+      rezept4
+      talent
+      toupet
+      versteigerung
+      werbung
+      y2kfrau
+      y2kmann
+    
+    
+      bayer
+      beatles
+      chanchan
+      delasoul
+      dtkuhn
+      feschajaga
+      george
+      helge2
+      howard
+      kaktus
+      mouskour
+      python
+      python2
+      raab
+      ringdong
+      ruehmann
+      schwein
+      spice
+      tmwywfm
+    
+    
+      12oder3
+      24uhr
+      anschlu2
+      arabia
+      assigned
+      cutoff
+      d1_1
+      d2_3
+      d2_4
+      ende
+      erreicht
+      gehalten
+      geschaltet
+      importan
+      interoute
+      japan
+      kingcall1
+      kingcall2
+      maschendrahtzaun
+      mittagspause
+      nachrich
+      nica
+      talkline
+      tmobil
+      urlaub
+      vorwahl
+    
+    
+      bbecker
+      bbecker2
+      brandt
+      bushkohl
+      cdu
+      coolman
+      faust
+      gerdschroeder
+      gerdschroeder2
+      gerdschroeder3
+      gerdschroeder4
+      gott
+      grizmek3
+      halrvord
+      helge4
+      honikohl
+      kohl
+      kohl2
+      kohl3
+      kohl4
+      kohlsingt
+      kork
+      lndnberg
+      loddar
+      loriot
+      michael
+      mission
+      moser
+      papst2
+      ranicki
+      ranicki2
+      scherz
+      supereh
+      susi3
+      weihnachtsmann
+      wiebitte
+      wummwend
+    
+    
+      3947
+      borg
+      c3po
+      cluster
+      dsn
+      dukat
+      dukat2
+      hansolo
+      holodoc
+      janeway
+      kim2
+      kira
+      kirk
+      mib
+      nog
+      obrien
+      obrien2
+      odo
+      picard
+      r2d2
+      riker
+      schatten
+      sisko
+      sisko2
+      spock
+      spock2
+      tng
+      tos
+      uhura
+      voyager
+      worfdax
+      zimmerm
+    
+    
+      ab_lilo_5
+      airforc2
+      airforce
+      albundy
+      alf
+      alf2
+      berti
+      bestofrichie
+      bond
+      bond2
+      boning
+      bully
+      bvogts
+      clousea2
+      clouseau
+      conan
+      ddf
+      delasoul
+      drebin
+      drebins
+      dtkuhn
+      duke
+      elaine
+      emil
+      erhardt
+      george
+      georgebush
+      ghostbusters
+      hartman
+      helge
+      helge2
+      helge3
+      krause
+      lector
+      lose
+      mulder
+      mulder2
+      nypd
+      ohotte
+      osterwelle
+      python3
+      python4
+      python5
+      raab
+      renegade
+      richie
+      richie2
+      richie3
+      richie4
+      richie5
+      rockfor2
+      rockford
+      scully
+      scully2
+      scully3
+      seinfeld
+      seth
+      sigi
+      smeister
+      thejade
+      tnet-box
+      tooltime
+      twachter
+      venkman
+      ventura
+      ventura2
+      verona
+      wallace
+      xfiles
+  
+  
+    
+    
+      01 - Girl Boy (nls mix)
+      02 - Milk Man
+      03 - Inkey$
+      04 - Girl Boy [£18 snarerush mix]
+      05 - Beetles
+      06 - Girl Boy [redruth mix]
+    
+    
+      01 - Acrid Avid Jamshred
+      02 - The Waxen Pith
+      03 - Wax the Nip
+      04 - Icct Hedral (Edit)
+      05 - Ventolin (Video Version)
+      06 - Come On You Slags
+      07 - Start As You Mean To Go On
+      08 - Wet Tip Hen Ax
+      09 - Mookid
+      10 - Alberto Balsam
+      11 - Cow Cud Is A Twin
+      12 - Next Heap With
+    
+    
+      01 - .215061
+      02 - .1993841
+      03 - .0180871R
+      04 - .942937
+      05 - .0180871L
+      06 - .000890569
+      07 - .55278037732581
+      08 - (CAT 00897-AA1)
+      09 - (CAT 00897-A1)
+      10 - AFX 6-B
+      11 - (CD Only Track #1)
+      12 - (CD Only Track #2)
+      13 - (CAT 00897-A2)
+    
+    
+      01 - Digeridoo
+      02 - Flaphead
+      03 - Phloam
+      04 - Isopropanol
+      05 - Polynomial-C
+      06 - Tamphex (Hedphuq Mix)
+      07 - Phlange Phace
+      08 - Dodeccaheedron
+      09 - Analogue Bubblebath 1
+      10 - Metapharstic
+      11 - We have arrived (Aphex Twin QQT Mix)
+      12 - We have arrived (Aphex Twin TTQ Mix)
+      13 - Digeridoo (Live in Cornwall, 1990)
+    
+    
+      01 - Come To Daddy, Pappy Mix
+      02 - Flim
+      03 - Come To Daddy, Little Lord Faulteroy Mix
+      04 - Bucephalus Bouncing Ball
+      05 - To Cure A Weakling Child, Contour Regard
+      06 - Funny Little Man
+      07 - Come To Daddy, Mummy Mix
+      08 - IZ-US
+    
+    
+      01 - Donkey Rhubarb
+      02 - Vaz Deferenz
+      03 - Icct Hedral (Philip Glass Orchestration)
+      04 - Pancake Lizard
+    
+    
+      01 - Mr. Frosty
+      02 - Jelly Fish
+      03 - Eggy Toast
+      04 - Reg
+      05 - Vodka
+      06 - Winner Takes All
+      07 - Giant Deflating Football
+      08 - Upright Kangaroo
+      09 - The Sound of Beady Eyes
+      10 - Bu Bu Bu Ba
+    
+    
+      01 - on
+      02 - 73-yips
+      03 - d-scape
+      04 - xepha
+    
+    
+      01 - d-scape mix
+      02 - reload mix
+      03 - mu-ziq mix
+      04 - 28 mix
+    
+    
+      01 - Quoth (Original)
+      02 - Iketa
+      03 - Quoth (Wooden Thump Mix)
+      04 - Bike Pump Meets Bucket
+      05 - (Unlisted)
+    
+    
+      01 - Polygon Window
+      02 - Audax Powder
+      03 - Quoth
+      04 - If It Really Is Me
+      05 - Supremacy II
+      06 - UT1 - dot
+      07 - -no title-
+      08 - Quixote
+      09 - Quino-phec
+    
+    
+      01 - 4
+      02 - Cornish Acid
+      03 - Peek 824545201
+      04 - Fingerbib
+      05 - Corn Mouth
+      06 - To Cure A Weakling Child
+      07 - Goon Gumpas
+      08 - Yellow Calx
+      09 - Girl-Boy Song
+      10 - Logon Rock Witch
+    
+    
+      01 - Xtal
+      02 - Tha
+      03 - Pulsewidth
+      04 - Ageispolis
+      05 - i
+      06 - Green Calx
+      07 - Heliosphan
+      08 - We are the Music Makers
+      09 - Schottkey 7th Path
+      10 - Ptolemy
+      11 - Hedphelym
+      12 - Delphium
+      13 - Actium
+    
+    
+      01 - Cliffs
+      02 - Radiator
+      03 - Rhubarb
+      04 - Hankie
+      05 - Grass
+      06 - Mold
+      07 - Curtains
+      08 - Blur
+      09 - Weathered stone
+      10 - Tree
+      11 - Domino
+      12 - White blur 1
+    
+    
+      01 - Ventolin (Salbutamol Mix)
+      02 - Ventolin (Praze-An-Beeble Mix)
+      03 - Ventolin (Marazanvose Mix)
+      04 - Ventolin (Plain-An-Gwarry Mix)
+      05 - Ventolin (The Coppice Mix)
+      06 - Ventolin (Crowsmengegus Mix)
+    
+    
+      01 - Ventolin (wheeze mix)
+      02 - Ventolin CARHARRACK mix
+      03 - Ventolin PROBUS mix
+      04 - Ventolin (cylob mix)
+      05 - Ventolin (deep gong mix)
+      06 - Ventolin (asthma beats mix)
+  
+  
+    
+    
+      01 (Aphrodite) - Aphromoods
+      02 (Amazon II) - King Of The Beats
+      03 (Aladdin) - Woman That Rolls!
+      04 (Aphrodite) - Spice (Of The Gods Remix)
+      05 (Aladdin) - Summer Breeze
+      06 (Amazon II) - Music's Hypnotising
+      07 (Aphrodite (Vortex Mix)) - Listen To The Rythm
+      08 (Aphrodite) - Dub Moods (The Greatest Trick)
+      09 (Aphrodite) - Style From The Dark Side
+      10 (Aphrodite) - Tower Bass!
+      11 (Aphrodite feat. Gail Mclean) - I Wanted It More And
+      12 (Aphrodite) - Sweet Mind
+  
+  
+    
+    
+      01 - Sealth Overture
+      02 - Ain't Talkin' 'Bout Dub
+      03 - Altamont Super-Highway Revisted
+      04 - Electro Glide In Blue
+      05 - Vanishing Point
+      06 - Tears Of The Gods
+      07 - Carrera Rapida
+      08 - Krupa
+      09 - White Man's Throat!s
+      10 - Pain In Any Language
+      11 - Stealth Mass In F#m!s
+    
+    
+      01 - Are we a rock band or what
+      02 - Stop the rock
+      03 - Crazee Horse
+      04 - Cold Rock the Mic
+      05 - Lost in Space (Theme)
+      06 - For forty days
+      07 - Heart Go Boom
+      08 - The Machine in the ghost
+      09 - Blackbeat
+      10 - Stadium parking lot
+      11 - YO, Future
+      12 - High on your own supply
+      13 - The Perfect crime
+    
+    
+      02 - Liquid Cool
+      03 - Film Me And Finish Me Off
+      04 - I Need Something Stronger
+      05 - Pain Is A Close Up
+      06 - Omega Point
+      07 - Don't Fear The Reaper
+      08 - Astral Amerika
+      09 - Millennium Fever
+      10 - Stealth Requiem
+  
+  
+    
+    
+      01 - Love Never Dies, Part I
+      02 - Mourn
+      03 - Non-Stop Violence
+      04 - 25 Cromwell St.
+      05 - Rebel
+      06 - Deep Red
+      07 - Nearer
+      08 - Half Asleep
+      09 - Love Never Dies, Part II
+    
+    
+      01_-_Kathy's_Song_(Ferry_Corsten_RMX)
+      02_-_Kathy's_Song_(Single_version)
+      03_-_Kathy's_Song_(Victoria_mix_by_VNV_Nation)
+      04_-_Kathy's_Song_(Beborn_Beton_RMX)
+      05_-_Kathy's_Song_(Ferry_Corsten_RMX)(12-_version)
+      06_-_Kathy's_Song_(C-64_version)
+    
+    
+      01 - Mourn (APB Remix)
+      02 - Mourn (Ihrmx)
+      03 - Mourn (Original Version)
+      04 - Untitled Too (Sweep remix)
+      05 - Ohm Sweet Ohm
+      06 - Electricity
+      07 - Snutt 7
+    
+    
+      01 - Non-Stop Violence [CNN version]
+      02 - Near [Banilla Dream version]
+      03 - Burnin' Heretic [Live]
+    
+    
+      01 - Like Blood From The Beloved (part 1)
+      02 - Bitch
+      03 - Burnin Heretic (album version)
+      04 - Stich
+      05 - Walk With Me
+      06 - Backdraft
+      07 - Arp (808 edit)
+      08 - Spiritual Reality
+      09 - Skyscraping (schizophreniac)
+      10 - All Tomorrows Parties
+      11 - The Sentinel
+      12 - Ashes To Ashes `93
+      13 - Like Blood From The Beloved (part 2)
+    
+    
+      01 - Apb goes C-64
+      02 - Deep Red
+      03 - Bitch
+      04 - Stitch
+      05 - Spiritual Reality
+      06 - Electronic Warfare
+      07 - All Tomorrows Parties
+      08 - Arp
+      09 - Burnin´ Heretic (Album version)
+      10 - Ledelsens Mening
+      11 - Backdraft
+      12 - Ashes to Ashes (German Slam version)
+      13 - The Approach of Death
+      14 - Ashes to Ashes (Original 12- version)
+      15 - Wrack´em to Pieces
+      16 - Burning Heretics (Crisp version)
+    
+    
+      01 - Everything We Know Is Wrong
+      02 - Starsign
+      03 - Eclipse
+      04 - Help Me
+      05 - Kathy's Song (Come Lie Next To Me)
+      06 - Untiled 3
+      07 - Moment Of Tranquililty
+      08 - Fade To Black
+      09 - 64K
+      10 - Paranoia
+      11 - Soultaker
+      12 - LNDP 3
+      13 - Time To Move On + Bonus (ABP Goes C-64 Again)
+  
+  
+    
+    
+      01 Aretha Franklin - Freeway Of Love
+      02 Aretha Franklin - I Knew You Were Waiting
+      03 Aretha Franklin - Jump To It
+      04 Aretha Franklin - Willing To Forgive
+      05 Aretha Franklin - Doctor's Orders
+      06 Aretha Franklin - United Together
+      07 Aretha Franklin - Who's Zoomin' Who
+      08 Aretha Franklin - A Deeper Love
+      09 Aretha Franklin - Honey
+      10 Aretha Franklin - Get It Right
+      11 Aretha Franklin - Another Night
+      12 Aretha Franklin - Ever Changing Times
+      13 Aretha Franklin - Jimmy Lee
+      14 Aretha Franklin - You Make Me Feel
+      15 Aretha Franklin - I Dreamed A Dream
+      16 Aretha Franklin - Jumpin' Jack Flash
+  
+  
+    
+    
+      SN1B6208B_Trk01A
+      SN1B6208B_Trk02A
+      SN1B6208B_Trk03A
+      SN1B6208B_Trk04A
+      SN1B6208B_Trk05A
+      SN1B6208B_Trk06A
+      SN1B6208B_Trk07A
+      SN1B6208B_Trk08A
+      SN1B6208B_Trk09A
+      SN1B6208B_Trk10A
+      SN1B6208B_Trk11A
+      SN1B6208B_Trk12A
+      SN1B6208B_Trk13A
+      SN1B6208B_Trk14A
+  
+  
+    
+    
+      01 - Adoro
+      02 - Somos novios
+      03 - Cuando estoy contigo
+      04 - Pensando en ti
+      05- Contigo amor
+      06 - Cariño mio
+      07 - Yo te quiero
+      08 - Esta tarde vi llover
+      09 - Voy a apagar la luz
+      10 - Contigo aprendi
+      11 - No
+      12 - Esperare
+      13 - Pero te extraño
+      14 - Me vas a recordar
+      15 - Mia
+  
+  
+    
+    
+      (01).im.wagen.vor.mir
+      (02).ferien.auf.dem.bauernhof
+      (03).das.frivole.wiedersehen
+      (04).spermadin
+    
+    
+      02 - No Man's Land
+  
+  
+    
+    
+      16 - Poppen muss Spass machen
+      19 - Der Ausdenker
+      17 - Heiligabend
+      15 - Drei Eier
+      18 - Gertrud ist abgerissen
+      12 - Einbruch bei Gertrud - In der Haseluenner Lubjanka
+      13 - Einbruch bei Gertrud - Die Verhandlung
+      14 - Oeffentlicher Nahverkehr
+      10 - Ruesselwaesche
+      11 - Einbruch bei Gertrud - Gertrud hat noch zu
+      09 - Schneeraeumen am Arsch
+      08 - Oedipus Kurt
+      01 - Ferkel nervt
+      02 - Arschkrampen im Krieg - Der Kessel von Goebelgrad
+      03 - Arschkrampen im Krieg - Der 7 Mai 1945
+      04 - Arschkrampen im Krieg - Nacht ueber Gotenhafen
+      05 - Es plaestert
+      06 - Pflaumen pfluecken
+      07 - Weitstrullen
+    
+    
+      19 - Kampfruf des Negers
+      02 - Die alte Kultur
+      08 - Schwanzmessen
+      20 - Die Leguane greifen an
+      01 - Was hier denn los
+      18 - Schluepfer rasseln in Fickstadt
+      05 - Am Tag als der Leguan
+      03 - Entfuehrer und Enthueller
+      04 - Wie gehts eigentlich Praenki
+      21 - Erste Kritik
+      07 - Excusez-moi
+      06 - Zu den Quellen des Amazonas
+      09 - Gelegenheit zum Gespraech
+      13 - Gehts Praenki besser
+      16 - Praenki is kaputt
+      14 - An den Ufern des Urinoko
+      15 - Zicken her
+      12 - Eckis Plattentip
+      11 - Brettermeier duebelt
+      10 - Goebelblanca
+      17 - Feuchte BIRAFO
+    
+    
+      04 - Brettermeier (Karaoke Version)
+      03 - Brettermeier (Radio Version)
+      02 - 18 Bier mit Tsatsiki
+      01 - Brettermeier die Pottsau
+    
+    
+      02 - Der kleine Pisser
+      03 - Die Alpen
+      01 - Damals in der Bretterpenne
+      04 - Gedichte
+      10 - Telephonsex
+      09 - Bluemel und Laesch
+      12 - Gurkenrost
+      11 - Groehlen un Suppe
+      16 - Jingle - Arschkrampenzeit
+      15 - Arschregen
+      14 - Kurtin
+      13 - Cassette im Arsch
+    
+    
+      01 - Ich bin ein Ferkelwaemser
+      05 - Der Iwan is nich ohne
+      03 - Allegorie ueber Stalingrad
+      02 - Frauen stehen auf Macht
+      04 - Der Negerueberfall
+      06 - Hier Bretter-Control
+      07 - Goebel-Solo
+      08 - Kurt is in Kur
+      20 - Absage
+      17 - Kurt im Schrank
+      19 - Gertrud hat zu
+      09 - Guergen erinnert sich
+      10 - Der Tomatenkopp
+      16 - Ab inne Truhe
+      12 - Der Gammel
+      15 - Gesucht wird Albert Brettermeier
+      11 - Kurt Kong
+      13 - Bei Gertrud
+      18 - Kurt hat Geburtstag
+      14 - Wir fahn nach Wakaluba
+    
+    
+      01 - Stracciatella
+      22 - Die letzte Folge
+      21 - Ferkels Schwester
+      20 - Hier spricht Ramke
+      16 - Wuggi baut um
+      14 - Zasta Krockett der verwarzte Rochen
+      15 - Die Ex-Verlobte
+      17 - Robinson Kurt
+      11 - dammte Pekinesenkotze - Telephon
+      13 - Wischmeyer ruft an
+      19 - Reingeroemert
+      18 - Der grosse Hatti Mueller
+      02 - The Making of Arschkrampen
+      03 - Der Vollidiot
+      04 - Geheimagent Ferkel
+      05 - Die Hackfresse
+      06 - Die Kimmen der Adler
+      07 - Schrappige Zicken
+      08 - Wie gehzn Wuggi
+      09 - Kurt will heiraten 1 - Krissa die Hundekopffegerin
+      10 - Kurt will heiraten 2 - Der Hochzeitstag
+      12 - Kurt will heiraten 3 - Die Vermaehlung
+  
+  
+    
+    
+      01 - Madagasca
+      02 - Madagasca Cygnus X Remix
+    
+    
+      01 - Breathe
+      02 - Monsoon
+      03 - The Hummer
+      04 - Madagascar
+      05 - Requiem
+      06 - Dud UK
+      07 - Easter Island
+      08 - Stealth
+      09 - Panorama
+      10 - Voice Of Earth
+  
+  
+    
+    
+      01 - Movin Too Fast - Radio Mix
+      02 - Movin Too Fast - Bump & Flex Vocal
+      03 - Movin Too Fast - Pussy 2000 Vocal
+    
+    
+      Re-Rewind - The artful dodger
+    
+    
+      01 - woman trouble (radio edit)
+      02 - woman trouble (original version radio edit)
+      03 - woman trouble (sunkids future discotech edit)
+      04 - woman trouble (wideboy's pickapocket or two radio edit)
+  
+  
+    
+    
+      01 - The Dice Man - Polygon Window
+      02 - Musicology - Telefone 529
+      03 - Autechre - Crystel
+      04 - I.A.O - The Clan
+      05 - Speedy J - De-Orbit
+      06 - Musicology - Preminition
+      07 - UP! - Spiritual High
+      08 - Autechre - The Egg
+      09 - Speedy J - Fill 3
+      10 - Dr Alex Paterson - Loving You Live
+    
+    
+      01 - Mark Franklin - Release to the System
+      02 - The Higher Intelligence Agency - Selinite
+      03 - Link - Arcadian
+      04 - B12 - Scriptures
+      05 - Autechre - Chatter
+      06 - Speedy J - Symmetry
+      07 - Beaumont Hannant - Utuba
+      08 - Richard H. Kirk - Reality Net
+      09 - Balil - Parasight
+      10 - Seefeel - Spangle
+  
+  
+    
+    
+      01 - Sick And Beautiful Radio Edit
+      02 - Sick And Beautiful Quick Fix Mix
+      03 - My Heaven
+  
+  
+    
+    
+      01 - Track  1
+      02 - Track  2
+      03 - Track  3
+      04 - Track  4
+      05 - Track  5
+      06 - Track  6
+      07 - Track  7
+      08 - Track  8
+      09 - Track  9
+      10 - Track 10
+      11 - Track 11
+      12 - Track 12
+    
+    
+      01 - Track  1
+      02 - Track  2
+      03 - Track  3
+      04 - Track  4
+      05 - Track  5
+      06 - Track  6
+      07 - Track  7
+      08 - Track  8
+      09 - Track  9
+      10 - Track 10
+      11 - Track 11
+      12 - Track 12
+      13 - Track 13
+      14 - Track 14
+      15 - Track 15
+      16 - Track 16
+      17 - Track 17
+      18 - Track 18
+  
+  
+    
+    
+      01 - naxalite
+      02 - buzzin'
+      03 - black white
+      04 - assassin
+      05 - hypocrite
+      06 - charge
+      07 - free satpal ram
+      08 - dub mentality
+      09 - culture move
+      10 - operation eagle lie
+      11 - change
+      12 - tribute to john stevens
+  
+  
+    
+    
+      01 - The Fields Of Love Airplay Mix
+      02 - The Fields Of Love Original Club Mix
+      03 - The Fields Of Love York Remix
+      04 - The Fields Of Love Instrumental
+    
+    
+      01 - Aiplay mix
+      02 - Clubb mix
+      03 - Instrumental clubb mix
+      04 - Ibiza influence mix
+  
+  
+    
+    
+      AudioTrack 01
+      AudioTrack 02
+      AudioTrack 03
+      AudioTrack 04
+      AudioTrack 05
+      AudioTrack 06
+      AudioTrack 07
+      AudioTrack 08
+      AudioTrack 09
+      AudioTrack 10
+      AudioTrack 11
+      AudioTrack 12
+    
+    
+      AudioTrack 01
+      AudioTrack 02
+      AudioTrack 03
+      AudioTrack 04
+      AudioTrack 05
+      AudioTrack 06
+      AudioTrack 07
+      AudioTrack 08
+      AudioTrack 09
+      AudioTrack 10
+      AudioTrack 11
+      AudioTrack 12
+      AudioTrack 13
+      AudioTrack 14
+      AudioTrack 15
+    
+    
+      AudioTrack 01
+      AudioTrack 02
+      AudioTrack 03
+      AudioTrack 04
+      AudioTrack 05
+      AudioTrack 06
+      AudioTrack 07
+      AudioTrack 08
+      AudioTrack 09
+      AudioTrack 10
+      AudioTrack 11
+      AudioTrack 12
+      AudioTrack 13
+      AudioTrack 14
+      AudioTrack 15
+      AudioTrack 16
+      AudioTrack 17
+      AudioTrack 18
+    
+    
+      AudioTrack 01
+      AudioTrack 02
+      AudioTrack 03
+      AudioTrack 04
+      AudioTrack 05
+      AudioTrack 06
+      AudioTrack 07
+      AudioTrack 08
+      AudioTrack 09
+      AudioTrack 10
+      AudioTrack 11
+    
+    
+      AudioTrack 01
+      AudioTrack 02
+      AudioTrack 03
+      AudioTrack 04
+      AudioTrack 05
+      AudioTrack 06
+      AudioTrack 07
+      AudioTrack 08
+      AudioTrack 09
+      AudioTrack 10
+      AudioTrack 11
+      AudioTrack 12
+      AudioTrack 13
+      AudioTrack 14
+      AudioTrack 15
+      AudioTrack 16
+      AudioTrack 17
+      AudioTrack 18
+    
+    
+      AudioTrack 01
+      AudioTrack 02
+      AudioTrack 03
+      AudioTrack 04
+      AudioTrack 05
+      AudioTrack 06
+      AudioTrack 07
+      AudioTrack 08
+      AudioTrack 09
+      AudioTrack 10
+    
+    
+      AudioTrack 01
+      AudioTrack 02
+      AudioTrack 03
+      AudioTrack 04
+      AudioTrack 05
+      AudioTrack 06
+      AudioTrack 07
+      AudioTrack 08
+      AudioTrack 09
+      AudioTrack 10
+    
+    
+      AudioTrack 01
+      AudioTrack 02
+      AudioTrack 03
+      AudioTrack 04
+      AudioTrack 05
+      AudioTrack 06
+      AudioTrack 07
+      AudioTrack 08
+      AudioTrack 09
+      AudioTrack 10
+      AudioTrack 11
+    
+    
+      AudioTrack 01
+      AudioTrack 02
+      AudioTrack 03
+      AudioTrack 04
+      AudioTrack 05
+      AudioTrack 06
+      AudioTrack 07
+      AudioTrack 08
+  
+  
+    
+    
+      01 - Peel Session
+      02 - Peel Sesion
+      03 - Peel Sesion
+  
+  
+    
+    
+      01 - Radio mix
+      02 - Extended mix
+      03 - Club mix
+      04 - Atmosphere mix
+  
+  
+    
+    
+      (01) Radio Version
+      (02) Extended Mix
+      (03) Extended Track Masters Remix
+      (04) Original Instrumental
+  
+  
+    
+    
+      01 - Riding With The King
+      02 - Ten Long Years
+      03 - Key To The Highway
+      04 - Marry You
+      05 - Three O'Clock Blues
+      06 - Help The Poor
+      07 - I Wanna Be
+      08 - Worried Life Blues
+      09 - Days Of Old
+      10 - When My Heart Beats Like A Hammer
+      11 - Hold On I'm Coming
+      12 - Come Rain Or Come Shine
+  
+  
+    
+    
+      01 - Animal Army
+      02 - Spaceman
+      03 - Zodiac Sign
+      04 - Paris Green
+      05 - Confused Art
+      06 - Caffeine
+      07 - The Boy With The X-Ray Eyes
+      08 - Don't Feed The Animals
+      09 - Fire Guided Light
+      10 - Is Your Soul For Sale
+      11 - I'm Cracking Up I Need A Pill
+  
+  
+    
+    
+      (There's) Always Something There To Remind Me - Sandie Shaw
+      (They Long To Be) Close To You - Isaac Hayes 
+      A House Is Not A Home - Luther Vandross
+      Anyone Who Had A Heart - Luther Vandross
+      Arthur's Theme (Best That You Can Do) - Christopher Cross
+      I Just Don't Know What To Do With Myself - Dusty Springfield
+      I Say A Little Prayer - Aretha Franklin
+      I'll Never Fall In Love Again - Bobby Gentry
+      Make It Easy On Yourself - The Walker Brothers
+      Reach Out For Me - Dionne Warwick
+      The Look Of Love - Dusty Springfield
+      This Guy's In Love With You - Burt Bacharach
+      Trains And Boats And Planes - Billy J Kramer & The Dakotas
+      Walk On By - Dionne Warwick
+      What The World Needs Now Is Love - Jackie De Shannon
+      Windows Of The World - The Pretenders
+      You'll Never Get To Heaven (If You Break My Heart) - The Stylistics
+  
+  
+    
+    
+      01 - Lady In Black (Radio Edit)
+      02 - Come Back And Stay
+      03 - Gimme, Gimme Your Lovin' (Little Lady)
+      04 - Hungry For Love (Radio Edit)
+      05 - Don't Walk Away, Suzanne
+      06 - L.O.V.E. In My Car
+      07 - You're A Woman
+      08 - A World Without You (Michelle) - Radio Edit
+      09 - I Wanna Hear Your Heartbeat (Sunday Girl)
+      10 - Pretty Young Girl
+      11 - Kisses And Tears (My One And Only)
+      12 - Love Really Hurts Without You
+      13 - Lovers In The Sand
+      14 - Kiss You All Over, Baby (New Version)
+      15 - Hot Girls - Bad Boys
+      16 - One Night In Heaven
+      17 - Baby I Love You
+      18 - Love Is No Crime
+      19 - Inside Of Me
+  
+  
+    
+    
+      01 - The Gray Race
+      02 - Them And Us
+      03 - A Walk
+      04 - Parallel
+      05 - Punk Rock Song
+      06 - Empty Causes
+      07 - Nobody Listens
+      08 - Pitty The Dead
+      09 - Spirit Shine
+      10 - The Streets Of America
+      11 - Ten In 2010
+      12 - Victory
+      13 - Drunk Sincerity
+      14 - Come Join Us
+      15 - Cease
+      16 - Punk Rock Song (In German)
+  
+  
+    
+    
+      01 - Weckruf
+      02 - I want your Sex
+      03 - Papa
+      04 - Bako
+      05 - Hassi Janes
+      06 - Operation
+      07 - In der Waschanlach
+      08 - Sound
+      09 - Was glaubst du
+      10 - German Music
+      11 - Papa
+      12 - Immer schlimmer
+      13 - Lichterkette
+      14 - Thomas und Heidi
+      15 - Dixi-Band
+      16 - Bubblegum-Time
+      17 - Richie und Headbanger
+      18 - Schwarz und Weiß
+      19 - 6,50 Sicherheitsgebühr
+      20 - Gesang
+      21 - Wahltag
+      22 - Mabadaja Mabadaga ja
+      23 - Megabreit Computerdeppen
+      24 - Papa
+      25 - Neschperblues
+      26 - Revolte in der Schule
+      27 - Bongo Karl
+      28 - Babu
+      29 - Gereizt
+      30 - Parfüm
+      31 - Halleluja
+      32 - Papa
+      33 - Superdepp
+      34 - Dialog
+      35 - Belgische Äpfel
+      36 - Dressur
+    
+    
+      01 - viel zu harmlos
+      02 - handy song
+      04 - tamagotchi
+      05 - wetzlar
+      06 - der erste kontakt
+      07 - versprochen
+      08 - gianni
+      09 - pappa vol.17
+      10 - ying und yang
+      11 - styling
+      12 - kasperle gegen drogen
+      13 - der spanische apotheker
+      14 - gute argumente
+      15 - session
+      16 - nachdenklichkeit
+      17 - naturschauspiel
+      18 - schmusebär
+      19 - hobbies
+      20 - bali mach uff!
+      21 - was war das... 
+      22 - der kunde ist könig
+      23 - jazz
+      24 - pappa vol.18
+      25 - die hochzeit
+      26 - der neue star
+      27 - route 66
+      28 - ziegenkäsegeschäft
+      29 - mutter und tochter
+      30 - alle jahre wieder
+      31 - besorgt
+      32 - kreuzworträtsel
+      33 - sensibilität
+      34 - die wahrscheinlichkeit
+      35 - f.e.v.a
+      36 - private geheimnisse
+      37 - back for good (leider live)
+    
+    
+      01 - Zarte Metzger
+      02 - Jesu S.
+      03 - Seelachs
+      04 - Aufgespürt
+      05 - Fitneß-Tom
+      06 - Der Brautstrauß
+      07 - Der Rollo
+      08 - Pappa Vol. 15
+      09 - Zivilcourage
+      10 - Kamm tugesser
+      11 - Tobias
+      12 - Radlacka
+      13 - Kevin Costner
+      14 - Moderne Väter
+      15 - 0190634 . . .
+      16 - Dabrauchemergarnetdrübberredde
+      17 - Stones-Revival-Revival
+      18 - Weichei - Das Musical 1. Akt
+      19 - Themenabend
+      20 - Song für Witta Pohl
+      21 - Herr Seiler
+      22 - Duell bei Hanau 1420 (Orginal-Aufnahme)
+      23 - Pappa Vol. 16
+      24 - Kippen holen
+      25 - Wie bei Axel
+      26 - Die Demo
+      27 - Sin kaa breetsche da
+      28 - Natur
+      29 - Die Gaby und Ich
+      30 - Glück gehabt
+      31 - Weichei - Das Musical 3. Akt
+      32 - Der Wettkönig
+      33 - Waldfest
+      34 - Tierfreunde
+      35 - Der australische Freund
+      36 - Du
+  
+  
+    
+    
+      01-Intro
+      02-Word Play
+      03-Spontaneity
+      04-Rugged ruff
+      05-Interlude
+      06-I confess
+      07-UKNOWHOWWEDU
+      08-Interlude
+      09-Total wreck
+      10-Innovation
+      11-Da jawn
+      12-Interlude
+      13-True honey buns (dat freak sht)
+      14-3 tha hard way
+      15-Biggest part of me
+      16-Path to rhythm
+  
+  
+    
+    
+      1 - Spirit of the forest
+      2 - The man who danced too slowly
+      3 - Ngombi
+      4 - Baka play baka
+      5 - Nahwia
+      6 - Eeya be
+      7 - Canya Jam
+      8 - Bounaka
+  
+
+
index 47f542962403961f621dcb0683c6fe87d29098c7..640df105046bfda860cb46f3e36d5229b2864e6a 100644 (file)
@@ -15,7 +15,7 @@
   \r
   \r
   \r
-  org.postgresql.core" />\r
+  uk.org.retep.xml.jdbc" />\r
   \r
   \r
   \r
@@ -25,7 +25,7 @@
   \r
   \r
   \r
-  \r
+  ;Oracle JDBC" />\r
   \r
   \r
   \r
@@ -34,6 +34,8 @@
   \r
   \r
   \r
+  \r
+  \r
   \r
   \r
   \r
diff --git a/contrib/retep/uk/org/retep/xml/core/XMLFactory.java b/contrib/retep/uk/org/retep/xml/core/XMLFactory.java
new file mode 100644 (file)
index 0000000..09565b0
--- /dev/null
@@ -0,0 +1,334 @@
+package uk.org.retep.xml.core;
+
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * An XMLFactory is used to render XML Tags, accounting for nesting etc
+ */
+public class XMLFactory
+{
+  /**
+   * The lest level (ie, how many tags down the tree we are)
+   */
+  protected int level;
+
+  /**
+   * The size of our tag name cache
+   */
+  protected int maxlevel;
+
+  /**
+   * Our tag name cache
+   */
+  protected String[] names;
+
+  /**
+   * Used to keep track of how formatting is done
+   */
+  protected boolean hascontent;
+  protected boolean[] contbuf;
+
+  /**
+   * Scratch used by nest()
+   */
+  private char[] nestbuf;
+
+  /**
+   * The destination Writer
+   */
+  protected Writer out;
+
+  /**
+   * True if we are still within a tag
+   */
+  protected boolean inTag;
+
+  /**
+   * True if we have just created a tag so parameters are valid
+   */
+  protected boolean inArg;
+
+  /**
+   * Constructs an XMLFactory with no output Writer
+   */
+  public XMLFactory()
+  {
+    this(10);
+  }
+
+  /**
+   * Constructs an XMLFactory with no output Writer
+   * @param m Expected number of leaves in the XML Tree
+   */
+  public XMLFactory(int m)
+  {
+    // Initialise the names cache
+    level=0;
+    maxlevel=m;
+    names=new String[maxlevel];
+    contbuf=new boolean[maxlevel];
+
+    // This is used by nest()
+    nestbuf=new char[maxlevel];
+    for(int i=0;i
+      nestbuf[i]=' ';
+  }
+
+  /**
+   * Constructs an XMLFactory
+   * @param out Writer to send the output to
+   */
+  public XMLFactory(Writer out)
+  throws IOException
+  {
+    this();
+    setWriter(out);
+  }
+
+  /**
+   * Constructs an XMLFactory
+   * @param out Writer to send the output to
+   * @param encoding The XML encoding
+   */
+  public XMLFactory(Writer out,String encoding)
+  throws IOException
+  {
+    this();
+    setWriter(out,encoding);
+  }
+
+  /**
+   * Constructs an XMLFactory
+   * @param out Writer to send the output to
+   * @param m Expected number of leaves in the XML Tree
+   */
+  public XMLFactory(int m,Writer out)
+  throws IOException
+  {
+    this(m);
+    setWriter(out);
+  }
+
+  /**
+   * Constructs an XMLFactory
+   * @param out Writer to send the output to
+   * @param encoding The XML encoding
+   * @param m Expected number of leaves in the XML Tree
+   */
+  public XMLFactory(int m,Writer out,String encoding)
+  throws IOException
+  {
+    this(m);
+    setWriter(out,encoding);
+  }
+
+  /**
+   * Sets the Writer to send the output to. This call will also send the
+   * XML header.
+   *
+   * @param out Writer to send output to
+   */
+  public void setWriter(Writer out)
+  throws IOException
+  {
+    setWriter(out,"ISO-8859-1");
+  }
+
+  /**
+   * Sets the Writer to send the output to. This call will also send the
+   * XML header using the supplied encoding. It is up to the user code to
+   * implement this encoding.
+   *
+   * @param out Writer to send output to
+   * @param encoding Encoding of the XML Output
+   */
+  public void setWriter(Writer out,String encoding)
+  throws IOException
+  {
+    this.out=out;
+    out.write("
+    out.write(encoding);
+    out.write("\" ?>\n");
+  }
+
+  /**
+   * @return Writer the XML is being sent out on.
+   */
+  public Writer getWriter() {
+    return out;
+  }
+
+  /**
+   * This starts a tag
+   * @param name The tag name
+   */
+  public void startTag(String name)
+  throws IOException
+  {
+    if(inTag && inArg) {
+      // Handles two startTag() calls in succession.
+      out.write(">");
+    }
+
+    nest(level);
+    out.write('<');
+    out.write(name);
+    inTag=true;
+    inArg=true;
+
+    // cache the current tag name
+    names[level]=name;
+
+    // cache the current hascontent value & reset
+    contbuf[level]=hascontent;
+    hascontent=false;
+
+    // increase the level and the cache's as necessary
+    level++;
+    if(level>maxlevel) {
+      maxlevel=maxlevel+10;
+
+      String n[]=new String[maxlevel];
+      System.arraycopy(names,0,n,0,level);
+      names=n;
+
+      boolean b[] = new boolean[maxlevel];
+      System.arraycopy(contbuf,0,b,0,level);
+      contbuf=b;
+    }
+  }
+
+  /**
+   * This ends a tag
+   */
+  public void endTag()
+  throws IOException, XMLFactoryException
+  {
+    if(level<1)
+      throw new XMLFactoryException("endTag called above root node");
+
+    level--;
+
+    if(inArg) {
+      // We are still within the opening tag
+      out.write(" />");
+    } else {
+      // We must have written some content or child tags
+
+      // hascontent is true if addContent() was called. If it was never called
+      // to get here some child tags must have been written, so we call nest()
+      // so that the close tag is on it's own line, and everything looks neat
+      // and tidy.
+      if(!hascontent)
+        nest(level);
+
+      out.write("
+      out.write(names[level]);
+      out.write('>');
+    }
+
+    inArg=false;    // The parent tag must be told it now has content
+    inTag= level>0; // Are we still in a tag?
+    hascontent=contbuf[level];  // retrieve this level's hascontent value
+  }
+
+  /**
+   * This completes the document releasing any open resources.
+   */
+  public void close()
+  throws IOException, XMLFactoryException
+  {
+    while(level>0)
+      endTag();
+    out.write('\n');
+    out.flush();
+  }
+
+  /**
+   * This writes an attribute to the current tag. If the value is null, then no action is taken.
+   * @param name Name of the parameter
+   * @param value Value of the parameter
+   * @throw XMLFactoryException if out of context
+   */
+  public void addAttribute(String name,Object value)
+  throws IOException, XMLFactoryException
+  {
+    if(value==null)
+      return;
+
+    if(inArg) {
+      out.write(' ');
+      out.write(name);
+      out.write("=\"");
+      out.write(encode(value.toString()));
+      out.write("\"");
+    } else
+      throw new XMLFactoryException("Cannot add attribute outside of a tag");
+  }
+
+  /**
+   * This writes some content to the current tag. Once this has been called,
+   * you cannot add any more attributes to the current tag. Note, if c is null,
+   * no action is taken.
+   * @param c content to add.
+   */
+  public void addContent(Object c)
+  throws IOException, XMLFactoryException
+  {
+    if(c==null)
+      return;
+
+    if(inTag) {
+      if(inArg) {
+        // close the open tag
+        out.write('>');
+        inArg=false;
+      }
+      out.write(c.toString());
+
+      // This is used by endTag()
+      hascontent=true;
+    } else
+      throw new XMLFactoryException("Cannot add content outside of a tag");
+  }
+
+  /**
+   * This adds a comment to the XML file. This is normally used at the start of
+   * any XML output.
+   * @parm c Comment to include
+   */
+  public void addComment(Object c)
+  throws IOException, XMLFactoryException
+  {
+    if(inTag)
+      throw new XMLFactoryException("Cannot add comments within a tag");
+
+    out.write("\n");
+  }
+
+  /**
+   * Indents the output according to the level
+   * @param level The indent level to generate
+   */
+  protected void nest(int level)
+  throws IOException
+  {
+    out.write('\n');
+    while(level>nestbuf.length) {
+      out.write(nestbuf,0,nestbuf.length);
+      level-=nestbuf.length;
+    }
+    out.write(nestbuf,0,level);
+  }
+
+  /**
+   * Encodes the string so that any XML tag chars are translated
+   */
+  protected String encode(String s) {
+    return s;
+  }
+
+}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/xml/core/XMLFactoryException.java b/contrib/retep/uk/org/retep/xml/core/XMLFactoryException.java
new file mode 100644 (file)
index 0000000..5f9d497
--- /dev/null
@@ -0,0 +1,19 @@
+package uk.org.retep.xml.core;
+
+/**
+ * Title:
+ * Description:
+ * Copyright:    Copyright (c) 2001
+ * Company:
+ * @author
+ * @version 1.0
+ */
+
+public class XMLFactoryException extends Exception
+{
+
+  public XMLFactoryException(String s)
+  {
+    super(s);
+  }
+}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/xml/jdbc/XMLDatabase.java b/contrib/retep/uk/org/retep/xml/jdbc/XMLDatabase.java
new file mode 100644 (file)
index 0000000..50aaaa1
--- /dev/null
@@ -0,0 +1,237 @@
+package uk.org.retep.xml.jdbc;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import uk.org.retep.xml.core.XMLFactory;
+import uk.org.retep.xml.core.XMLFactoryException;
+
+public class XMLDatabase
+{
+  /**
+   * The XMLFactory being used by this instance
+   */
+  protected XMLFactory factory;
+
+  /**
+   * Constructor. setXMLFactory() must be called if this method is used.
+   */
+  public XMLDatabase()
+  {
+  }
+
+  /**
+   * Constructor
+   * @param fac XMLFactory to use
+   */
+  public XMLDatabase(XMLFactory fac)
+  {
+    this();
+    setXMLFactory(fac);
+  }
+
+  /**
+   * Sets the factory to use.
+   * @param factory XMLFactory to use
+   */
+  public void setXMLFactory(XMLFactory factory)
+  {
+    this.factory=factory;
+  }
+
+  /**
+   * @return the XMLFactory being used.
+   */
+  public XMLFactory getXMLFactory()
+  {
+    return factory;
+  }
+
+  /**
+   * Flushes all output to the Writer.
+   * @throw IOException from Writer
+   * @throw XMLFactoryException from XMLFactory
+   */
+  public void close()
+  throws IOException, XMLFactoryException
+  {
+    factory.close();
+  }
+
+  /**
+   * writes the schema of a table.
+   * @param con Connection to database
+   * @param table Table name
+   * @throw IOException from Writer
+   * @throw SQLException from JDBC
+   * @throw XMLFactoryException from XMLFactory
+   */
+  public void writeTable(Connection con,String table)
+  throws IOException,SQLException,XMLFactoryException
+  {
+    writeTable(con.getMetaData(),table);
+  }
+
+  /**
+   * writes the schema of a table.
+   * @param db DatabaseMetaData for the database
+   * @param table Table name
+   * @throw IOException from Writer
+   * @throw SQLException from JDBC
+   * @throw XMLFactoryException from XMLFactory
+   */
+  public void writeTable(DatabaseMetaData db,String table)
+  throws IOException,SQLException,XMLFactoryException
+  {
+    writeTable(db,null,null,table);
+  }
+
+  /**
+   * writes the schema of a table.
+   * @param db DatabaseMetaData for the database
+   * @param table Table name
+   * @throw IOException from Writer
+   * @throw SQLException from JDBC
+   * @throw XMLFactoryException from XMLFactory
+   */
+  public void writeTable(DatabaseMetaData db,String cat,String schem,String table)
+  throws IOException,SQLException,XMLFactoryException
+  {
+    ResultSet trs;
+
+    factory.startTag("TABLE");
+    factory.addAttribute("NAME",table);
+    // fetch the remarks for this table (if any)
+    trs = db.getTables(null,null,table,null);
+    if(trs!=null) {
+      if(trs.next()) {
+        String rem = trs.getString(5);
+        if(rem!=null)
+          factory.addContent(rem);
+      }
+      trs.close();
+    }
+
+    trs = db.getColumns(null,null,table,"%");
+    if(trs!=null) {
+      while(trs.next()) {
+        factory.startTag("COLUMN");
+        factory.addAttribute("NAME",trs.getString(4));
+        factory.addAttribute("TYPE",trs.getString(6));
+        factory.addAttribute("COLUMN_SIZE",trs.getString(7));
+        factory.addAttribute("DECIMAL_DIGITS",trs.getString(9));
+        factory.addAttribute("NUM_PREC_RADIX",trs.getString(10));
+        factory.addAttribute("NULLABLE",trs.getString(11));
+        factory.addAttribute("COLUMN_DEF",trs.getString(13));
+        factory.addAttribute("CHAR_OCTET_LENGTH",trs.getString(16));
+        factory.addAttribute("ORDINAL_POSITION",trs.getString(17));
+        factory.addAttribute("IS_NULLABLE",trs.getString(18));
+        factory.addAttribute("TABLE_CAT",trs.getString(1));
+        factory.addAttribute("TABLE_SCHEM",trs.getString(2));
+        String rem = trs.getString(12);
+        if(rem!=null)
+          factory.addContent(rem);
+        factory.endTag();
+      }
+      trs.close();
+    }
+
+    factory.endTag();
+  }
+
+  /**
+   * This generates the schema of an entire database.
+   * @param db Connection to database
+   * @param table Table pattern
+   * @throw IOException from Writer
+   * @throw SQLException from JDBC
+   * @throw XMLFactoryException from XMLFactory
+   * @see java.sql.DatabaseMetaData.getTables()
+   */
+  public void writeDatabase(Connection db,String table)
+  throws IOException, SQLException, XMLFactoryException
+  {
+    writeDatabase(db.getMetaData(),null,null,table);
+  }
+
+  /**
+   * This generates the schema of an entire database.
+   * @param db DatabaseMetaData of database
+   * @param table Table pattern
+   * @throw IOException from Writer
+   * @throw SQLException from JDBC
+   * @throw XMLFactoryException from XMLFactory
+   * @see java.sql.DatabaseMetaData.getTables()
+   */
+  public void writeDatabase(DatabaseMetaData db,String table)
+  throws IOException, SQLException, XMLFactoryException
+  {
+    writeDatabase(db,null,null,table);
+  }
+
+  /**
+   * This generates the schema of an entire database.
+   * @param db DatabaseMetaData of database
+   * @param cat Catalog (may be null)
+   * @param schem Schema (may be null)
+   * @param table Table pattern
+   * @throw IOException from Writer
+   * @throw SQLException from JDBC
+   * @throw XMLFactoryException from XMLFactory
+   * @see java.sql.DatabaseMetaData.getTables()
+   */
+  public void writeDatabase(Connection db)
+  throws IOException, SQLException, XMLFactoryException
+  {
+    writeDatabase(db.getMetaData(),null,null,"%");
+  }
+
+  /**
+   * This generates the schema of an entire database.
+   * @param db DatabaseMetaData of database
+   * @param cat Catalog (may be null)
+   * @param schem Schema (may be null)
+   * @param table Table pattern
+   * @throw IOException from Writer
+   * @throw SQLException from JDBC
+   * @throw XMLFactoryException from XMLFactory
+   * @see java.sql.DatabaseMetaData.getTables()
+   */
+  public void writeDatabase(DatabaseMetaData db)
+  throws IOException, SQLException, XMLFactoryException
+  {
+    writeDatabase(db,null,null,"%");
+  }
+
+  /**
+   * This generates the schema of an entire database.
+   * @param db DatabaseMetaData of database
+   * @param cat Catalog (may be null)
+   * @param schem Schema (may be null)
+   * @param table Table pattern
+   * @throw IOException from Writer
+   * @throw SQLException from JDBC
+   * @throw XMLFactoryException from XMLFactory
+   * @see java.sql.DatabaseMetaData.getTables()
+   */
+  public void writeDatabase(DatabaseMetaData db,String cat,String schem,String table)
+  throws IOException, SQLException, XMLFactoryException
+  {
+    ResultSet rs = db.getTables(cat,schem,table,null);
+    if(rs!=null) {
+      factory.startTag("DATABASE");
+      factory.addAttribute("PRODUCT",db.getDatabaseProductName());
+      factory.addAttribute("VERSION",db.getDatabaseProductVersion());
+
+      while(rs.next()) {
+        writeTable(db,rs.getString(1),rs.getString(2),rs.getString(3));
+      }
+
+      factory.endTag();
+      rs.close();
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/xml/jdbc/XMLResultSet.java b/contrib/retep/uk/org/retep/xml/jdbc/XMLResultSet.java
new file mode 100644 (file)
index 0000000..ee020df
--- /dev/null
@@ -0,0 +1,505 @@
+package uk.org.retep.xml.jdbc;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.Properties;
+import uk.org.retep.xml.core.XMLFactory;
+import uk.org.retep.xml.core.XMLFactoryException;
+
+/**
+ * This class takes a java.sql.ResultSet object and generates an XML stream
+ * based on it's contents.
+ *
+ * $Id: XMLResultSet.java,v 1.1 2001/01/23 10:22:20 peter Exp $
+ */
+public class XMLResultSet
+{
+  /**
+   * The current ResultSet to process
+   */
+  protected ResultSet rs;
+
+  /**
+   * The XMLFactory being used by this instance
+   */
+  protected XMLFactory factory;
+
+  /**
+   * The default properties used when none are supplied by the user
+   */
+  protected static Properties defaults;
+
+  /**
+   * The default property name for defining the tag name used to define a
+   * ResultSet
+   */
+  public static String RESULTSET_NAME = "resultset.name";
+
+  /**
+   * The default tag name for a resultset
+   */
+  public static String DEFAULT_RESULTSET_NAME = "RESULTSET";
+
+  /**
+   * The default property name for defining the tag name used to define a row
+   */
+  public static String ROW_NAME = "row.name";
+
+  /**
+   * The default tag name for a row
+   */
+  public static String DEFAULT_ROW_NAME = "RECORD";
+
+  /**
+   * The default tag name for a resultset
+   */
+  public static String COLNAME = ".name";
+
+  /**
+   * The value of the property (named as its related column) used to define
+   * how the column is generated. This indicates that the columns data is
+   * enclosed within a pair of tags, ie: <id>1234</id>
+   */
+  public static String CONTENT = "content";
+
+  /**
+   * The value of the property (named as its related column) used to define
+   * how the column is generated. This indicates that the columns data is
+   * an attribute in the columns tag. ie: 
+   */
+  public static String ATTRIBUTE = "attribute";
+
+  /**
+   * This is the default attribute name used when the ATTRIBUTE option is set.
+   */
+  public static String DEFAULT_ATTRIBUTE = "VALUE";
+
+  /**
+   * The value of the property (named as its related column) used to define
+   * how the column is generated. This indicates that the columns data is
+   * an attribute in the parent's tag. ie: 
+   */
+  public static String ROW_ATTRIBUTE = "row";
+
+  /**
+   * This property name marks the begining row number within the ResultSet to
+   * start processing.
+   */
+  public static String FIRST_ROW = "row.first";
+
+  /**
+   * This property name marks the last row number within the ResultSet to
+   * end processing.
+   */
+  public static String LAST_ROW = "row.last";
+
+  /**
+   * Constructor
+   */
+  public XMLResultSet()
+  {
+    factory = new XMLFactory();
+  }
+
+  /**
+   * Constructor
+   */
+  public XMLResultSet(ResultSet rs)
+  {
+    this();
+    setResultSet(rs);
+  }
+
+  /**
+   * Sets the ResultSet to use
+   * @param rs ResultSet
+   */
+  public void setResultSet(ResultSet rs)
+  {
+    this.rs=rs;
+  }
+
+  /**
+   * @return the current ResultSet
+   *
+   */
+  public ResultSet getResultSet()
+  {
+    return rs;
+  }
+
+  /**
+   * Sets the Writer to send all output to
+   * @param out Writer
+   * @throws IOException from XMLFactory
+   * @see XMLFactory.setWriter
+   */
+  public void setWriter(Writer out)
+  throws IOException
+  {
+    factory.setWriter(out);
+  }
+
+  /**
+   * @return Writer output is going to
+   */
+  public Writer getWriter()
+  {
+    return factory.getWriter();
+  }
+
+  /**
+   * @return XMLFactory being used
+   */
+  public XMLFactory getXMLFactory()
+  {
+    return factory;
+  }
+
+  /**
+   * Flushes all output to the Writer
+   * @throw IOException from Writer
+   * @throw XMLFactoryException from XMLFactory
+   */
+  public void close()
+  throws IOException, XMLFactoryException
+  {
+    factory.close();
+  }
+
+  /**
+   * Returns the default properties used by translate() and buildDTD()
+   * @return Properties default property settings
+   */
+  public static Properties getDefaultProperties()
+  {
+    if(defaults==null) {
+      defaults=new Properties();
+      defaults.setProperty(RESULTSET_NAME,DEFAULT_RESULTSET_NAME);
+      defaults.setProperty(ROW_NAME,DEFAULT_ROW_NAME);
+    }
+    return defaults;
+  }
+
+  /**
+   * This generates an XML version of a ResultSet sending it to the supplied
+   * Writer.
+   * @param rs ResultSet to convert
+   * @param p Properties for the conversion
+   * @param out Writer to send output to (replaces existing one)
+   * @throws XMLFactoryException from XMLFactory
+   * @throws IOException from Writer
+   * @throws SQLException from ResultSet
+   */
+  public void translate(ResultSet rs,Properties p,Writer out)
+  throws XMLFactoryException, IOException, SQLException
+  {
+    factory.setWriter(out);
+    translate(rs,p);
+  }
+
+  /**
+   * This generates an XML version of a ResultSet sending it to the supplied
+   * Writer using a default tag struct
+   * @param rs ResultSet to convert
+   * @param out Writer to send output to (replaces existing one)
+   * @throws XMLFactoryException from XMLFactory
+   * @throws IOException from Writer
+   * @throws SQLException from ResultSet
+   */
+  public void translate(ResultSet rs,Writer out)
+  throws XMLFactoryException, IOException, SQLException
+  {
+    factory.setWriter(out);
+    translate(rs,(Properties)null);
+  }
+
+  /**
+   * This generates an XML version of a ResultSet sending it to the current
+   * output stream using a default tag structure.
+   * @param rs ResultSet to convert
+   * @throws XMLFactoryException from XMLFactory
+   * @throws IOException from Writer
+   * @throws SQLException from ResultSet
+   */
+  public void translate(ResultSet rs)
+  throws XMLFactoryException, IOException, SQLException
+  {
+    translate(rs,(Properties)null);
+  }
+
+  /**
+   * This generates an XML version of a ResultSet sending it to the current
+   * output stream.
+   * @param rs ResultSet to convert
+   * @param p Properties for the conversion
+   * @throws XMLFactoryException from XMLFactory
+   * @throws IOException from Writer
+   * @throws SQLException from ResultSet
+   */
+  public void translate(ResultSet rs,Properties p)
+  throws XMLFactoryException, IOException, SQLException
+  {
+    // if we don't pass any properties, create an empty one and cache it if
+    // further calls do the same
+    if(p==null) {
+      p=getDefaultProperties();
+    }
+
+    // Fetch some common values
+    String setName = p.getProperty(RESULTSET_NAME,DEFAULT_RESULTSET_NAME);
+    String rowName = p.getProperty(ROW_NAME,DEFAULT_ROW_NAME);
+
+    ResultSetMetaData rsmd = rs.getMetaData();
+    int numcols = rsmd.getColumnCount();
+
+    String colname[] = new String[numcols];   // field name cache
+    int    coltype[] = new int[numcols];  // true to use attribute false content
+    String colattr[] = new String[numcols];   // Attribute name
+
+    // These deal with when an attribute is to go into the row's tag parameters
+    int parentFields[] = getRowAttributes(numcols,colname,colattr,coltype,rsmd,p); // used to cache the id's
+    int numParents= parentFields==null ? 0 : parentFields.length;            // number of parent fields
+    boolean haveParent= numParents>0;                 // true only if we need to us these
+
+    // This allows some limiting of the output result
+    int firstRow = Integer.parseInt(p.getProperty(FIRST_ROW,"0"));
+    int lastRow = Integer.parseInt(p.getProperty(LAST_ROW,"0"));
+    int curRow=0;
+
+    // Start the result set's tag
+    factory.startTag(setName);
+
+    while(rs.next()) {
+     if(firstRow<=curRow && (lastRow==0 || curRow
+      factory.startTag(rowName);
+
+      if(haveParent) {
+        // Add any ROW_ATTRIBUTE entries
+        for(int i=0;i
+          factory.addAttribute(colname[i],rs.getString(i+1));
+      }
+
+      // Process any CONTENT & ATTRIBUTE entries.
+      // This skips if all the entries are ROW_ATTRIBUTE's
+      if(numParents < numcols) {
+        for(int i=1;i<=numcols;i++) {
+          // Now do we write the value as an argument or as PCDATA?
+          switch(coltype[i-1]) {
+            case 1:
+              factory.startTag(colname[i-1]);
+              factory.addAttribute(colattr[i-1],rs.getString(i));
+              factory.endTag();
+              break;
+
+            case 0:
+              factory.startTag(colname[i-1]);
+              factory.addContent(rs.getString(i));
+              factory.endTag();
+              break;
+
+            default:
+              // Unknown type. This should only be called for ROW_ATTRIBUTE which
+              // is handled before this loop.
+              break;
+          }
+        }
+      }
+
+      // End the row
+      factory.endTag();
+    }
+   curRow++;
+
+   } // check for firstRow <= curRow <= lastRow
+
+   // Close the result set's tag
+   factory.endTag();
+  }
+
+  /**
+   * This method takes a ResultSet and writes it's DTD to the current writer
+   * @param rs ResultSet
+   */
+  public void buildDTD(ResultSet rs)
+  throws IOException, SQLException
+  {
+    buildDTD(rs,null,getWriter());
+  }
+
+  /**
+   * This method takes a ResultSet and writes it's DTD to the current writer
+   * @param rs ResultSet
+   * @param out Writer to send output to
+   */
+  public void buildDTD(ResultSet rs,Writer out)
+  throws IOException, SQLException
+  {
+    buildDTD(rs,null,out);
+  }
+
+  /**
+   * This method takes a ResultSet and writes it's DTD to the current writer
+   * @param rs ResultSet
+   * @param out Writer to send output to
+   */
+  public void buildDTD(ResultSet rs,Properties p)
+  throws IOException, SQLException
+  {
+    buildDTD(rs,p,getWriter());
+  }
+
+  /**
+   * This method takes a ResultSet and writes it's DTD to the current a.
+   *
+   * 

ToDo:

    +   * 
  1. Add ability to have NULLABLE columns appear as optional (ie instead of
  2. +   * x, have x? (DTD for Optional). Can't use + or * as that indicates more than
    +   * 1 instance).
    +   * 
    +   *
    +   * @param rs ResultSet
    +   * @param p Properties defining tag types (as translate)
    +   * @param out Writer to send output to
    +   */
    +  public void buildDTD(ResultSet rs,Properties p,Writer out)
    +  throws IOException, SQLException
    +  {
    +    // if we don't pass any properties, create an empty one and cache it if
    +    // further calls do the same
    +    if(p==null) {
    +      p=getDefaultProperties();
    +    }
    +
    +    // Fetch some common values
    +    String setName = p.getProperty(RESULTSET_NAME,DEFAULT_RESULTSET_NAME);
    +    String rowName = p.getProperty(ROW_NAME,DEFAULT_ROW_NAME);
    +
    +    ResultSetMetaData rsmd = rs.getMetaData();
    +    int numcols = rsmd.getColumnCount();
    +
    +    String colname[] = new String[numcols];   // field name cache
    +    int    coltype[] = new int[numcols];  // true to use attribute false content
    +    String colattr[] = new String[numcols];   // Attribute name
    +
    +    // These deal with when an attribute is to go into the row's tag parameters
    +    int parentFields[] = getRowAttributes(numcols,colname,colattr,coltype,rsmd,p); // used to cache the id's
    +    int numParents= parentFields==null ? 0 : parentFields.length;            // number of parent fields
    +    boolean haveParent= numParents>0;                 // true only if we need to us these
    +
    +    // Now the dtd defining the ResultSet
    +    out.write("
    +    out.write(setName);
    +    out.write(" (");
    +    out.write(rowName);
    +    out.write("*)>\n");
    +
    +    // Now the dtd defining each row
    +    out.write("
    +    out.write(rowName);
    +    out.write(" (");
    +    boolean s=false;
    +    for(int i=0;i
    +      if(coltype[i]!=2) { // not ROW_ATTRIBUTE
    +        if(s)
    +          out.write(",");
    +        out.write(colname[i]);
    +        s=true;
    +      }
    +    }
    +    out.write(")>\n");
    +
    +    // Now handle any ROW_ATTRIBUTE's
    +    if(haveParent) {
    +      out.write("
    +      out.write(rowName);
    +      for(int i=0;i
    +        out.write("\n ");
    +        out.write(colname[parentFields[i]]);
    +        out.write(" CDATA #IMPLIED");
    +      }
    +      out.write("\n>\n");
    +    }
    +
    +    // Now add any CONTENT & ATTRIBUTE fields
    +    for(int i=0;i
    +      if(coltype[i]!=2) {
    +        out.write("
    +        out.write(colname[i]);
    +
    +        // CONTENT
    +        if(coltype[i]==0) {
    +          out.write(" (#PCDATA)");
    +        } else {
    +          out.write(" EMPTY");
    +        }
    +
    +        out.write(">\n");
    +
    +        // ATTRIBUTE
    +        if(coltype[i]==1) {
    +          out.write("
    +          out.write(colname[i]);
    +          out.write("\n ");
    +          out.write(colattr[i]);
    +          out.write(" CDATA #IMPLIED\n>\n");
    +        }
    +      }
    +    }
    +  }
    +
    +   /**
    +    * Private method used by the core translate and buildDTD methods.
    +    * @param numcols Number of columns in ResultSet
    +    * @param colname Array of column names
    +    * @param colattr Array of column attribute names
    +    * @param coltype Array of column types
    +    * @param rsmd ResultSetMetaData for ResultSet
    +    * @param p Properties being used
    +    * @return array containing field numbers which should appear as attributes
    +    * within the rows tag.
    +    * @throws SQLException from JDBC
    +    */
    +  private int[] getRowAttributes(int numcols,
    +      String colname[],String colattr[],
    +      int coltype[],
    +      ResultSetMetaData rsmd,Properties p)
    +  throws SQLException
    +  {
    +    int pf[] = null;
    +    int nf = 0;
    +
    +    // Now we put a columns value as an attribute if the property
    +    // fieldname=attribute (ie myname=attribute)
    +    // and if the fieldname.name property exists, use it as the attribute name
    +    for(int i=0;i
    +      colname[i] = rsmd.getColumnName(i+1);
    +      colattr[i] = p.getProperty(colname[i]+COLNAME,DEFAULT_ATTRIBUTE);
    +      if(p.getProperty(colname[i],CONTENT).equals(ROW_ATTRIBUTE)) {
    +        // Ok, ROW_ATTRIBUTE's need to be cached, so add them in here
    +        coltype[i]=2;
    +        if(pf==null) {
    +          pf = new int[numcols]; // Max possible number of entries
    +        }
    +        pf[nf++] = i;
    +      } else {
    +        // Normal CONTENT or ATTRIBUTE entry
    +        coltype[i] = p.getProperty(colname[i],CONTENT).equals(ATTRIBUTE) ? 1 : 0;
    +      }
    +    }
    +
    +    // Form an array exactly nf elements long
    +    if(nf>0) {
    +      int r[] = new int[nf];
    +      System.arraycopy(pf,0,r,0,nf);
    +      return r;
    +    }
    +
    +    // Return null if no tags are to appear as attributes to the row's tag
    +    return null;
    +  }
    +
    +}
    \ No newline at end of file
    index add0a61274538cbc5a8d77f23990c9a1181ae6b3..78deb0ec0aad917df55693d1095a9bc27d75b6f7 100644 (file)
    @@ -4,7 +4,6 @@ import java.io.CharArrayWriter;
     import java.io.IOException;
     import java.util.List;
     import java.util.Iterator;
    -import java.util.Map;
     import java.util.HashSet;
     import java.util.ArrayList;
     import java.util.HashMap;
    diff --git a/contrib/retep/uk/org/retep/xml/test/XMLExport.java b/contrib/retep/uk/org/retep/xml/test/XMLExport.java
    new file mode 100644 (file)
    index 0000000..116f250
    --- /dev/null
    @@ -0,0 +1,191 @@
    +package uk.org.retep.xml.test;
    +
    +import java.lang.Exception;
    +import java.io.*;
    +import java.sql.*;
    +import java.util.Properties;
    +import uk.org.retep.xml.core.XMLFactoryException;
    +import uk.org.retep.xml.jdbc.XMLDatabase;
    +import uk.org.retep.xml.jdbc.XMLResultSet;
    +
    +/**
    + * This "test" class is a fully functional tool in its own right. It utilises
    + * the xml classes to query and export to XML, or to dump database structures
    + * into XML.
    + */
    +
    +public class XMLExport
    +{
    +  /**
    +   * The current Database Connection
    +   */
    +  protected Connection conn;
    +  protected Statement stat;
    +  protected String drvr,url,table;
    +
    +  protected XMLResultSet xrs;
    +  protected XMLDatabase xdb;
    +  protected Properties prop;
    +  protected boolean outXML;
    +  protected boolean outDTD;
    +  protected boolean outTAB;
    +  protected int maxRows=0;
    +
    +  public XMLExport(String[] args)
    +  throws IOException,SQLException,XMLFactoryException,ClassNotFoundException
    +  {
    +    xrs = new XMLResultSet();
    +    xrs.setWriter(new OutputStreamWriter(System.out));
    +    //Properties p = new Properties(xrs.getDefaultProperties());
    +    prop = (Properties) xrs.getDefaultProperties().clone();
    +
    +    xdb = new XMLDatabase(xrs.getXMLFactory());
    +
    +    for(int i=0;i
    +      String arg=args[i];
    +      if(arg.startsWith("-D")) {
    +        // Load JDBC Driver
    +        drvr=arg.substring(2);
    +        Class.forName(drvr);
    +        System.out.println("Now using JDBC Driver: "+drvr);
    +      } else if(arg.startsWith("-J")) {
    +        // Open a JDBC Connection (closing the existing one, if any)
    +        close();
    +        url  = arg.substring(2);
    +        conn = DriverManager.getConnection(url);
    +        System.out.println("Opened "+url);
    +        stat=null;
    +      } else if(arg.startsWith("-M")) {
    +        // Set the maximum number of rows to process (0=no limit)
    +        maxRows=Integer.parseInt(arg.substring(2));
    +        if(maxRows<0)
    +          maxRows=0;
    +        prop.setProperty(XMLResultSet.FIRST_ROW,"0");
    +        prop.setProperty(XMLResultSet.LAST_ROW,Integer.toString(maxRows));
    +      } else if(arg.startsWith("-O")) {
    +        // Set the output file for XML & DTD
    +        xrs.setWriter(new FileWriter(arg.substring(2)));
    +        System.out.println("XML/DTD Output now going to "+arg.substring(2));
    +      } else if(arg.startsWith("-P")) {
    +        // Set a parameter for XML & DTD
    +        int p = arg.indexOf('=');
    +        prop.setProperty(arg.substring(2,p),arg.substring(p+1));
    +      } else if(arg.startsWith("-S")) {
    +        // -Stable generate schema of just table
    +        // -S generate schema of entire database
    +        if(arg.length()>2) {
    +          String table=arg.substring(2);
    +          System.out.println("Generating XML Schema of table "+table);
    +          xdb.writeTable(conn,table);
    +          xdb.close();
    +        } else {
    +          System.out.println("Generating XML Schema of database");
    +          xdb.writeDatabase(conn);
    +          xdb.close();
    +        }
    +      } else if(arg.equals("-V")) {
    +        // Select table output
    +        outXML=outDTD=false;
    +      } else if(arg.equals("-X")) {
    +        // Select XML output
    +        outXML=true;
    +        outDTD=outTAB=false;
    +      } else if(arg.equals("-Y")) {
    +        // Select DTD output
    +        outXML=outTAB=false;
    +        outDTD=true;
    +      } else if(arg.startsWith("-")) {
    +        System.err.println("Unknown argument: "+arg);
    +        System.exit(1);
    +      } else {
    +        // Ok, anything not starting with "-" are queries
    +        if(stat==null)
    +          stat=conn.createStatement();
    +
    +        System.out.println("Executing "+arg);
    +        ResultSet rs = stat.executeQuery(arg);
    +        if(rs!=null) {
    +          if(outXML) {
    +            xrs.translate(rs,prop);
    +            xrs.close();
    +          } else if(outDTD) {
    +            // Output the DTD
    +            xrs.buildDTD(rs,prop);
    +            xrs.close();
    +          } else {
    +            // Normal resultset output
    +            int rc=0;
    +
    +            ResultSetMetaData rsmd = rs.getMetaData();
    +            int nc = rsmd.getColumnCount();
    +            boolean us=false;
    +            for(int c=0;c
    +              if(us)
    +                System.out.print("\t");
    +              System.out.print(rsmd.getColumnName(c+1));
    +              us=true;
    +            }
    +            System.out.println();
    +
    +            while(rs.next() && (maxRows==0 || rc
    +              us=false;
    +              for(int c=0;c
    +                if(us)
    +                  System.out.print("\t");
    +                System.out.print(rs.getString(c+1));
    +                us=true;
    +              }
    +              System.out.println();
    +              rc++;
    +            }
    +
    +            System.out.println("Returned "+rc+" rows.");
    +          }
    +          rs.close();
    +        }
    +      }
    +    }
    +
    +    close();
    +  }
    +
    +  public void close() throws SQLException
    +  {
    +    if(conn!=null) {
    +      conn.close();
    +      System.out.println("Closed "+url);
    +      conn=null;
    +      stat=null;
    +    }
    +  }
    +
    +  public static void main(String[] args)
    +  {
    +    if(args.length==0) {
    +      System.out.println("Useage: java uk.org.retep.xml.test.XMLExport [args ...]\nwhere args are:\n"+
    +        "-Dclass.name  JDBC Driver Class\n"+
    +        "-Jurl         JDBC URL\n"+
    +        "-Mmax         Maximum number of rows to process\n"+
    +        "-Ofilename    Send all XML or DTD output to file\n"+
    +        "-Pkey=value   Property passed on to XMLResultSet\n"+
    +        "-S[table]     Write XML description of table. Whole DB if table left out.\n"+
    +        "-V            Default: Write result to System.out\n"+
    +        "-X            Write result in XML to System.out\n"+
    +        "-Y            Write DTD describing result to System.out\n"+
    +        "\nAny other argument not starting with - is treated as an SQL Query\n"+
    +        "\nFor example:\n"+
    +        "To dump the table structure of a database into db.xml, use\n   $ java uk.org.retep.xml.test.XMLExport -Doracle.jdbc.driver.OracleDriver -Jjdbc:oracle:thin:dbname/username@localhost:1521:ISORCL -Odb.xml -S\n"+
    +        "To dump the structure of a single table PRODUCTS and write into products.xml, use\n   $ clear;java uk.org.retep.xml.test.XMLExport -Doracle.jdbc.driver.OracleDriver-Jjdbc:oracle:thin:dbname/username@localhost:1521:ISORCL -Oproducts.xml -SPRODUCT\n"+
    +        "To query a table and write the results into standard out as XML, use\n   $ java uk.org.retep.xml.test.XMLExport -Doracle.jdbc.driver.OracleDriver -Jjdbc:oracle:thin:dbname/username@localhost:1521:ISORCL -M5 -PSKU=row -PIMAGE=attribute -X \"select sku,image,template from product\"\n"+
    +        "To query a table and write a DTD describing the ResultSet, use\n   $ java uk.org.retep.xml.test.XMLExport -Doracle.jdbc.driver.OracleDriver -Jjdbc:oracle:thin:dbname/username@localhost:1521:ISORCL -M5 -PSKU=row -PIMAGE=attribute -Y \"select sku,image,template from product\"\n"
    +      );
    +      System.exit(1);
    +    }
    +
    +    try {
    +      XMLExport XMLExport1 = new XMLExport(args);
    +    } catch(Exception e) {
    +      e.printStackTrace();
    +    }
    +  }
    +}
    \ No newline at end of file